Как указать терминальные функции tmux в моем конфиге так же, как с помощью “-T”?

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

Я ищу способ изменить свою конфигурацию tmux так, чтобы функция «гиперссылки» была включена по умолчанию.

Мотивация

Я пытаюсь настроить конфигурацию tmux для работы с гиперссылками. Я работаю на Ubuntu 24.04, и в стандартном терминале я могу выполнить:

 python3 -c "if 1:
     import rich
     import pathlib
     dpath = pathlib.Path('~').expanduser()
     rich.print(f'[link={dpath}]{dpath}[/link]')
 "

(вышеуказанное требует Python3 и pip install rich)

Это выведет ссылку, по которой я могу нажать Control+Клик, чтобы открыть окно nautilus к этому каталогу. Однако по умолчанию, если я открываю сеанс tmux и ввожу ту же команду, она будет выведена с красивыми цветами, но не будет кликабельной.

Я немного поискал на эту тему и нашел ветку:

гиперссылка на файл не работает в tmux

В которой говорится, что поддержка гиперссылок была добавлена в версии 3.4, которая у меня установлена.

Частичное решение

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

tmux -T hyperlinks

И запускаю приведенный выше код, он напечатает ссылку, по которой я могу кликнуть! Кроме того, есть хороший тест, чтобы проверить, включена ли функция. Если я выполню:

tmux display -p "#{client_termfeatures}"

Строка, разделенная запятыми, будет содержать «гиперссылки», если эта функция активна. Замечательно, это показывает прототип, что функция существует и может работать. Теперь мне нужно включить ее в моей конфигурации, но это вызывает у меня больше проблем, чем я ожидал.

Проблема

Следующее, что я хочу сделать, это включить эту функцию по умолчанию, не указывая опцию -T в командной строке. Я могу сделать это с помощью псевдонима, но я предпочел бы настроить это в конфигурации tmux, что кажется более чистым способом. Однако у меня возникают трудности с ее настройкой.

Я немного поискал в FAQ по tmux, где приводится пример добавления чего-то в функции терминала:

set -as terminal-features ",gnome*:RGB"

Поэтому первым делом я попробовал добавить ссылку

set -as terminal-features "hyperlinks"

Однако, когда я открываю новую сессию и пытаюсь использовать tmux display -p "#{client_termfeatures}" или просто пытаюсь вывести гиперссылку с помощью rich, это не работает. Я попробовал выполнить tmux source ~/.tmux.conf, чтобы убедиться, что конфигурация была перезагружена, и я также попытался вручную выполнить команду с помощью ctrl+b :<command>. Я также пробовал варианты с флагом -g, но ни один из них не привел к работающей гиперссылке.

Главный вопрос:

Как правильно добавить «гиперссылки» в массив terminal-features в моем файле ~/.tmux.conf?

В оболочке внутри tmux выполните

tmux show-option -s terminal-features

В моем случае вышеуказанная команда выводит:

terminal-features[0] xterm*:clipboard:ccolour:cstyle:focus:title
terminal-features[1] screen*:title
terminal-features[2] rxvt*:ignorefkeys

Первый элемент означает, что если мой $TERM при запуске клиента tmux совпадает с xterm* (например, это xterm-256color), то внутри tmux команда tmux display -p "#{client_termfeatures}" выведет строку, разделенную запятыми, содержащую (но не ограничиваясь) элементы clipboard,ccolour,cstyle,focus и title.

Если я хочу добавить hyperlinks в этот массив, мне нужно выполнить

tmux set -as terminal-features 'xterm*:hyperlinks'

Затем я должен отсоединить клиента (prefixD, где prefix по умолчанию Ctrl+B) и присоединиться вновь (tmux a). Тогда tmux display -p "#{client_termfeatures}" будет включать hyperlinks.

В ~/.tmux.conf строчка будет выглядеть так:

set -as terminal-features 'xterm*:hyperlinks'

На практике этот метод не дает мне поддержки гиперссылок, потому что моя конфигурация без tmux все равно не поддерживает гиперссылки. Я понимаю, что у вас это настроено, так что метод должен сработать для вас. Но вам нужно настроить строчку под $TERM, который ваш клиент tmux увидит. Например, если ваш $TERM вне tmux — это gnome-256color, то используйте gnome* вместо xterm*.

Вы даже можете использовать * вместо xterm*, чтобы tmux включал hyperlinks для любого значения $TERM, которое видит клиент. Это будет как использование -T hyperlinks без условий. Я не уверен, что может пойти не так, если вы включаете эту функцию в tmux, когда терминал клиента tmux ее не поддерживает. Настроить так, чтобы hyperlinks включались только тогда, когда они действительно поддерживаются, выглядит более аккуратно.

Ответ или решение

Чтобы включить поддержку гиперссылок в tmux по умолчанию, можно использовать файл конфигурации ~/.tmux.conf, добавив необходимые параметры в массив terminal-features. Ваша задача состоит в том, чтобы знать, какое значение $TERM использует ваш терминал, чтобы правильно настроить поддержку гиперссылок.

Вот шаги, которые необходимо выполнить:

  1. Определите значение $TERM в вашем терминале: Введите в командной строке:

    echo $TERM

    Чтобы, например, узнать, что ваш терминал — это gnome-256color или xterm-256color.

  2. Редактируйте файл конфигурации ~/.tmux.conf: Откройте его в текстовом редакторе и добавьте следующую строку:

    set -as terminal-features 'your_term*:hyperlinks'

    Замените your_term на ваш конкретный терминал. Например, если ваш терминал gnome-256color, строка будет выглядеть так:

    set -as terminal-features 'gnome*:hyperlinks'

    Или вы можете использовать *, чтобы включить поддержку гиперссылок для всех терминалов:

    set -as terminal-features '*:hyperlinks'
  3. Перезапустите сессию tmux: После изменения файла конфигурации вам нужно будет разъединиться и вновь подключиться к сессии tmux. Это можно сделать с помощью комбинации клавиш Ctrl+B, затем D, а затем введите:

    tmux a
  4. Проверьте наличие поддержки гиперссылок: После повторного подключения выполните следующую команду:

    tmux display -p "#{client_termfeatures}"

    Убедитесь, что в выводе появляются hyperlinks. Это подтверждает, что функция поддерживается.

  5. Тестирование: Теперь вы можете запустить вашу команду на Python:

    python3 -c "import rich; import pathlib; dpath = pathlib.Path('~').expanduser(); rich.print(f'[link={dpath}]{dpath}[/link]')"

    Если все сделано правильно, вы сможете кликнуть по гиперссылке, и она откроет нужную директорию в Nautilus.

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

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

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