2017-02-23 14 views
0

내 도구 중 하나에 대해 사용자 정의 ZSH 탭 완성 기능이 있습니다. 잘 작동하지만 때로는 도구가 응답하는 데 오랜 시간이 걸립니다. 도구가 실행되는 동안 (그리고 실행이 완료되기 전에) 어떤 일이 일어나고 있다는 표시를 표시하는 방법이 있습니까?사용자 정의 ZSH 완료자가 실행 중일 때 진행 표시 표시

예를 들어,이 같은 현재 행 아래의 메시지가 표시되도록 할 수 있습니다 :

prompt$ pypath /providers/conf<TAB> 
Completing... 

을 여기에 도전 내가 'TAB'을 히트 곳에 커서가 (이전 위치로 복귀해야한다는 것입니다) 일단 수료 완료 후보자가 있습니다. ZSH에서이 작업을 수행 할 수 있지만 도구가 실행되기 전에 메시지를 표시 할 수 있습니까? 당신은 zle -R "Completing..."를 사용하려고 할 수

#compdef pypath 

# This does not work; it is only added when the whole thing ends 
# _message -r "Completing..." 

IFS=$'\n' path_candidates=($(pypath "${PREFIX}*" | sed 's|.*/||' | sort -u)) 
compset -P '*/' 

if [ -z "$path_candidates" ]; then 
    compadd -x "No matches found." 
else 
    compadd -q -S '/' $path_candidates 
fi 
+0

방금'인쇄 사용하려고 했 (나는/너무 찾아주세요 zle -R있는 페이지에서 검색을 좋은 앵커를 찾을 수 없습니다) '완료 ...'을 ' '_message' 대신에? – Adaephon

+0

예, 그렇지만 나중에 삭제되지 않으므로 완성 자에게 "완료 중 ..."이 끝날 때 완료를 추가하게됩니다. – Whyte

+0

그럴 경우'print -n 'Completing ... \ r''을 시도 할 수 있습니다. '-n'은 개행 문자를 출력하지 못하도록하고'\ r'은 커서를 줄의 처음으로 이동시킵니다. 완료 목록이 인쇄되면 텍스트를 덮어 씁니다. – Adaephon

답변

0

:

여기에 내 현재 완료 스크립트입니다.

zle -R [ -c ] [ display-string ] [ string ... ]
...
-R [ -c ] [ display-string ] [ string ... ]

커맨드 라인을 다시 표시; 이것은 사용자 정의 위젯 내에서 호출되어 변경 사항을 볼 수있게합니다. 표시 문자열이 지정되고 비어 있지 않으면 상태 행 (편집중인 행 바로 아래)에 표시됩니다.

선택 사항 문자열이 주어진 경우 완료 목록이 인쇄 된 것과 같은 방법으로 프롬프트 아래에 나열됩니다. 문자열을 지정하지 않았지만 -c 옵션을 사용하면 해당 목록이 지워집니다.

이 옵션은 표시된 문자열이 위젯에서 반환 된 직후에 지워지기 때문에 사용 후 바로 종료되지 않는 위젯에만 유용합니다.

이 명령은 사용자 정의 위젯 외부에서 안전하게 호출 할 수 있습니다. zle이 활성화되어 있으면 디스플레이가 새로 고침되고 zle이 활성화되어 있지 않으면 명령이 아무런 영향을 미치지 않습니다. 이 경우 일반적으로 다른 인수가 없습니다.

-zshzle(1): Zsh Line Editor, Zle Bulitins, zle -R

+0

그게 효과가있어! 그것은 모든 나의 경우에 적용됩니다 : 어떤 완료가 발견되지 않았을 때, 한 번의 완료가 발견되고 자동 완성되었을 때, 그리고 여러 개의 완료가 발견되고 메뉴가 표시 될 때. 모든 경우에 '완료 중 ...'이 표시되고 완료되면 올바르게 제거됩니다. 감사! – Whyte