Вопрос или проблема
Я ищу способ изменить свою конфигурацию 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
использует ваш терминал, чтобы правильно настроить поддержку гиперссылок.
Вот шаги, которые необходимо выполнить:
-
Определите значение
$TERM
в вашем терминале: Введите в командной строке:echo $TERM
Чтобы, например, узнать, что ваш терминал — это
gnome-256color
илиxterm-256color
. -
Редактируйте файл конфигурации
~/.tmux.conf
: Откройте его в текстовом редакторе и добавьте следующую строку:set -as terminal-features 'your_term*:hyperlinks'
Замените
your_term
на ваш конкретный терминал. Например, если ваш терминалgnome-256color
, строка будет выглядеть так:set -as terminal-features 'gnome*:hyperlinks'
Или вы можете использовать
*
, чтобы включить поддержку гиперссылок для всех терминалов:set -as terminal-features '*:hyperlinks'
-
Перезапустите сессию tmux: После изменения файла конфигурации вам нужно будет разъединиться и вновь подключиться к сессии tmux. Это можно сделать с помощью комбинации клавиш
Ctrl+B
, затемD
, а затем введите:tmux a
-
Проверьте наличие поддержки гиперссылок: После повторного подключения выполните следующую команду:
tmux display -p "#{client_termfeatures}"
Убедитесь, что в выводе появляются
hyperlinks
. Это подтверждает, что функция поддерживается. -
Тестирование: Теперь вы можете запустить вашу команду на Python:
python3 -c "import rich; import pathlib; dpath = pathlib.Path('~').expanduser(); rich.print(f'[link={dpath}]{dpath}[/link]')"
Если все сделано правильно, вы сможете кликнуть по гиперссылке, и она откроет нужную директорию в Nautilus.
Следуя этим шагам, вы сможете сконфигурировать tmux для поддержки гиперссылок по умолчанию, без необходимости каждый раз указывать флаг -T
при запуске сессии. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь задавать их!