Заполнение опций вида --‹option›:‹файл› и --‹option›:‹возможные значения›

Я пытаюсь написать метод завершения для fsharpi (F # интерактивный), который имеет следующие параметры:

--use:<file>              Use the given file on startup as initial input
--debug:{full|pdbonly}    Specify debugging type: full, pdbonly. ('full' is the default and enables attaching a debugger to a running program).
--warn:<n>                Set a warning level (0-5)

Я предполагаю, что это должно быть обработано с помощью $state аналогично подкоманды, но документация монолитна, а язык не очень нагляден, так что я ничего не добился экспериментами и объединением разных примеров.

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

--conf=<str>              main configuration file

person Ludvig    schedule 28.10.2015    source источник
comment
На самом деле это самая простая форма завершения. Вам нужно _arguments. Я предлагаю руководство от zsh-users: github .com/zsh-users/zsh-completions/blob/master/, что хоть немного понятнее. Примеры также очень помогают (множество в связанном репо).   -  person 4ae1e1    schedule 28.10.2015
comment
@ 4ae1e1 Я не уверен, что это правда. То, что я пытаюсь завершить, это сначала fsharpi TAB до fsharpi --use:, а затем fsharpi --use:TAB до fsharpi --use:script.fsx.   -  person Ludvig    schedule 28.10.2015
comment
Я не уверен, что это правда. Что не так? Я предложил _arguments и учебник. Я не делал никаких фальсифицируемых утверждений, за исключением того, что это легко (что относительно и не поддается фальсификации).   -  person 4ae1e1    schedule 28.10.2015
comment
Я пытался сказать, что не думаю, что _arguments мог бы завершить что-то двоеточием между опциями и действиями. Возможно, _arguments сложнее, чем я думал, но мне нужен точный пример, иначе я все еще не понимаю.   -  person Ludvig    schedule 28.10.2015
comment
Просто укажите двоеточие с обратной косой чертой. В любом случае, я опубликую точный ответ.   -  person 4ae1e1    schedule 28.10.2015


Ответы (1)


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

#compdef command

arguments=(
    '--use\:-:initial input file:_files'
    '--debug\:-:debugging type:(full pbonly)'
    '--warn\:-:warning level:(0 1 2 3 4 5)'
)

_arguments -S $arguments[@]

Ссылка: _arguments в официальной документации.

person 4ae1e1    schedule 28.10.2015
comment
Работает как шарм :) спасибо! Я знал, что вы можете экранировать двоеточие с помощью обратной косой черты, но я не знал, что <option>:-:<description>:<action> так сработает. Я думал, что _arguments создает только завершения, где <option> и <action> разделены пробелом. - person Ludvig; 28.10.2015
comment
Я дал ссылку на официальную документацию. Посмотрите на различные формы optspec. Это очень гибко. - person 4ae1e1; 28.10.2015
comment
О, теперь я понял! '-' в конце имени параметра (как в --use\:-) заставляет первый аргумент идти сразу после параметра (без пробела). Это как раз то, чего мне не хватало. - person Ludvig; 28.10.2015