Como configurar zkbd (ligações de teclado zsh) em um servidor?

2

Tenho o zsh shell em um servidor Linux e conecto-me ao servidor a partir de sessões de tela em diferentes computadores. Estou tentando fazer com que as teclas de controle, como home e end, funcionem corretamente.

Como o zsh não usa a biblioteca GNU Readline, eu preciso cuidar do mapeamento das seqüências do terminal para os comandos zsh. Primeiro eu uso o zkbd para descobrir as sequências enviadas por cada toque de tecla, e depois mapeio-as para os comandos corretos. Isto é o que eu tenho em .zshrc:

autoload zkbd
[ ! -f "${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE}" ] && zkbd
source "${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE}"

[ -n "${key[Backspace]}" ] && bindkey "${key[Backspace]}" backward-delete-char
[ -n "${key[Home]}" ] && bindkey "${key[Home]}" beginning-of-line
...

Agora tenho dois problemas:

  1. Normalmente, quando me conecto ao servidor, o número de sequência na variável de ambiente $ DISPLAY obtém um novo valor. Consequentemente, o zkbd é executado e eu tenho que passar pressionando todas as teclas de controle. É necessário ter as sequências de teclas dependentes do $ DISPLAY?
  2. Quando eu me conecto ao servidor a partir de uma sessão de tela, a variável de ambiente $ TERM será definida como screen . Ainda assim, dependendo do computador do qual estou me conectando, as sequências de algumas teclas diferem (por exemplo, F1 é ^[[11~ ou ^[OP ). Como devo nomear os arquivos zkbd para distinguir entre os diferentes mapeamentos?
por Seppo Enarvi 09.09.2015 / 15:57

1 resposta

2

Em vez de simplesmente usar TERM=screen , o programa de tela tem um recurso que você pode usar para definir valores diferentes de TERM . Isso pressupõe que você instalou um banco de dados completo de terminais ncurses e usa uma tela TERM fora que corresponde ao terminal real.

Para um dado TERM , se houver uma entrada "screen. $ TERM" correspondente no banco de dados do terminal, a tela usará essa . O banco de dados do terminal ncurses tem vários deles, para corresponder ao comportamento real dos terminais que definem TERM=xterm , por exemplo, screen.Eterm , screen.gnome , screen.konsole , screen.konsole-256color , screen.linux , screen.mlterm , screen.mlterm-256color , screen.mrxvt , screen.putty , screen.putty-256color , screen.rxvt , screen.teraterm , screen.vte , screen.vte-256color , screen.xterm-256color , screen.xterm-new , screen.xterm-r6 , screen.xterm-xfree86 .

Depois de configurar as coisas para usar o banco de dados do terminal, não há necessidade de arquivos de configuração especiais / mágicos. Além disso, como você diria ao servidor qual arquivo usar? A informação real está no seu cliente, onde você sabe qual emulador de terminal você está realmente usando.

zsh permite usar essas informações diretamente com a matriz $terminfo .

Leitura adicional:

por 15.08.2016 / 02:14