đŸ’Ÿ Archived View for lord.re â€ș posts â€ș 190-scripter-une-session-tmux â€ș index.gmi captured on 2023-03-20 at 18:29:30. Gemini links have been rewritten to link to archived content

View Raw

More Information

âŹ…ïž Previous capture (2022-06-03)

âžĄïž Next capture (2024-08-18)

-=-=-=-=-=-=-

Scripter une session Tmux

-------------------------------------------------

[19/02/2020] - ~4mins - #tmux #tips #shell

-------------------------------------------------

Cette semaine

Alyve

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

Script pas Ă  pas

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" >}}

! /bin/sh

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" >}}

! /bin/sh

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

blog d'Alyve

.

------------------------------------

🏠 Retour à la home

------------------------------------

[19/02/2020] [tmux tips shell]

------------------------------------

[>> Suivant >>] ⏭ Terminator : Dark Fate (6)

[<< PrĂ©cĂ©dent <<] ⏼ Gerald's Game