Задания zsh и команды unznow bzr

Завершение ZASH Bazaar не предусматривает каких-либо расширений / завершений, когда он не знает подкоманду bzr которую я использую. В моем случае я использую bzr qlog но bzr qlog /usr/share/zsh/5.0.2/functions/_bzr не знает об этой команде. Насколько я могу судить, он не возвращает ничего из функции завершения:

 (*) _message "unknown bzr command completion: $cmd" return 1 ;; 

На этом этапе я использовал такой хак, чтобы сделать его полным с именами файлов:

 (*) _message "unknown bzr command completion: $cmd" args+=( '*:FILE:_files' ) #return 1 ;; 

Есть ли лучший способ, как это сделать?

Рабочий поток zsh-рабочих 2011 года «PATCH: откат до завершения файла, если ничего не работает» (который обсуждает ту же проблему с git), кажется, указывает на то, что функция завершения действительно нуждается в исправлении, чтобы поддержать это поведение.

Вы можете настроить систему завершения, чтобы систематически проверять файлы, если система причудливого завершения не завершает работу.

 zstyle :completion::::: completer _complete _files 

(Ссылка на документацию: встроенный zstyle , его аргумент шаблона , completer стиль , аспирин продается отдельно).

К сожалению, этот стиль является глобальным, вы не можете ограничить его определенной функцией. (Я думаю.)

Вы можете использовать пользовательскую функцию, которая проверяет текущую команду вместо _files и только вызывает _files , вы заметили, что команда bzr .

Другой способ справиться с этой ситуацией – иметь отдельный ключ для завершения файлов. Вы можете использовать предопределенный виджет _bash_complete-word который дополняет различные типы объектов на основе последнего символа последовательности клавиш.

 bindkey '^X!' _bash_complete-word # commands bindkey '^X$' _bash_complete-word # variables bindkey '^X@' _bash_complete-word # hosts bindkey '^X/' _bash_complete-word # files bindkey '^X~' _bash_complete-word # users 

Или вы можете определить свой собственный виджет.

 zle -C complete_files .complete-word _files bindkey '^X/' complete_files