アプリケーションがフォアグラウンドに到達するとコマンドを実行する(Ubuntu 19.04、X11)

アプリケーションがフォアグラウンドに到達するとコマンドを実行する(Ubuntu 19.04、X11)

特定のアプリケーションに切り替えるときにコマンドを実行できるようにしたいです。特に、ターミナルに切り替えるときにxmodmapを変更し、ターミナルに切り替えるとき(Firefoxに行くなど)、もう一度変更できるようにしたいです。

私はアプリが前景に出てくる時点を検出し、xmodmapを実行することが可能だと思いました。

どうすればいいですか(特にUbuntu 19.04、X11の場合)?

私はいくつかの事実を見つけました:

X サーバーは visibleNotify イベントを生成できます。どのように使用するのか、私の要件に合うのかよくわかりませんか?

"xdotool search --class Terminalerate %@ focus getwindowpid" はフォーカスの変更を通知します。しかし、getactivewindowは分割エラーを引き起こすので、xwininfoなどを使用して実際にウィンドウIDを取得することはできません。似たようなアイデアがありますか?

答え1

次のPerlスクリプトは、「入力フォーカス」を使用してウィンドウを追跡します。

#!/usr/bin/perl
open F,"xdotool search --class '.' behave %@ focus getwindowpid |";
while (<F>) {
    ($f = `xdotool getwindowfocus`) =~s/\n//;
    my $hex = sprintf("0x%X", $f);
    $hex = lc($hex);
    $hex =~ s/0x//;
    print `wmctrl -lGpx | grep '$hex'`;
};

xdotoolはウィンドウがフォーカスを失ったときにもイベントを送信するので、出力が望むほどきれいではありません。ただし、これにより、新しいウィンドウがフォーカスを取得したかどうかがわかります。

関連情報