2014-11-05 22 views
0

我想要一個以編程方式返回bash或zsh完成選項的函數。在stackoverflow上有很多examples of related questions,但沒有適當的,通用的答案在任何地方。我不想知道如何爲bash編寫特定的完成函數。以編程方式獲得bash完成選項

我已經嘗試通過讀取debian/etc/completion shell代碼,通過將tab標籤的控制代碼回顯到「bash -i」來嘗試實現此目的,甚至嘗試使用與python-pexpect自動進行的子進程交互。每當我認爲我成功了,我發現一些小問題使整個解決方案失效。 我接受任何語言的解決方案,但理想情況下它會是python。顯然,精確的輸入輸出將根據系統而變化,但看一看的示例性I /下面○:

  • 功能(「GIT中LO」)返回[「登錄」,「笑」,「洛拉」]
  • 功能( 「apt-get的出師表」)返回[ 「和apt-get安裝」]
  • 功能( 「apt-get的」)返回[]
  • 功能(「apt-get的 」)返回[「 容易「get autoclean」,「apt-get autoremove」,...]
  • 函數(「./setup」)返回[「./setup.py」]

如果您正在考慮用shell編寫的解決方案,那麼理想情況下,我可以在沒有「源代碼」的情況下執行該解決方案。例如bash「compgen」命令看起來有趣(嘗試「compgen -F _git」),但請注意「bash -c'compgen -F _git'」不起作用,因爲完成助手「_git」不在作用域中。

+1

在'bash'中,完成由'readline'處理,我將從'man bash'中的'READLINE'節開始,也許在源代碼中深入潛水...... Ciao from – gboffi 2014-11-05 16:00:00

回答

0

This gist是我迄今爲止最好的解決方案。它滿足所有要求,適用於多個操作系統的多個版本的bash,但它需要一個子進程調用,它非常複雜,很荒謬。評論包括所有粗暴的吊索和箭頭的完整文檔。我仍然希望能有更合理的事情發生,但除非這樣..這就是它!

相關問題