„Maksymalizacja” panelu w tmux

239

Czasami bardzo przydatne byłoby zmaksymalizowanie panelu w tmux, a następnie przywrócenie go do poprzedniego rozmiaru.

Czytam instrukcję i nie mogę znaleźć sposobu. Wymyśliłem, że mogę powiązać klucz, aby zmienić rozmiar panelu na „maksymalną” szerokość, i inny klucz, aby przywrócić go do określonej z góry szerokości.

Oczywiście ma to swoje wady, więc zastanawiam się, czy ktoś ma lepszy pomysł.

Ivan
źródło

Odpowiedzi:

55

tmux 1.8 i nowszy

Teraz natywnie obsługiwane, z poniższej odpowiedzi :

W wersji 1.8 dodano flagę -Z w okienku zmiany rozmiaru. Ze strony podręcznika:

Przy pomocy -Z, aktywne okienko jest przełączane pomiędzy powiększonym (zajmującym całe okno) a nie powiększonym (jego normalna pozycja w układzie).

starszy tmux (oryginalna odpowiedź)

Inną opcją może być użycie, break-panea następnie join-pane. Od strony man :

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.

Możesz więc wybrać panel i zrobić, break-panea potem, gdy skończysz z wersją zmaksymalizowaną, możesz ponownie dołączyć do niego join-pane- może potrzebować domyślnych argumentów, aby przywrócić go na miejscu lub po prostu zmienić jego kolejność.

Zauważ, że okienko dołączania wydaje się być w tmux 1.3, ale nie 1.1. (Nie jestem pewien co do 1.2, przepraszamy).

I tylko wspomnieć, że terminator (multiplekser terminali oparty na graficznym interfejsie graficznym) może zrobić powiększenie. (Ctrl-Shift-X jest domyślnym skrótem klawiszowym). Oczywiście nie robi wielu rzeczy, które robi tmux ...

Hamish Downer
źródło
32
Od wersji 1.8 jest lepsze rozwiązanie (patrz odpowiedź Tylera Holiena).
momeara
1
Dla tych, którzy próbują tego przed lepszą odpowiedzią, aby uzyskać okienko dołączenia do pracy, wykonaj: join-pane -t:{previous}dla poprzedniego okna lub join-pane -t:0dołącz do niego z powrotem do okna 0.
Realistyczne
488

To jest teraz natywna funkcja tmux.

W wersji 1.8 dodano -Zflagę do resize-pane. Ze strony podręcznika:

Przy pomocy -Z, aktywne okienko jest przełączane pomiędzy powiększonym (zajmującym całe okno) a nie powiększonym (jego normalna pozycja w układzie).

Jest to związane tmux-prefix- zdomyślnie w mojej instalacji (przez Homebrew w OS X).

Tyler Holien
źródło
4
to było świetne, właśnie dodałem do mojego .tmux.conf i teraz mam o wiele bardziej płynne doświadczenie: bind-key z panelem zmiany rozmiaru -Z
St-Ste-Ste-Stephen
Czy można w jakiś sposób widzieć krawędzie zanurzonych szyb w celu wskazania głębokości? Ciągle zapominam, że jestem powiększony, a tytuł „Z” nie jest wystarczająco widoczny.
lkraav
Działa w BunsenLabs od razu po wyjęciu z pudełka.
Mateusz Piotrowski,
niesamowite. to faktycznie działa
sayem siam
1
@lkraav Zobacz Zmień kolor tła Tmux powiększonego panelu .
Kamil Maciorowski
49

Wiem, że pytałeś o to jakiś czas temu ... ale do dzisiaj nie przełączyłem się z ekranu!

Natrafiłem na ten sam problem, oto jak go rozwiązałem:

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

Jeśli Twój przepływ pracy jest podobny do mojego (tzn. Zmaksymalizujesz okno, zrób trochę pracy, a następnie natychmiast go maksymalnie zmaksymalizuj), to powinno działać świetnie.

Ryan
źródło
(W przypadku, gdy nie było to jasne, zachowuje układ w oryginalnym oknie ... po maksymalizacji i unmaksymalizacji jest dokładnie taki sam.)
Ryan
2
Masz pomysł, jak mogę przypisać to samo naciśnięcie klawisza do obu? Coś jak bind c-m select-window -t tmux-zoom ? <minimize> : <maximize>. Ale teraz chcę zdefiniować tę funkcję gdzie indziej, ze względu na czystość i po prostu bind c-m :max_or_min. Czy to jest możliwe? Trudno mi szukać. (Uważam, że często uderzam w złe polecenie i ostatecznie tworzę dodatkowe, puste okna „tmux-zoom”.)
chadoh
7
Działa to dla mnie tylko wtedy, gdy usunąłem „clear && echo TMUX ZOOM && read” z maksymalizacji.
Epeli
Thw maksymalizacja działa dla mnie, ale akcja minimalizacji po prostu zabija oryginalne okno, pozostawiając zmaksymalizowany panel.
paradroid
Ten rodzaj zadziałał, ale straciłem układ ... prawie jednak!
John Hunt
25

Ulepszony zoomer. Teraz można powiększać wiele paneli, nawet hierarchicznie. Po wykonaniu poniższych czynności i ponownym załadowaniu serwera tmux (w moim przypadku Ctrl-r) xklucz będzie musiał powiększyć i pomniejszyć okienko. powiększenie uzyskuje się poprzez otwarcie panelu w nowym oknie, a oddalenie można uzyskać, przenosząc okienko z powrotem do pierwotnego okna. Jeśli zakończysz dzielenie okna powiększania, będziesz mógł powiększać panele okna powiększania i pomniejszać z powrotem do okna powiększania. Pomniejszanie występuje tylko wtedy, gdy jesteś w oknie powiększania zawierającym pojedynczy panel.

Dodaj następujące na końcu ~/.tmux.conf

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

Dodaj następujący plik

~$ 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
źródło
4
Tylko jedna opinia ?! Ta odpowiedź jest niesamowita! Działa bardzo dobrze, wprowadza ładną nową funkcjonalność, która teraz całkowicie zastępuje rozdęty program „terminator”, z którego korzystałem.
sillyMunky
+1 To jest naprawdę dobre! Zdecydowanie najlepsze działające rozwiązanie, jakie do tej pory spotkałem! Dzięki!!
armandino,
Zgadzam się. To działa i jest więcej niż niesamowite. To screen ++
Brad Parks
+1. Działa to świetnie, ale jest to ułamek sekundy (~ 0,8 s) wolniej niż powyższa odpowiedź @ Ryana, przynajmniej w moim systemie. Nie jest to wielka sprawa, ale zastanawiam się, czy istnieje sposób, aby przyspieszyć
Amelio Vazquez-Reina
Rzeczywiście piękne. Uwielbiam specjalne nazwy okien (zoom @…), które są przydatnymi przypomnieniami oraz pojedyncze polecenie powiększania / pomniejszania „x”.
Eric O Lebigot,
16

Ctrl+ b(prefiks) + zdziała, aby powiększyć do określonego panelu tmux 2.1. Po ponownym naciśnięciu Ctrl+ b+ zokienko powiększenia powróci do pierwotnego rozmiaru. Nie tworzy nowego panelu.

W porównaniu do rozwiązania opublikowanego powyżej przez aksay, jeśli spróbujesz podzielić powiększony panel, nie pozwoli on na podział, a wróci do pierwotnego panelu i zamiast tego podzieli ten panel.

Opcja okna powiększenia jest prawdopodobnie bardziej wszechstronna ...

alpha_989
źródło
2

Zrobiłem to, aby zmaksymalizować / zminimalizować z tym samym naciśnięciem klawisza:

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
źródło
1

Również dla mnie praca bez „wyczyść && echo TMUX ZOOM && read”. Za pomocą tego fragmentu znikam za każdym razem, gdy minimalizuję jedno okienko z pierwszego okna.

Szczupły
źródło
1

Problem z resize-pane -Zprzełączaniem polega na tym, że czasami wykona operację zoomu wstecznego, niż jest to pożądane, szczególnie gdy jest wywoływana ze skryptu lub wewnątrz tmux.conf.

Oto obejście:

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
źródło
1

Teraz jest do tego domyślny skrót:

tmux-prefix+z

co ogólnie jest:

Ctrlb+z

Youcef4k
źródło
0

Dla tych, którzy nie mogą korzystać z tmux 1.8 lub wolą dłuższy stan zmaksymalizowany, opublikowałem skrypt tmux, który działa z tmux 1.6+ .

Mam nadzieję, że to pomaga.

Grzegorz Pakosz
źródło
0

Jestem na Ubuntu 12.04 i również potrzebowałem tej funkcji. Od wersji tmux 1.8 istnieje natywna obsługa przełączania powiększenia przy użyciu prefiksu z tmux. Ponieważ prawdopodobnie nie zobaczymy tmux 1.8 w 12.04 skompilowałem tmux 1.8 ze źródła na innym komputerze deweloperskim, przemianowałem go na _tmux-1.8 i po prostu skopiowałem plik binarny 1.8 do /usr/bin/_tmux-1.8 i edytowałem .bash_aliases -> alias tmux = „_ tmux-1.8”.

Nie zauważyłem żadnych problemów przy użyciu tej szybkiej i brudnej metody, a kiedy / jeśli tmux 1.8 dojdzie do 12.04, niczego nie zepsułem.

oblivian
źródło