J'essaie d'écrire une petite application de lancement de commande, et j'aimerais utiliser les complétions de tabulation de bash dans mon propre système de complétion. J'ai été en mesure d'obtenir une liste de complétions pour les commandes générales en utilisant compgen -abck
.
Cependant, je voudrais également obtenir des complétions pour des commandes spécifiques: par exemple, l'entrée git p
devrait afficher l'achèvement pour les commandes de git.Accès aux commandes de bash pour des commandes spécifiques par programme
Est-ce que je peux utiliser compgen
pour cela? Sinon, y a-t-il d'autres façons d'obtenir une liste de complétions par programme?
[EDIT: Pour clarifier, je n'essaie pas fournir achèvement à bash - mon application est un lanceur de commande GUI. Je voudrais simplement utiliser les compléments existants de bash dans ma propre application.]
Le code semble faire à peu près exactement ce que je veux faire avec mon application. Je vais devoir le porter sur Bash, mais c'est toujours très utile. Merci beaucoup! –
J'ai fait quelques tests et c'est ce qui est exécuté pour terminer "git l":/usr/bin/env bash -c 'source/etc/bash_completion; __print_completions() {pour ((i = 0; i <$ {# COMPREPLY [*]}; i ++)); fais echo $ {COMPREPLY [i]}; terminé }; COMP_WORDS = (git l); COMP_LINE = "git l"; COMP_COUNT = 6; COMP_CWORD = 1; _git; __print_completions ' –
"_git" est trouvé via "complete -p" qui affiche "complete -o bashdefault -o par défaut -o nospace -F _git git". Donc, si le premier mot est "git", appelez "_git". COMP_COUNT est la longueur de la chaîne jusqu'à présent plus un. COMP_CWORD est le mot à compléter (le premier est l'index 0). –