web-dev-qa-db-fra.com

"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 n'arrive 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.

224
Ivan

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

Donc, vous pouvez sélectionner votre volet et faire break-pane puis une fois que vous avez terminé avec la version agrandie, vous pouvez le rejoindre à nouveau avec join-pane - il faudra peut-être 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 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, cela ne fait pas beaucoup de choses que tmux ...

51
Hamish Downer

Ceci est maintenant une fonctionnalité native de tmux.

La version 1.8 a vu l'ajout de l'indicateur -Z à 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).

Il est lié à tmux-prefix-z par défaut sur mon installation (via Homebrew sous OS X).

474
Tyler Holien

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 des travaux, puis supprimez-la immédiatement), cela devrait fonctionner très bien pour vous.

49
Ryan

Zoomer amélioré. Désormais, il est possible de zoomer sur plusieurs volets, même de manière hiérarchique. Après avoir effectué ce qui suit et rechargé votre serveur tmux (Ctrl-r dans mon cas), vous aurez votre x touche liée pour effectuer un zoom avant ou arrière sur un volet. le zoom avant est obtenu en ouvrant le volet dans une nouvelle fenêtre et le zoom arrière en ramenant un volet à sa fenêtre d'origine. Si vous divisez 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
25
akshay

Ctrl + b (préfixe) + z fonctionne pour zoomer sur un volet particulier dans tmux 2.1. Il vous presse Ctrl + b + z encore une fois, il fait un zoom sur le volet pour le ramener à sa taille originale. Cela 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 ...

14
alpha_989

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"

Le problème avec resize-pane -Z étant une bascule est que parfois il effectuera l'opération de zoom inversé que souhaité, en particulier lorsqu'il est appelé à partir d'un script ou à l'intérieur de 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
1
Tom Hale

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.

1
Slim

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

J'espère que cela pourra aider.

0
Gregory Pakosz

Pour les anciennes versions de tmux, cette solution est la seule qui fonctionne:

https://github.com/jipumarino/tmux-zoom

0
Brad Parks

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’a 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é.

0
oblivian