«Maximiser» un volet dans tmux

239

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 peux pas trouver un moyen. Ce que j'ai découvert, c'est que je pouvais associer une clé pour redimensionner le volet en largeur "maximale" et une autre pour le restaurer à une largeur prédéfinie.

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

Ivan
la source

Réponses:

56

tmux 1.8 et plus tard

Maintenant pris en charge de manière native, à partir de la réponse ci - dessous :

La version 1.8 a vu l'ajout de l'indicateur -Z au volet de redimensionnement. De la page de manuel:

Avec -Z, le volet actif est basculé entre zoomé (occupant l’ensemble de la fenêtre) et non zoomé (sa position normale dans la présentation).

ancien tmux (réponse originale)

Une autre option pourrait être d'utiliser break-panesuivi de 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.

Ainsi, vous pouvez sélectionner votre volet et le faire break-pane, puis une fois que vous avez terminé avec la version agrandie, vous pouvez le rejoindre à nouveau join-pane- il peut être nécessaire d’avoir des arguments par défaut pour le remettre en place, ou tout simplement réorganiser par la suite.

Notez que le volet joint semble être dans tmux 1.3 mais pas 1.1. (Pas sûr de 1.2, désolé).

Et juste pour mentionner que le terminateur (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, cela ne fait pas beaucoup de choses que tmux ...

Hamish Downer
la source
32
A partir de la version 1.8, la solution est meilleure (voir la réponse de Tyler Holien).
Momeara
1
Pour ceux qui essaient ceci avant la meilleure réponse, faire fonctionner join-pane fonctionne: join-pane -t:{previous}pour la fenêtre précédente ou join-pane -t:0pour revenir à la fenêtre 0.
Réaliste le
488

C'est maintenant une fonctionnalité native de tmux.

La version 1.8 a vu l’ajout du -Zdrapeau à resize-pane. De la page de manuel:

Avec -Z, le volet actif est basculé entre zoomé (occupant l’ensemble de la fenêtre) et non zoomé (sa position normale dans la présentation).

C'est lié à tmux-prefix- zpar défaut sur mon installation (via Homebrew sous OS X).

Tyler Holien
la source
4
c'était génial, je viens d'ajouter à mon fichier .tmux.conf et d'avoir maintenant une expérience beaucoup plus fluide: bind-key z resize-pane -Z
St-Ste-Ste-Stephen
Est-il possible d'avoir les bords des vitres immergées visibles pour l'indication de la profondeur? J'oublie toujours que je fais un zoom avant et que le "titre Z" n'est pas assez important.
Lkraav
Fonctionne dans BunsenLabs hors de la boîte.
Mateusz Piotrowski
impressionnant. cela fonctionne réellement
sayem siam
1
@lkraav Voir Modification de la couleur d'arrière-plan Tmux du volet zoomé .
Kamil Maciorowski le
49

Donc, je sais que vous avez posé cette question il y a quelque temps ... mais je n'ai pas changé d'écran jusqu'à 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 semblable au mien (c’est-à-dire que vous maximisez une fenêtre, effectuez un travail, puis supprimez-le immédiatement), cela devrait fonctionner très bien pour vous.

Ryan
la source
(Au cas où ce ne serait pas clair, cela maintiendra la disposition dans votre fenêtre d'origine ... après avoir maximisé et non maximisé, c'est exactement la même chose.)
Ryan
2
Avez-vous une idée de la façon dont je pourrais mapper la même frappe sur les deux? Quelque chose comme bind c-m select-window -t tmux-zoom ? <minimize> : <maximize>. Mais maintenant, je veux définir cette fonction ailleurs, pour des raisons de propreté et juste bind c-m :max_or_min. Est-ce possible? J'ai du mal à chercher. (Je constate que je tape souvent la mauvaise commande et que je crée des fenêtres supplémentaires vides, 'tmux-zoom'.)
chadoh
7
Cela n'a fonctionné pour moi que lorsque j'ai supprimé 'clear && echo TMUX ZOOM && read' de maxim.
Epeli
Thw maximiser fonctionne pour moi, mais l'action minimiser tue simplement la fenêtre d'origine, laissant le volet maximisé.
Parroïde
Ce genre de travail, mais je perds ma mise en page .. presque si!
John Hunt
25

Zoomer amélioré. Désormais, il est possible de zoomer sur plusieurs volets, même de manière hiérarchique. Après avoir effectué les opérations ci-dessous et rechargé votre serveur tmux (Ctrl-r dans mon cas), vous aurez la xclé liée pour effectuer un zoom avant ou arrière d’un volet. le zoom avant est obtenu en ouvrant le volet dans une nouvelle fenêtre, et le zoom arrière en reprenant un volet dans sa fenêtre d'origine. Si vous finissez par scinder la fenêtre de zoom avant, vous pourrez zoomer sur les volets de la fenêtre de zoom avant et effectuer un zoom arrière sur la fenêtre de zoom avant. le zoom arrière ne se produit que si vous vous trouvez 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
akshay
la source
4
Un seul vote positif?! Cette réponse est géniale! Fonctionne très bien, introduit de nouvelles fonctionnalités intéressantes qui remplacent désormais complètement le programme "Terminator" bloaty que j'avais l'habitude d'utiliser.
SillyMunky
+1 c'est vraiment bien! De loin la meilleure solution de travail que j'ai trouvée jusqu'à présent! Merci!!
Armandino
Je plussoie. Cela fonctionne et est plus que génial. C'est l'écran ++
Brad Parks
+1 Cela fonctionne très bien, mais c’est une fraction de seconde (~ 0,8s) moins rapide que la réponse de @ Ryan ci-dessus, du moins sur mon système. Ce n'est pas bien grave, mais je me demande s'il est possible d'accélérer les choses
Amelio Vazquez-Reina
Beau en effet. J'adore les noms de volets spéciaux (zoom @…), qui sont des rappels utiles, ainsi que la seule commande de zoom "x".
Eric O Lebigot
16

Ctrl+ b(préfixe) + permet zde zoomer sur un volet particulier tmux 2.1. Si vous appuyez à nouveau sur Ctrl+ b+ z, le volet de zoom revient à sa taille originale. Il ne crée pas de nouveau volet.

Par rapport à la solution publiée précédemment par aksay, si vous essayez de scinder le volet agrandi, il ne le permet pas, puis revient au volet d'origine et le scinde à la place.

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

alpha_989
la source
2

J'ai fait ceci pour maximiser / minimiser avec la même frappe:

bind C-k run "if [[ $(tmux list-window) =~ ZOOM ]]; then tmux last-window; tmux swap-pane -s ZOOM.1; tmux kill-window -t ZOOM; else tmux new-window -d -n ZOOM; tmux swap-pane -s ZOOM.1; tmux select-window -t ZOOM;fi"
Juan Ignacio Pumarino
la source
1

Aussi pour moi travailler sans 'clear && echo TMUX ZOOM && read'. Avec cet extrait, chaque fois que je minimise un volet de la première fenêtre disparaît.

Svelte
la source
1

L’inconvénient d’ resize-pane -Zêtre une bascule est qu’il effectuera parfois l’opération de zoom inversé que vous le souhaitez, en particulier lorsqu’il est appelé à partir d’un script ou à l’intérieur tmux.conf.

Voici la solution de contournement:

tmux-zoom-in.sh

#!/bin/bash

# Zoom in the current pane ONLY if it is not currently zoomed.
# Requires tmux version >= 1.8

tmux list-panes -F '#F' | grep -q Z || tmux resize-pane -Z

tmux-zoom-out.sh

#!/bin/bash

# Zoom out the current pane ONLY if it is not currently zoomed.
# Requires tmux version >= 1.8

tmux list-panes -F '#F' | grep -q Z && tmux resize-pane -Z
Tom Hale
la source
1

Maintenant, il existe un raccourci par défaut pour cela:

tmux-prefix+z

qui est généralement:

Ctrlb+z

Youcef4k
la source
0

Pour ceux qui ne peuvent pas utiliser tmux 1.8 ou préfèrent un état maximisé plus long, j’ai publié un script qui fonctionne avec tmux 1.6+ .

J'espère que ça t'as aidé.

Gregory Pakosz
la source
0

Je suis sur Ubuntu 12.04 et j'avais également besoin de cette fonctionnalité. Depuis tmux 1.8, il existe un support natif pour le basculement de zoom utilisant le préfixe tmux-préfixe z. Puisque nous ne verrons probablement pas tmux 1.8 dans 12.04, j’ai compilé tmux 1.8 à partir du code source d’un autre ordinateur dev, je l’ai renommé en _tmux-1.8 et je viens de copier le binaire 1.8 dans /usr/bin/_tmux-1.8 et de le modifier .bash_aliases -> alias tmux = '_ tmux-1.8'.

Je n'ai pas remarqué de problèmes en utilisant cette méthode rapide et sale et quand / si tmux 1.8 arrive à 12.04 je n'ai rien cassé.

oblivien
la source