我希望在最大化或前景化运行 Vim 的终端窗口时提高亮度。当我最小化或背景处理该过程时,我想将亮度重置为正常。
使用 Vim 的黑色背景时,我通常需要比 Chrome 的白色背景更高的亮度,所以我希望它自动发生。
我用它来以编程方式降低亮度:
$ echo 1 | sudo tee /sys/class/backlight/acpi_video0/brightness
如果窗口是运行 Vim 的终端,我可以以某种方式挂钩 GUI 窗口的最小化/最大化事件并作为脚本运行上面的内容吗?
答案1
你可以这样做:
xdotool search --onlyvisible . behave %@ focus getwindowgeometry |
while read x id && read x && read x; do
eval "$(xprop -notype -id "$id" \
8s '=$0\n' WM_CLASS \
32a '="$0+"\n' _NET_WM_STATE)"
[ "$WM_CLASS" = gnome-terminal ] &&
[ "$_NET_WM_STATE" = "_NET_WM_STATE_MAXIMIZED_VERT, _NET_WM_STATE_MAXIMIZED_HORZ" ]
rc=$?
if [ "$rc" != "$last_rc" ]; then
if [ "$rc" -eq 0 ]; then
echo "set high brightness"
else
echo "set low brightness"
fi
last_rc=$rc
fi
done
将 替换echo ...
为实际设置亮度的命令。
这个想法是用来xdotool
在窗口焦点更改时收到通知。然后,我们使用xprop
报告的窗口 IDxdotool
来查看当前具有焦点的窗口是否gnome-terminal
最大化。
但是,它不适用于xdotool
启动后连接的窗口。
更可靠的方法可能是循环检查当前活动窗口:
while :; do
# wait for a focus event:
sh -c 'exec xdotool search --onlyvisible . behave %@ focus exec kill "$$"' 2> /dev/null
id=$(xdotool getactivewindow)
eval "$(xprop -notype -id "$id" \
8s '=$0\n' WM_CLASS \
32a '="$0+"\n' _NET_WM_STATE)"
[ "$WM_CLASS" = gnome-terminal ] &&
[ "$_NET_WM_STATE" = "_NET_WM_STATE_MAXIMIZED_VERT, _NET_WM_STATE_MAXIMIZED_HORZ" ]
rc=$?
if [ "$rc" != "$last_rc" ]; then
if [ "$rc" -eq 0 ]; then
echo "set high brightness"
else
echo "set low brightness"
fi
last_rc=$rc
fi
done
您可以通过以下方式了解更多详情xdotool 手册页。