chiark / gitweb /
bin/wakey.zsh: Implement the active-window check from Lange's version.
authorMark Wooding <mdw@distorted.org.uk>
Mon, 20 Apr 2020 12:18:36 +0000 (13:18 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Mon, 20 Apr 2020 12:24:52 +0000 (13:24 +0100)
This is actually rather annoying, because (unlike `xterm'), `pterm''s
announced `WINDOWID' isn't its toplevel, so we have to go digging.  In
theory I should do a recursive walk, but, well, I don't yet.

bin/wakey.zsh

index 41d518a3cfe04687d6506f6080941f7366bf4160..4d8b2e5fb08a5bce16eee7208156874a102029f8 100644 (file)
@@ -7,6 +7,7 @@ zmodload zsh/datetime
 
 __wakey_start=nil __wakey_cmd=
 : ${LONG_RUNNING_COMMAND_TIMEOUT=10}; export LONG_RUNNING_COMMAND_TIMEOUT
+: ${IGNORE_WINDOW_CHECK=nil}; export IGNORE_WINDOW_CHECK
 : ${LONG_RUNNING_IGNORE_LIST=}; export LONG_RUNNING_IGNORE_LIST
 
 __wakey_preexec () {
@@ -22,6 +23,7 @@ __wakey_preexec () {
 
 __wakey_precmd () {
   typeset icon head rc=$? cmd suppress=nil
+  typeset -i 10 win i
   typeset -F now=$EPOCHREALTIME
 
   case $__wakey_start in
@@ -29,6 +31,23 @@ __wakey_precmd () {
     *)
       if (( now - __wakey_start < LONG_RUNNING_COMMAND_TIMEOUT )); then
        suppress=t
+      else
+       case $IGNORE_WINDOW_CHECK in
+         t) ;;
+         *)
+           win=$(xprop -root _NET_ACTIVE_WINDOW | sed 's/^.*# //')
+           if (( win == WINDOWID )); then
+             suppress=t
+           else
+             for i in $(xwininfo -children -id $win |
+                             sed -n '/^ *[0-9]\+ child\(ren\)\?[.:]$/,$ {
+                               /^ *\(0x[0-9a-f]\+\) (.*$/s//\1/p
+                             }')
+             do
+               if (( i == WINDOWID )) then; suppress=t; break; fi
+             done
+           fi
+       esac
       fi
       case $suppress in
        t) ;;