Вы можете думать о 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
).