2013-10-08 1 views
3

현재 Bash의 svn에 대한 원격 URL 완성에 대한 지원을 추가하고 있습니다. 나는 현재 때의 URL (svn+ssh://$HOST/$DIR)의 양육 디렉토리 부분을 추출하는 데 성공했다Bash의 원격 URL 완성

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

처럼 보이는 URL에 대한 완료를 트리거 파악 수정 된 bash는 완성-SVN을 사용하여에 svn ls라고 해요 IT 및

cur_suffix=prefix_string 

지금 남는 것은 완성이 일어날 수 있도록 (비어있을 수 있음) URL의 디렉토리 부분과 후 입력 한 prefix_string 사용자를 사용하는 방법입니다. 이 작업을하려면 compgen을 사용할 수 있습니까?

url의 마지막 문자가 슬래시이거나 접미사가 비어 있으면 완전한 디렉토리 인 경우 가능한 완료 목록을 얻는 것입니다. 내가 완성 forexample

svn://HIST/DIR/a_file 

그것으로 완료하는 등

svn://HOST/DIR/a 

같은 URL에 일어날 수 있도록

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

를 사용하고 현재

그러나 항상 첫 번째 대안 없음을 선택합니다 무슨 일이 있어도 내가 항상 쓴 공간을 넣는다. -o nospace. 다른 가능한 일치 항목 (접두어 a은 고유하지 않음)이있는 경우 compgen 완료를 완료하지 못하도록하고 커서를 움직이지 않고 커서 아래에 일치 항목을 인쇄하려면 어떻게합니까? complete 할 수 있습니까?

+0

시도에 성공 했습니까? 일을 어디에서 공유 할 수 있습니까? 또한 전복에 대한 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