web-dev-qa-db-fra.com

fonctionnalité d'auto-complétion bash ne fonctionne pas lorsque je crée une fonction pour emacs

Détails sur mon système: J'utilise Ubuntu 12.04.4 LTS sur Oracle Virtual Box 4.3.6, à partir de Windows 8.1 installé sur un ordinateur portable Asus. J'utilise la version 1.3 de bash_completion (je l'ai compris dans les commentaires du fichier/etc/bash_completion)

Je pensais que bash se complétait toujours automatiquement pour les fichiers et les répertoires après une commande. Mais après une recherche sur Google et en savoir plus sur la chose bash_completion, je me suis rendu compte que c'était différent pour différentes commandes. Mais je suis confronté à un problème avec cette fonctionnalité d'auto-complétion de bash lorsque j'utilise une autre méthode pour appeler emacs -nw.

J'ai défini ee comme une fonction de mon fichier ~/.bash_aliases. Je sais que ce n'est pas un alias, mais j'utilise simplement une fonction pour faire ce qu'un alias ferait:

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

export -f ee

Je pensais que je pouvais toujours utiliser tab complétion avec la fonction ee si je tapais un nom de fichier partiel. Cela ne semble pas fonctionner. Alors que si je tapais emacs -nw suivi d'un nom de fichier partiel, la complétion par tabulation fonctionnait parfaitement. Je ne comprends vraiment pas ce qui manque ici. J'ai vérifié la sortie de la commande complete -p et j'ai le suivant pour emacs et 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

Cela ne signifie-t-il pas que les deux commandes devraient me donner le même comportement lors de la tentative de complétion automatique? Edit: je n’avais pas vu la ligne ee dans le fichier /etc/bash_completion lors de la publication de la question. Mais maintenant je sais que c'est là. Mais le fichier/etc/bash_completion a les lignes suivantes:

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'est-ce que je fais mal ici?

4

Cela a à voir avec le paquet bash-completion . Certains achèvement personnalisés sont définis pour emacs, et apparemment, ce même achèvement échoue lorsque le nom de la commande est différent.

Je n'utilise pas bash-completion moi-même, mais j'ai jeté un rapide coup d'œil à la source et découvert ceci:

_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

qui est probablement utilisé pour dire "pour ces commandes, ne complétez pas les fichiers se terminant par .gif, .mp3, .avi etc", et je suppose que s'il n'y a pas de ligne _install_xspec pour votre commande ee, elle ne complète rien .

En regardant la fonction _install_xspec, elle place simplement ces valeurs dans un tableau associatif nommé _xspecs en utilisant le nom de la commande comme clé. Ainsi, si vous exécutez _xspecs[ee]=${_xspecs[emacs]}, la commande ee doit obtenir les mêmes finitions qu'emacs.

3
geirha