Перейти к содержимому

«Максимизация» панели в tmux

203

Иногда было бы очень полезно увеличить панель в tmux, а затем восстановить ее прежний размер.

Я читал руководство и не могу найти способ. Я пришел к выводу, что я могу связать ключ, чтобы изменить размер панели до «максимальной» ширины, и другой ключ, чтобы восстановить его до некоторой предопределенной ширины.

Конечно, у этого есть свои недостатки, поэтому мне интересно, есть ли у кого идея получше.

76 860 просмотров
Ivan спросил 15 лет назад
I 1 684

11 ответов

428

Теперь это встроенная функция tmux.

Версия 1.8 увидела добавление -Zфлага к resize-pane. Со страницы руководства:

При использовании -Z активная панель переключается между масштабом (занимающим все окно) и масштабом (обычное положение в макете).

Это связано с tmux-prefix- zпо умолчанию на моей установки (через Homebrew на OS X).

это было здорово, только что добавили в мой .tmux.conf и теперь у меня гораздо более плавный опыт: bind-key z resize-pane -Z

St-Ste-Ste-Stephen · 12 лет назад · 3

Можно ли как-то сделать края подводных панелей видимыми для индикации глубины? Я постоянно забываю, что меня увеличивают, и «Z-title» не достаточно заметен.

lkraav · 10 лет назад · 0

Работает в BunsenLabs из коробки.

Mateusz Piotrowski · 10 лет назад · 0
Tyler Holien ответил 13 лет назад
T 4 381
50
Принятый ответ

Другим вариантом может быть использование с break-paneпоследующим join-pane. Со страницы руководства :

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. 

Таким образом, вы можете выбрать свою панель и выполнить ее, break-paneа затем, как только вы закончите с максимизированной версией, вы можете снова присоединиться к ней join-pane- может потребоваться несколько аргументов по умолчанию, чтобы вернуть ее на место, или просто переставить потом.

Обратите внимание, что панель соединения, по-видимому, находится в tmux 1.3, но не в 1.1. (Не уверен насчет 1.2, извините).

И просто упомянуть, что терминатор (оконечный мультиплексор GUI (на основе GTK)) может выполнять масштабирование. (Ctrl-Shift-X - это связывание клавиш по умолчанию). Конечно, это не делает много вещей, которые делает tmux ...

Начиная с версии 1.8, существует лучшее решение (см. Ответ Тайлера Холиена).

momeara · 12 лет назад · 26

Для тех, кто попробует это перед лучшим ответом, чтобы заставить join-pane работать, выполните: join-pane -t: для предыдущего окна или join-pane -t: 0, чтобы присоединить его обратно к окну 0.

Realistic · 8 лет назад · 0
Hamish Downer ответил 15 лет назад
H 2 499
48

Я знаю, что вы спрашивали об этом некоторое время назад ... но я не переключался с экрана до сегодняшнего дня!

Я столкнулся с той же проблемой, вот как я решил:

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 

Если ваш рабочий процесс похож на мой (то есть вы максимизируете окно, выполняете некоторую работу, а затем сразу же максимизируете его), это должно работать для вас.

(В случае, если неясно, это сохраняет макет в исходном окне ... после максимизации и максимизации, это точно так же.)

Ryan · 14 лет назад · 0
Любая идея, как я мог сопоставить одно и то же нажатие клавиши для обоих? Что-то вроде `bind cm select-window -t tmux-zoom? : `. Но теперь я хочу определить эту функцию где-нибудь еще, для чистоты, и просто `bind cm: max_or_min`. Это возможно? Мне трудно искать. (Я обнаружил, что часто нажимаю неправильную команду и в результате создаю дополнительные пустые окна 'tmux-zoom'.)
chadoh · 14 лет назад · 2

Это сработало для меня, только когда я убрал команду «clear && echo TMUX ZOOM && read» из максимизации.

Epeli · 14 лет назад · 6

Thw maxify работает для меня, но действие минимизации просто убивает исходное окно, оставляя развернутую панель.

paradroid · 14 лет назад · 0

Это вроде сработало, но я теряю свой макет .. почти все!

John Hunt · 14 лет назад · 0

@Ryan Не могли бы вы объяснить, как работает эта команда? Это, безусловно, одна из самых сложных привязок tmux, с которыми мне приходилось сталкиваться, и ее объяснение очень помогло бы стать более сильным пользователем tmux. Спасибо, что поделились своей работой.

Anthony DiSanti · 13 лет назад · 0

Прекрасно работает, но возможно ли расширить текст до полной ширины экрана, когда мы развернем панель? (когда я делаю prefix ++текст имеет ширину панели, когда не максимизируется)

Patryk · 13 лет назад · 0

@Epeli: Ты прав. Без этих команд это работает. В противном случае я потеряю часть моего макета.

Arne · 13 лет назад · 0

Как упоминалось в моем ответе ниже (http://superuser.com/a/591873/20166), я создал надежный скрипт для максимизации панели, который работает с tmux 1.6+

Gregory Pakosz · 13 лет назад · 0
Ryan ответил 14 лет назад
R 481
25

Улучшен зоомер. Теперь можно масштабировать несколько панелей, даже иерархически. После выполнения приведенных ниже действий и перезагрузки вашего сервера tmux (в моем случае - Ctrl-r) вам будет назначен xключ для увеличения и уменьшения области. увеличение достигается путем открытия панели в новом окне, а уменьшение - путем возврата панели к исходному окну. Если вы в конечном итоге разделите окно масштабирования, вы сможете увеличить масштаб панелей окна масштабирования и уменьшить масштаб обратно до окна масштабирования. уменьшение происходит только в том случае, если вы находитесь в окне увеличения, содержащем одну панель.

Добавьте следующее в конец вашего ~/.tmux.conf

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

Добавить следующий файл

~$ 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 

Только один upvote ?! Этот ответ потрясающий! Работает очень хорошо, вводит приятную новую функциональность, которая теперь полностью заменяет вздорную программу «терминатор», которую я использовал.

sillyMunky · 13 лет назад · 4

+1 Это действительно хорошо! На сегодняшний день лучшее рабочее решение, с которым я когда-либо сталкивался! Спасибо!!

armandino · 13 лет назад · 0

Я согласен. Это работает, и это более чем круто. Это экран ++

Brad Parks · 13 лет назад · 0

+1. Это прекрасно работает, но на долю секунды (~ 0,8 с) медленнее, чем ответ @ Ryan выше, по крайней мере, в моей системе. Ничего страшного, но мне интересно, есть ли способ сделать это быстрее

Amelio Vazquez-Reina · 13 лет назад · 0

Действительно красивый. Мне нравятся специальные имена панелей (zoom @…), которые являются полезными напоминаниями, и единственная команда «x» увеличения / уменьшения.

Eric Lebigot · 13 лет назад · 0

Действительно отличный ответ - спасибо, что поделились!

danns87 · 12 лет назад · 0

Это не работает, если у меня есть другое окно в моей сессии tmux. Т.е. окно 1 имеет две панели, а окно 2 имеет 1 панель. Когда я нахожусь в окне 1 и пытаюсь увеличить изображение, оно увеличивает масштаб, создает новое окно с zoom @ window1name @ 2, но не в состоянии уменьшить масштаб. Любое решение для этого?

rdp · 10 лет назад · 0

^ Я понял, что это потому, что скрипт масштабирования выбирает lastwindow на основе имени, из-за которого, если есть другое окно с таким же именем, скрипт завершается ошибкой. В качестве обходного пути я использую номер окна. currentwindownum = окно списка tmux | sed -n -e '/ (активный) / s / ^ \ ([^:] * \):. * / \ 1 / gp'; и в блоке if lastwindow = echo $ currentwindow | cut -f 2 -d '@' ; и в блоке else newwindowname = zoom @ $ currentwindownum @ $ currentwindow @ $ currentpane;

rdp · 10 лет назад · 0

Полезно TX! Кстати, быстрый способ перезапустить это: исходный файл tmux ~ / .tmux.conf

Max Robbertze · 7 лет назад · 0
akshay ответил 14 лет назад
A 253
7

Cntl + b (префикс) + z работает для увеличения определенной панели в tmux 2.1. если вы снова нажмете Cntrl + b + z, панель масштабирования вернется к исходному размеру. Это не создает новую панель.

По сравнению с решением, представленным выше aksay, если вы попытаетесь разделить увеличенную панель, она не позволит разделить и вернется к исходной панели, а вместо этого разделит эту панель.

Опция окна масштабирования, вероятно, более универсальна.

alpha_989 ответил 8 лет назад
A 339
2

Я сделал это, чтобы максимизировать / свернуть с тем же нажатием клавиши:

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 ответил 14 лет назад
J 21
1

Также для меня работа без 'clear && echo TMUX ZOOM && read'. С этим фрагментом каждый раз, когда я минимизирую одну панель из первого окна исчезают.

Slim ответил 14 лет назад
S 11
1

Проблема с resize-pane -Zпереключением заключается в том, что иногда он выполняет операцию обратного масштабирования, чем требуется, особенно при вызове из скрипта или изнутри tmux.conf.

Вот обходной путь:

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 ответил 10 лет назад
T 794
Загрузка ответов…