Функция автозаполнения bash не работает при создании функции для emacs

Функция автозаполнения bash не работает при создании функции для emacs

Подробности о моей системе: Я использую Ubuntu 12.04.4 LTS на Oracle Virtual Box 4.3.6 из Windows 8.1, установленной на ноутбуке Asus. Я использую bash_completion версии 1.3 (я взял это из комментариев в файле /etc/bash_completion)

Я думал, что bash всегда делает автодополнение для файлов и каталогов после команды. Но после поиска в Google и прочтения информации о bash_completion я понял, что это отличается для разных команд. Но я столкнулся с проблемой с этой функцией автодополнения bash при использовании альтернативного способа вызова emacs -nw.

Я определил eeкак функцию в своем ~/.bash_aliasesфайле. Я знаю, что это не псевдоним, но я просто использую функцию, чтобы сделать то, что делал бы псевдоним:

function ee () {
    emacs -nw "$@"
}

export -f ee

Я думал, что я все еще могу использовать tabавтодополнение с функцией ee, если я введу частичное имя файла. Это просто не работает. В то время как если я введу , emacs -nwа затем частичное имя файла, автодополнение Tab работает идеально. Я действительно не понимаю, чего здесь не хватает. Я проверил вывод команды complete -pи получаю следующее для обоих emacsи ee:

eakangk@eakan-u-vbox:~$ complete -p | grep 'ee'
complete -F _filedir_xspec ee
eakangk@eakan-u-vbox:~$ complete -p | grep 'emacs'
complete -F _filedir_xspec emacs

Разве это не означает, что обе команды должны давать мне одинаковое поведение при попытке автодополнения? Редактировать: Я не видел эту eeстроку в /etc/bash_completionфайле, когда задавал вопрос. Но теперь я знаю, что она там есть. Но в файле /etc/bash_completion есть следующие строки:

complete -f -X '!*.@(gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx)' ee
complete -f -X '*.@(o|so|so.!(conf)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite

Что я здесь делаю не так?

решение1

Это связано с тем,bash-дополнениепакет. Он имеет некий набор пользовательских дополнений для emacs, и, по-видимому, это же самое дополнение не работает, если имя команды отличается.

Я сам не использую bash-completion, но я быстро просмотрел исходный код и нашел следующее:

_install_xspec '*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite

что, вероятно, используется для того, чтобы сказать: «для этих команд не завершайте файлы, заканчивающиеся на .gif, .mp3, .avi и т. д.», и я предполагаю, что если для вашей команды ee нет строки _install_xspec, она ничего не завершает.

Если посмотреть на функцию _install_xspec, то она просто помещает эти значения в ассоциативный массив, названный _xspecsс использованием имени команды в качестве ключа, поэтому, если вы запустите, _xspecs[ee]=${_xspecs[emacs]}команда ee должна получить те же завершения, что и emacs.

Связанный контент