mapeamentos separados para TAB e C-i em .inputrc

0

Para o que eu tentei, "TAB" e "C-i" em .inputrc parece significar a mesma coisa, o que eu ligar a um está ligado ao outro. Eu sei que originalmente, era a mesma coisa e que esse comportamento é herdado dos velhos tempos, mas hoje em dia, além dos emuladores de terminal, todos os aplicativos X fazem a diferença entre uma impressora C-i e uma TAB.

Então existe uma maneira de executar um comando de terminal ("completo" por exemplo) quando eu pressiono a tecla TAB e executo outro comando quando pressiono "C-i"?

(a mesma questão se aplica para C-m e ENTER, C-z, C-d e todas essas seqüências de controle que eu gostaria de enviar por outros meios além de sua ligação original e aplicar meus próprios comandos a esses preciosos atalhos de teclado)

E, a propósito, se você pudesse explicar um pouco o processo de um pressionamento de tecla para uma interpretação de shell que me ajudaria a entender. Por agora entendi que os eventos do teclado são traduzidos pelo Xmodmap, depois pelo .inputrc e que o resultado é interpretado pelo shell ou algo assim.

    
por Antoine Gallix 14.05.2015 / 17:32

1 resposta

0

Não há conexão direta entre xmodmap e .inputrc .

Existem algumas maneiras, dependendo do emulador de terminal, para modificar as chaves enviadas pelo terminal. Alguns desses incluem

  • modificando a configuração do teclado X ( xkb )
  • modificando os códigos de teclas enviados para um determinado evento ( xmodmap )
  • coisas específicas do terminal, como o recurso translations usado pelo xterm.

No entanto, na situação normal, control / I envia um caractere guia porque é assim que quase todos os terminais foram configurados.

Com xkb , você pode (em princípio) alterar o que o teclado faz. Por sua vez, os aplicativos X detectam eventos de pressionamento e liberação de teclas e os traduzem em símbolos-chave. xev é útil para mostrar eventos. Um emulador de terminal rodando em X recebe a série de eventos, que (usando chamadas de biblioteca X) podem se traduzir em caracteres. Um tab é apenas outro caractere nesse caso.

A função de

xmodmap nesse processo seria uma alteração ad hoc na configuração do teclado X.

Se você estiver usando xterm , o recurso translations fornece muita configurabilidade. Essa é uma característica do X Toolkit , que permite que você associe várias combinações de teclas com o build do xterm em ações. Os atalhos de teclado padrão estão listados no manual . Você pode substituir ou adicionar a essas ligações. Existem vários locais onde você pode definir as informações ( $HOME/.Xdefaults , por exemplo, embora possa ficar desordenado facilmente). Por exemplo, eu defino a variável de ambiente XAPPLRESDIR para apontar para o meu usuário diretório que contém arquivos customizados de padrões de aplicativos. Em um chamado XTerm , eu poderia colocar isso para alterar o resultado de ctrl / I :

*VT100*translations:    #override \n\ 
    Ctrl ~Shift<Key>I:string("??")

Como a tecla tab possui seu próprio símbolo de tecla especial, ela não é afetada por esta tradução.

    
por 14.05.2015 / 23:08