Tentei usar xmodmap
para mapear META_Lpara a MENUchave, mas ela não parece ser aceita bash
como meta-chave. Então, eu estou querendo saber como esses componentes (teclado, X, xterm, bash) se relacionam com cada um deles, em relação às Meta e Super Teclas. Qualquer explicação seria apreciada.
Deixe-me colocar de outra maneira. A página de manual do bash diz, por exemplo, que a função yank-nth-arg está vinculada M-C-ye funciona quando eu pressiono Esc-Control-y. Mas acho isso um pouco complicado. Então, como posso fazer com que o bash aceite outra chave como Meta(como a Menu) para todas as suas ligações padrão?
MENU
chave é notada pelo X? Qual gerenciador de janelas você está usando - alguns deles podem ajudá-lo a redefinir suas chaves.Respostas:
O mapeamento das teclas do teclado para os modificadores, como
Meta
eControl
é tratado pelo servidor X (ou seja, a parte de baixo nível da GUI). Esse mapeamento pode ser manipulado por meio doxmodmap
comando de estilo antigo ou da interface XKB de estilo novo , ou por meio de ferramentas de configuração da GUI que usam um deles sob o capô.Por padrão, na maioria das configurações, a
Meta
chave é a chave Alt. Isso ocorre porque, historicamente, muitas estações de trabalho unix tinham uma chave rotulada Metaonde os PCs tinham uma chave rotulada Alt. Portanto, se você tem uma ligaçãoM-C-y
, pressione Ctrl+ Alt+ Y.Para verificar quais são suas ligações atuais, inicie o
xev
programa em um terminal. Com a janela xev focada, pressione as teclas; você verá uma transcrição dos eventos gerados no terminal.A comunicação entre emuladores de terminal (ou dispositivos de terminal correspondentes a terminais físicos) e aplicativos usa caracteres. Quando você pressiona A, o terminal recebe as informações “
A
chave, sem modificador”, mas o que envia para o aplicativo em execução no terminal é o caracterea
. Quando você pressiona uma tecla de função como Upou F1, não há caracteres correspondentes; o terminal envia uma sequência de caracteres começando com o caractere de escape (byte 27, às vezes escrito\e
ou^[
). Quando um emulador de terminal como o xterm recebe um evento de pressionamento de tecla com oMeta
modificador, ele converte essa tecla em um caractere de escape seguido da função subjacente da tecla, por exemplo\ea
(escape, a minúsculo) quando você pressiona Meta+ A.Qual é a diferença exata entre um 'terminal', um 'shell', um 'tty' e um 'console'? pode ser um fundo útil.
fonte
O evento-chave é gerado pelo servidor X (conforme configurado por
xmodmap
) e é enviado ao seu aplicativo X. Seu gerenciador de janelas pode interceptar isso antes de ser enviado para o xterm. O XTerm, por sua vez, converte o evento em alguns bytes e envia os bytes para o pseudo-tty alocado pelo seu shell, bash.Observe que nem todos os eventos são traduzidos diretamente em bytes pelo XTerm. Por exemplo, as teclas Ctrle shift, por si só, geram eventos do teclado X, mas o XTerm não envia nada para o shell (ou outro aplicativo) em execução nele. Isso também inclui a Metachave por si só, mas não a Menuchave. No entanto, o evento gerado ao pressionar Meta- efará com que o XTerm envie o byte 0xE5 ou a sequência de dois bytes 0x1B 0x65, dependendo da configuração do recurso XTerm.VT100.metaSendsEscape.
fonte
A meta-chave do Bash foi definida originalmente como esta (
lib/readline/ChangeLog
):É assim que é interpretado com ncurses e xterm . A poucos terminais previstos tornando este recurso opcional (esse aspecto não foi generalizada A maioria dos terminais você encontrará o uso comportamento codificado (e não muito interessante) As.. Terminfo documentos de página manual estas capacidades do terminal:
e explica o recurso:
Um recurso diferente, prefixando um caractere de escape em resposta à
Alt
chave, foi incorporado em alguns emuladores de terminal. O Bash (atualmente areadline
biblioteca) documenta esse uso em seu registro de alterações de 2004:Meta é um caso especial de uma tecla modificadora . Como controle shift, você pressiona-o ao mesmo tempo que outra tecla e espera ver algo diferente de pressionar a tecla sozinha. X fornece chaves modificadoras atribuindo um bit ao valor do modificador passado no evento X da chave. As teclas pressionadas podem ser vários eventos X; X fornece funções para combinar esses eventos, mantendo os modificadores.
X também define símbolos para cada uma das teclas que podem aparecer no seu teclado. Ele fornece outros valores (como Unicode), com tratamento especial nas funções que combinam eventos.
Mas "meta" é um caso especial.
Os aplicativos X não têm metachave, exceto por convenção. X não tem uma definição para a meta chave ou o meta modificador. Convencionalmente, os terminais procuram a Alttecla -e / ou um dos modificadores conhecidos por
xmodmap
, por exemplomod2
,. O recurso posterior do xkb complica as coisas (mas não fornece melhorias em relação a esta discussão), fornecendo outra camada de informações para encontrar a Altchave.A convenção, é claro, pode levá-lo apenas até agora, dado que nem
xmodmap
nemxkb
sabemos nada em particular sobre a meta . O xterm, por exemplo, é configurável e nem todos os usuários desejam configurar a meta da mesma maneira. Por exemplo, Altpode não ser a meta-chave pretendida, por exemplo, se for usada notranslation
recurso. Outra tecla pode ser a meta-chave, mas os usuários (especialmente aqueles que usam sequências de escape no bash) podem querer que um caractere de escape seja enviado ao pressionar Alt. Mas lembre-se de que, a menos que esteja configurado como um modificador, nada disso acontece: o xterm não combina eventos sozinho.O xterm possui várias configurações de recursos (documentadas na página de manual ):
altIsNotMeta
ealtSendsEscape
(adicionado em 2007 ).eightBitInput
desde 2006 corresponde ao sentido original do modo meta, e há uma sequência de escape definida para isso, que fornece os recursos do terminalsmm
ermm
(definir / remover meta-modo).eightBitInput
foi modificado em 2003 para levar em consideração o UTF-8, deslocando os valores Unicode decodificados por 128 em vez dos bytes de entrada brutos.metaSendsEscape
data de 1999eightBitInput
é muito mais velho quemetaSendsEscape
. Isso implementou uma escolha entre o modo meta (adicionando o oitavo bit) ou o prefixo de uma chave escapedesde X11R4 (1989). Mas o recurso foi determinado na inicialização: foi verificado durante a inicialização para determinar se a entrada foi configurada para permitir 8 bits ou apenas 7. Depois disso, ela não foi alterada.Algumas pessoas igualam os dois ( oitavo bit e prefixo de escape), referindo-se ao último como modo meta . Dependendo do seu ponto de vista sobre o assunto, a
eightBitInput
configuração de recursos do xterm faz parte da solução para obter uma meta-chave viável.Leitura adicional:
fonte