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

4

Detalhes sobre o 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 a versão 1.3 do bash_completion (recebi isso dos comentários no arquivo / etc / bash_completion)

Eu pensei que o bash sempre fazia o preenchimento automático de arquivos e diretórios após um comando. Mas depois de uma pesquisa no google e lendo mais sobre a coisa do bash_completion, percebi que isso era diferente para comandos diferentes. Mas estou enfrentando um problema com esse recurso de conclusão automática do bash ao usar uma maneira alternativa de invocar emacs -nw .

Eu defini ee como uma função no meu arquivo ~/.bash_aliases . Eu sei que isso não é um alias, mas estou usando apenas uma função para fazer o que um alias faria:

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

export -f ee

Eu pensei que eu ainda poderia usar tab completion com a função ee se eu digitasse um nome de arquivo parcial. Isso simplesmente não parece funcionar. Considerando que, se eu digitei emacs -nw seguido por um nome de arquivo parcial, a conclusão da tabulação funcionará perfeitamente. Eu realmente não entendo o que está faltando aqui. Eu verifiquei a saída do comando complete -p e obtenho 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? Edit: eu não tinha visto a linha ee no arquivo /etc/bash_completion ao postar a pergunta. Mas agora eu sei que está lá. Mas o arquivo / etc / bash_completion tem 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?

    
por Eakan Gopalakrishnan 25.01.2014 / 23:43

1 resposta

3

Isso tem a ver com o pacote bash-completion . Ele tem alguns conjuntos de conclusão personalizados para o emacs e, aparentemente, a mesma conclusão falha quando o nome do comando é diferente.

Eu mesmo não uso o bash-completion, mas dei uma olhada rápida na fonte e achei isso:

_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 arquivos que terminem com .gif, .mp3, .avi etc", e eu estou supondo que se não houver nenhuma linha _install_xspec para o seu comando ee, ele não faz t complete qualquer coisa.

Olhando para 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 obtém. / p>     

por geirha 26.01.2014 / 11:17