URL: https://linuxfr.org/users/jeanclaude-2/journaux/petite-astuce-zsh Title: Petite astuce zsh Authors: barmic 🦦 Date: 2020年08月14日T12:46:44+02:00 License: CC By-SA Tags: zsh, shell, terminal et watch Score: 35 # Besoin J'utilise massivement mon shell et j'utilise assez fréquemment la commande `watch`. Elle me permet de faire des petits monitoring du pauvre par exemple : ```sh watch -n1 "ls /toto/tata ``` Va vous montrer chaque second le contenu du dossier `/toto/tata`. Ce que j'aime bien avec le shell, c'est que je construit incrémentalement des commandes complexes qui peuvent finir par avoir des formes plus ou moins complexes : ```sh ma_commande | awk '4ドル!=3&&/toto/{a+=1;print 6ドル}END{print "count:",a}' ``` Une fois que ma commande est construite, si je veux la _watcher_ ça n'est plus très pratique, il faut protéger les déjà plusieurs niveaux de protections :( # Solution J'ai enfin pris le temps configurer mon zsh pour ça. zle est l'outil interne de zsh qui gère toutes les entrées clavier, c'est l'équivalent de readline. C'est lui qu'on va utiliser pour ma solution. Il fonctionne à partir de widgets qui sont des fonctions shell enregistrées comme widget (grosso modo, il n'y a pas besoin d'aller plus loin pour ce qu'on va faire). On va pouvoir grâce à zle associer un raccourcis clavier à un widget avec : ```sh bindkey '^t' mon_widget ``` Pour enregistrer un widget c'est simple : ```sh zle -N mon_widget ma_fonction ``` Il ne reste plus qu'à écrire ma fonction. Une fonction peu appeler un widget via zle (par exemple `zle self-insert`) et il existe pleins de widget déjà existant (tous les raccourcis de zsh sont implémentés via ces widgets). ```sh function ma_fonction() { zle quote-line BUFFER="watch -n1 ${BUFFER}" zle accept-line } ``` On protège la ligne courante, on ajoute la commande `watch` avant et on exécute le tout. Une fois qu'on a mis dans son fichier `.zshrc`: ```sh function watch_fonction() { zle quote-line BUFFER="watch -n1 ${BUFFER}" zle accept-line } zle -N watch_widget watch_fonction bindkey '^t' watch_widget ``` Il me suffit de faire Ctrl+t pour lancer perpétuellement ma commande. On peut imaginer pas mal de choses possibles. Je vous laisse avec la doc pour [créer ses propres widgets](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#index-parameters_002c-zle). # Voir aussi Ça peut remplacer des système plus globaux de macros comme (entre autre) : - [Qu'on pose](https://linuxfr.org/users/_laurent_/journaux/qu-on-pose) - [espanso](https://espanso.org/)

AltStyle によって変換されたページ (->オリジナル) /