eAutokeyを使用して、「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
ウィンドウにデータを追加します。次のシェルコマンド(テストされていない)を実行して、アクティブウィンドウに代替のプレス/ハンドリリースイベントを送信します。
#!/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"
この操作をキーにバインドし、そのキーを1つのウィンドウでのみ有効にしたい場合は、自動キーが役に立つかどうかはわかりません。最も簡単な方法はウィンドウマネージャを使用することですが、ほとんどのウィンドウマネージャはこれを行いません。私は使うトップサメ私のウィンドウマネージャは、外部ツールなしでこれを行うことができます。
(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)))