Есть ли способ перерисовать окно tmux при переключении меньшего монитора на более крупный?

Предположим, вы подключаетесь к удаленному серверу через ssh с помощью Terminal.app. Когда вы "tmux attach" с монитором большего разрешения от меньшего, который вы ранее запускали tmux, он рисует точки вокруг консоли. Он не соответствует размеру нового окна. Есть ли способ перерисовать и очистить окно? CTRL + L или CTRL - B + R не помогает. Я не мог найти правильную команду для человека.

% tmux -V
tmux 1.5

Ответ 1

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

Самое простое - отсоединить других клиентов от сеансов при подключении:

tmux attach -d

В качестве альтернативы вы можете перенести любые другие клиенты на другой сеанс перед присоединением к сеансу:

takeover() {
    # create a temporary session that displays the "how to go back" message
    tmp='takeover temp session'
    if ! tmux has-session -t "$tmp"; then
        tmux new-session -d -s "$tmp"
        tmux set-option -t "$tmp" set-remain-on-exit on
        tmux new-window -kt "$tmp":0 \
            'echo "Use Prefix + L (i.e. ^B L) to return to session."'
    fi

    # switch any clients attached to the target session to the temp session
    session="$1"
    for client in $(tmux list-clients -t "$session" | cut -f 1 -d :); do
        tmux switch-client -c "$client" -t "$tmp"
    done

    # attach to the target session
    tmux attach -t "$session"
}
takeover 'original session' # or the session number if you do not name sessions

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

Существует также вариант, когда вы только "берете" окно (свяжите окно с новым сеансом, установите aggressive-resize и переключите любые другие сеансы, в которых это окно активно в каком-либо другом окне), но это сложнее script в общем случае (и отличается от "exit", так как вы хотите отключить окно или убить сеанс вместо того, чтобы просто отсоединиться от сеанса).

Ответ 2

Вы всегда можете нажать CTRL - B + D, чтобы выбрать, какого клиента вы хотите отделить от сеанса.

tmux перечислит все сеансы с их текущим измерением. Затем вы просто отсоединяетесь от всех сеансов меньшего размера.

Ответ 3

Более простое решение для последних версий tmux (проверено на 1.9) теперь можно сделать:

tmux detach -a

-a для всех остальных клиентов на этом сеансе, кроме текущего

Вы можете использовать его в своем. [ bash | zsh] rc

alias takeover="tmux detach -a"

Рабочий процесс. Обычно вы можете подключиться к своему сеансу, и если вас беспокоит другой сеанс, который заставил уменьшить размер окна tmux, вы можете просто вызвать takeover.

Ответ 4

Я просто столкнулся с этой проблемой и наткнулся на другую ситуацию. Хотя это, вероятно, просто единорог, я думал, что я его выложу.

У меня был один сеанс, который был меньше, и я заметил, что размер шрифта был другим: меньшая сессия имела меньшие шрифты. По-видимому, по какой-то причине я изменил размер шрифта.

Итак, в OS X я просто сделал Cmd-+ на сеансе меньшего размера, и он снова встал на место.

Ответ 5

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

Чтобы исправить это, я последовал за ответом здесь (я не использовал xterm).

Что просто сказал:

  • Отсоединить от сеанса tmux
  • Запустить resize команду linux
  • Повторное подключение к сеансу tmux

Ответ 6

ps ax | grep tmux
17685 pts/22   S+     0:00 tmux a -t 13g2
17920 pts/11   S+     0:00 tmux a -t 13g2
18065 pts/19   S+     0:00 grep tmux

убейте другого.