O recurso de preenchimento automático do bash não funciona quando eu crio uma função para o emacs

O recurso de preenchimento automático do bash não funciona quando eu crio uma função para o emacs

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 eecomo uma função no meu ~/.bash_aliasesarquivo. 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 taba 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 -nwseguido 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 -pe obtive o seguinte para ambos emacse 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 eelinha no /etc/bash_completionarquivo 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 _xspecsusando 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.

informação relacionada