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 :
- Un modèle client-serveur bien défini : Les fenêtres sont des entités indépendantes qui peuvent être attachées simultanément à plusieurs sessions et vu de multiples clients ( terminaux ), ainsi qu'une circulation libre et simple entre les sessions dans le même serveur tmux.
- Facilement scriptable.
- Plusieurs tampons pour copier/coller.
- Choix de emacs / vi comme dispositon de combinaisons ( touches ).
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.
Doper son .emacs pour tmux
Si toi aussi, tu es un utilisateur de tmux ( qui sera dans le base de freebsd 9.0 ) et de emacs, tu as dû rencontrer certains soucis :
- touche backspace qui ouvre le menu d'aide
- C-left qui fait cracher à emacs un message : M-O d is undefined
- C-right qui fait cracher à emacs un message : M-O c is undefined
- C-up qui fait cracher à emacs un message : M-O a is undefined
- C-down qui fait cracher à emacs un message : M-O b is undefined
La solution à tes problèmes n'est pas très compliquée, il suffit de rajouter dans ton .emacs :
(define-key function-key-map (kbd "M-O a") [C-up])
(define-key function-key-map (kbd "M-O b") [C-down])
(define-key function-key-map (kbd "M-O c") [C-right])
(define-key function-key-map (kbd "M-O d") [C-left])
(global-set-key [?\C-h] 'delete-backward-char)
(global-set-key [?\C-x ?h] 'help-command)
Les combinaisons "M-0 a", "M-0 b", ..., peuvent varier en fonction de la machine, à vous d'adapter la configuration comme il le faut.
Pour information, je sortirai prochainement un billet de présentation de tmux, un multiplexeur de terminal.
Pages : 1