Вопрос или проблема
Когда я использую tmux в urxvt, заголовок окна не обновляется. Обычно, когда я использую только urxvt, заголовок окна обновляется каждый раз, когда я меняю каталог, и имеет форму “$USER@$HOST:$PWD”, но когда я запускаю tmux из urxvt, заголовок окна остается таким же, как и был до запуска tmux.
Я пробовал разные настройки terminal-overrides в tmux.conf, как было предложено в некоторых ответах, которые я нашел на Google, но ни одна из них не сработала.
Кто-нибудь смог заставить это работать? Я использую Xmonad как WM, но такая же конфигурация работает, если я запускаю tmux из xterm (заголовок меняется в соответствии с set-titles-string в tmux.conf), так что я думаю, что tmux и urxvt не очень хорошо понимают друг друга.
Версии программного обеспечения:
rxvt-unicode (urxvt) v9.21 – выпущен: 2014-12-31
tmux 1.9
Мои dotfiles:
https://github.com/overlordtm/dotfiles
tmux
обращается к описанию терминала, чтобы узнать, может ли он установить заголовок:
- если в описании терминала есть расширенная возможность ncurses
XT
или - если в описании терминала есть возможности terminfo
fsl
иtsl
(от и до статусной строки).
База данных terminfo ncurses определяет XT
для xterm записей уже некоторое время (с 2010 года); обсуждение критериев для этого представлено в базе данных ncurses в разделе Screen Extensions.
Только в редких случаях записи могут определять другие возможности для urxvt. Если вы не модифицировали запись, она, вероятно, не включает fsl/tsl. Обсуждение в базе данных терминалов объясняет, почему fsl/tsl не рекомендуется:
# Эти строительные блоки позволяют получить доступ к заголовку окна X и имени
# значка как к строке состояния. Существует несколько проблем при их
# использовании в записях:
#
# a) tsl должна иметь параметр для обозначения столбца, на котором нужно
# переключиться на строку состояния.
# b) код "0" для xterm обновляет как заголовок значка, так и заголовок окна.
# Некоторые оконные менеджеры, такие как twm (и возможно оконные
# менеджеры, происходящие от него, такие как tvtwm, ctwm и vtwm)
# отслеживают окна по имени значка. Поэтому не следует изменять имя значка
# при использовании этих оконных менеджеров.
#
# Расширение "TS" предпочтительнее, поскольку не принимает параметр. Однако,
# если вы используете нерасширенную terminfo, "TS" не виден.
xterm+sl|доступ к строке заголовка X и имени значка,
hs,
dsl=\E]0;\007, fsl=^G, tsl=\E]0;, TS=\E]0;,
Ответ или решение
Когда вы работаете с терминальным эмулятором urxvt и используете tmux, возникает проблема с обновлением заголовка окна. Обычная функциональность urxvt позволяет обновлять заголовок окна в соответствии с текущим каталогом, в формате "$USER@$HOST:$PWD", но при запуске tmux из urxvt заголовок окна остается прежним и не обновляется. На основе вашего описания, вы уже пробовали различные настройки terminal-overrides в файле конфигурации tmux, но они не привели к желаемому результату.
Теория
Основная загвоздка в том, как tmux взаимодействует с терминальным эмулятором для установки заголовка окна. Tmux полагается на информацию, которую он получает из описания терминала в terminfo, чтобы определить, может ли он установить заголовок окна. Это взаимодействие определяется с помощью некоторых возможностей, таких как:
- Расширенная возможность ncurses –
XT
- Возможности terminfo –
fsl
иtsl
(от линии состояния и до линии состояния)
В базе данных ncurses для xterm уже давно определена возможность XT
, начиная примерно с 2010 года. Однако, если вы не модифицировали свою запись терминала для urxvt, маловероятно, что там есть fsl
и tsl
. Это связано с тем, что использование этих возможностей в записях терминалов считается несовершенным решением по ряду причин, таких как необходимость параметризации tsl и взаимодействие с оконными менеджерами, которые могут использовать заголовок окна и имя иконки для управления окнами.
Пример
Вы можете настроить обновление заголовка окна в tmux, используя следующие шаги. Предположим, текущая конфигурация urxvt и tmux не изменялась с момента установки:
-
tmux.conf: Попробуйте добавить следующие строчки в ваш файл конфигурации tmux, чтобы убедиться, что используется корректный шаблон для установки заголовка:
set -g set-titles on set -g set-titles-string "#T - $USER@$HOST:$PWD"
-
Записи terminfo: Проверьте, поддерживает ли ваша версия terminfo возможность
XT
. Вы можете попытаться изменить или добавить пользовательскую запись для urxvt в вашей конфигурации terminfo сtic
, чтобы включить поддержкуXT
:tic -xe urxvt /path/to/urxvt.terminfo
Применение
Можно создать собственную запись для urxvt в terminfo, включающую необходимые возможности. Это может потребовать чтения и понимания структуры файлов terminfo и использования утилиты tic
для компиляции вашей собственной версии записи терминала.
-
Создайте резервную копию текущей базы данных terminfo для urxvt:
infocmp > urxvt.info
-
Отредактируйте файл
urxvt.info
, добавив подходящие capability:urxvt|rxvt-unicode, XT,
-
Скомпилируйте измененный файл:
tic -x urxvt.info
Это действие обеспечит, чтобы tmux, при использовании inside urxvt, распознал возможность изменения заголовка окна.
Однако, нужно помнить, что поскольку urxvt и xterm основаны на различных архитектурах, поведение может отличаться, и определенные команды, работавшие в xterm, могут не переноситься напрямую в urxvt без надлежащей адаптации.
В итоге, через настройку terminfo и конфигурации терминала вы сможете достичь автоматического обновления заголовка окна в urxvt при помощи tmux, достигая той же функциональности, которую предоставляют другие терминальные эмуляторы, такие как xterm, но с учетом архитектурных отличий.