在 X 中使用菜单键作为修饰符

在 X 中使用菜单键作为修饰符

我希望我的Menu键(键码 135)在单独按下时既充当常规上下文菜单键,又在用作修饰符时模拟我的 XF86Audio* 多媒体键,例如Menu+PgUp将模拟XF86AudioRaiseVolume.

我可以在 KDE 的全局快捷键中设置组合键,而不是将它们应用于所有 X,但我不确定如何实现。

答案1

所需组件: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. 

如此复杂的调用的原因xdotool是:

  1. keyup Hyper_R keyup Pause- 需要清除按键,否则 XF86AudioMute 会在按下时发送,并且不会被识别为单独的按键
  2. keydown Hyper_R- 这样组合键(在本例中为“暂停”)可以按多次,XF86AudioRaiseVolume例如有用
  3. key Control- 这样xcape就不会检测到假的keydown Hyper_R和随后的真钥匙释放,以避免触发Menu功能

xdotools调用可以外部到某些 bash 脚本,例如:

#!/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

相关内容