reverse list - lsw - lists window titles of X clients to stdout | |
git clone git://git.suckless.org/lsw | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 0ae7a4520d111c776a2dc1136f7a4c6fcebb056d | |
parent 4d98d964ba18e713967c9f1e046540b254071da8 | |
Author: Connor Lane Smith <[email protected]> | |
Date: Sat, 18 Jun 2011 18:47:03 +0100 | |
reverse list | |
Diffstat: | |
M lsw.c | 32 +++++++++++++++--------------… | |
1 file changed, 15 insertions(+), 17 deletions(-) | |
--- | |
diff --git a/lsw.c b/lsw.c | |
@@ -5,8 +5,8 @@ | |
#include <X11/Xlib.h> | |
#include <X11/Xutil.h> | |
-static void getname(Window win, char *buf, size_t size); | |
-static void lsw(Window win); | |
+static const char *getname(Window); | |
+static void lsw(Window); | |
static Atom netwmname; | |
static Display *dpy; | |
@@ -32,37 +32,35 @@ main(int argc, char *argv[]) { | |
void | |
lsw(Window win) { | |
- char buf[BUFSIZ]; | |
- unsigned int i, n; | |
- Window *wins, dw; | |
+ unsigned int n; | |
+ Window *wins, *w, dw; | |
XWindowAttributes wa; | |
if(!XQueryTree(dpy, win, &dw, &dw, &wins, &n)) | |
return; | |
- for(i = 0; i < n; i++) | |
- if(XGetWindowAttributes(dpy, wins[i], &wa) | |
- && !wa.override_redirect && wa.map_state == IsViewable) { | |
- getname(wins[i], buf, sizeof buf); | |
- printf("0x%07lx %s\n", wins[i], buf); | |
- } | |
+ for(w = &wins[n-1]; w >= &wins[0]; w--) | |
+ if(XGetWindowAttributes(dpy, *w, &wa) | |
+ && !wa.override_redirect && wa.map_state == IsViewable) | |
+ printf("0x%07lx %s\n", *w, getname(*w)); | |
XFree(wins); | |
} | |
-void | |
-getname(Window win, char *buf, size_t size) { | |
+const char * | |
+getname(Window win) { | |
+ static char buf[BUFSIZ]; | |
char **list; | |
int n; | |
XTextProperty prop; | |
- buf[0] = '\0'; | |
if(!XGetTextProperty(dpy, win, &prop, netwmname) || prop.nitems == 0) | |
if(!XGetWMName(dpy, win, &prop) || prop.nitems == 0) | |
- return; | |
+ return ""; | |
if(!XmbTextPropertyToTextList(dpy, &prop, &list, &n) && n > 0) { | |
- strncpy(buf, list[0], size); | |
+ strncpy(buf, list[0], sizeof buf); | |
XFreeStringList(list); | |
} | |
else | |
- strncpy(buf, (char *)prop.value, size); | |
+ strncpy(buf, (char *)prop.value, sizeof buf); | |
XFree(prop.value); | |
+ return buf; | |
} |