static void browseDir(File dir) { class Browser { L origData, data; File dir; JTable table; *(File dir) { browse(dir); } void browse(File path) { dir = path; origData = listDirAwarenessStyle(dir); data = sortedByField("Name", map(func(Map map) { putKeysFirst(renameKeys(map, "dir", "Directory?", "m", "Last modified", "n", "Name", "l", "File Size (Bytes)"), "Name", "Directory?") }, origData)); S title = f2s(dir); bool firstTime = table == null; table = showTable(table, data, title); if (firstTime) { onDoubleClickOrEnter(table, voidfunc(int row) { Map map = getTableLineAsMap(table, row); if (map == null) ret; Map map2 = findByField(origData, "n", map.get("Name")); S name = getString(map, "Name"); if (isTrue(_get(map2, "dir"))) browse(new File(dir, name)); else jShowFile(new File(dir, name)); }); registerKey(getFrame(table), KeyEvent.VK_BACK_SPACE, "Back", r { // TODO: list roots File p = dir.getParentFile(); if (p != null) browse(p); }); } } } new Browser(dir); }