As teclas Home e End no Emacs não funcionam quando executadas no Tmux

2

Quando executo o Emacs a partir do Tmux, as chaves Home e End não funcionam (a tecla Home executa o comando Pesquisar como se C-s tivesse sido pressionado). O problema começou quando adicionei isso no meu arquivo ~/.bashrc :

TERM="xterm"
export TERM

Eu li em algum lugar que a variável TERM não deve ser configurada manualmente, mas essa foi a única maneira de resolver problemas com cores. Sem essa configuração eu tenho cores diferentes no Emacs quando rodando direto do terminal e diferente quando rodando a partir do Tmux. Esta opção fez com que algumas das chaves não funcionassem no Emacs quando era executado a partir do Tmux, então eu adicionei esta linha ao meu ~/.tmux.conf :

set-window-option -g xterm-keys on

Este problema resolvido com todas as chaves, exceto Home e End . Alguma idéia de como fazer essas chaves funcionarem de novo?

    
por Jan Stolarek 04.11.2012 / 13:58

1 resposta

8

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 ).

    
por 05.11.2012 / 04:24