Você pode pensar em tmux como um emulador de terminal que fornece um terminal que usa o protocolo screen
(no "interior") que ele traduz em algum outro protocolo de terminal (no " fora ”), fornecendo recursos como painéis, janelas, sessões, uma barra de status, etc.
Como o tmux sempre fornece um protocolo terminal em screen
no “interior”, você deve sempre usar um valor TERM em screen
dentro de tmux . Além disso, você deve usar um valor TERM adequado “outside” para que tmux saiba como falar com o terminal em que está sendo executado (geralmente este é seu emulador de terminal, portanto use qualquer terminal em seu emulador de terminal está configurado para fornecer, geralmente uma variante de xterm
).
Especificamente, o problema que você está enfrentando é que screen
Início é ESC [ 1 ~
, enquanto é ESC O H
in xterm
:
% tput -T screen khome | xxd
0000000: 1b5b 317e .[1~
% tput -T xterm khome | xxd
0000000: 1b4f 48 .OH
Então, quando tmux recebe um Início do seu emulador de terminal (decodificando o que está em khome
do TERM em vigor quando você está conectado ao tmux session), ele envia o screen
-Home ESC [ 1 ~
(porque tmux sempre usa um protocolo screen
no "interior"), mas o programa (por exemplo, Emacs) está esperando o xterm
-Home ESC O H
(porque você disse que esperava os valores xterm
definindo TERM=xterm
).
Não tenho certeza de quais problemas de cor que você teve que fizeram com que você tentasse mudar para TERM=xterm
dentro de tmux , mas provavelmente você deveria tentar se referir a uma entrada terminfo com suporte a cores em seus valores TERM tanto "dentro" como "fora" tmux : por exemplo configure seu emulador de terminal para definir TERM como xterm-color
, xterm-16color
, xterm-88color
ou xterm-256color
conforme apropriado; e use set-option -g default-terminal screen-256color
na sua configuração do tmux (ou screen-16color
).