Zenu, des menus dans son terminal

Retour accueil


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 :

et pour les personnes moins aggueries

Zenu a été écrit par Marc Chantreux.

Installation

Dépendances

Zenu est écrit en zsh. Il vous faut donc installer zsh. Sous debian sudo apt install zsh fera l’affaire. Pour l’exécuter une première fois il faudra lancer la commande zsh et se laisser guider par le menu. Si vous comptez fréquemment utiliser zenu il fait sens de configurer zsh comme votre shell par défaut. Pour cela :

sudo usermod -s $(where zsh | head -n1)

devrait faire l’affaire sous debian.

Il vous faudra aussi probablement GNU sed.

Télécharger le code

Le code est disponible dans nos dépôts git

git clone git://bebou.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 (mkdir menus). Des exemples existent dans le dossier eg. Il faut ensuite construire les fichiers de script :

make -B

Du fait d’un bug qui reste à corriger il est obligatoire de systématiquement refaire tous les menus. make -B est donc de mise plutôt que simplement make.

On lance ensuite 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+q)
bindkey -s '^Q' 'zenu.loop in chemin/vers/zenu/menus^M'
# Ou avec un alias
alias z="zenu.loop in chmein/vers/zenu/menus

Attention, ^Q et ^M ne sont pas littéralement les caractères ^ suivi de Q mais la représentation (dans vim du moins) du caractère ctrl+q inséré dans un shell en faisant ctrl+v suivi par ctrl+q. ^M est la représentation de la touche “entrée”, l’idée étant que le raccourci exécutera automatiquement la commande après l’avoir tapé. Vous pouvez choisir d’autres caractères.

Il est possible de les mettre dans son .zshrc ou tout autre fichier de configuration lu au démarrage de zsh pour que le raccourci et l’alias soient dispos dans toutes vos sessions.

Usage

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 q. 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. Ce sont des fichiers texte sans extension. Le fichier nommé main est le menu de démarrage par défaut. Un menu est défini par :

  1. Une liste de commande et/ou de sous-menus

Pour chaque entrée dans le menu, la lettre précédée par un underscore 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

Cela voudrait dire que seront surlignées les lettres m pour rentrer dans le menu mail, o dans le menu todo etc.

  1. 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 menu 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 dessous du menu.

  1. 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 +"%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ée 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 +"%e %B %H:%M"

Modifications

Après ces modifications il faut relancer la commande make -B 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 q par la touche r ou la touche entrer (il peut y en avoir plusieurs) :

...
case "\$zenu_key"
in (\$'r') zenu--
;; (\$'\n') zenu--
...

Changer le caractère déterminant le surlignage

il se peut que vous vouliez insérer des _ dans les noms de vos menus. Il faudrait alors modifier le caractère marquant le surlignage. Si vous souhaitez le changer dans le fichier bin/build remplacez _ des lignes :

;; (face   | -f) sed -rn '/^##/q;s/_(.)/\x1b[7m\1\x1b[m/;s/^/ /p' "$@"
sed -rn '/^##/q;s/(.*)_((.).*)/\3 \1\2 /;p' "$@" | awk '

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' "$@"
sed -rn '/^##/q;s/(.*)~((.).*)/\3 \1\2 /;p' "$@" | awk '

Évidemment il faudra modifier vos menus en fonction.