Zenu, des menus dans son terminal
Auteurice : Arthur Pons
Temps de lecture : ~4 minutes
Zenu est un logiciel permettant d’afficher des menus, navigables via des accélérateurs, permettant d’exécuter des commandes arbitraires. L’objectif est pour les utilisateurices aguerri·e·s :
- d’accélérer l’appel aux commandes fréquemment utilisées
- rationaliser le “rangement” et l’utilisation des multiples alias et fonctions qui traînent ici et là
- montrer aux personnes n’utilisant pas de cli qu’on peut y faire des choses sympas
et pour les personnes moins aggueries
- d’offrir une meilleure découvrabilité des fonctionnalités disponibles en cli
- faciliter le téléchargement et l’installation de commandes
Un article dédié au concept de découvrabilité et des techniques pour améliorer celle des interface en ligne de commande arrivera bientôt !
Zenu a été écrit par Marc Chantreux.
Installation
Dépendances
Zenu est écrit en zsh.
Télécharger le code
Le code est disponible dans nos dépôts git
git clone git://katzele.netlib.re/zenu
L’exécuter
Il faut d’une manière ou d’une autre sourcer le fichier zenu.zsh
. Le moyen
le plus direct serait probablement de mettre . chemin/vers/zenu.zsh
dans
votre .zshrc
. Les fichiers des menus sont dans le dossier menus
. Vous devez le créer s’il
n’existe pas. Des exemples existent dans le dossier eg
. Il faut ensuite
construire les fichiers de script
make
et lancer la commande zenu.loop in chemin/vers/zenu/menus
. Si tout fonctionne
correctement vous devriez voir les menus s’afficher. Vous pouvez rendre cette
commande facilement accessible avec les commandes zsh
# Raccourci (ctrl+w)
bindkey -s '' 'zenu.loop in chemin/vers/zenu/menus'
# Ou avec un alias
alias z="zenu.loop in chmein/vers/zenu/menus
Usage
Navigation
Pour entrer dans un menu ou exécuter une commande il faut entrer la touche surlignée. Par défaut pour remonter d’un menu il faut appuyer sur la touche entrée. Il est possible de la modifier comme expliqué ici.
Créer ses propre menus
L’intérêt de l’outil est évidemment de créer ses propres menus ou de se les échanger.
Les menus sont stockés dans le dossier menus
. Le fichier nommé main
est le menu
de démarrage par défaut. Un menu est défini par :
- Une liste de commande et/ou de sous-menus
Pour chaque entrée dans le menu, la lettre précédée par le caractère inséré en
tapant ctrl+_
sera celle qu’il faudra utiliser pour entrer dans le sous menu
ou exécuter la commande. Un exemple pourrait être :
^_mail
t^_odo
^_date
sachant que ^_
est la façon dont s’affiche le caractère spécial. Cela
voudrait dire que seront surlignées les lettres m pour rentrer dans le menu
mail, o dans le menu todo etc.
- Une section
pre
optionnelle
Cette section peut contenir du code zsh arbitraire. Il sera exécuté avant
que zsh attende que vous entriez une touche pour naviguer. Elle sert par
exemple à afficher sous le mnu courant des informations contextuelles utiles
à la navigation ou la prise de décision. Par défaut cette section commence après
une ligne comportant un commentaire ## pre
dans la déclaration du menu.
Par exemple
## pre
ip -br a
affichera des infos sur vos interfaces réseaux en dessuos du menu.
- Une section de scripting
react
C’est ici que se trouve le coeur du menu. Elle commence toujours par
un commentaire ## react
. Un exemple :
## react
;; (m) zenu+ mail
;; (o) zenu+ todo
;; (d) date +"%A %e %B %H:%M"
Chaque entrée du menu doit commencer par ;;
puis, entre parenthèses, la
lettre qui permet d’activer l’entrée. Idéalement elle doit correspondre à celle
noté dans la première section du menu sinon il y aura désaccord entre ce qui
s’affiche et la touche qu’il faut utiliser. Après la touche d’activation il faut
noter la commande à exécuter. Le schéma générique est donc
;; (touche_activation) commande
La commande peut être n’importe quelle commande shell arbitraire. Elle peut
s’écrire sur plusieurs lignes. Si l’entrée du menu doit ouvrir un sous-menu
vous pouvez utiliser la fonction zenu+
qui prend en argument le nom du
fichier du sous-menu que vous voulez ouvrir.
Ici dans notre exemple m
ouvrira le sous-menu mail, o
le sous-menu todo et
d
affichera la date au format “Vendredi 3 décembre 15:45”.
La totalité du menu serait donc
^_mail
t^_odo
^_date
## pre
ip -br a
## react
;; (m) zenu+ mail
;; (o) zenu+ todo
;; (d) date +"%A %e %B %H:%M"
Modifications
Après ces modifications il faut relancer make
pour qu’elles soient prises en
compte.
Changer la touche pour remonter d’un menu
Dans le fichier bin/build
il faut modifier la touche appelant la fonction zenu--
.
Par exemple pour substituer la touche entrée par la touche q
ou la touche r
(il
peut y en avoir plusieurs) :
...
case "\$zenu_key"
in (\$'q') zenu--
;; (\$'r') zenu--
...
Changer le caractère déterminant le surlignage
Le caractère spécial ^_
inséré en faisant ctrl + _
peut être un peu confus.
Si vous souhaitez le changer dans le fichier bin/build
remplacez \x1f
de la
ligne:
;; (face | -f) sed -rn '/^##/q;s/\x1f(.)/\x1b[7m\1\x1b[m/;s/^/ /p' "$@"
par le caractère que vous souhaitez utiliser. Par exemple si l’on souhaite
utiliser _
:
;; (face | -f) sed -rn '/^##/q;s/_(.)/\x1b[7m\1\x1b[m/;s/^/ /p' "$@"
Évidemment il faudra modifier vos menus en fonction.