Teclas de caracteres de mapeamento

3

Eu realmente não entendo o uso de caracteres de controle do bash. Eu entendo coisas simples, como adicionar cores com seqüências de escape, mas não sei como fazer coisas como ligar chaves em .inputrc .

Por exemplo, existe uma maneira de digitar coisas como Shift a e ver como devo representá-lo em .inputrc ?

Assim como o colega faz aqui: link

    
por Prospero 11.12.2012 / 05:26

2 respostas

4

Para referência, aqui está a cópia do archive.org do link (morto) na pergunta do OP . Os códigos mostrados são códigos de estilo emacs lisp. Eu não sei muito sobre eles. Claro, há mais de uma maneira de esfolar um gato, mas o que se segue é provavelmente o mais fácil:

Primeiro, use showkey -a para obter a representação hexadecimal da sua seqüência de teclado. Por exemplo, quando pressiono Ctrl Deslocamento ~ , recebo:

^^       30 0036 0x1e

Então, minha representação hexadecimal é 0x1e . Em seguida, posso adicionar uma linha ao meu ~/.inputrc :

"\x1e": beginning-of-line

E na próxima vez que eu abrir um bash shell (ou qualquer programa que use readline), digitar Ctrl Deslocar ~ moverá meu cursor para o começo da linha. Você também pode fazer algo como:

"\x1b\x5a": "type this text whenever I press alt+shift+z"
    
por 06.11.2013 / 06:04
1

O problema básico colocado na questão do OP é como contornar uma limitação de readline (e bash):

  • chaves especiais, como teclas de função e cursor, geralmente enviam seqüências de escape,
  • as sequências de escape podem (dependendo do terminal e como são inicializadas) ser diferentes.
  • uma diferença principal nas descrições dos terminais é o uso do modo de aplicativo versus modo normal .
  • no modo de aplicativo, uma tecla do cursor pode enviar \eOA (usando o nome do bash para o caractere de escape), enquanto no modo normal ele enviaria \e[A .
  • aplicativos de tela cheia (que é o que o banco de dados de terminal suporta) usam convencionalmente o modo de aplicativo; há exceções, como a descrição do terminal fornecida para o console do Linux, que não.
  • se a descrição do terminal usa o modo de aplicação, as chaves definidas na descrição do terminal não correspondem aos valores vistos no shell (porque o shell não ativa o recurso correspondente smkx ).

readline sort-of presta atenção ao banco de dados de terminal (para que ele possa mover o cursor pela linha que você edita), mas não o suficiente para fazer qualquer coisa útil com informações sobre o modo de aplicativo versus modo normal em associações de teclas. Para trabalhar com readline, você precisa fornecer as sequências de escape codificadas que correspondem a cada terminal que você usa. Claro, você pode ter várias seqüências mapeadas para a mesma função. Felizmente, usos conflitantes da mesma sequência são raros.

Para encontrar portably os caracteres enviados por uma chave especial, use cat -v , ou seja, digite esse comando e pressione as teclas para ver o resultado. Será cada ^[ para cada caractere de escape. Outros caracteres podem ser usados como estão.

A propósito, showkey é específico do Linux e funciona apenas no console .

Leitura adicional:

por 07.11.2016 / 11:17