Пользовательское автозаполнение 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.)

Другие вопросы по тегам