Ein Fenster in tmux "maximieren"

239

Manchmal wäre es sehr nützlich, einen Bereich in tmux zu maximieren und ihn dann auf seine vorherige Größe zurückzusetzen.

Ich habe das Handbuch gelesen und kann keinen Weg finden. Was ich mir ausgedacht habe, ist, dass ich einen Schlüssel zum Ändern der Fenstergröße auf "maximale" Breite und einen anderen Schlüssel zum Wiederherstellen einer vordefinierten Breite binden könnte.

Das hat natürlich auch Nachteile, also frage ich mich, ob jemand eine bessere Idee hat.

Ivan
quelle

Antworten:

56

tmux 1.8 und höher

Jetzt nativ unterstützt, aus der folgenden Antwort :

In Version 1.8 wurde das -Z-Flag zum Größenänderungsfenster hinzugefügt. Von der Manpage:

Mit -Z wird das aktive Fenster zwischen gezoomt (das gesamte Fenster einnehmen) und nicht gezoomt (die normale Position im Layout) umgeschaltet.

älteres tmux (ursprüngliche antwort)

Eine andere Möglichkeit könnte sein, break-panegefolgt von zu verwenden join-pane. Von der Manpage :

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.

So können Sie Ihren Bereich auswählen und ausführen. break-paneSobald Sie mit der maximierten Version fertig sind, können Sie ihn wieder verbinden. join-paneMöglicherweise sind einige Standardargumente erforderlich, um ihn wieder in Position zu bringen, oder Sie können ihn anschließend neu anordnen.

Beachten Sie, dass der Join-Bereich in tmux 1.3, aber nicht in 1.1 angezeigt wird. (Nicht sicher über 1.2, sorry).

Und um nur zu erwähnen, dass Terminator (ein GUI (GTK-basierter) Terminal-Multiplexer) das Zoomen übernehmen kann. (Strg-Umschalt-X ist die Standardtastenbelegung). Natürlich macht es nicht viele Dinge, die tmux macht ...

Hamish Downer
quelle
32
Ab Version 1.8 gibt es eine bessere Lösung (siehe Tyler Holiens Antwort).
Momeara
1
Für diejenigen, die dies vor der besseren Antwort versuchen, tun Sie Folgendes, um den Join-Bereich zum Laufen zu bringen: join-pane -t:{previous}für das vorherige Fenster oder join-pane -t:0um ihn wieder mit Fenster 0 zu verbinden.
Realistisch
488

Dies ist nun eine native TMUX-Funktion.

In Version 1.8 wurde die -ZFlagge hinzugefügt resize-pane. Von der Manpage:

Mit -Z wird das aktive Fenster zwischen gezoomt (das gesamte Fenster einnehmen) und nicht gezoomt (die normale Position im Layout) umgeschaltet.

Es ist gebunden an tmux-prefix- zin meiner Installation standardmäßig (über Homebrew unter OS X).

Tyler Holien
quelle
4
Das war großartig, wurde gerade zu meiner .tmux.conf hinzugefügt und bietet nun eine weitaus flüssigere Erfahrung: Bindetaste z Größenänderungsfenster -Z
St-Ste-Ste-Stephen
Ist es irgendwie möglich, die Kanten der versenkten Scheiben zur Tiefenanzeige sichtbar zu machen? Ich vergesse immer wieder, dass ich vergrößert bin und der "Z-Titel" nicht wirklich prominent genug ist.
lkraav
Funktioniert in BunsenLabs sofort.
Mateusz Piotrowski
genial. es funktioniert tatsächlich
sayem siam
1
@lkraav Siehe Ändern der Tmux-Hintergrundfarbe des gezoomten Bereichs .
Kamil Maciorowski
49

Ich weiß, dass Sie dies vor einiger Zeit gefragt haben ... aber ich bin erst heute vom Bildschirm gewechselt!

Ich bin auf dasselbe Problem gestoßen. So habe ich es gelöst:

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

Wenn Ihr Arbeitsablauf dem meinen entspricht (dh Sie maximieren ein Fenster, erledigen einige Arbeiten und deaktivieren es sofort), sollte dies für Sie hervorragend funktionieren.

Ryan
quelle
(Falls es nicht klar war, behält dies das Layout in Ihrem ursprünglichen Fenster bei ... nach dem Maximieren und dem Aufheben der Maximierung ist es genau dasselbe.)
Ryan
2
Irgendeine Idee, wie ich den gleichen Tastenanschlag beiden zuordnen könnte? So etwas wie bind c-m select-window -t tmux-zoom ? <minimize> : <maximize>. Aber jetzt möchte ich diese Funktion aus Gründen der Übersichtlichkeit an einer anderen Stelle definieren bind c-m :max_or_min. Ist das möglich? Ich finde es schwer zu suchen. (Ich stelle fest, dass ich oft den falschen Befehl drücke und am Ende zusätzliche, leere "tmux-zoom" -Fenster
erstelle
7
Dies funktionierte nur für mich, als ich 'clear && echo TMUX ZOOM && read' aus maximize entfernte.
Epeli
Das Maximieren funktioniert für mich, aber durch das Minimieren wird nur das ursprüngliche Fenster geschlossen und der maximierte Bereich verlassen.
Paradroid
Diese Art von funktionierte, aber ich verliere mein Layout .. fast obwohl!
John Hunt
25

Verbesserter Zoomer. Jetzt können mehrere Fenster auch hierarchisch gezoomt werden. Nachdem Sie die folgenden Schritte ausgeführt und Ihren tmux-Server neu geladen haben (in meinem Fall Strg-R), müssen Sie Ihren xSchlüssel zum Vergrößern und Verkleinern eines Fensters verwenden . Zum Vergrößern wird das Fenster in einem neuen Fenster geöffnet. Zum Verkleinern wird das Fenster wieder in das ursprüngliche Fenster zurückgesetzt. Wenn Sie das Vergrößerungsfenster aufteilen, können Sie in die Fensterbereiche des Vergrößerungsfensters hinein- und wieder herauszoomen. Das Verkleinern erfolgt nur, wenn Sie sich in einem Vergrößerungsfenster befinden, das einen einzelnen Bereich enthält.

Fügen Sie Folgendes zum Ende Ihres ~/.tmux.conf

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

Füge folgende Datei hinzu

~$ 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
quelle
4
Nur eine einzige positive Bewertung ?! Diese Antwort ist fantastisch! Funktioniert sehr gut, führt nette neue Funktionen ein, die jetzt das aufgeblähte 'Terminator'-Programm, das ich früher verwendet habe, vollständig ersetzen.
SillyMunky
+1 Das ist wirklich gut! Mit Abstand die beste funktionierende Lösung, die mir bisher begegnet ist! Vielen Dank!!
Armandino
Ich stimme zu. Das funktioniert und ist mehr als fantastisch. Es ist Bildschirm ++
Brad Parks
+1. Das funktioniert prima, aber es ist ein Bruchteil einer Sekunde (~ 0,8 s) langsamer als @ Ryans Antwort oben, zumindest auf meinem System. Keine große Sache, aber ich frage mich, ob es einen Weg gibt, es schneller zu machen
Amelio Vazquez-Reina
Wahrlich wunderschön. Ich mag die speziellen Fensternamen (zoom @…), die nützliche Erinnerungen sind, und den einzelnen Befehl "x" zum Vergrößern / Verkleinern.
Eric O Lebigot
16

Ctrl+ b(Präfix) + zzoomt in einen bestimmten Bereich hinein tmux 2.1. Wenn Sie Ctrl+ b+ zerneut drücken , wird der Bereich wieder auf die ursprüngliche Größe gezoomt. Es wird kein neuer Bereich erstellt.

Verglichen mit der oben von aksay veröffentlichten Lösung wird beim Versuch, das vergrößerte Fenster zu teilen, das Teilen nicht zugelassen, und es wird zum ursprünglichen Fenster zurückgekehrt und stattdessen dieses Fenster geteilt.

Die Zoom-Fenster-Option ist wahrscheinlich vielseitiger ...

alpha_989
quelle
2

Ich habe dies getan, um mit dem gleichen Tastendruck zu maximieren / minimieren:

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
quelle
1

Auch bei mir kann man ohne 'klares & Echo TMUX ZOOM & Lesen' arbeiten. Mit diesem Snippet verschwindet jedes Mal, wenn ich einen Ausschnitt aus dem ersten Fenster minimiere.

Schlank
quelle
1

Das Problem beim resize-pane -ZUmschalten ist, dass manchmal der umgekehrte Zoom ausgeführt wird, als gewünscht, insbesondere wenn er von einem Skript oder von innen aufgerufen wird tmux.conf.

Hier ist die Problemumgehung:

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
quelle
1

Nun gibt es eine Standardverknüpfung dafür:

tmux-prefix+z

Das ist in der Regel:

Ctrlb+z

Youcef4k
quelle
0

Ich bin auf Ubuntu 12.04 und brauchte auch diese Funktion. Seit tmux 1.8 gibt es native Unterstützung für das Zoom-Umschalten mit dem tmux-Präfix z. Da wir tmux 1.8 in 12.04 wahrscheinlich nicht sehen werden, habe ich tmux 1.8 von der Quelle auf einem anderen Entwicklercomputer kompiliert, in _tmux-1.8 umbenannt und einfach die 1.8-Binärdatei in /usr/bin/_tmux-1.8 kopiert und .bash_aliases -> alias bearbeitet tmux = '_ tmux-1.8'.

Ich habe keine Probleme mit dieser schnellen und schmutzigen Methode bemerkt und wenn / wenn tmux 1.8 auf 12.04 kommt, habe ich nichts kaputt gemacht.

vergesslich
quelle