Как я могу предоставить завершение вкладок для оболочки рыбы из моего собственного script?

Я запускаю Ubuntu 13.10 и рыба 2.1.0. Я хочу написать себе Python script для выполнения некоторых задач из командной строки. script потребует аргументы командной строки.

Как я могу написать свой script, чтобы рыба могла запрашивать и получать возможные значения для данного аргумента. Список потенциальных значений является динамическим. То есть он будет определяться программно (например, список имен папок, соответствующих некоторым критериям).

Конечный результат, на который я нацелен, - это что-то вроде:

[email protected] ~> myprog argument=fol<TAB>
folder1  folder2  folder3

Где myprog - мой файл script, argument - это имя аргумента и folder1 и т.д. - допустимые значения, сгенерированные некоторой функцией в моем script.

Возможно ли это, и если да, то как?

Ответ 1

Адаптировано из комментарий zanchey на GitHub:

Если у вас есть программа myprog, которая принимает параметр --_completion, вы можете написать один завершающий заглушка для myprog, который выглядит так:

complete --command myprog --arguments '(myprog --_completion (commandline -cp)'

Затем ваша программа будет вызвана как myprog --_completion myprog some arguments here, и вы сможете ответить соответствующим образом. Он должен возвращать только текущий токен, который завершается (вы также можете передать это программе с помощью (commandline -ct), или же сделать это сам), а затем необязательно по вкладке и краткому описанию. Несколько дополнений разделяются новыми строками.

Примечания:

  • --_completion - это соглашение, предложенное библиотекой python-selfcompletion, но вы можете использовать все, что хотите, и этот ответ не Python конкретных
  • Невозможно указать по умолчанию, как описано в dbarnett/python-selfcompletion # 2 (комментарий GitHub). Вам обязательно нужно сделать короткий зажим для каждой команды.

Для сценариев Python, в частности, следующие библиотеки могут поддерживать доработки рыбы в какой-то момент в будущем (но они еще не созданы):

Ответ 2

Вам следует создать функцию автозаполнения рыбы для вашего script, как предложено здесь и source, или поместить ее в вашу папку ~/.config/fish/completions.

ссылка: рыбные документы