Tmux não é capaz de distinguir entre insert e shift-insert

2

Inserir quando no xterm, dá ^[[2~ e,

Shift + Inserir ^[[2;1~

Tudo isso é bom até eu iniciar o tmux.

Observe que a variável $TERM permanece a mesma, portanto, esse problema não deve estar relacionado ao terminfo.

Tmux quando no xterm não é capaz de distinguir entre Insert e Shift + Inserir e ambos são lidos como ^[[2~ . Não apenas o xterm, mas o tmux quando iniciado em um console virtual, exibe o mesmo comportamento.

Eu tentei com e sem set -g xterm-keys on no arquivo conf tmux, mas sem sucesso. FWIW Estou executando o tmux 1.8 no XTerm (296) e estas são as substituições no meu .Xresources

XTerm*VT100.Translations: #override \
Shift<Key>Insert: string("3[2;1~") \n\
<Key>Insert: string("3[2~")

Isso é realmente uma dor, porque eu quero mapear Shift + Inserir no vim, mas não consigo fazer isso no tmux.

Curiosamente, quando eu executo a tela GNU no mesmo xterm, ele distingue facilmente entre Insert e Shift + Inserir . Eu estou começando a acreditar que é uma maldade no tmux e não na minha configuração.

Alguém sabe como fazer com que o tmux consiga as chaves de forma transparente, da mesma forma como o xterm o obtém sem mexer no meio ou há algo que estou fazendo errado?

    
por Gaurav 25.08.2013 / 16:08

1 resposta

0

O valor de TERM é irrelevante. Como eu apontei em o tmux não passa corretamente as seqüências ctrl-shift-arrow , tmux tem uma tabela de teclas especiais no estilo xterm que ele conhece. Para este caso, a tabela xterm_keys_table tem uma entrada para inserir:

    { KEYC_IC,      "3[2;_~" },

, o que significa que normalmente converte qualquer uma das variações com um parâmetro em que você vê o sublinhado "_" no mesmo valor:

3[2;2~
3[2;3~
3[2;4~
3[2;5~
3[2;6~
3[2;7~
3[2;8~

A maneira de mudar isso é com a configuração xterm-keys :

xterm-keys [on | off]
If this option is set, tmux will generate xterm(1)-style function key sequences; these have a number included to indicate modifiers such as Shift, Alt or Ctrl. The default is off.

Quando você ativa a opção , tmux transmitirá inalteradas as chaves especiais que correspondem a esse padrão:

set-option -gw xterm-keys on

No entanto, você pode perceber que 1 não é mencionado no código-fonte do tmux. Como tmux lê as chaves (antes de decidir o que fazer com elas), ele salva o modificador. Não é possível distinguir entre um 1 e nenhum modificador. Isso faz sentido porque xterm também não distinguiria os dois.

Em qualquer caso, o xterm normalmente não enviaria qualquer coisa para uma chave de inserção deslocada. Você poderia forçá-lo a fazer isso usando o recurso translations , mas de acordo com o Manual do xterm , um insert deslocado faz com que ele insira o texto selecionado (ou seja, paste ):

Shift <KeyPress> Insert:insert-selection(SELECT, CUT_BUFFER0) \n\
    
por 14.04.2016 / 01:16