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.

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 ...


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).


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


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.


(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

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 ...


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"

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.


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

1

Nun gibt es eine Standardverknüpfung dafür:

tmux-prefix+z

Das ist in der Regel:

Ctrlb+z



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.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.