2014-09-22 8 views
5

나는 python으로 명령 줄 도구를 작성하고 pip를 사용하여 배포합니다. 도구가 탭 완성을 할 수 있도록 스크립트 (bash 용과 zsh 용)를 작성했습니다. 누군가 pip 설치를 수행 할 때 pip를 설치하는 방법이 있습니까?셸 완료로 pip 설치

예 : 나는 completion.bash 파일을 가지고 있습니다. 누군가가 myPackage에에게

를 설치 PIP

을 수행 할 때 또한 bash는 파일을 소스 것이다.

나는 리눅스와 bash에서 setup.py 스크립트의 data_files 섹션에 스크립트를 넣어서이 작업을 수행 할 수 있다고 확신한다.

data_file=[ 
    ('/etc/bash_completion.d', ['bin/completion.bash']) 
], 

하지만 어떻게하면 플랫폼과 쉘에 독립적일까요? bash와 zsh 모두에서 mac/linux에서 작동해야합니다. 가능한 경우 창을 지원합니다.

이것이 가능합니까? 그렇다면 어떻게?

_foo_complete() { 
COMPREPLY=() 
local words=("${COMP_WORDS[@]}") 
local word="${COMP_WORDS[COMP_CWORD]}" 
words=("${words[@]:1}") 
local completions="$(foo completer --cmplt=\""${words[*]}"\")" 
COMPREPLY=($(compgen -W "$completions" -- "$word")) 
} 

complete -F _foo_complete foo 

나는 현재 당신이 몇 가지 질문을하는 source completion.bash

답변

2

를 실행하여 설치하고있다 : 그것은 중요한 경우


, 여기 내 bash는 스크립트입니다.

먼저, 사용자 정의 쉘 완료를 정의하기위한 크로스 플랫폼 또는 크로스 쉘 솔루션이 없습니다. 게시 한 사람은 bash에서 작동하지만 tcsh에서는 tcsh의 complete 명령을 사용합니다.이 명령은 bash와는 다르게 작동합니다.

둘째, pip install 시간에 완료 정의가 포함 된 파일을 소싱하는 것이 좋을 것 같습니다. 완료는 바로 그 세션에서 작동 할 수 있지만, 향후 세션 (즉, 쉘 호출)에서도 유효합니다. 이를 위해 쉘을 시작할 때마다 (예 : .bashrc, bash의 경우) 파일을 소스 화해야합니다.

파일을 "설치"하는 것은 간단하게 어딘가에 배치하고 사용자가 각각의 dot-rc 파일에서 가져와야 함을 의미합니다. 당신이 할 수 있다고하더라도, 당신은 그것을 "강요"하려고해서는 안됩니다. 원할 경우 사용자가 dot-rc 파일에 추가 할 수있는 옵션을 제공하십시오.

아마도 가장 좋은 방법은 패키지에 지원되는 셸 당 완성 정의 파일을 포함시키는 것입니다. complete.bash, complete.tcsh, 신이 무엇을 알고 있는지 (죄송합니다. 저는 Windows 사용자가 아닙니다).