xfce4でフィルタリングされたウィンドウのリスト(特定のアプリケーションのウィンドウのみ)を切り替えるためのキーボードショートカットを実装しようとしています。不要なウィンドウを非表示にしてから、通常のウィンドウ選択メカニズム(Alt + Tabを使用)を使用して残りのウィンドウからウィンドウを選択することでこれを達成したいと思います。
フィルタリングと非表示がうまく機能します。私のショートカットは、ウィンドウをxdotool
押して選択を開始するふりをするために使用します。alt+tab
しかし、私のスクリプトでウィンドウの選択が完了したかどうかを確認する方法はわかりません。後で選択から除外されたウィンドウを非表示にする必要があるためです。
ウィンドウ選択プロセスがまだアクティブであることを確認するために使用できるプロセス、ウィンドウID、またはその他の項目はありますか?
ベストアンサー1
これがあなたのスクリプトでどのように機能するかはよくわかりませんが、通常、ユーザーはを使用してウィンドウをタップして選択してから離すことをalt知っています。この場合、キーを離すと選択が終了したことを確認できます。tabalt
さまざまな方法でX11キーボードイベントを監視できます。そのうちの1つはを使用することです。たとえば、キーボードからAltをxinput --test-xi2 --root
離すと、次のような結果が表示されます。Meta_R
EVENT type 14 (RawKeyRelease)
device: 3 (9)
detail: 105
...
EVENT type 3 (KeyRelease)
device: 9 (9)
detail: 105
...
modifiers: locked 0 latched 0 base 0x9 effective: 0x8
ここでのポイントは詳細これが鍵のキーコードであり、有効な修飾子、イベント前に押したShiftキーのビットマスクはに対応するため、0x8ですmod1
。したがって、修飾子がゼロまたは詳細が105のKeyReleaseまたはRawKeyRelease(私の場合は中間)を使用してイベントを見つけることができます。テストまたはでxmodmap -pk
キーコードを見つけることができますxmodmap -pm
。
alt以下は、押したり放したりしたときに終了する私にとって効果的でした。
sed -n '
/modifiers:.* 0$/q
/KeyRelease/{n;n;/ 105$/q}
' < <(xinput --test-xi2 --root)
bashプロセス交換の使用に注意してください<()
。パイプを使用すると、スクリプトはパイプが完了するのを待ちます。これはxinput
SIGPIPEが受信された後にイベントに対してのみ実行されます。