Recentemente, comecei a usar o tmux (já era usuário de tela) e estou adorando, exceto por um pequeno problema. Eu uso o emacs na minha sessão do tmux e estou acostumado a usar as teclas de seta Shift para mover entre as janelas do emacs (não as janelas do tmux). Quando executadas no tmux, essas ligações parecem parar de funcionar completamente (é como se elas não se registrassem no emacs). Se eu sair do tmux e apenas executar o emacs no meu shell, eles funcionarão bem.
Estou usando o iTerm2, ssh'd em uma caixa Linux, executando o tmux / emacs lá. Eu tenho as ligações das teclas Shift-seta configuradas da seguinte maneira no meu .emacs:
(global-set-key "\M-[1;2A" 'windmove-up)
(global-set-key "\M-[1;2B" 'windmove-down)
(global-set-key "\M-[1;2C" 'windmove-right)
(global-set-key "\M-[1;2D" 'windmove-left)
Quando não estou executando o tmux, posso confirmar que essas são as seqüências de caracteres corretas para as combinações de teclas com seta de deslocamento, fazendo Cq no emacs e pressionando a sequência de teclas. No tmux, mesmo isso não funciona porque parece não ver nenhuma entrada do pressionamento de tecla shift-arrow (apenas fica no prompt Cq).
Olhando para as ligações de teclas do tmux, acho que nada está vinculado às teclas de seta Shift e, mesmo que fosse, elas só seriam registradas após inserir o prefixo (que é vinculado a Co no meu caso).
Alguma idéia de como fazer com que as teclas com seta para Shift funcionem novamente no tmux?
Respostas:
Primeiro, verifique se o seu TERM está correto em cada local:
xterm
-algo (por exemploxterm-256color
) dentro do shell local em execução na janela do iTerm2xterm
-algo dentro do seu shell após o SSHing no sistema LinuxDeve ser o mesmo que você está usando localmente no iTerm2 , pois o SSH deve passá-lo para o lado remoto (e, o mais importante, o lado remoto não deve substituir cegamente o valor em um arquivo de inicialização do shell).
screen
-algo (por exemploscreen-256color
) dentro do seu shell executando o tmux no sistema LinuxVocê sempre deve usar um
screen
TERM baseado no tmux .Ter um
xterm
TERM imediatamente fora do tmux permitirá que o tmux reconheça as teclas de seta modificadas, mas não as passará a menos que você também tenha axterm-keys
opção da janela ativada. Coloque isso no seu~/.tmux.conf
sistema Linux:As seqüências para as teclas deslocadas agora devem chegar ao Emacs , executando dentro do tmux , através de uma conexão SSH, dentro de uma janela do iTerm2 .
fonte
export XTERM=xterm-256color
(estou escrevendo isso porque não sabia o que "seu TERM" na resposta significa, estava procurando um comentário explicando que ... não havia nenhum e agora existe um.)Primeiro você deve habilitar
xterm-keys
na sua configuração tmux. Então coloque o seguinte em~/.tmux.conf
Mas isso quebrará outras combinações de teclas. Para corrigi-los, coloque o seguinte em sua configuração
~/.emacs
ou~/.emacs.d/init.el
Também tenho minha solução no archlinux wiki
fonte
O FAQ do tmux costumava conter a seguinte entrada :
Abri o problema # 1349 do tmux para solicitar a restauração da entrada de Perguntas frequentes.
fonte
Em geral, problemas como esse acontecem devido a uma diferença entre o que o emulador de terminal envia e o que o aplicativo cliente espera.
Emuladores de terminal diferentes têm diferentes graus de personalização, portanto, é necessário familiarizar-se com os ajustes de emulação de um determinado.
Os aplicativos clientes dependem do valor
$TERM
usado para pesquisar os recursos do terminal (emulador) no banco de dadosterminfo
(outermcap
).No seu caso, as ligações do emacs usam sequências explícitas
$TERM
e o terminfo é irrelevante: é esperado um emulador de terminal específico - como você já descobriu, um emuladorxterm
compatível.fonte