La función de autocompletar de bash no funciona cuando creo una función para emacs

La función de autocompletar de bash no funciona cuando creo una función para emacs

Detalles sobre mi sistema: Estoy ejecutando Ubuntu 12.04.4 LTS en Oracle Virtual Box 4.3.6, desde Windows 8.1 instalado en una computadora portátil Asus. Estoy usando bash_completion versión 1.3 (obtuve esto de los comentarios en el archivo /etc/bash_completion)

Pensé que bash siempre completaba automáticamente archivos y directorios después de un comando. Pero después de una búsqueda en Google y de leer más sobre bash_completion, me di cuenta de que esto era diferente para diferentes comandos. Pero tengo un problema con esta función de autocompletar de bash cuando uso una forma alternativa de invocar emacs -nw.

Lo he definido eecomo una función en mi ~/.bash_aliasesarchivo. Sé que esto no es un alias, pero solo estoy usando una función para hacer lo que haría un alias:

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

export -f ee

Pensé que aún podría tabcompletar con la función ee si escribía un nombre de archivo parcial. Esto simplemente no parece funcionar. Mientras que si escribí emacs -nwseguido de un nombre de archivo parcial, la finalización de tabulación funciona perfectamente. Realmente no entiendo lo que falta aquí. Revisé el resultado del comando complete -py obtengo lo siguiente para ambos emacsy 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

¿No significaría eso que ambos comandos deberían darme el mismo tipo de comportamiento al intentar completar automáticamente? Editar: no había visto la eelínea en el /etc/bash_completionarchivo cuando publiqué la pregunta. Pero ahora sé que está ahí. Pero el archivo /etc/bash_completion tiene las siguientes líneas:

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

¿Qué estoy haciendo mal aquí?

Respuesta1

Esto tiene que ver con elfinalización de bashpaquete. Tiene algún conjunto de finalización personalizado para emacs y aparentemente esa misma finalización falla cuando el nombre del comando es diferente.

Yo no uso la finalización de bash, pero eché un vistazo rápido a la fuente y encontré esto:

_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 probablemente se usa para decir "para estos comandos, no complete archivos que terminen en .gif, .mp3, .avi, etc.", y supongo que si no hay una línea _install_xspec para su comando ee, no completa nada .

Al observar la función _install_xspec, simplemente coloca estos valores en una matriz asociativa denominada _xspecsusando el nombre del comando como clave, por lo que si ejecuta, _xspecs[ee]=${_xspecs[emacs]}el comando ee debería obtener las mismas terminaciones que emacs.

información relacionada