2013-02-14 1 views
7

일부 프로그램 (예 : hg)을 사용하면 사용자가 명령의 특정 부분을 탭 완성 할 수 있습니다. 디렉토리를 일하는 HG 저장소에, 예를 들어, 내가 입력 :내 프로그램에서 탭 완성을 활용하려면 어떻게해야합니까?

hg qpush --move b8<TAB>

그것은 "B8"로 시작하는 내 패치 큐에있는 수은 패치 명령을 완료하려고합니다.

내 프로그램에서이 동작을 모방하고 싶습니다. 즉, 특정 디렉토리 내의 파일에 의존하는 일련의 명령이 있으며 쉘에서 탭 완성을 제공 할 수 있기를 원합니다. 우분투 리눅스에서이 스크립트를 제공하기위한 API가 있습니까 (가급적이면 파이썬을 사용하십시오. 내 스크립트가 작성된 것입니다)?

+1

아마도 다음과 같을 것입니다. http://tldp.org/LDP/abs/html/tabexpansion.html – mgilson

+2

@mgilson 응답에서 알 수 있듯이 프로그램 자체에 자동 완성 기능을 제공하려면 쉘을 구성해야합니다. 방법 라운드. – ziu

답변

3

이것은 readline 모듈을위한 것입니다.

실제로 readline은 일반적인 C 라이브러리이므로 많은 언어로 바인딩되어 있습니다. 그리고 나는 말할 수있다, 나는 그것으로 많은 재미를 가지고 있었다.

+5

나는 프로그램에서 autocompletion *을 사용하는 방법이 아닌, 자신의 프로그램에 대한 자동 완성 부속 명령을 * shell *로 가져 오는 방법을 묻고 싶어한다고 생각한다. –

+1

늦게 답장을 드려 죄송 합니다만, 실제로 파이썬에서 프로그램을 작성 중이며 자동 탭 완성 기능 (지원하는 셸의 경우)으로 _ship_하고 싶습니다. – jwir3

+0

@ jwir3 그런 다음'import readline; 입력()' – cat

1
당신은 zsh 쉘을 시도 할 수도

, 그것은 응용 프로그램의 톤을 지원하는 좋은 완료 시스템을 가지고) B를 즐길 수 있습니다.

완료 시스템은 쉘 언어로 작성되었지만, 실제로 파이썬을 사용하려면 완성 함수 내부에서 인터프리터를 실행할 수 있습니다. 아래면에서 자신의 소프트웨어에 대한 완성을 쓰고 싶다면 약간의 읽기 (예 : user manualmanpage)가 필요할 것입니다.

5

이렇게하려면 셸에 대해 탭 완성 모듈을 작성해야합니다. 대부분의 Linux 배포판의 기본 셸은 bash이므로 완료 스크립트 (일반적으로 셸 스크립트)를 작성해야합니다. 스크립트를 작성한 후 /etc/bash_completion.d/에 추가하십시오. 이것은 프로그램과 함께 배포되어야합니다 (패키지에 포함 된 Linux 배포판의 경우).

데비안 관리는 a guide for writing your completion scripts입니다. Mac에서 완료를 사용하려면 https://trac.macports.org/wiki/howto/bash-completion을 참조하십시오.

완료 파일의 예는 bash-completion project from Debian (또는 on Github)입니다. https://unix.stackexchange.com/questions/4738/an-easy-bash-completion-tutorial을 참조하십시오.

zsh을 사용하는 경우 hack.augusto linked to the documentation for writing completions입니다.

1

파이썬 라이브러리에서 'cmd'모듈의 소스를 살펴보십시오. 명령 완료를 지원합니다.

관련 문제