5

Недавно я начал использовать tmux, чтобы действительно улучшить свои терминальные сессии. Единственное, что мне нужно сделать, это подключиться к удаленному серверу, на котором также работает tmux. Тем не менее, я обнаружил, что текущий заголовок окна (обозначенный как #T в tmux) не обновляется во вторичной оболочке tmux. Я хотел бы обновить значение primary-tmux-session из вторичного сеанса.

«#T» явно принимает значение, обработанное PROMPT_COMMAND, который является командой, запускаемой каждый раз, когда приглашение перезагружается. Однако, если я подключаюсь к удаленному серверу, он открывает оболочку на стороне сервера, которая затем открывает tmux и запускает совершенно новую оболочку в рамках сеанса вторичного tmux. Единственный способ, которым я знаю, как обновить заголовок основного окна tmux, - перезагрузить приглашение оболочки на стороне сервера, но это не происходит из вторичного сеанса tmux.

Есть ли какая-нибудь команда для соединения двух сессий, чтобы они разделяли #T? Первоначально я думал, что это может быть выполнимо с опцией переопределения терминала, но он либо не работает, либо я настроил его неправильно.

Любые мысли или предложения будут с благодарностью. Спасибо!

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

1 ответ1

2

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

Во-первых, вам нужно включить опцию «set-title» в вашем файле .tmux.conf. А также соответствующая строка заголовка:

set -g set-titles on
set -g set-titles-string '#T'

Однако, если вы реализуете это, вы сразу заметите, что это не работает. Проблема в том, что эта строка заголовка отправляется только в том случае, если она начинается в варианте xterm (переменная tmux/screen TERM имеет значение "screen *"). Таким образом, при запуске вложенного сеанса tmux вы должны обмануть терминал, сбросив переменную. В следующем примере будет сохранен суффикс TERM (например, «-256color»).

TEMP_TERM=$TERM
TEMP_TERM_SUFFIX=${TERM#$(echo $TERM | cut -f 1 -d'-')}
TERM="xterm${TEMP_TERM_SUFFIX}"

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

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

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