Urxvt и tmux – установка заголовка окна

Вопрос или проблема

Когда я использую 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 не изменялась с момента установки:

  1. tmux.conf: Попробуйте добавить следующие строчки в ваш файл конфигурации tmux, чтобы убедиться, что используется корректный шаблон для установки заголовка:

    set -g set-titles on
    set -g set-titles-string "#T - $USER@$HOST:$PWD"
  2. Записи terminfo: Проверьте, поддерживает ли ваша версия terminfo возможность XT. Вы можете попытаться изменить или добавить пользовательскую запись для urxvt в вашей конфигурации terminfo с tic, чтобы включить поддержку XT:

    tic -xe urxvt /path/to/urxvt.terminfo

Применение

Можно создать собственную запись для urxvt в terminfo, включающую необходимые возможности. Это может потребовать чтения и понимания структуры файлов terminfo и использования утилиты tic для компиляции вашей собственной версии записи терминала.

  1. Создайте резервную копию текущей базы данных terminfo для urxvt:

    infocmp > urxvt.info
  2. Отредактируйте файл urxvt.info, добавив подходящие capability:

    urxvt|rxvt-unicode,
      XT,
  3. Скомпилируйте измененный файл:

    tic -x urxvt.info

Это действие обеспечит, чтобы tmux, при использовании inside urxvt, распознал возможность изменения заголовка окна.

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

В итоге, через настройку terminfo и конфигурации терминала вы сможете достичь автоматического обновления заголовка окна в urxvt при помощи tmux, достигая той же функциональности, которую предоставляют другие терминальные эмуляторы, такие как xterm, но с учетом архитектурных отличий.

Оцените материал
Добавить комментарий

Капча загружается...