2

Когда я запускаю Emacs из Tmux, клавиши Home и End не работают (клавиша Home запускает команду поиска, как будто нажата C-s ). Проблема началась, когда я добавил это в свой файл ~/.bashrc :

TERM="xterm"
export TERM

Я где-то читал, что переменная TERM не должна устанавливаться вручную, но это был единственный способ решить проблемы с цветами. Без этой настройки я получил разные цвета в Emacs при запуске напрямую из терминала и разные при запуске из Tmux. Эта опция заставила некоторые ключи не работать в Emacs, когда он запускался из Tmux, поэтому я добавил эту строку в мой ~/.tmux.conf:

set-window-option -g xterm-keys on

Это решило проблему со всеми ключами, кроме Home и End . Есть идеи, как заставить эти ключи работать снова?

1 ответ1

8

Вы можете думать о tmux как о эмуляторе терминала, который предоставляет терминал, использующий протокол на основе screen («внутри»), который он переводит в какой-то другой протокол терминала («снаружи»), обеспечивая при этом такие функции, как панели, окна, сеансы , строка состояния и так далее.

Поскольку tmux всегда предоставляет screen протокол терминала внутри, вы всегда должны использовать screen значение TERM внутри tmux. Кроме того, вы должны использовать соответствующее значение TERM «снаружи», чтобы tmux знал, как общаться с терминалом, в котором он работает (обычно это ваш эмулятор терминала, поэтому используйте любой протокол терминала, который настроен для эмулятора терминала; вариант xterm).

В частности, проблема, с которой вы сталкиваетесь, заключается в том, что screen Home - это ESC [ 1 ~ , а ESC O H в xterm:

% tput -T screen khome | xxd
0000000: 1b5b 317e                                .[1~
% tput -T xterm khome | xxd
0000000: 1b4f 48                                  .OH

Таким образом, когда tmux получает Home от вашего эмулятора терминала (путем декодирования того, что находится в khome TERM, действующего при подключении к сеансу tmux), он отправляет screen -Home ESC [ 1 ~ (потому что tmux всегда использует протокол screen «внутри»), но программа (например, Emacs) ожидает xterm -Home ESC O H (потому что вы сказали ей ожидать значения xterm , установив TERM=xterm).


Я не уверен, какие проблемы с цветом у вас были причиной того, что вы попытались переключиться на TERM=xterm внутри tmux, но вам, вероятно, следует попробовать убедиться, что вы ссылаетесь на запись terminfo, поддерживающую цвет, в ваших значениях TERM как «inside», так и « снаружи » tmux: например, настройте эмулятор терминала для установки TERM на xterm-color , xterm-16color , xterm-88color или xterm-256color в зависимости от ситуации; и используйте set-option -g default-terminal screen-256color в вашей конфигурации tmux (или screen-16color).

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