Bind / map Caractere para alt + [alguma tecla]?

4

SO: Ubuntu

Na programação e nos diversos programas de terminal (Screen, Vim) os [], {e} costumam ser muito utilizados. Eu estou usando um teclado norueguês onde estes são colocados de tal forma que eu tenho que esticar meus dedos um pouco demais para o que é confortável. Para facilitar, pensei em tentar fazer com que alt + [some key] seja um desses caracteres. Existe uma maneira que eu possa ligar, digamos alt + æ (letra norueguesa) para '{' todo o sistema?

Btw, tal coisa é chamada de ligação, mapeamento ou outra coisa? Estou ficando um pouco confuso com os termos ...:)

    
por quack quixote 24.12.2009 / 00:52

1 resposta

1

Infelizmente, isso não será possível usando a tecla Alt +. Você vê que digitar Alt + key em uma janela de comando é realmente o mesmo que pressionar Escape seguido da tecla.

No entanto, eu tenho um tipo de solução para você, mas isso requer um pouco de trabalho e pressupõe que você esteja executando o X. Sua tela / vim em um emulador de terminal ainda funcionará com isso.

Eu uso um teclado em espanhol e os símbolos []{} estão nas teclas para à direita do meu dedo mindinho na mão direita, mas é necessário pressionar a tecla AltGr também. Isso significa apertar um pouco demais a minha mão direita. Eu mudei isso usando xmodmap .

Se você adicionar um arquivo chamado .Xmodmap ao seu diretório pessoal , ele será originado toda vez que você fizer login no X Alternativamente, você pode executá-lo a qualquer momento usando xmmodmap ~/.Xmodmap .

Veja um exemplo de como configurar isso. O símbolo da chave direita } está em uma tecla com ç no meu teclado, mas eu tenho que pressionar AltGr junto com a chave para obter a chave direita. Para ver qual código é mapeado para isso, eu uso xmodmap -pk :

$ xmodmap -pk | grep brace
51 0x00e7 (ccedilla) 0x00c7 (Ccedilla) 0x00e7 (ccedilla) \
   0x00c7 (Ccedilla) 0x007d (braceright) 0xfe55 (dead_breve)
# split to prevent scroll, this is all on one line

Isso significa que o código de tecla 51 é mapeado para essas chaves com os vários modificadores. Aqui está o que man xmodmap tem a dizer:

keycode NUMBER = KEYSYMNAME ...
 The list of keysyms is assigned to the indicated keycode (which may be
 specified in decimal, hex or octal and can be determined by running the xev
 program). Up to eight keysyms may be attached to a key, however the last
 four are not used in any major X server implementation. The first keysym is
 used when no modifier key is pressed in conjunction with this key, the
 second with Shift, the third when the Mode_switch key is used with this
 key and the fourth when both the Mode_switch and Shift keys are used.

Então, aqui temos:

  • sem modificador = ccedilla ç
  • shift = Ccedilla Ç
  • Mode_switch = ccedilla
  • Mode_switch e shift = Ccedilla
  • AltGr = braceright}

Experimentando, parece que a quinta entrada é quando o AltGr e a tecla são pressionados. Tanto para documentação, hein? Eu não tenho idéia do que é a tecla Mode_switch, certamente não é Alt, Shift ou Ctrl.

Eu queria alterar essa mais inútil das chaves para ter } por padrão. A entrada no meu .Xmodmap é a seguinte:

keycode 51 = braceright Ccedilla ccedilla Ccedilla braceright dead_breve

Eu nunca escrevo ccedillas (exceto neste post, e aqui escrevi digitando um Ç então em uso guw em Vim para torná-lo em minúsculas!) então eu não sinto falta deles. Outras chaves, como a chave com ] , eram mais complicadas. Essa chave tem *+] escrito nela. Mudei o sinal de adição para outra tecla (removendo a marca de exclamação invertida duplicada ¡ ), por padrão, e * com deslocamento. O comportamento AltGr que deixei intocado.

Eu tenho entradas semelhantes para outros códigos de tecla correspondentes às chaves dos outros codificadores. Às vezes, acho que devo reaprender um layout dos EUA ou do Reino Unido apenas por hackers. Eu sentiria falta das teclas extravagantes nos e-mails.

    
por 01.04.2010 / 18:15