Ligue as teclas C-i e TAB a comandos diferentes em aplicações de terminal via .inputrc

3

Para o que eu tentei, TAB e C-i in .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 C-i e TAB press. p>

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 pergunta se aplica a 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 essas keybindings preciosos)

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.

Atualmente, estou usando o Guake e, às vezes, o gnome-terminal, como emuladores de terminal.

Depois de seguir o link proposto em um comentário, parece que o emulador de terminal é o elemento da cadeia que transforma TAB keysym do servidor X em C-i e o envia para o shell bash porque não Entenda coisas como TAB , ENTER e irmãos. Portanto, configurar a própria linha de leitura não funcionará como vem depois do emulador de terminal e antes do shell bash. A questão poderia ser então explicada assim: Como configurar meu emulador de terminal para que ele converta TAB e C-i , ENTER e C-m , etc, em diferentes pares de seqüências de caracteres? Talvez faça com que TAB e ENTER enviem uma nova seqüência de escape personalizada, que poderia ser mapeada em .inputrc posteriormente para os comandos originais e, finalmente, poder usar C-i e C-m para outras finalidades. Ou deixe TAB e ENTER e faça C-i e C-m enviar seqüências de escape.

    
por Antoine Gallix 14.05.2015 / 17:31

1 resposta

6

O emulador de terminal traduz eventos como “a tecla Tab foi pressionada” em seqüências de caracteres que o aplicativo em execução no terminal (bash, no seu caso) lê. Consulte Como a entrada de teclado e a saída de texto funcionam? para uma apresentação mais detalhada deste tópico.

Por razões históricas, algumas teclas enviam um caractere que é o mesmo que pressionar Ctrl com outro caractere: Tab = Ctrl + I , Retorna = Ctrl + M , Esc = Ctrl + [. Isso ocorre porque os terminais físicos históricos fizeram isso, portanto, os aplicativos executados nos terminais esperam isso, portanto os terminais fazem isso.

Tanto o Guake como o Gnome-terminal usam a biblioteca VTE , que não permite o mapeamento de acordes chave para sequências de caracteres a serem configuradas. Você tem o mesmo problema que bash - ligações de sequência de chaves erradas com controle + alt + espaço

O Xterm possui atalhos de teclado totalmente configuráveis. Você pode fazer a tecla Tab enviar um caractere de tabulação (que é o padrão), ou fazer com que ela envie a string hello , ou o que você escolher. O Xterm é configurado através dos recursos X . Por exemplo, para fazer a Tab enviar a seqüência de escape \e[t quando pressionada e \e]t quando liberada, coloque isso no seu ~/.Xresources :

XTerm.vt100.translations: #override \
  <Key>Tab: string("3[t") \n\
  <KeyRelease>Tab: string("3]t") \n\

Ou talvez você deixe o Tab enviando o caractere de tabulação e faça Ctrl + eu enviar outra coisa:

XTerm.vt100.translations: #override \
  Ctrl~Meta~Shift<Key>I: string("3[a5i") \n\
  Ctrl~Meta Shift<Key>I: string("3[a6i") \n\

Você pode vincular \e[a5i ao que você quiser no bash e em outros aplicativos de terminal com atalhos de teclado configuráveis.

Observe que, por convenção, as seqüências de escape de vários caracteres começam com o caractere de escape (geralmente representado como \e ou 3 ou \x1b em linguagens de programação e arquivos de configuração); algumas aplicações podem ter problemas com sequências de escape começando com outros personagens, e é claro que você não pode ter um personagem que seja uma seqüência de escape e uma chave própria, a menos que você esteja disposto a aceitar um tempo limite (é assim que funciona aplicações como vi, onde Esc por si só está ligado a alguma funcionalidade). Se você definir suas próprias seqüências de teclas, tome cuidado para não entrar em conflito com aquelas enviadas pelas teclas de função e cursor, que são mais ou menos padronizado de fato .

    
por 15.05.2015 / 03:44