J'essaie de mettre en place un script de complétion bash script et j'ai quelques difficultés.
J'aimerais faire en sorte que les compléments listés soient soit des fichiers correspondant à une extension particulière, soit des répertoires (qui peuvent ou non contenir des fichiers de cette extension).
Le problème que je rencontre est que la seule façon de faire en sorte que les complétions contiennent des fichiers et est d'utiliser quelque chose comme -o plusdirs -f -X '!*.txt'
mais lorsque je laisse bash compléter l'un des répertoires, il ajoute simplement un espace à la fin, au lieu d'une barre oblique.
_xyz()
{
local cur=${COMP_WORDS[COMP_CWORD]}
local prev=${COMP_WORDS[COMP_CWORD-1]}
#COMPREPLY=( $( compgen -f -X '!*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -f -G '*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -o filenames -f -X '!*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -o dirnames -f -X '!*.txt' -- $cur ) )
COMPREPLY=( $( compgen -o plusdirs -f -X '!*.txt' -- $cur ) )
return 0
}
complete -F _xyz xyz
J'ai essayé toutes les lignes commentées, mais elles ne développent même pas les répertoires.
Pour les tests, je l'ai lancé dans un répertoire contenant un fichier .txt et un répertoire "dir" (avec un fichier .txt à l'intérieur, mais cela n'a pas encore d'importance). Tapez xyz <TAB>
avec cette fonction permet d'obtenir la liste du répertoire et du fichier .txt, mais en tapant xyz d<TAB>
s'étend à xyz dir
(avec un espace après "dir").