2010-09-13 7 views
2

Je suis en train de mettre en place la fin de bash pour un script utilitaire je l'ai écrit, j'ajouté le script suivant pour /etc/bash_completion.d:bash completion empêche backspace

_mcd() 
{ 
    local cur words 
    COMPREPLY=() 

    cur="${COMP_WORDS[COMP_CWORD]}" 
    words=`mcd-completion-words` 
    COMPREPLY=($(compgen -W "${words}" -- "$cur")) 
    return 0 
} 
complete -F _mcd mcd 

Le script mcd-completion-words trouve opérateurs disponibles par programmation pour la commande. Lorsque je relance bash (ou source le script), je peux terminer l'onglet avec succès, mais si je le fais, je ne peux plus revenir en arrière après un caractère complété.

De même, si j'essaie de lister toutes les options (par exemple, j'essaie de compléter l'onglet sans mot en place), bash ajoute un onglet à la commande, que je ne peux pas non plus reculer.

Comment est-ce que je peux imiter bash imiter le comportement normal d'achèvement de fichier? Toute aide est appréciée. Merci!


Voici un cas de test réduit pour les mots mcd-completion-about qui présente toujours le même comportement. Curieusement, le cas de Dennis fonctionne pour moi aussi (en substituant en mots = "un deux trois", par exemple).

#!/usr/bin/env php 
<?php 

print "one two three four five six seven eight nine"; 
+0

Quand je fais 'mots =" quelques mots d'essai "' cela semble fonctionner. Veuillez poster le contenu de 'mcd-completion-words'. Le problème peut être là. –

+0

J'ai exactement le même problème sur Ubuntu 11.10. – scribu

Répondre

1

Voici un cas de test réduit; même un vide commande `php » provoque le comportement d'achèvement erroné:

$ _mcd() { php -r ""; COMPREPLY=(one); } 
$ complete -F _mcd mcd 
$ mcd <TAB>   # Becomes 'mcd one' all right 
$ mcd one <BACKSPACE> # ERROR: doesn't work 

Ceci est sur la machine (Ubuntu) à la fois avec bash-3.2.48/bash-4.0.33 & php-5.2.6-3ubuntu4. Sur une autre machine (Debian) avec bash-3.2.39 & php-5.2.6-1 + lenny9, l'achèvement & backspace va bien. L'utilisation de perl -e "" au lieu de php -r "" va également bien.

Ne sait pas ce qui se passe, php en conflit avec readline? Peut-être que vous pouvez essayer la liste de diffusion bug-bash?

Questions connexes