Eu uso um gerenciador de janelas lado a lado (xMonad no momento) e, por isso, preciso de uma chave que atue como a 'tecla de controle' para o gerenciamento de janelas. Sempre que uso um teclado com 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, também tenho alguns teclados ([muito] antigos) que não possuem nenhuma tecla do Windows (ou seja, eles não têm winkey) e não tenho nenhuma tecla restante que possa (confortavelmente) usar como meu 'Chave de controle WM'. No passado, como o xMonad permitia isso, eu usava Control+Alt como minha 'tecla de controle WM (combinação)', mas como notei depois de algum tempo, isso interfere em (alguns) Emacs (comandos de movimento), então isso não é uma opção mais. Portanto, pensei que poderia utilizar minha tecla Escape da seguinte maneira:
- Se eu segurar Ecs, ele age como Mod4
- Se eu tocar em Esc, ele funcionará como Escape
AFAIK, segurar Escape realmente não faz nada normalmente, então achei que seria uma boa ideia fazer assim. Eu então tentei conseguir 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. A próxima etapa seria usar xcape
para obter (alguns) do antigo comportamento da tecla Escape de volta.
O que eu obtive (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 não entendo:
- Por que
y
de repente foi definido como Mod4 também? - 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 a essa altura ainda não tivesse usado
xcape
.
Isso é um bug no xmodmap
, ou estou usando xmodmap
incorretamente? Eu suspeito que seja o último, mas alguém poderia me ajudar a conseguir 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 usem outros softwares, como
xkb
,xdotool
, etc. - Atualmente, estou usando o layout QWERTZ alemão (ou seja, ISO, não ANSI) e, às vezes, Neo (que AFAIK é implementado como outra variante do mapa de
de
teclado/layout; veja a saídalocalectl
abaixo) - Quero que minha solução funcione independente de teclado / hardware : se eu mudar meu teclado, não quero alterar nenhum arquivo de configuração.
- Antes que alguém sugira 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 3ª camada, e também é usado para a 5ª e 6ª camada. Isso também significa que eu gostaria que esta solução fosse independente do layout do teclado , para que eu pudesse alternar facilmente entre, por exemplo, Neo e QWERTZ.
- Ainda estou aberto a outras sugestões. Minhas únicas exigências: Nenhuma/mínima interferência com quaisquer outros programas (por exemplo, Emacs ou Vim), e a tecla (combinação) para usar como minha 'tecla de controle WM' deve estar localizada no lado esquerdo do meu teclado, porque a maioria das outras 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
saídas:
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)
minha corrente .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
Eu uso xcape para isso. Mapeie a chave
Super_L
no Xmodmap e executexcape -e 'Super_L=Escape'
quando o XMonad for iniciado.