!7 module LinuxWindowList > DynObjectTable { bool inZOrder = true; S switchableFields() { ret 'inZOrder; } start { if (!isLinux()) ret with setModuleName("Sorry, wrong OS - LINUX Window List"); 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", r { showImage(shootSystemWindow(selected())) }); } void update { S output = backtick("wmctrl -lpG"); L l = linux_parse_wmctrl_lpG_output(output); if (inZOrder) { LS order = regexpExtractAll("0x[a-f0-9]+", backtick("xprop -root _NET_CLIENT_LIST_STACKING")); final Map map = mapItemsToListIndex(order); l = sortedByCalculatedField(l, func(wmctrl_Entry e) { map.get(e.windowIdentity) }); } setData(l); } }