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