Usando a tecla Menu como modificador em X

0

Eu gostaria que minha tecla Menu (código 135) atuasse como a tecla de menu de contexto normal quando pressionada sozinha, e também para que ela emulasse minhas teclas multimídia XF86Audio * quando usada como um modificador, por exemplo O menu + PgUp emula XF86AudioRaiseVolume .

Eu estaria bem em definir as combinações de teclas nos Atalhos Globais do KDE, em vez de aplicá-las a todo o X, mas não tenho certeza de como conseguir isso.

    
por MarcinJ 23.10.2018 / 10:32

1 resposta

0

Componentes necessários: xmodmap, xcape, xbindkeys.

xmodmap -e "keycode 135 = Hyper_R"
xmodmap -e "add mod3 = Hyper_R"
xmodmap -e "keycode any = Menu" # this is needed for xcape
xcape -e "Hyper_R=Menu" # for single key press on menu key

~ / .xbindkeysrc:

# map Menu+Pause as Mute
"xdotool keyup Hyper_R keyup Pause key --clearmodifiers XF86AudioMute keydown Hyper_R key Control"
    Mod3 + Pause

# map Menu+PgUp as Volume+

"xdotool keyup Hyper_R keyup Prior key --clearmodifiers XF86AudioMute keydown Hyper_R key Control"
    Mod3 + Prior

# etc. 

O motivo de tal chamada complicada de xdotool é:

  1. keyup Hyper_R keyup Pause - as chaves precisam ser apagadas, caso contrário o XF86AudioMute é enviado enquanto elas são pressionadas e não é reconhecido como pressionamento de tecla solitário
  2. keydown Hyper_R - para que a chave de combinação (Pausa neste caso) possa ser pressionada várias vezes, útil para XF86AudioRaiseVolume por exemplo
  3. key Control - para que o xcape não detecte keydown Hyper_R e subsequente lançamento de chave real, para evitar o acionamento da função Menu

xdotools chamadas podem ser externas a algum script bash, como:

#!/bin/bash

case "$1" in
"up")
    KEY="XF86AudioRaiseVolume"
    SHORT="Prior"
    ;;
"down")
    KEY="XF86AudioLowerVolume"
    SHORT="Next"
    ;;
"mute")
    KEY="XF86AudioMute"
    SHORT="Pause"
    ;;    
"next")
    KEY="XF86AudioNext"
    SHORT="End"
    ;;
"prev")
    KEY="XF86AudioPrev"
    SHORT="Delete"
    ;; 
"playpause")
    KEY="XF86AudioPlay"
    SHORT="Insert"
    ;;        
"stop")
    KEY="XF86AudioStop"
    SHORT="Home"
    ;;            
esac

xdotool keyup Hyper_R keyup $SHORT key $KEY keydown Hyper_R key Control
    
por 24.10.2018 / 12:13