Como transformar a tecla Escape em um modificador que ainda age como Escape quando tocado

2

Eu uso um gerenciador de janelas lado a lado (xMonad no momento), e devido a isso eu preciso de uma chave que atua como a "chave de controle" para o gerenciamento de janelas. Sempre que uso um teclado com as teclas Windows / Super / Mod4, uso a tecla esquerda do Windows como essa tecla, enquanto a tecla direita do Windows atua como Compose / Multi_key.

No entanto, eu também tenho alguns ([muito] antigos) teclados que não possuem teclas do Windows (ou seja, não possuem winkey), e não tenho mais nenhuma chave que eu possa (confortavelmente) use como minha 'chave de controle WM'. No passado, porque xMonad permitia isso, eu usei Control + Alt como minha 'chave de controle WM (combinação)', mas como eu notei depois de algum tempo, isso interfere com (alguns) Emacs (comandos de movimento), então isso não é mais uma opção. Por isso, achei que poderia utilizar minha chave de escape da seguinte maneira:

  • Se eu mantiver Ecs, ele age como Mod4
  • Se eu tocar em Esc, ele age como Escape

AFAIK, segurar o Escape não faz nada normalmente, então achei que seria uma boa ideia fazer assim. Eu tentei alcançar isso usando xmodmap :

clear Mod4 
add Mod4 = Super_L Escape

O que eu esperava: Super_L ainda atua como Super, e Escape agora é um Super adicional. O próximo passo seria usar xcape para recuperar (alguns) o antigo comportamento da tecla Escape.

O que recebi (a saída de xmodmap ):

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):                                                                         

shift       Shift_L (0x32),  Shift_R (0x3e)                                                                                             
lock        Caps_Lock (0x42)                                                                                                            
control     Control_L (0x25),  Control_R (0x69)                                                                                         
mod1        Alt_L (0x40),  Meta_L (0xcd)                                                                                                
mod2        Num_Lock (0x4d),  Hyper_L (0xcf)                                                                                            
mod3        Scroll_Lock (0x4e),  Mode_switch (0xcb)                                                                                     
mod4        Escape (0x9),  y (0x34),  Super_L (0x85),  Super_L (0xce)                                                                   
mod5        ISO_Level3_Shift (0x5c) 

O que eu não entendo:

  • Por que y é repentinamente definido como Mod4?
  • Por que o Escape ainda funciona como Escape (quando pressionado uma vez) e Super (quando pressionado, notei isso quando tentei testar minhas alterações), embora neste momento eu não tivesse usado xcape ainda.

Isso é um bug em xmodmap ou estou usando xmodmap incorretamente? Eu suspeito que seja o último, mas alguém poderia me ajudar com o que estou tentando fazer?

Mais informações (espero que não sejam irrelevantes):

  • Meu sistema operacional atual é o Arch Linux
  • Estou aberto a soluções que usam outros softwares, como xkb , xdotool etc.
  • Atualmente, estou usando o layout alemão QWERTZ (ou seja, ISO, não ANSI) e, às vezes, Neo (que é implementado pela AFAIK como outra variante do de keymap / layout; veja a saída de localectl abaixo)
  • Eu quero que minha solução funcione teclado / hardware independente : Se eu mudar meu teclado, não quero ter que alterar nenhum arquivo de configuração.
  • Antes de qualquer um sugerir isso: Mapear Super para Capslock não é uma opção, já que às vezes uso o layout Neo, que usa Capslock como um de seus modificadores de terceira camada, e também é usado para a quinta e sexta camadas. Isso também significa que eu gostaria que essa solução fosse independente do layout do teclado , para que eu possa alternar facilmente entre, por exemplo, Neo e QWERTZ.
  • Ainda estou aberto a outras sugestões. Minhas únicas demandas: Não / mínima interferência com quaisquer outros programas (por exemplo, Emacs ou Vim), e a chave (combinação) para usar como minha 'chave de controle WM' deve estar localizada no lado esquerdo do meu teclado, porque a maioria dos outros As teclas que uso para controlar meu WM estão no lado direito do teclado (por exemplo, h, j, k, l,…).

Antes de qualquer alteração, ou seja, minha situação atual, xmodmap outputs:

xmodmap:  up to 2 keys per modifier, (keycodes in parentheses):                                                                         

shift       Shift_L (0x32),  Shift_R (0x3e)                                                                                             
lock        Caps_Lock (0x42)                                                                                                            
control     Control_L (0x25),  Control_R (0x69)                                                                                         
mod1        Alt_L (0x40),  Meta_L (0xcd)                                                                                                
mod2        Num_Lock (0x4d),  Hyper_L (0xcf)                                                                                            
mod3        Scroll_Lock (0x4e),  Mode_switch (0xcb)                                                                                     
mod4        Super_L (0x85),  Super_L (0xce)                                                                                             
mod5        ISO_Level3_Shift (0x5c)  

Meu atual .Xmodmap é:

add Mod3 = Scroll_Lock

E localectl diz:

   System Locale: LANG=de_DE.UTF-8
                  LC_COLLATE=C
       VC Keymap: de-latin1-nodeadkeys
      X11 Layout: de,de
       X11 Model: pc105
     X11 Variant: nodeadkeys,neo
     X11 Options: compose:rwin,grp:ctrls_toggle
    
por Lustique 02.04.2018 / 23:57

0 respostas