2021-12-17T11:16:39Z
Voilà plusieurs semaines que j'utilise tmux au quotidien. Alors qu'auparavant j'ouvrais plusieurs fenêtres afin d'avoir de multiples terminaux, je n'ai maintenant plus qu'une session tmux.
Si tmux ne vous dit rien, sachez qu'il s'agit d'un outil permettant d'avoir "plusieurs terminaux dans 1 seul". (oui, c'est très approximatif...).
Cela permet notamment :
Vous remarquerez certainement de nombreuses similitudes avec la configuration de Roman Zolotarev.
=> Configuration tmux de Roman Zolotarev
Au fait, tmux est présent de base dans OpenBSD :)
=> Démonstration de tmux (IMG)
Comme vous pouvez le voir, ma fenêtre est divsée en plusieurs parties un peu comme le ferait un tiling window manager. Chaque partie est appelée un "pane", avec à gauche cet article pendant que je le rédige, en haut à droite un peu de code awk et en bas à droite la prise de capture d'écran.
Vous distinguez en bas à gauche la liste des fenêtres disponibles : je les ai regroupées par thèmes, la plupart sont lancés automatiquement avec ma session.
En bas à droite, il s'agit d'une barre de status : mon terminal est en plein écran. J'y affiche l'espace disque restant, le niveau de batterie, le volume sonore et la date. Lorsque mpd joue de la musique, on voit le titre de la chanson jouée.
Je démarre à chaque début de session un script qui va créer les différentes fenêtres que je veux dans tmux, à savoir une pour mes mails, une pour un client XMPP, une pour pouvoir accéder rapidement à mes cours.
Cela se passe dans le script starttmux suivant :
#!/bin/ksh session=0 showtmux() { xterm -class tmux -e tmux a -t $session exit } # set up tmux tmux has-session -t $session && showtmux # show sync by default, then run ksh tmux new -d -s $session "/home/prx/bin/prxsync pull; ksh" # mutt tmux new-window -d -n "mails" "mutt" # xmpp tmux new-window -d -n "chat" "profanity" # educ tmux new-window -d -n "educ" -c "$HOME/work/educ/College/Cours" rover tmux split-window -h -d -t "educ" -c "$HOME/work/educ/College/Cours" ksh showtmux
Je n'utilise qu'une seule session tmux, sauf exceptions : la 0.
Au début, le script vérifie si la session n'existe pas déjà pour l'afficher au lieu de la charger.
Ensuite, je lance un script de synchronisation appelé "prxsync" et ouvre un shell ksh dans la fenêtre principale.
Puis, j'ouvre dans leurs fenêtres respectives mutt et profanity.
Enfin, je crée une nouvelle fenêtre "educ" que je divise en 2 (split-window) pour y afficher mes cours avec le gestionnaire de fichiers rover.
La dernière ligne permet d'afficher tmux dans xterm.
Pour retrouver les mêmes habitudes, peu importe la machine sur laquelle je me retrouve, j'essaie au maximum d'utiliser les raccourcis par défauts.
J'ai bien évidemment réalisé quelques ajustements, mais je dois avouer qu'on se fait très bien aux raccourcis de tmux au départ un peu étonnants (ctrl-b par exemple).
Voici ma configuration :
set-option -g base-index 1 # my keyboard start from 1 at the left set-option -g escape-time 0 # vi set-option -g history-limit 50000 set-option -g default-command "/bin/ksh" set-option -g default-terminal tmux-256color set-option -g mouse on set-option -g status-interval 10 set-option -g status-right-length 142 set-option -g status-right '#{?client_prefix,#[fg=green#,bg=black] PREFIX,#(bin/status)}'
Je veux que la numérotation commence à 1, pas à 0.
Ensuite, je retire le délai avant de prendre en compte la touche echap, que j'utilise très souvent avec vi.
La dernière ligne permet de définir une barre de status simple que je détaillerai ensuite. "PREFIX" est affiché lorsque j'ai entrée ctrl-b, ça évite les étourderies.
Voici maintenant les raccourcis que j'ai rajouté :
# map prefix to 'C-space', disabled #unbind C-b #set-option -g prefix C-space #bind-key C-space send-prefix # vi <3 set -g mode-keys vi set -g status-keys vi # à la dwm keybinds : resize with HJKL, select with hjkl. bind -r H resize-pane -L 2 bind -r J resize-pane -D 2 bind -r K resize-pane -U 2 bind -r L resize-pane -R 2 bind -r h select-pane -L bind -r j select-pane -D bind -r k select-pane -U bind -r l select-pane -R # move to urgent window bind a previous-window -a # last window bind Tab select-window -l # copy-mode : v bind v copy-mode # copy whole visible pane in new buffer, choose with "#" bind y capture-pane -N -J # split in same directory bind c new-window -c "#{pane_current_path}" bind % split-window -h -c "#{pane_current_path}" bind '"' split-window -c "#{pane_current_path}" # Save buffer also in X clipboard bind -T copy-mode-vi 'y' send -X copy-pipe-and-cancel \ 'xclip -i -selection clipboard' bind -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe-and-cancel \ 'xclip -i -selection clipboard' bind -n MouseDown2Pane run \ 'tmux set-buffer "$(xclip -o -selection clipboard)";tmux paste-buffer'
J'ai laissé en exemple au début une façon d'utiliser ctrl-space au lieu de ctrl-b pour préfixe.
Je définis très rapidement des raccourcis ressemblant à ceux de vi, par habitude.
Voici le script pour afficher les infos en bas à droite :
fs_perc() { df -h $1 | awk 'NR==2 {print $5}' } get_vol() { sndioctl output.level | awk -F = '{printf "%d\n",$2*100}' } loadavg() { sysctl -n vm.loadavg } bat() { #apm | awk 'NR==1 && !/absent/ {printf " ⚡%s", $4}' test $(apm -a) -eq 0 && printf "⚡%s%%" $(apm -l) } printf "%s %s 💽 %s 🔉 %s %s" \ "$(mpd-status)"\ "$(bat)" \ "$(fs_perc /home)" \ "$(get_vol)%" \ "$(date "+📆 %Y-%m-%d 🕓 %H:%M ")"
Le script mpd-status est le suivant :
#!/bin/sh mpc | awk ' (NR == 1) { status = $0 if (length(status) > 42) { status = substr($0, 1, 42) "..." } } (NR == 2) && /playing/ { isplaying = 1 } END { if (isplaying) { printf "♪ %s \n", status } } '
Comme pour awk, je regrette de ne pas avoir pris le temps de me familiariser avec tmux plus tôt. Je vous invite donc à le faire ;)
=> Envoyez votre commentaire par mail. | Mode d'emploi de la liste de diffusion pour recevoir les réponses. This content has been proxied by September (3851b).Proxy Information
text/plain