Le site arthur.bebou.netlib.re - retour accueil
git clone git://bebou.netlib.re/arthur.bebou
Log | Files | Refs |
index.sh (6922B)
1 #! page 2 3 title: Zenu, des menus dans son terminal 4 author: Arthur Pons 5 description: Explorons pourquoi et comment avoir des menus simples dans sa console de façon à favoriser la découvrabilité 6 publication: 2023-11-24 7 sectionmd: main 8 9 Zenu est un logiciel permettant d'afficher des menus, navigables via des 10 accélérateurs, permettant d'exécuter des commandes arbitraires. L'objectif est 11 pour les utilisateurices aguerri·e·s : 12 13 * d'accélérer l'appel aux commandes fréquemment utilisées 14 * rationaliser le "rangement" et l'utilisation des multiples alias et 15 fonctions qui traînent ici et là 16 * montrer aux personnes n'utilisant pas de cli qu'on peut y faire des choses sympas 17 18 et pour les personnes moins aggueries 19 20 * d'offrir une meilleure découvrabilité des fonctionnalités disponibles en cli 21 * faciliter le téléchargement et l'installation de commandes via le partage 22 de menus zenu 23 24 Zenu a été écrit par Marc Chantreux. 25 26 ## Installation 27 28 ### Dépendances 29 30 Zenu est écrit en zsh. Il vous faut donc installer zsh. Sous debian `sudo apt install zsh` 31 fera l'affaire. Pour l'exécuter une première fois il faudra lancer la commande `zsh` et 32 se laisser guider par le menu. Si vous comptez fréquemment utiliser zenu il fait sens 33 de configurer zsh comme votre shell par défaut. Pour cela : 34 35 sudo usermod -s $(where zsh | head -n1) 36 37 devrait faire l'affaire sous debian. 38 39 Il vous faudra aussi probablement GNU sed. 40 41 ### Télécharger le code 42 43 Le code est disponible dans nos dépôts git 44 45 git clone git://bebou.netlib.re/zenu 46 47 ### L'exécuter 48 49 Il faut d'une manière ou d'une autre sourcer le fichier `zenu.zsh`. Le moyen le 50 plus direct serait probablement de mettre `. chemin/vers/zenu.zsh` dans votre 51 `.zshrc`. Les fichiers des menus sont dans le dossier `menus`. Vous devez le 52 créer s'il n'existe pas (`mkdir menus`). Des exemples existent dans le dossier 53 `eg`. Il faut ensuite construire les fichiers de script : 54 55 make -B 56 57 **Du fait d'un bug qui reste à corriger il est obligatoire de systématiquement 58 refaire tous les menus. `make -B` est donc de mise plutôt que simplement `make`.** 59 60 On lance ensuite la commande `zenu.loop in chemin/vers/zenu/menus`. Si tout 61 fonctionne correctement vous devriez voir les menus s'afficher. Vous pouvez 62 rendre cette commande facilement accessible avec les commandes zsh : 63 64 # Raccourci (ctrl+q) 65 bindkey -s '^Q' 'zenu.loop in chemin/vers/zenu/menus^M' 66 # Ou avec un alias 67 alias z="zenu.loop in chmein/vers/zenu/menus 68 69 **Attention**, `^Q` et `^M` ne sont pas littéralement les caractères `^` suivi 70 de `Q` mais la représentation (dans vim du moins) du caractère `ctrl+q` inséré 71 dans un shell en faisant `ctrl+v` suivi par `ctrl+q`. `^M` est la 72 représentation de la touche "entrée", l'idée étant que le raccourci exécutera 73 automatiquement la commande après l'avoir tapé. Vous pouvez choisir d'autres 74 caractères. 75 76 Il est possible de les mettre dans son `.zshrc` ou tout autre fichier de 77 configuration lu au démarrage de zsh pour que le raccourci et l'alias soient 78 dispos dans toutes vos sessions. 79 80 ## Usage 81 82 ### Navigation 83 84 Pour entrer dans un menu ou exécuter une commande il faut entrer la touche 85 surlignée. Par défaut pour remonter d'un menu il faut appuyer sur la touche `q`. 86 Il est possible de la modifier comme expliqué 87 [ici](#changer-la-touche-pour-remonter-dun-menu). 88 89 ### Créer ses propre menus 90 91 L'intérêt de l'outil est évidemment de créer ses propres menus ou de se les 92 échanger. 93 94 Les menus sont stockés dans le dossier `menus`. Ce sont des fichiers texte sans 95 extension. Le fichier nommé `main` est le menu de démarrage par défaut. Un menu 96 est défini par : 97 98 1. Une liste de commande et/ou de sous-menus 99 100 Pour chaque entrée dans le menu, la lettre précédée par un underscore sera 101 celle qu'il faudra utiliser pour entrer dans le sous menu ou exécuter la 102 commande. Un exemple pourrait être : 103 104 _mail 105 t_odo 106 _date 107 108 Cela voudrait dire que seront surlignées les lettres m pour rentrer dans le 109 menu mail, o dans le menu todo etc. 110 111 2. Une section `pre` optionnelle 112 113 Cette section peut contenir du code zsh arbitraire. Il sera exécuté avant 114 que zsh attende que vous entriez une touche pour naviguer. Elle sert par 115 exemple à afficher sous le menu courant des informations contextuelles utiles 116 à la navigation ou la prise de décision. Par défaut cette section commence après 117 une ligne comportant un commentaire `## pre` dans la déclaration du menu. 118 119 Par exemple 120 121 ## pre 122 ip -br a 123 124 affichera des infos sur vos interfaces réseaux en dessous du menu. 125 126 3. Une section de scripting `react` 127 128 C'est ici que se trouve le coeur du menu. Elle commence toujours par 129 un commentaire `## react`. Un exemple : 130 131 ## react 132 ;; (m) zenu+ mail 133 ;; (o) zenu+ todo 134 ;; (d) date +"%e %B %H:%M" 135 136 Chaque entrée du menu doit commencer par `;;` puis, entre parenthèses, la 137 lettre qui permet d'activer l'entrée. Idéalement elle doit correspondre à celle 138 notée dans la première section du menu sinon il y aura désaccord entre ce qui 139 s'affiche et la touche qu'il faut utiliser. Après la touche d'activation il faut 140 noter la commande à exécuter. Le schéma générique est donc 141 142 ;; (touche_activation) commande 143 144 La commande peut être n'importe quelle commande shell arbitraire. Elle peut 145 s'écrire sur plusieurs lignes. Si l'entrée du menu doit ouvrir un sous-menu 146 vous pouvez utiliser la fonction `zenu+` qui prend en argument le nom du 147 fichier du sous-menu que vous voulez ouvrir. 148 149 Ici dans notre exemple `m` ouvrira le sous-menu mail, `o` le sous-menu todo et 150 `d` affichera la date au format "Vendredi 3 décembre 15:45". 151 152 La totalité du menu serait donc 153 154 _mail 155 t_odo 156 _date 157 ## pre 158 ip -br a 159 ## react 160 ;; (m) zenu+ mail 161 ;; (o) zenu+ todo 162 ;; (d) date +"%e %B %H:%M" 163 164 ## Modifications 165 166 Après ces modifications il faut relancer la commande `make -B` pour qu'elles 167 soient prises en compte. 168 169 ### Changer la touche pour remonter d'un menu 170 171 Dans le fichier `bin/build` il faut modifier la touche appelant la fonction 172 `zenu--`. Par exemple pour substituer la touche `q` par la touche `r` ou la 173 touche entrer (il peut y en avoir plusieurs) : 174 175 ... 176 case "\$zenu_key" 177 in (\$'r') zenu-- 178 ;; (\$'\n') zenu-- 179 ... 180 181 ### Changer le caractère déterminant le surlignage 182 183 il se peut que vous vouliez insérer des `_` dans les noms de vos menus. Il 184 faudrait alors modifier le caractère marquant le surlignage. Si vous souhaitez 185 le changer dans le fichier `bin/build` remplacez `_` des lignes : 186 187 ;; (face | -f) sed -rn '/^##/q;s/_(.)/\x1b[7m\1\x1b[m/;s/^/ /p' "$@" 188 sed -rn '/^##/q;s/(.*)_((.).*)/\3 \1\2 /;p' "$@" | awk ' 189 190 par le caractère que vous souhaitez utiliser. Par exemple si l'on souhaite 191 utiliser `~` : 192 193 ;; (face | -f) sed -rn '/^##/q;s/~(.)/\x1b[7m\1\x1b[m/;s/^/ /p' "$@" 194 sed -rn '/^##/q;s/(.*)~((.).*)/\3 \1\2 /;p' "$@" | awk ' 195 196 Évidemment il faudra modifier vos menus en fonction.