Hi.  Thanks go also to LokiChaos on #suckless.  With this little patch[1] you
can now use this little script[2] (and others presumably) to manipulate windows
via xdotool in dwm.  The little script conjurs up a list of available windows
(via xprop and xdotool), pipes it into dmenu, which then passes it off to an 
xdotool windowactivate.  I find this useful when I have oodles of zathuras 
open.  
But the general usefulness of getting _NET_ACTIVE_WINDOW implemented is, well, 
obvious.

[1] 

diff -r 072c62ed10f2 dwm.c
--- a/dwm.c     Fri Jan 07 16:05:22 2011 +0000
+++ b/dwm.c     Tue Apr 12 11:03:54 2011 -0400
@@ -58,7 +58,7 @@
 enum { CurNormal, CurResize, CurMove, CurLast };        /* cursor */
 enum { ColBorder, ColFG, ColBG, ColLast };              /* color */
 enum { NetSupported, NetWMName, NetWMState,
-       NetWMFullscreen, NetLast };                      /* EWMH atoms */
+       NetWMFullscreen, NetActiveWindow, NetLast };     /* EWMH atoms */
 enum { WMProtocols, WMDelete, WMState, WMLast };        /* default atoms */
 enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
        ClkClientWin, ClkRootWin, ClkLast };             /* clicks */
@@ -1310,6 +1310,10 @@
                        arrange(c->mon);
                }
        }
+       if(c && cme->message_type == netatom[NetActiveWindow]) {
+               focus(c);
+               restack(selmon);
+       }
 }
 
 void
@@ -1517,6 +1521,7 @@
        wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
        wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
        wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False);
+       netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", 
False);
        netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
        netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
        netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);

[2] 

#!/bin/sh

foo=$(for i in $(xdotool search --onlyvisible ".*"); do
        win_id="${i}"
        win_class=$(xprop -id ${win_id} WM_CLASS | cut -d'"' -f2)
    win_title=$(xprop -id ${win_id} _NET_WM_NAME | cut -d'"' -f2)
        echo "${win_title}|${win_class}|${win_id}"
done | dmenu -l 5 | cut -d'|' -f3)
xdotool windowactivate ${foo}








-- 
sic dicit magister P
PhD Candidate
Collaborative Programme in Ancient and Medieval Philosophy
University of Toronto
http://individual.utoronto.ca/peterjh

Reply via email to