Como faço para impor atalhos / macros de teclado personalizados em todo o sistema?

5

Gostaria de poder aplicar os mesmos atalhos de teclado e atalhos personalizados que uso em meus editores de texto em todo o meu ambiente de área de trabalho.

Eu quero basicamente remapear meu teclado em todo o sistema, não apenas em uma janela de aplicativo específica. Ou seja, quando eu remapear alt + j = Down , eu quero pressionar alt + j para ser o mesmo que pressionar a tecla "down", no que diz respeito ao meu ambiente de desktop.

Os atalhos que eu uso são otimizados para manter as mãos em uma posição natural perto da linha inicial em todos os momentos:

# Note how
# system-wide remapping of *single* keys is possible with xmodmap.
Caps Lock           --> Escape
Escape              --> Caps Lock    # Switch caps lock with
                                     # the more useful escape key.
                                     # As far as *all* applications 
                                     # are concerned, pressing caps lock 
                                     # is actually pressing Escape. 

# However, I've not found a good way do the same for multiple keys:
alt + space         --> Right Arrow
alt + Escape        --> Enter
shift + alt + h     --> Backspace
alt + x             --> Delete
shift + alt + l     --> Delete

ctrl + alt          --> Alt           # Default alt functionalities 
                                      # remapped to ctrl + alt

No meu editor de texto, isso fez maravilhas pela minha precisão, velocidade e me ajudou tremendamente com dores no tendão que eu estava tendo, já que minhas mãos agora mal precisam deixar sua posição natural de descanso.

Primeira tentativa quase bem-sucedida de uma solução:

Usando xbindkeys para chamar xvkbd (x teclado virtual). Este é um exemplo do meu .xbindkeysrc :

# h-j-k-l Movement
###################
    "xvkbd -xsendevent -text "\[Down]""
        alt + j

    "xvkbd -xsendevent -text "\[Up]""
        alt + k

    "xvkbd -xsendevent -text "\[Left]""
        alt + h

    "xvkbd -xsendevent -text "\[Right]""
        alt + l

Problemas:

A tecla alt é geralmente a chave padrão para chamar o menu de um aplicativo (por exemplo, alt + F exibe o menu suspenso * F * ile na maioria dos aplicativos).

Além disso, isso parece funcionar com alguns aplicativos, enquanto outros parecem ignorá-lo.

xbindkeys não está realmente fazendo o remapeamento do teclado, é apenas dizer ao xvkbd para enviar um sinal, que às vezes pode criar conflitos com o aplicativo ativo (ao contrário do xmodmap, que realmente remapeia o teclado).

Meta

Um remapeamento em todo o sistema do meu teclado, implementado de uma maneira que é facilmente portável (um arquivo rc ou algo similar).

alt é a chave ideal de escolha, já que ctrl é muito usado em todos os aplicativos, e a tecla mod é ocupada pelo meu gerenciador de janelas (Xmonad).

Minha configuração

Estou executando o Ubuntu 12.10, com o ambiente de desktop Xmonad.

Isso é factível? Eu ainda não sei muito sobre as coisas no nível do sistema operacional e como ele processa as entradas.

    
por o_o_o-- 20.01.2013 / 01:09

1 resposta

1

A única chance que vejo é configurar xkb para mapear suas chaves de acordo. Alguns aplicativos, como jogos, podem ouvir diretamente as teclas reais pressionadas, mas geralmente todo o resto usa apenas o mapeamento xkb.

Existem duas ferramentas diferentes para configurar: setxkbmap e xmodmap . Em teoria, o xmodmap é obsoleto e deve ser substituído pelo setxkbmap, mas às vezes o bom e velho xmodmap é útil também.

Você está limitado aos recursos fornecidos pelo xkb, mas até o xmodmap fornece um conjunto limitado de modificadores. Você pode especificar quatro keyyms para cada chave. Para citar a página man:

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.

Talvez seja uma boa ideia ler mais sobre os detalhes do sistema. Eu sugeriria ler aqui ou aqui para ver o que é possível.

    
por 20.01.2013 / 04:55