
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 ee
como una función en mi ~/.bash_aliases
archivo. 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 tab
completar con la función ee si escribía un nombre de archivo parcial. Esto simplemente no parece funcionar. Mientras que si escribí emacs -nw
seguido 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 -p
y obtengo lo siguiente para ambos emacs
y 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 ee
línea en el /etc/bash_completion
archivo 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 _xspecs
usando 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.