2016-09-19 12 views
0

두 번째 매개 변수가 첫 번째 매개 변수에 종속되는 함수의 두 매개 변수를 자동 완성해야합니다.zsh 자동 완성, 첫 번째 매개 변수를 기반으로 두 번째 매개 변수

예 : "foo"함수의 첫 번째 매개 변수는 "a"또는 "b"값을 가질 수 있습니다. 두 번째 매개 변수는 첫 번째 매개 변수가 "a"인 경우 값 "10"또는 "11"을 가질 수 있으며 첫 번째 매개 변수가 "b"인 경우 "20"및 "21"을 가질 수 있습니다. 따라서 다음 매개 변수 조합은 합법적입니다.

foo a 10 
foo a 11 
foo b 20 
foo b 21 

조합은 앞면에 알려져 있습니다 (하드 코딩 할 수 있음).

zsh completion system doc은 아주 애매하고 큰 How To은 내 문제를 해결하지 못했습니다. 가장 가까운 것은 상태 작업과 함께 _arguments을 사용하는 것이지만 작동하도록 만들지는 못했습니다.

답변

1

_arguments 옵션에 설명 된 인수가 섞여 있다면 의미가 있습니다. 그렇지 않으면, 바로 이전 단어의 $words 배열에 보면 - 같은 것을 :

IFS=' 
' 
local -a options 
_arguments "1:first:->first" "*:next:->next" 
case "$state" in 
    first) 
     for o in $(_command_to_autocomplete_first); do 
      options+=("$o") 
     done 
     _describe 'values' options 
    ;; 
    next) 
     for o in $(_command_to_complete_others $words[2]); do 
      options+=("$o") 
     done 
     _describe 'values' options 
    ;; 
esac 
: 나는 다음에 내 사건을 해결
if ((CURRENT == 1)); then 
    _wanted letters expl letter compadd a b 
else 
    case $words[1] in 
    a) numbers=(10 11) ;; 
    b) numbers=(20 21) ;; 
    esac 
    _wanted numbers expl number compadd -a numbers 
fi 
0