
Detalhes sobre meu sistema: Estou executando o Ubuntu 12.04.4 LTS no Oracle Virtual Box 4.3.6, do Windows 8.1 instalado em um laptop Asus. Estou usando o bash_completion versão 1.3 (obtive isso nos comentários no arquivo /etc/bash_completion)
Achei que o bash sempre completava automaticamente arquivos e diretórios após um comando. Mas depois de uma pesquisa no Google e de ler mais sobre bash_completion, percebi que isso era diferente para comandos diferentes. Mas estou enfrentando um problema com esse recurso de preenchimento automático do bash ao usar uma maneira alternativa de invocar arquivos emacs -nw
.
Eu defini ee
como uma função no meu ~/.bash_aliases
arquivo. Eu sei que isso não é um alias, mas estou apenas usando uma função para fazer o que um alias faria:
function ee () {
emacs -nw "$@"
}
export -f ee
Achei que ainda poderia usar tab
a conclusão com a função ee se digitasse um nome de arquivo parcial. Isso simplesmente não parece funcionar. Considerando que, se eu digitar emacs -nw
seguido de um nome de arquivo parcial, o preenchimento da guia funcionará perfeitamente. Eu realmente não entendo o que está faltando aqui. Verifiquei a saída do comando complete -p
e obtive o seguinte para ambos emacs
e 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
Isso não significaria que ambos os comandos deveriam me dar o mesmo tipo de comportamento ao tentar o preenchimento automático? Editar: não tinha visto a ee
linha no /etc/bash_completion
arquivo ao postar a pergunta. Mas agora eu sei que está lá. Mas o arquivo /etc/bash_completion possui as seguintes linhas:
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
O que estou fazendo de errado aqui?
Responder1
Isto tem a ver comconclusão do bashpacote. Ele possui algum conjunto de conclusão personalizado para o emacs e, aparentemente, a mesma conclusão falha quando o nome do comando é diferente.
Eu não uso o bash-completion, mas dei uma rápida olhada na fonte e descobri o seguinte:
_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
que provavelmente é usado para dizer "para esses comandos, não complete os arquivos que terminam com .gif, .mp3, .avi etc", e estou supondo que se não houver nenhuma linha _install_xspec para o seu comando ee, ele não completa nada .
Observando a função _install_xspec, ela simplesmente coloca esses valores em uma matriz associativa chamada _xspecs
usando o nome do comando como chave, portanto, se você executar, _xspecs[ee]=${_xspecs[emacs]}
o comando ee deverá obter as mesmas conclusões que o emacs.