2013-10-08 58 views
3

我正在爲Bash中的svn添加對遠程URL完成的支持。我目前使用改良的bash完成-SVN是計算出時觸發的網址上完成看起來像Bash中的遠程URL完成

svn+ssh://$HOST/$DIR/prefix_string 

我已成功地提取URL(svn+ssh://$HOST/$DIR)的養育目錄部分,並呼籲svn ls在它和

cur_suffix=prefix_string 

現在剩下的就是如何使用URL的目錄部分和prefix_string後,輸入用戶(可以爲空),使完成發生。我可以使用compgen來完成這項工作嗎?

即,如果後綴爲空,如果url中的最後一個字符是斜槓或完整的目錄,則獲取可能的完成列表。

目前我使用

fix=($(compgen -o nospace -W "$remote_fileds" -- $cur_suffix)) 

,使完成發生針對URL如

svn://HOST/DIR/a 

完成到forexample

svn://HIST/DIR/a_file 

然而它始終選擇第一種選擇沒有儘管我寫了,但總是插入一個空間事件3210。如果有其他可能的匹配(前綴a非唯一),我如何防止完成compgen完成,以及如何在不移動光標的情況下將這些匹配打印在光標下方。只能complete這樣做?

+0

你成功了嗎?你能分享一些你的工作嗎?我也對Subversion的URL完成感興趣。 – grundic

回答

1

對於我的bash補全腳本,它必須在不同的bash版本上運行,並且支持不同的完成級別,我使用下面的習慣用法來嘗試最好的「完整」,然後優雅地回退到至少某些東西這應該工作;例如,假設一個命令svn2,並呼籲_complete_svn2完成功能:

complete -o bashdefault -o default -o nospace -F _complete_svn2 svn2 2>/dev/null \ 
|| complete -o default -o nospace -F _complete_svn2 svn2 2>/dev/null \ 
|| complete -o default -F _complete_svn2 svn2 2>/dev/null \ 
|| complete -F _complete_svn2 svn2 

理想「-o nospace」的存在和工作,但如果沒有,你可以回退到「-o default」。

此外,上述示例使用函數來生成完成,任意調用_complete_svn2。也許你可以嘗試使用類似的東西。下面的例子對我的作品,顯示出匹配選項,在額外的空間,等不加入(它故意不完成「 - 」選項):

_complete_svn2() { 
    local options="one two three four five" 
    local cur="${COMP_WORDS[COMP_CWORD]}" 
    COMPREPLY=() 
    [[ ${cur} != -* ]] && COMPREPLY=($(compgen -W "${options}" -- ${cur})) 
} 

例如,(且「十二五」之後添加沒有空間)

$ svn2 f[tab] 
five four 
$ svn2 fi[tab] 
$ svn2 five