!7 cmodule PossibleLogFiles > DynObjectTable { bool showTimestamps, enabled; start { dontPersist(); itemToMap = func(File f) -> Map { long time = f.lastModified(); ret litorderedmap( "Log File" := dropPrefix(addSlash(f2s(javaxDataDir())), f.getPath()), "Program" := unnull(snippetTitle_cached(firstSnippetIDFromPath(f))), "Size" := toK(fileSize(f)) + " K", "Changed" := /*howManySecondsAgo(time) + " (" +*/ renderHowLongAgo(time) /* + ")"*/, "Last Line" := showTimestamps ? shorten(lastLineOfFile(f), 150) : simplifyLogLineForDisplay(lastLineOfFile(f))); }; if (!enabled) ret; doEvery(dm_osBooting() ? 30.0 : 0.0, 60.0, r fullUpdate); doEvery(3.0, r updateTable); } afterVisualize { pcall { addRowSorter_desc(table, 3); rowSorter_setComparators(table, 2, alphaNumComparator(), 3, howLongAgo_comparator()); }} void fullUpdate() { setData(findProbableQuotedLogs()); } enhanceFrame { dm_boolFieldMenuItem(f, 'showTimestamps); } }