最大化终端时提高亮度

最大化终端时提高亮度

我希望在最大化或前景化运行 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 手册页

相关内容