Пользовательское завершение zsh для функции на основе аргументов по умолчанию

Как настроить завершение для функции на основе существующих определений завершения и аргументов по умолчанию.

Упрощенный пример (который можно было бы переписать как псевдоним):

gpl() {
    git pull origin $@
}

Это должно иметь то же завершение, что и после git pull origin.


person blueyed    schedule 01.12.2014    source источник


Ответы (1)


compdef -e 'words[1]=(git pull origin); service=git; (( CURRENT+=2 )); _git' ggl

Это массирует переменные $words, $service и $CURRENT, используемые системой завершения, а затем вызывает функцию завершения _git.

(Спасибо Микачу на #zsh).

person blueyed    schedule 01.12.2014
comment
Спасибо за этот пример! - person Francisco; 03.12.2014
comment
Что делает CURRENT+=2? (это работает для меня, просто пытаюсь врубиться) - person skarface; 19.02.2015
comment
@skarface CURRENT — это текущее обрабатываемое слово, и это увеличивает его на 2 (потому что мы вводим их: с ggl (1 слово) до git pull origin (3 слова)). - person blueyed; 24.02.2015