Пользовательское автозаполнение Bash с завершением пути к файлу
Я работаю над автозаполнением bash для проекта, который я поддерживаю. Вы можете найти сценарий здесь. Я сделал это вместе с некоторыми хакерскими атаками самостоятельно и с помощью некоторых участников, которые понимают, что API для завершения лучше, чем я.
То, что у нас отлично работает - за одним исключением. Мы можем управлять завершением, как это
//type
pestle.phar som[TAB]
//completes to
pestle.phar some-command-name
Однако, как только мы здесь, мы теряем завершение пути / имени файла, которое является частью стандартной оболочки bash. То есть, отработав предыдущий пример, если пользователь вводит
//type
pestle.phar some-command-name /va[TAB]
мы хотели бы завершить
//completes to the following, because var exists
pestle.phar some-command-name /var
Есть ли способ просто сказать complete
командовать что-то вроде
Эй, в дополнение ко всему, что мы говорим вам делать с нашей пользовательской функцией bash, также сохраняйте нормальное завершение пути к файлу
Если нет, то есть ли какой-нибудь известный научный метод, позволяющий переопределить завершение пути к файлу в ваших собственных пользовательских функциях завершения базы?
Некоторые другие ответы и документы, кажется, указывают на то, что -o filenames
или же -o bashdefault
Опции должны позаботиться об этом - но, похоже, он не работает на OS X 10.11. Я не уверен, что неправильно понял -o
или если код в моих файлах завершения каким-то образом переопределяет -o
поведение, или если OS X делает это, я только в основном хорошо себя ведет Unix вещь.
Также - если это не очевидно - это мой первый родео с глубоким завершением игры. Если я сказал что-то на первый взгляд глупое / наивное, пожалуйста, дайте мне знать. Возможно, я сейчас ищу рыбу, но я бы хотел научиться ловить рыбу в реке завершения скважины самостоятельно.
1 ответ
Я думаю -o default
(без -o filenames
) должен работать на вас. Согласно инструкции:
- bashdefault
Выполните оставшуюся часть завершений bash по умолчанию, если compspec не генерирует совпадений.- дефолт
Используйте завершение имени файла по умолчанию для readline, если compspec не генерирует совпадений.- имена файлов
Скажите readline, что compspec генерирует имена файлов, поэтому он может выполнять любую специфичную для имени файла обработку (например, добавлять косую черту в имена каталогов, заключать в кавычки специальные символы или подавлять завершающие пробелы). Предназначен для использования с функциями оболочки.
(Также посмотрите проблему 'complete -d -o default cd' для различия между -o default
а также -o bashdefault
.)