module dinu.loader.windows; import dinu; __gshared: class WindowsLoader: ChoiceLoader { override void run(){ /+ auto p = pipeShell("xwininfo -root -children", Redirect.stdout); foreach(line; p.stdout.byLine){ auto r = line.matchFirst(`0x((?:[0-9]|[a-f])+) "([^"]*)"`); if(!r.empty){ add(new CommandWindow([r[1].to!string, r[2].to!string].bangJoin)); } } scope(exit) p.pid.kill; +/ /+ import ws.wm; x11.X.Window root_return, parent_return; x11.X.Window* children; uint nchildren; XGrabServer(wm.displayHandle); XQueryTree(wm.displayHandle, root, &root_return, &parent_return, &children, &nchildren); if(children){ foreach(window; children[0..nchildren]){ if(root == root_return){ auto w = new ws.wm.Window(window); if(!w.getTitle.length) continue; add(new CommandWindow(["%#x".format(w.windowHandle), w.getTitle].bangJoin)); } } XFree(children); } XUngrabServer(wm.displayHandle); +/ } }