mapeamentos separados para TAB e Ci em .inputrc

mapeamentos separados para TAB e Ci em .inputrc

Pelo que tentei, "TAB" e "Ci" em .inputrc parecem significar a mesma coisa, tudo o que eu vinculo a um está vinculado ao outro. Eu sei que originalmente era a mesma coisa e que esse comportamento é meio herdado de antigamente, mas hoje em dia, além dos emuladores de terminal, todas as aplicações X fazem a diferença entre uma prensa Ci e uma prensa TAB.

Então, existe uma maneira de executar um comando de terminal ("completo", por exemplo) quando pressiono a tecla TAB e executar outro comando quando pressiono "Ci"?

(a mesma pergunta se aplica a Cm e ENTER, Cz, Cd e todas essas sequências de controle que eu gostaria de enviar por outros meios que não a ligação original e aplicar meus próprios comandos a essas preciosas combinações de teclas)

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

Responder1

Não há conexão direta entre xmodmape .inputrc.

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

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

Porém, na situação normal, control/Ienvia um tabcaractere porque é assim que quase todos os terminais foram configurados.

Com xkbvocê 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 de teclas. xevé útil para mostrar eventos. Um emulador de terminal rodando em X obtém a série de eventos, que (usando chamadas de biblioteca X) pode ser traduzido em caracteres. A tabé apenas outro personagem nesse caso.

xmodmapO papel de nesse processo seria como uma mudança ad hoc na configuração do teclado X.

Se você estiver usando o xterm, o translationsrecurso oferece muita configurabilidade. Essa é uma característica doKit de ferramentas X, que permite associar várias combinações de teclas às ações integradas do xterm. As combinações de teclas padrão estão listadas nomanual. Você pode substituir ou adicionar essas ligações. Existem vários locais onde você pode definir as informações ( $HOME/.Xdefaultspor exemplo, embora elas possam ficar confusas facilmente). Por exemplo, eu configurei oXAPPLRESDIRvariável de ambiente para apontar para meu diretório de usuário que contém arquivos personalizados de padrões de aplicativos. Em um nomeado XTerm, eu poderia colocar isso para alterar o resultado de ctrl/I:

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

Como a tabchave tem seu próprio símbolo especial, ela não é afetada por esta tradução.

informação relacionada