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


239

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

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

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

Ответы:


56

tmux 1.8 и позже

Теперь изначально поддерживается, ответ ниже :

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

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

старый tmux (оригинальный ответ)

Другим вариантом может быть использование с 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 ...


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

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

488

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

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

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

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


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

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

Работает в BunsenLabs из коробки.
Матеуш Пиотровский

классно. это на самом деле работает
Сайем


49

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

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

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

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


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

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

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

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

Такого рода работа сработала, но я теряю свой макет .. почти все!
Джон Хант

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

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

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

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

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

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

16

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

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

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


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"

1

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


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

1

Теперь для этого есть ярлык по умолчанию:

tmux-prefix+z

который обычно:

Ctrlb+z



0

Я нахожусь на Ubuntu 12.04 и также нуждался в этой функции. Начиная с tmux 1.8 существует встроенная поддержка переключения масштабирования с использованием префикса tmux z. Поскольку мы, вероятно, не увидим tmux 1.8 в 12.04, я скомпилировал tmux 1.8 из исходного кода на другом компьютере разработчика, переименовал его в _tmux-1.8 и просто скопировал двоичный файл 1.8 в /usr/bin/_tmux-1.8 и отредактировал .bash_aliases -> alias tmux = '_ tmux-1,8'.

Я не заметил никаких проблем с использованием этого быстрого и грязного метода, и когда / если tmux 1.8 дошел до 12.04, я ничего не сломал.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.