!7 module LinuxWindowList > DynObjectTable { bool inZOrder = true; S switchableFields() { ret 'inZOrder; } start { if (!isLinux()) ret with setModuleName("Sorry, wrong OS - LINUX Window List"); dontPersist(); set fieldsInOrder; defaultAction = voidfunc(wmctrl_Entry e) { wmctrl_activateWindow(e) }; doEvery(0.0, 10.0, r updateMe); } afterVisualize { popupMenuItem_top("Close window", r { wmctrl_closeWindow(selected()) }); popupMenuItem_top("Switch to window", defaultAction); popupMenuItem_top("Shoot window", rThread { showImage(shootSystemWindow(selected())) }); } void update { S output = backtick("wmctrl -lpG"); L l = linux_parse_wmctrl_lpG_output(output); if (inZOrder) { LS order = map last7chars(regexpExtractAll("0x[a-f0-9]+", backtick("xprop -root _NET_CLIENT_LIST_STACKING"))); final Map map = mapItemsToListIndex(order); l = sortedByCalculatedFieldDesc(l, func(wmctrl_Entry e) { map.get(last7chars(e.windowIdentity)) }); } setData(l); } }