![如何在窗口焦点/取消焦点上执行命令?](https://linux22.com/image/81772/%E5%A6%82%E4%BD%95%E5%9C%A8%E7%AA%97%E5%8F%A3%E7%84%A6%E7%82%B9%2F%E5%8F%96%E6%B6%88%E7%84%A6%E7%82%B9%E4%B8%8A%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我想xinput disable bcm5974
在 Gnome 终端(也许还有其他应用程序)获得焦点以及xinput enable bcm5974
失去焦点时执行。
这是因为 libinput 和我的 macbook 的触摸板不是朋友,libinput 的防手掌误触功能几乎不起作用,当在 Vim 中编辑代码并且它意外滚动时,或者在终端上键入命令时,它真的让我发疯。
libinput 1.1.4-1
xf86-input-libinput 0.16.0-1
ArchLinux
答案1
以下命令将为您提供焦点应用程序的名称
xdotool getwindowfocus getwindowname
使用它,您可以编写一个包装脚本来实现您的目标。
例如
while [ true ]
do
FocusApp=`xdotool getwindowfocus getwindowname`
if [ "xTerminal" -eq "x$FocusApp" ]; then
xinput disable bcm5974
else
xinput enable bcm5974
fi
done
上面的代码将永远运行检查焦点应用程序。如果得到预期结果则执行如果条件否则执行否则条件。
您可以微调此脚本以适合您的需求。
答案2
用于xprop
获取我的窗口的类,xdotool
如下所示:
xdotool search --onlyvisible --classname gnome-terminal-server behave %@ focus exec xinput disable bcm5974 &
xdotool search --classname gnome-terminal-server behave %@ blur exec xinput enable bcm5974 &
前面的脚本不稳定,因此基于@SHW答案的以下脚本更好:
#!/bin/sh
[ "$(pgrep -x $(basename $0))" != "$$" ] && exit 1
while [ true ]
do
window=`xdotool getwindowfocus getwindowname`
is_enabled=`xinput --list-props bcm5974 | awk '/Device Enabled/{print $NF}'`
if [ "$window" = "Terminal" -o "$window" = "Guake!" ]; then
if [ "$is_enabled" = "1" ]; then
xinput disable bcm5974
fi
else
if [ "$is_enabled" = "0" ]; then
xinput enable bcm5974
fi
fi
sleep 1
done