Можно ли динамически изменять составы из внешней команды завершения? - PullRequest
1 голос
/ 25 апреля 2019

Я пишу программу завершения bash на Голанге.Фактически, программа является собственной программой завершения, так как она ищет переменную среды COMP_LINE и, если она присутствует, выводит параметры завершения, а если нет, просто продолжает запуск основной программы.

ЗавершениеЗатем устанавливается со следующим:

complete -C /path/to/my-program my-program

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

Когда определение завершения определено, вы можете установить -o nospace возможность пропустить завершающий пробел при заполнении слова.Однако тогда все дополнения, которым требуется пробел, должны быть явно добавлены в список слов завершения.

Есть ли способ, которым моя программа может динамически изменять полные опции в зависимости от того, какое завершение возвращается?Является ли это переменной окружения, которую может установить команда завершения?

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

1 Ответ

1 голос
/ 08 мая 2019

Моя инфраструктура Perl ( Perinci :: CmdLine ) также делает то же самое: сценарии являются их собственным завершением, активируемым с использованием -C SCRIPTNAME SCRIPTNAME (когда сценарий находится в PATH).Завершение с использованием внешней команды имеет свои плюсы и минусы по сравнению с использованием функции оболочки.Чтобы решить проблему, с которой вы столкнулись, я вывел фиктивный ответ с лишним пробелом.Поскольку существует более одного ответа, bash больше не добавляет пробел автоматически.Поэтому вместо простого возврата (в нотации JSON):

["-o"]

вы возвращаете:

["-o","-o "]

Я также использую этот прием при завершении пути.Чтобы разрешить пользователю завершать путь путем «детализации», при наличии совпадения с одним каталогом я вывожу:

["dirname/","dirname/ "]

, чтобы пользователь мог снова перейти на вкладку, чтобы развернуть внутренний путь вместо получения пробела после «dirname»/ "и приходится возвращаться назад и снова нажимать клавишу Tab.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...