
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 xmodmap
e .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
translations
recurso usado pelo xterm.
Porém, na situação normal, control/Ienvia um tabcaractere 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 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.
xmodmap
O papel de nesse processo seria como uma mudança ad hoc na configuração do teclado X.
Se você estiver usando o xterm
, o translations
recurso 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/.Xdefaults
por exemplo, embora elas possam ficar confusas facilmente). Por exemplo, eu configurei oXAPPLRESDIR
variá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.