Como fazer com que as teclas F1-F4 se comportem normalmente no tmux

1

No meu terminal normal, as teclas F1 - F4 produzem ^[[11~^[[12~^[[13~^[[14~ , mas no tmux eu recebo ^[OP^[OQ^[OR^[OS . Eu gostaria que eles se comportassem da mesma forma no tmux, então eu não tenho nada com ligações para programas no tmux. Eu não tenho a opção Xterm R6 do PuTTY.

Estou usando putty-256color como meu tipo de terminal, tanto de putty quanto de tmux, para evitar que outras chaves sejam incompatíveis, embora eu ainda precise remapear minhas teclas de seta.

A configuração é era:

set -g default-terminal "putty-256color"
set -g terminal-overrides "putty*:smkx@:rmkx@:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:kf1=\e[11~:kf2=\e[12~:kf3=\e[13~:kf4=\e[14~"

O resto da minha configuração é um material cosmético não relacionado. Você pode ver que eu tentei remapear as 4 teclas de função de volta ao original, mas não consegui fazer isso funcionar.

Eu sinto que estou sentindo falta de algo fundamental, por que minhas chaves não podem permanecer iguais para todas as chaves dentro e fora do tmux, com exceção do prefixo essas questões não ocorrem?

Editar
Meu problema ainda existe, mas eu estava faltando algo fundamental: default-terminal refere-se ao tipo de terminal dentro tmux, mas terminal-overrides refere-se ao tipo de termo que estou conectando, ou seja, fora do tmux. (Sim, eu me sinto idiota).

Minha configuração agora é assim:

set -g default-terminal "screen-256color"
set -g terminal-overrides "putty*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:kf1=\e[11~:kf2=\e[12~:kf3=\e[13~:kf4=\e[14~:smkx@:rmkx@"

F1 - F4 ainda me dá ^[[11~^[[12~^[[13~^[[14~ fora do tmux, e ^[OP^[OQ^[OR^[OS dentro.

    
por Walf 18.07.2016 / 06:06

2 respostas

2

A página de manual não está clara, mas a leitura do código-fonte ajuda:

    /*
     * This file is rather misleadingly named, it contains the code which takes a
     * key code and translates it into something suitable to be sent to the
     * application running in a pane (similar to input.c does in the other
     * direction with output).
     */

Seu shell é o aplicativo ao qual o comentário se refere.

O terminal-overrides é usado para modificar a descrição do terminal que tmux lê, para permitir que você trabalhe com configurações (do terminal "real" externo) que não correspondem à descrição do terminal:

tmux converte as chaves em seu próprio conjunto de seqüências de escape (correspondentes às de screen , com a exceção de que adiciona a opção xterm-keys ). O comentário na parte superior de window.c resume isso:

 * A pane has two buffers attached, these are filled and emptied by the main
 * server poll loop. Output data is received from pty's in screen format,
 * translated and returned as a series of escape sequences and strings via
 * input_parse (in input.c). Input data is received as key codes and written
 * directly via input_key.

A página de manual diz

default-terminal terminal
Set the default terminal for new windows created in this session - the default value of the TERM environment variable. For tmux to work correctly, this must be set to ‘screen’, ‘tmux’ or a derivative of them.

O motivo da restrição é que não há como personalizar os dados em input-keys.c da maneira que você gostaria.

    
por 19.07.2016 / 02:32
0

O código de teclas de suas teclas de função deve machear o código da sua definição de terminal.

Quero dizer, se sua tecla de função F1 produzir ^ [[11 ~ você deve ter kf1 = \ E [11 ~ (por exemplo, TERM = dtterm) na definição do seu terminal.

Se a sua tecla de função F1 produzir ^ [OP, você deve ter kf1 = \ EOP (por exemplo, TERM = vt220) na definição do seu terminal.

Você pode verificar a atribuição de chave do seu terminal com o comando infocmp .

    
por 30.11.2017 / 14:25