Por que terminais diferentes possuem valores diferentes para chaves no arquivo .inputrc?

3

Esta questão realmente começou com aqui . Gostaria de saber por que terminais diferentes como rxvt e xterm usam valores diferentes ao mapear combinações de teclas? Enquanto eu estou em rxvt ou xterm como posso descobrir o valor de uma seqüência de teclas e facilmente adicioná-lo ao arquivo .inputrc?

    
por binarycreations 04.12.2011 / 23:34

3 respostas

5

Por razões históricas histéricas . Os fabricantes de hardware nem sempre padronizaram a sequência de controle único comum para a mesma chave e nem os gravadores de software quando os terminais de vidro foram substituídos pelos emuladores de terminal.

Você pode descobrir qual seqüência de controle uma tecla gera em um terminal em particular, digitando Ctrl + V então a chave (na maioria dos shells, ou na entrada de um terminal). comando como cat ou hexdump ). A maioria das chaves gera uma seqüência de controle que consiste no caractere de escape seguido por caracteres imprimíveis; a tecla Ctrl + V faz com que o caractere de escape seja inserido literalmente.

Felizmente, quase não há conflitos entre as seqüências de controle enviadas por vários terminais. A principal exceção é que alguns terminais enviam ^H para Backspace e ^? para Excluir enquanto outros enviam ^? para Backspace e ^[[3~ para Excluir . Muitos terminais têm a opção de alternar entre os dois modos backspace / delete.

    
por 05.12.2011 / 00:50
1

O que Gilles disse. Quanto ao caso específico sendo referido, os terminais VT100 e VT220 (que é o que os emuladores de terminal atuais tentam emular) não tinham códigos de teclas para combinações de teclas de seta + modificadores, portanto, os emuladores introduziram seus próprios.

Não sei exatamente por que xterm e rxvt têm diferentes, mas talvez eles tenham sido apresentados independentemente ao mesmo tempo. Na verdade, o xterm usava originalmente códigos mais curtos do que hoje em dia, mas esses problemas causaram problemas e, por fim, foram alterados.

Hoje em dia, a maioria dos emuladores de terminal, em particular os dos vários ambientes de desktop (incluindo o OS X), tentam emular o xterm. Rxvt-unicode ainda carrega a tradição rxvt embora.

    
por 05.12.2011 / 10:18
1

As chaves de interesse em .inputrc geralmente são caracteres de controle, particularmente strings começando com o caractere escape , geralmente mostrado como ^[ , mas também \e , \E , 3 , etc.

Como encontrar as chaves enviadas pelo seu teclado são bem conhecidas: usando o caractere lnext (literal-next) (geralmente ^V ). Pressione o caractere lnext para suprimir a interpretação do próximo caractere e, em seguida, sua chave especial. Isso permite que o driver do terminal faça eco dos caracteres de forma legível.

Por que eles diferem de um tipo de terminal para outro é menos conhecido. xterm e rxvt são ambos emuladores de terminal, baseados nominalmente na mesma família de terminais de hardware da DEC (Digital Equipment). Havia muitos outros tipos de terminais de hardware produzidos durante as décadas de 1970 e 1980, mas o VT100 e seus descendentes estavam entre os mais populares.

O VT100, geralmente aceito, não possui teclas de função. Ele tinha um teclado com aproximadamente o mesmo tamanho que o teclado numérico do teclado IBM PC. A linha superior foi rotulada PF1 a PF4. A noção usual de uma tecla de função está fora dessa área, em outras áreas do teclado, por exemplo, um banco de teclas numeradas na parte superior ou à esquerda do teclado QWERTY principal.

O VT220 ampliou o design do VT100, adicionando as teclas de função numeradas de F6 a F20. Ele tinha F1-F5, mas eles eram usados para funções locais e geralmente não eram utilizáveis para programação. Os que eram úteis para a programação enviavam sequências de escape atribuídas pelo DEC. Embora haja alguma padronização de seqüências de escape enviadas para um terminal (ECMA-48), nunca houve um padrão correspondente para seqüências enviadas a partir de um terminal. Existe apenas uma convenção e uma sensação de que teclas especiais que são "mesmas" como uma função de host para terminal devem enviar a mesma seqüência de escape. Isso ajudou especialmente se o terminal fosse configurado no modo de eco local.

Quando o xterm foi desenvolvido pela primeira vez no final dos anos 80 ou início dos anos 90, alguém estendeu a noção das teclas de função do VT220, atribuindo sequências de escape semelhantes a F1-F5. A atribuição das chaves F21-F24 veio mais tarde (em 2002 ), usando um esquema similar. / p>

Durante meados dos anos 90, não havia um esquema definido em xterm para chaves modificadas , por exemplo, usando controle , shift , O desenvolvedor de Rxvt optou por estender rxvt usando um esquema usando diferentes caracteres finais nas strings enviadas para chaves especiais. Isso era problemático, já que introduzia chaves que não correspondiam às funções do host para terminal e não necessariamente terminavam com um caractere final convencional ( $ , por exemplo).

Ao estender xterm , escolhi adicionar chaves numeradas, usando shift e control para estender o intervalo de numeração. Isso funcionou bem o suficiente, mas um esquema melhor foi mais tarde sugerido ( patch # 94, 1999 ) por Jeffrey Altman, que é implementado na última série de terminais DEC VTxxx (VT525). Que codifica os modificadores como um número, transmitidos como um parâmetro para a sequência de escape. Alguns anos mais tarde ( patch # 167 em 2002 ), alguém apontou um problema em que eles ser confundido com outros escapes de host para terminal, e eu mudei o esquema para evitar esse problema.

Os desenvolvedores do Konsole e do VTE (Terminal GNOME) copiaram o esquema usado no xterm a partir de 1999, e ficaram lá, enquanto a descrição do terminal para xterm foi atualizada. Isso resultou em vários relatórios de bugs.

Para referência:

por 24.02.2016 / 11:33