我希望能够在切换到特定应用程序时执行命令。特别是,我希望能够在切换到终端时更改 xmodmap,然后在切换到终端(例如转到 Firefox)时再次更改它。
我想也许可以检测到应用程序何时进入前台,然后运行 xmodmap?
我该如何执行此操作(尤其是在 Ubuntu 19.04、X11 上)?
我发现了一些事情:
X 服务器可以生成一个visibilityNotify 事件。不确定如何使用它以及它是否符合我的要求?
“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 也会发送事件,因此输出并不像人们希望的那样干净。然而,这样就可以判断新窗口是否已获得焦点。