290 votes

"Maximiser" un volet dans tmux

Parfois, il serait très utile de maximiser un volet dans tmux, puis de le restaurer à sa taille précédente.

J'ai lu le manuel et je ne trouve pas de solution. Ce que j'ai trouvé, c'est que je pourrais lier une touche pour redimensionner le volet à la largeur "maximale", et une autre touche pour le ramener à une largeur prédéfinie.

Bien sûr, cela a ses inconvénients, et je me demande si quelqu'un a une meilleure idée.

544voto

CompilingCyborg Points 111

C'est maintenant une fonctionnalité native de tmux.

La version 1.8 a vu l'ajout du -Z pour resize-pane . De la page de manuel :

Avec l'option -Z, le volet actif est basculé entre le mode zoomé (qui occupe le de la fenêtre) et non zoomé (sa position normale dans la mise en page).

C'est sûr. tmux-prefix - z par défaut sur mon installation (via Homebrew sur OS X).

5 votes

C'était génial, je viens de l'ajouter à mon .tmux.conf et j'ai maintenant une expérience beaucoup plus fluide : bind-key z resize-pane -Z

1 votes

Est-il possible de faire en sorte que les bords des panneaux immergés soient visibles pour indiquer la profondeur ? J'oublie toujours que je suis en zoom et le titre "Z" n'est pas assez visible.

0 votes

Fonctionne dans les BunsenLabs dès la sortie de la boîte.

81voto

Ashwin Points 17537

Tmux 1.8 et plus

Désormais pris en charge de manière native, à partir de l réponse ci-dessous :

La version 1.8 a vu l'ajout de l'option -Z à resize-pane. De la page de manuel :

Avec -Z, le volet actif est basculé entre le zoom (occupant la totalité de la fenêtre) et le dézoom (sa position normale dans la mise en page).

tmux plus ancien (réponse originale)

Une autre option pourrait être d'utiliser break-pane suivi par join-pane . De la page de manuel :

break-pane [-d] [-t target-pane]
                   (alias: breakp)
             Break target-pane off from its containing window to make it the
             only pane in a new window.  If -d is given, the new window does
             not become the current window.

join-pane [-dhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]
                   (alias: joinp)
             Like split-window, but instead of splitting dst-pane and creating
             a new pane, split it and move src-pane into the space.  This can
             be used to reverse break-pane.

Vous pouvez donc sélectionner votre volet et faire break-pane et ensuite, une fois que vous avez terminé la version maximisée, vous pouvez la reconnecter avec join-pane - peut avoir besoin d'arguments par défaut pour le remettre en place, ou simplement le réarranger après coup.

Notez que join-pane semble être dans tmux 1.3 mais pas dans 1.1. (Pas sûr pour 1.2, désolé).

Et juste pour mentionner que terminator (un multiplexeur de terminal GUI (basé sur GTK)) peut faire le zoom. (Ctrl-Shift-X est le raccourci clavier par défaut). Bien sûr, il ne fait pas beaucoup de choses que tmux fait ...

35 votes

Depuis la version 1.8, il existe une meilleure solution (voir la réponse de Tyler Holien).

1 votes

Pour ceux qui ont déjà essayé, la meilleure réponse est de faire fonctionner le panneau de jonction : join-pane -t:{previous} pour la fenêtre précédente ou join-pane -t:0 pour le ramener à la fenêtre 0.

14 votes

C-b - z est la réponse que je pense que la plupart des gens recherchent.

49voto

Martin Points 403

Je sais que vous avez posé cette question il y a un certain temps... mais je n'ai pas changé d'écran avant aujourd'hui !

J'ai rencontré le même problème, voici comment je l'ai résolu :

unbind +
bind + new-window -d -n tmux-zoom 'clear && echo TMUX ZOOM && read' \; swap-pane -s tmux-zoom.0 \; select-window -t tmux-zoom
unbind -
bind - last-window \; swap-pane -s tmux-zoom.0 \; kill-window -t tmux-zoom

Si votre flux de travail est comme le mien (c'est-à-dire que vous agrandissez une fenêtre, faites un peu de travail, puis l'agrandissez à nouveau immédiatement), cela devrait bien fonctionner pour vous.

0 votes

(Au cas où ce ne serait pas clair, cela maintient la mise en page de votre fenêtre d'origine... après maximisation et dé-maximisation, c'est exactement la même chose).

2 votes

Vous avez une idée de la façon dont je pourrais affecter la même touche aux deux ? Quelque chose comme bind c-m select-window -t tmux-zoom ? <minimize> : <maximize> . Mais maintenant je veux définir cette fonction ailleurs, par souci de propreté, et juste bind c-m :max_or_min . Est-ce possible ? Je trouve qu'il est difficile de faire des recherches. (Je trouve que je me trompe souvent de commande et que je finis par créer des fenêtres 'tmux-zoom' supplémentaires et vides).

7 votes

Cela n'a fonctionné pour moi que lorsque j'ai supprimé 'clear && echo TMUX ZOOM && read' de maximize.

28voto

akshay Points 273

Zoomer amélioré. On peut maintenant zoomer sur plusieurs volets, même hiérarchiquement. Après avoir fait ce qui suit et avoir rechargé votre serveur tmux (Ctrl-r dans mon cas) vous aurez vos x Le zoom avant est réalisé en ouvrant le volet dans une nouvelle fenêtre, et le zoom arrière est réalisé en ramenant le volet dans sa fenêtre d'origine. Si vous finissez par diviser la fenêtre de zoom avant, vous pourrez effectuer un zoom avant dans les volets de la fenêtre de zoom avant et un zoom arrière dans la fenêtre de zoom avant. Le zoom arrière ne se produit que si vous êtes dans une fenêtre de zoom avant contenant un seul volet.

Ajoutez ce qui suit à la fin de votre ~/.tmux.conf

~$ grep "bind x" ~/.tmux.conf
unbind x
bind x run ". ~/.tmux/zoom"

Ajouter le fichier suivant

~$ cat ~/.tmux/zoom
#!/bin/bash -f
currentwindow=`tmux list-window | tr '\t' ' ' | sed -n -e '/(active)/s/^[^:]*: *\([^ ]*\) .*/\1/gp'`;
currentpane=`tmux list-panes | sed -n -e '/(active)/s/^\([^:]*\):.*/\1/gp'`;
panecount=`tmux list-panes | wc | sed -e 's/^ *//g' -e 's/ .*$//g'`;
inzoom=`echo $currentwindow | sed -n -e '/^zoom/p'`;
if [ $panecount -ne 1 ]; then
    inzoom="";
fi
if [ $inzoom ]; then
    lastpane=`echo $currentwindow | rev | cut -f 1 -d '@' | rev`;
    lastwindow=`echo $currentwindow | cut -f 2- -d '@' | rev | cut -f 2- -d '@' | rev`;
    tmux select-window -t $lastwindow;
    tmux select-pane -t $lastpane;
    tmux swap-pane -s $currentwindow;
    tmux kill-window -t $currentwindow;
else
    newwindowname=zoom@$currentwindow@$currentpane;
    tmux new-window -d -n $newwindowname;
    tmux swap-pane -s $newwindowname;
    tmux select-window -t $newwindowname;
fi

4 votes

Seulement un seul vote positif ? ! Cette réponse est géniale ! Fonctionne très bien, introduit de nouvelles fonctionnalités qui remplacent complètement le programme "Terminator" que j'utilisais.

0 votes

+1 C'est vraiment bon ! De loin la meilleure solution fonctionnelle que j'ai trouvée jusqu'à présent ! Merci !

0 votes

Je suis d'accord. Ça marche, et c'est plus que génial. C'est screen++

23voto

alpha_989 Points 893

Ctrl + b (préfixe) + z permet de zoomer dans un volet particulier dans tmux 2.1 . Vous appuyez sur Ctrl + b + z à nouveau, le volet revient à sa taille d'origine. Il ne crée pas de nouveau volet.

Par rapport à la solution postée ci-dessus par aksay, si vous essayez de diviser le volet agrandi, la division n'est pas autorisée et le système revient au volet d'origine et le divise à la place.

L'option de la fenêtre de zoom est probablement plus polyvalente...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X