17/08/2010

This is Tmux !

Présentation

Dans un billet précédent, je montrais une tricks sous tmux sans même l'avoir présenté. Je vais remédier à ça.

Tmux est un multiplexeur de terminal, celà permet d'accéder et contrôler plusieurs terminaux à partir d'un seul terminal. Tmux est destiné à être une alternative simple, moderne sous license BSD à des programmes comme GNU Screen.

Tmux apporte certains avantages par rapport à screen :

Tmux à la différence de screen peut splitter verticalement, sans avoir recours à une recompilation après application d'un patch.

Dans tmux, on utilise par defaut le préfixe Ctrl-b et non Ctrl-a, qui est quand même plus confortable. Tmux est aussi dans le base de Open-BSD ( par ce biais que je l'ai connu ) et bientôt FreeBSD, en attendant il est disponible dans vos ports.

Seul hic que je puisse lui reprocher mais pas bien méchant, on ne peut pas afficher la liste des fenêtres sous forme de menu sélectionnable comme sous screen ( Ctrl-a+" ).

Raccourcis

Un tableau récapitulatif des différentes combinaisons pour tmux et screen :

^ signifie ctrl+, donc ^x c'est ctrl+x. M- signifie alt+, donc M-x c'est alt+x

Action tmux screen
Démarrer une nouvelle session tmux OUtmux new OUtmux new-session screen
Rattacher à une session detaché tmux attach OUtmux attach-session screen -r
Rattacher à une session detaché(Detache toute autre session rattachée) tmux attach -d OUtmux attach-session -d screen -dr
Rattacher à une session detaché (Multiple affichage) tmux attach OUtmux attach-session screen -x
Detacher la session courante ^b d OU^b :detach ^a ^d OU^a :detach
Renomme la fenêtre ^b , <newname> OU^b :rename-window <newname> ^a A <newname>
Lister fenêtres ^b w ^a w
Lister fenêtres dans un menu selectionnable ^a "
Aller à la fenêtre # ^b # ^a #
Aller à la dernière fenêtre active ^b l ^a l
Aller à la fenêtre suivante ^b n ^a n
Aller à la fenêtre précédente ^b p ^a p
Aide ^b ? ^a ?
Lister les sessions ^b s OUtmux ls OUtmux list-sessions screen -ls
Créer un nouveau shell ^b c ^a c
Quitter shell courant ^d ^d
Split horizontal ^b "
Split vertical ^b %
Change de fenêtre ^b o
Ferme la fenêtre actuelle ^b x OU (logout/^D)
Ferme les fenêtres sauf celle active ^b !
Horloge ^b t

Scripting

Dans les fonctionnalitées de Tmux, je parlais de scripting en voici un exemple :

> cat tmux_launch.sh
#!/bin/sh

tmux new-session -d -s terms -n SHELLS
tmux new-window -t terms:1 -n IRC
tmux new-window -t terms:2 -n WEB
tmux new-window -t terms:3 -n MAIL

tmux send-keys -t terms:1 'irssi' C-m
tmux send-keys -t terms:2 'elinks' C-m
tmux send-keys -t terms:3 'mutt' C-m

tmux select-window -t terms:1
tmux attach-session -d -t terms

La première commande va créer une nouvelle session detâchée ( -d ) dont le nom sera "terms" ( -s ), la premièere fenêtre se nommera "SHELLS" ( -n ).

Ensuite cela crée 3 fenêtres dont les noms sont "IRC", "WEB", "MAIL" et où on lancera les programmes associés à chacune d'elle.

On sélectionne pour finir la fenêtre sur laquelle on veut apparaître puis on s'attache à la session.

Configuration

Je vous fais part aussi de mon .tmux.conf à placer dans votre $HOME :

# Status Bar
set-option -g status-bg black 
set-option -g status-fg green
set -g status-left-length 30
set -g status-left "%a %d/%m - %R [@#(hostname -s)]"
set -g status-right "#(sysctl -n vm.loadavg)"
setw -g window-status-current-bg red

# Titre Fenetre
set-option -g set-titles on
setw -g automatic-rename on

# BindKeys
bind-key S split-window
bind-key Tab down-pane
bind-key X kill-pane

# Historique
set-option -g history-limit 250

Voilà c'est tout pour l'instant sur Tmux. Je vous invite à lire le manuel si cet article vous donne envie de migrer à tmux.