đŸ Archived View for lord.re âș posts âș 190-scripter-une-session-tmux âș index.gmi captured on 2024-06-16 at 12:26:28. Gemini links have been rewritten to link to archived content
âŹ ïž Previous capture (2022-06-03)
âĄïž Next capture (2024-08-18)
-=-=-=-=-=-=-
-------------------------------------------------
[19/02/2020] - ~4mins - #tmux #tips #shell
-------------------------------------------------
Cette semaine
a publié
un chouette article sur son blog pour créer des sessions Tmux avec Tmuxinator
.
Et lĂ au milieu de l'article il est Ă©crit :
Alors on va me dire âOui mais tu peux configurer un script sh pour quand tu lances tmux toussa toussaâ. Oui, jâai pas ton temps, frĂšre. Je suis lĂ pour ĂȘtre productive et botter des culs avec mes nouvelles Doc Martens.
Du coup je saisis la perche au vol : Oui on peut scripter ça assez facilement !
On va recréer un environnement similaire à celui de l'article :
- Une session tmux
- Un premier espace de travail avec un Ă©diteur de texte
- Un second espace de travail scindé en deux parties
- Une premiÚre partie avec hugo qui génÚre le blog à la volée
- Une seconde partie avec les commandes git à portée de main
En fait toutes les commandes interactives de Tmux sont Ă©galement disponibles en commandes shell que vous pouvez lancer manuellement ou bien lancer dans un script.
On va donc faire tout cela dans un script que l'on nommera /usr/local/bin/blog, on pense tout de suite Ă le rendre Ă©xecutable avec <kbd>chmod +x /usr/local/bin/blog</kbd> et c'est partit !
{{< highlight "shell" >}}
session="blog"
window="$session:0"
{{< / highlight >}}
Bon tout bon script commence par un ⊠shebang et quelques déclarations de variables pour se simplifier la vie.
Il faut savoir que Tmux permet de crĂ©er des sessions avec dedans des fenĂȘtres et chaque fenĂȘtre peut contenir de multiple panes.
Les panes sont les terminaux virtuels.
Donc pour parler d'un pane en particulier son nom est de la forme session:fenĂȘtre.pane .
En sachant qu'on commence Ă compter Ă partir de 0.
(gardez cette info pour la suite)
Ensuite premier truc concret, on va faire en sorte que lorsqu'on lance le script, si la session tmux est déjà existante, bha on fait rien si ce n'est rentrer dedans.
Ăa va ĂȘtre le moment le plus dĂ©licat du script
{{< highlight "shell" >}}
if [ $(tmux attach -t "$session" )]; then
exit 0
fi
{{< / highlight >}}
VoilĂ , si la session existe, on s'y rattache puis on coupe le script (si on ne le fait pas, la session se rouvrirait dĂšs que vous la fermez).
Bon, maintenant on va commencer pas mettre dans le bon dossier et à créer la session
{{< highlight "shell" >}}
cd /home/lord/www
tmux new-session -d -s "$session"
{{< / highlight >}}
Voilà on est dans le bon dossier, la session est créée.
On est détaché (<kbd>-d</kbd>) et on lui a donné un ptit nom (<kbd>-s blog</kbd>)
{{< highlight "shell" >}}
tmux split-window -t "$window"
tmux split-window -t "$window"
tmux select-layout -t "$window" main-vertical
{{< / highlight >}}
On commence par couper l'espace de travail en deux puis en trois.
Ensuite on active le layout main-vertical qui consiste en un terminal principal sur la moitié gauche et sur la droite un empilement des suivants.
{{< highlight "shell" >}}
tmux send-keys -t "$window.0" "kak" C-m
{{< / highlight >}}
Maintenant, on se démarre
ref "/posts/114-kakoune" >}} kakoune via sa commande kak
dans le pane 0 de notre fenĂȘtre.
D'ailleurs pour envoyer une commande c'est avec <kbd>C-m</kbd> qui fait un *Ctrl-m* (ça fonctionne aussi dans votre shell), sinon vous pouvez aussi mettre Enter à la place.
{{< highlight "shell" >}}
tmux send-keys -t "$window.1" "hugo server --navigateToChanged --disableFastRender" C-m
{{< / highlight >}}
On se place dans le second pane (c'est le vocabulaire de tmux pour dire terminal) et on y lance hugo qui va permettre de faire des previews et tout.
{{< highlight "shell" >}}
tmux send-keys -t blog "git status" C-m
{{< / highlight >}}
On se place dans le troisiÚme pane et on y lance un ptit git status comme ça on sait tout de suite ce qui est en attente ou non.
{{< highlight "shell" >}}
tmux attach -t "$session"
{{< / highlight >}}
VoilĂ , on rentre dans notre session
On a assemblé notre T800 yapukatester !
<details><summary>Si vous voulez le revoir en un morceau</summary>
{{< highlight "shell" >}}
session="blog"
window="$session:0"
if [ $(tmux attach -t "$session") ]; then
exit 0
fi
cd /home/lord/www
tmux new-session -d -s "$session"
tmux split-window -t "$window"
tmux split-window -t "$window"
tmux select-layout -t "$window" main-vertical
tmux send-keys -t "$window.0" "kak" C-m
tmux send-keys -t "$window.1" "hugo server --navigateToChanged --disableFastRender" C-m
tmux send-keys -t "$window.2" "git status" C-m
tmux attach -t "$session"
{{< / highlight >}}
</details>
Bref, c'est ptet un peu plus long Ă monter soi-mĂȘme mais bon si vous recopiez ce script ça sera plus rapide.
En tout cas merci pour l'idée et n'hésitez-pas, allez voir le
.
------------------------------------
------------------------------------
[19/02/2020] [tmux tips shell]
------------------------------------