215

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

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

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

11 ответов11

445

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

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

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

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

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

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

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

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
9

Cntl + b (префикс) + z работает для увеличения определенной панели в tmux 2.1. если вы снова нажмете Cntrl + 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

Проблема с переключателем 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

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

0

Для тех, кто не может использовать tmux 1.8 или предпочитает более развернутое состояние, я опубликовал скрипт tmux, который работает с tmux 1.6+.

Надеюсь, это поможет.

0

Для более старых версий tmux это единственное решение, которое я нашел:

https://github.com/jipumarino/tmux-zoom

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, я ничего не сломал.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .