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

400

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

% tmux -V
tmux 1.5
Nobu
источник
7
Я хотел бы знать, как перерисовать все сессии, не отключая ни одну из них.
PJ Brunet
3
все просто отделяются ... ты нашел способ?
Патоши パ ト シ
Для быстрого ознакомления: Learnbatta.com/blog/tmux-working-with-split-terminal-95
anjaneyulubatta505
да, я все еще хотел бы знать ответ на вопрос: "Есть ли способ перерисовать и почистить окно?"
jaydel

Ответы:

580

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и переключаете любые другие сеансы, в которых это окно активно, на какое-то другое окно), но в общем случае сценарий сложнее case (и отличается от «exit», так как вы хотите отсоединить окно или убить сеанс, а не просто отсоединяться от сеанса).

Крис Джонсен
источник
Обратите внимание, что вы можете получить текущий сеанс $(tmux display-message -p '#S'), см .: superuser.com/questions/410017/… .
GManNickG
3
Этот ответ получает реквизит для деталей и базы знаний. Но посмотрите ответ Ши Б. Ctrl-b + Dдля простоты использования (и запоминания).
fbicknel
"tmux detach -a" работал для меня; "tmux attach -d" не сделал.
mahemoff
(1) более новые ошибки tmux на set-option... set-remain-on-exit on. Смотрите tmux # 787 . Теперь, используя: tmux set-hook -t "$tmp" window-linked 'set remain-on-exit on.
user1902689
1
(2) на более новых tmux, используйте new-windowпоследний аргумент чего-то вроде, 'echo "Use Prefix + L (i.e. ^B L) to return to session.'; while(true); do read; done"иначе вы не увидите сообщение. (В некоторых случаях вы увидите это, если прокрутите вверх или если терминал выше.) Если вы используете это, вам, вероятно, будет лучше без моего комментария "(1)" или каких-либо настроек remain-on-exit.
user1902689
462

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

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

Ши Б.
источник
6
Разъяснение. Это столица D. Small 'd' отсоединяет клиента.
Рагурам Мурти П
2
CTRL-Bесли это ваш префикс. Мой был CTRL-Aс тех пор, как я перешел с экрана.
Бласкович
1
На самом деле вам нужно отсоединиться от всех меньших по размеру сеансов из одной и той же группы сеансов. Однако CTRL-B + SHIFT-D не показывает, что каждая сессия принадлежит какой группе. Я бы предпочел запустить, tmux list-sessionsкоторая показывает имя сеанса, размер и информацию о группе, а затем tmux kill-session -t <session_name>убить сеансы той же группы.
Чжичан Ю
180

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

tmux detach -a

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

Вы можете использовать псевдоним в вашем. [Bash | zsh] rc

alias takeover="tmux detach -a"

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

gbin
источник
13
Спасибо большое! работал. Если вы делаете это в активном сеансе tmux, просто нажмите CTRL + B (или любую :detach -a
другую
Или просто выполните tmux detach -aв командной строке оболочки внутри Tmux.
jdhao
4

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

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

Который просто сказал:

  1. Отключиться от сеанса tmux
  2. Запустите resizeкоманду Linux
  3. Присоедините к сеансу tmux
pev.hall
источник
3

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

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

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

JESii
источник
Это исправило странное размещение строки состояния tmux в терминале macOS. Когда у меня открыты вкладки терминала, он портит положение строки состояния tmux. Игра с зумом через cmd-+или -исправляет.
Пол
0
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

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

Balamadras
источник
8
Похоже, правильный ответ на заглавный вопрос, хотя есть лучшие ответы. Я не понимаю, почему это было забыто.
JoL
yessss, это единственный ответ, который сработал для меня
Ясир Хантуш
0

Я использую Ctrl- b+, qчто делает номер вспышки для каждой панели, перерисовывая их по пути.

auselen
источник