zsh & wajig

Passé récemment sous zsh comme shell par défaut (merci Laurent), je trouve la complétion automatique de mes commandes wajig très lente. Pour mémoire, wajig est une surcouche plutôt sympa des apt* écrite en Python, et il me sert de gestionnaire de package principal sur mes Debian et Ubuntu depuis plus d’un an. La complétion automatique étant relativement rapide avec les commandes apt-get et compagnie, j’ai décidé de jeter un oeil aux scripts de complétion zsh pour wajig en particulier. J’en ai profité pour rajouter le switch -y/—yes qui manque à la complétion bien qu’étant une option parfaitement valide et documentée.

Les scripts de complétion se trouvent dans /usr/share/zsh/functions/Completion/Debian. J’ai repris le script _apt pour adapter la section install dans le script _wajig. Les deux se servent d’un 3e script commun nommé _deb_packages au cas où ça vous intéresse. Le bonheur c’est que sans connaître vraiment le langage ou les structures utilisées, comme c’est du script relativement lisible on peut tenter par des essais/erreurs de modifier ça… et on y arrive !

Voici le résultat sous forme de patch :

% diff _wajig.orig _wajig
11a12
>   '(-y —yes)'{-y,—yes}'[assume yes for any questions asked]' \
44,45c45,46
<         _alternative \
<           'packages:package:_deb_packages uninstalled' \
—-
>         _wanted \
>           'packages:package:_deb_packages "$expl_packages[@]" avail' \

Et les complétions sont redevenues rapides ; le fait de changer _alternative par _wanted m’indique d’abord une liste quand j’appuie sur TAB, plutôt qu’enchainer directement sur les options possibles.

EDIT: une simple recherche Google montre que certains poussent pour que le “framework” de complétion apt pour zsh soit aussi utilisé pour wajig ; à creuser, j’éditerai ce billet si je trouve quelque chose d’intéressant…