(グローバル)キーストロークをコマンドにバインドし、キーストロークの完了を妨げないようにすることは可能ですか?私は、バインディングキーソリューションを使用しようとするとここで他の場所に投稿:
# In file: ~/.xbindkeysrc
# Bind key 'q' to running 'some_command'
"some_command"
q
これにより、「q」キーは他の場合のように完了しません。たとえば、文字「q」は端末に印刷されません。
xdotool
次のように「q」キーを押すために使用されます。
# In file: ~/.xbindkeysrc
# Bind key 'q' to running 'some_command'
"some_command && xdotool key q"
q
xdotool
実行された「q」キーがバインディングを介して別の「some_command」を実行するため、ループが発生します。
もっと明確にするために、「q」キーを押していつものように実行したいと思います。しかもいくつかの外部コマンドを実行します。上記の解決策変える一部の外部コマンドを実行する「q」キー押下イベント。問題は、対応する外部コマンドが "q"キーを押してもシミュレートする場合、バインディングが外部コマンドを再開し、無限ループに陥るということです。
答え1
いいですね。私が見つけた解決策を投稿します。しかし、他の人がより良い解決策を持っているかもしれません。答えた後ここ、実行中に押されたすべてのキーを見ることができます
xinput test <keyboad_id>
ターミナルから。その後、そのコマンドの出力を「キーリリース24」(キーボードから「q」を離したときの出力)などの文字列を監視するプログラムにパイプする単純なケースです。その後、プログラムは必要に応じて操作を実行します。この文字列と一致します。
たとえば、「q」キーを押すことをキャプチャして、次のような音を出すことができます。
xinput test <keyboard_id> | while read in ; do
[[ $in = "key press 24" ]] && aplay /usr/share/sounds/purple/alert.wav
done
明らかに、我々は異なる入力を観察し、必要に応じて他のタスクを実行することもできます。