J'essaie d'get un auto-complétion efficace et je suis tombé sur un problème.
J'ai une command pour définir deux choses à la fois. La première est une list relativement petite, mais la seconde, si elle n'est pas filtrée par la première, est immensément gigantesque.
Ce que je veux pouvoir faire, c'est passer ce qui a déjà été saisi ou complété automatiquement pour le premier argument de la deuxième command d'autocomplétion …
complete job 'p/1/`listJobs`/' 'p/2/`listTasks`/'
Ce que je veux être en mesure de faire est de passer le travail qui a déjà été entré pour le premier argument à la command 'listTasks'.
Une idée comment je peux faire ça?
À votre santé
(c'est un repost d'une vieille question de SuperUser.com de la mienne que personne n'a jamais répondu … La question de SuperUser peut être trouvée ici )
Voici la meilleure option que j'ai pu find:
complete job 'p/1/`listJobs`/' \ 'p/2/`set cmd = ( $COMMAND_LINE ); listTasks $cmd[$#cmd]`/'
Il s'appuie sur une variable appelée $COMMAND_LINE
, qui est disponible sur mon système Ubuntu, mais je ne suis pas sûr que ce soit standard.
command appelée à partir de
...
version a une variable d'environnement supplémentaire définie, le nom de la variable est COMMAND_LINE et contient (comme son nom l'indique) le contenu de la command line actuelle (déjà tapée). On peut examiner et utiliser le contenu de la variable COMMAND_LINE dans son script personnalisé pour build des compléments plus sophistiqués (voir complétion pour svn (1) inclus dans ce package).
A défaut, vous expérimenterez des extensions d'histoire telles que !!
ou !#$
, mais je ne sais pas si cela fonctionnera.