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

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


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


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


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.


(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

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


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"

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.


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

1

Teraz jest do tego domyślny skrót:

tmux-prefix+z

co ogólnie jest:

Ctrlb+z



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.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.