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


399

Скажімо, ви підключаєтесь до віддаленого сервера через ssh за допомогою Terminal.app. Коли ви "tmux приєднуєте" з монітором більшої роздільної здатності від меншого, який ви раніше запускали tmux, він малює точки навколо консолі. Він не відповідає новому розміру вікна. Чи є спосіб перемалювати і очистити вікно? CTRL+ Lабо CTRL- B+ Rне допомагає. Я не міг знайти жодної належної команди на людину.

% tmux -V
tmux 1.5

7
Я хотів би знати, як перемальовувати всі сеанси, не відриваючи жодного з них.
PJ Brunet

3
всі просто відриваються ... ти знайшов спосіб?
Патоші パ ト シ

Для швидкого ознайомлення: learnbatta.com/blog/tmux-working-with-split-terminal-95
anjaneyulubatta505

так, я все ще хотів би знати відповідь на питання: "Чи є спосіб перемалювати і почистити вікно?"
jaydel

Відповіді:


579

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 (і відрізняється від «виходу», оскільки ви хочете від’єднати вікно або вбити сеанс, а не просто відлучатися від сеансу).


Зауважте, що ви можете отримати поточний сеанс за допомогою $(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.
користувач1902689

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.
користувач1902689

462

Ви завжди можете натиснути CTRL- B+ SHIFT-, Dщоб вибрати клієнта, який потрібно відключити від сеансу.

tmux перерахує всі сеанси з їх поточним виміром. Потім ви просто відірветесь від усіх менших розмірів сесій.


6
Уточнення. Це капітал D. Малий '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.


13
Велике спасибі! працювали. Якщо ви робите це в активному сеансі tmux, просто натисніть CTRL + B (або залежно від вашої користувальницької команди tmux), то:detach -a
Iacchus

Або просто виконати tmux detach -aв командному рядку оболонки всередині Tmux.
jdhao

4

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

Щоб виправити це, я дотримувався відповіді тут (я не використовував xterm).

Що просто сказав:

  1. Від'єднатись від сеансу tmux
  2. Запустіть resizeкоманду linux
  3. Повторно приєднайте до сесії tmux

3

Я просто зіткнувся з цією проблемою і натрапив на іншу ситуацію. Хоча це, мабуть, просто єдиноріг, я думав, що викладу це.

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

Так що в OS X я щойно робив Cmd-+на сеансі менших розмірів, і він перекинувся на місце.


Це виправлене дивне розміщення рядка стану 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

вбити іншого.


8
Схоже, це відповідь на головне запитання, незважаючи на те, що кращі відповіді. Я не розумію, чому це привело до забуття.
JoL

так, це єдина відповідь, яка працювала на мене
Ясір Хантуш


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.