tmux: tentando ligar a chave utf8

3

Estou usando o tmux 1.6 com o konsole no Fedora 17 i686.

Eu tenho um teclado azerty (com caracteres acentuados) e quero ton bind 'ù' key.

Eu fiz o seguinte ~ / .tmux.conf:

setw -g utf8 on
bind-key ù split-window -h

Mas, quando eu executo o tmux, eu tenho o seguinte erro:

/home/glines/.tmux.conf: 2: unknown key: ù

Existe uma maneira de vincular essa chave?

Por sua ajuda, Obrigado antecipadamente.

    
por GlinesMome 11.12.2012 / 14:09

1 resposta

6

Infelizmente, o tmux suporta apenas valores únicos de 8 bits nas suas ligações de teclas.

Se você estivesse usando uma codificação de 8 bits (comprimento fixo) (por exemplo, ISO 8859-1, ISO 8859-15 etc.), a ligação deveria ter funcionado. Se você estiver usando UTF-8, no entanto, seu ù (U + 00F9) é codificado como dois bytes (C3 B9), e tmux rejeita como um nome de chave desconhecido (se uma chave for maior que um único byte (depois de remover seus prefixos modificadores), ele é processado como o nome de uma chave especial, por exemplo, F1 , PageUp , KP0 , etc.).

No entanto, se você está desesperado, há um truque grosseiro que você pode tentar:

tmux bind-key -r $(printf '3') display 'c3 prefix binding hack' \; \
     bind-key -r $(printf '1') split-window -h

Isso abusa da funcionalidade de ligação de “repetição” usando-a para permanecer no “modo de prefixo” enquanto basicamente ignora o primeiro byte da codificação UTF-8 de ù (hex C3 B9, octal 303 271).

O primeiro byte de ù (octal 303) está vinculado a um comando fictício e o segundo byte (octal 271) é ligado ao comando de destino. Isso requer que você não tenha configurado a opção tmux repeat-time para zero (para desativar a repetição) e tenha um efeito colateral de deixar tmux em seu modo de repetição para repeat-time milisegundos (o padrão é 500ms) depois de ter digitado Prefixo ù (este efeito colateral só será perceptível se você digitar imediatamente uma tecla de seta (com ou sem Control ou Meta ) após Prefixo ù - as chaves são as únicas ligações padrão que são “repetíveis”).

O exemplo acima usa o comando printf shell para gerar os bytes necessários, mas isso não funcionará no seu .tmux.conf . Se você estava rodando o tmux 1.7, você poderia escrevê-lo assim (no seu .tmux.conf ):

bind-key -r 0xC3 display 'c3 prefix binding hack'
bind-key -r 0xB9 split-window -h

No entanto, essa sintaxe de chave hexadecimal não funciona em tmux 1.6. Então, você precisa organizar os bytes brutos diretamente no arquivo (seu editor de texto pode brigar com você sobre isso, e é fácil cometer um erro) ou usar um shell para ajudá-lo:

run-shell "tmux bind-key -r $(printf '\303') display 'c3 prefix binding hack' \; bind-key -r $(printf '\271') split-window -h"

Observação: run-shell executa seu comando de forma assíncrona, portanto, as ligações podem não estar disponíveis imediatamente após o início da primeira sessão.

    
por 12.12.2012 / 07:51