我想使用 Autokeye在名为“xyz”的程序中打开和关闭按键。因此,如果我按下e,程序会认为我按住了e。我再按e一下,它以为我松开了。请问你如何做到这一点?
或者有其他程序可以做到这一点吗?
额外问题:如何使用 Ubuntu 程序(例如 fvwm2、xorg、xmodmap、xkb、xrdb)执行此操作?
答案1
我不熟悉自动键,但这看起来可行。使用Keyboard.press_key
发送按键事件并Keyboard.release_key
发送按键释放事件。要记住要发送哪一个,您可以使用Store.set_value
和Store.get_value
。
或者,您可以使用xdo工具将输入事件注入到窗口中并xprop
将数据附加到窗口。运行以下 shell 命令(未经测试)将备用按下/释放事件发送到活动窗口。
#!/bin/sh
window_id=$(xdotool getactivewindow)
case $(xprop -id "$window_id" -f key_e_is_down 32c -notype key_e_is_down) in
*1) key_command=keydown; new_state=0;;
*) key_command=keyup; new_state=1;;
esac
xdotool "$key_command" "e"
xprop -id "$window_id" -f key_e_is_down 32c -set key_e_is_down "$new_state"
如果您想将此操作绑定到某个键,但要使该键仅在一个窗口中处于活动状态,我不确定自动键是否可以帮助您。最简单的方法是通过窗口管理器,但大多数窗口管理器都无法做到这一点。我用锯鳐作为我的窗口管理器,无需任何外部工具即可完成此操作。
(define (toggle-e w)
(interactive "%W")
(let ((down (window-get w 'key-e-is-down)))
(synthesize-event (if down "Release+e" "e") w)
(window-put w 'key-e-is-down (not down))))
(define xyz-window-map (make-keymap))
(bind-keys xyz-window-map "e" toggle-e)
(add-window-matcher 'WM_CLASS "^Xyz/" `((keymap . ,xyz-window-map)))