L'auto-complétion programmable en Bash - partie 6
Cet article est la suite de: L’auto complétion programmable en bash: partie 5.
Un motif général et basique
Nous avons écrit un petit programme pour tester,
puis nous avons écrit un script d’auto-complétion très simple.
Reprenons notre jeu de rôle: nous avons un programme mytool
qui
attend une des trois commandes suivantes: new
, compile
ou
test
. On va ajouter ceci: la commande new
peut prendre
l’option --without-test
et la commande compile
peut prendre
l’option --verbose
. Ça reste encore très simple, mais on ne peut
déjà plus se servir uniquement de la fonction complete
, vue
la dernière fois.
Voyons donc le motif général utilisé par beaucoup de scripts d’auto-complétion:
Le script ci-dessus fait exactement la même chose que notre simple script de la dernière fois, qui était le suivant:
Mais il le fait d’une manière plus compliquée. En effet, pourquoi faire simple… Les explications viendront plus tard.
En fait, pour aller plus loin, il est important de comprendre le rôle
des variables COMP_WORDS
, COMP_CWORD
et COMPREPLY
. Pour ça, on
va modifier notre script, et chercher à comprendre ce que
représente COMPREPLY
:
Pour qu’il soit pris en compte tout de suite, il faut le sourcer:
$ source /etc/bash_completion.d/mytool
Alors, que fait-il ? Si je tapes mytool foo bar[TAB]
, voici ce que
le script sort:
$ mytool foo bar[TAB]
is replacement some this
COMPREPLY accepte un tableau de chaînes, qui sont les suggestions que nous renvoit l’auto-complétion. On note au passage que ces suggestions sont triées alphabétiquement.
Modifions à nouveau notre script:
Cette fois, COMPREPLY représente un tableau d’un seul élément. N’oubliez pas de sourcer le script avant de le tester:
$ mytool foo bar[TAB]
devient:
$ mytool foo replacement
Vous devriez maintenant avoir bien compris à quoi sert la variable
COMPREPLY
.
La prochaine fois, on regardera en détail les variables COMP_WORDS
et COMP_CWORD
.
À demain.