- Directories first
- Sort numeric names in numeric order
- Case-insensitive alphabetic content listing instead of upper case first
+ - Key `-` to jump to last visited directory
- Roll over at the first and last entries of a directory (with Up/Down keys)
- Removed navigation restriction with relative paths (and let permissions handle it)
- Sort entries by file size (largest to smallest)
| `Right`, `Enter`, `l`, `^M` | Open file or enter dir |
| `Left`, `Backspace`, `h`, `^H` | Go to parent dir |
| `~` | Jump to HOME dir |
+| `-` | Jump to last visited dir |
| `/`, `&` | Filter dir contents |
| `c` | Show change dir prompt |
| `d` | Toggle detail view |
SEL_END,
SEL_CD,
SEL_CDHOME,
+ SEL_LAST,
SEL_TOGGLEDOT,
SEL_DETAIL,
SEL_STATS,
[Right], [Enter], l, ^M Open file or enter dir\n\
[Left], [Backspace], h, ^H Go to parent dir\n\
~ Jump to HOME dir\n\
+ - Jump to last visited dir\n\
/, & Filter dir contents\n\
c Show change dir prompt\n\
d Toggle detail view\n\
browse(char *ipath, char *ifilter)
{
static char path[PATH_MAX], oldpath[PATH_MAX], newpath[PATH_MAX];
+ static char lastdir[PATH_MAX];
static char fltr[LINE_MAX];
char *bin, *dir, *tmp, *run, *env;
struct stat sb;
enum action sel = SEL_RUNARG + 1;
xstrlcpy(path, ipath, sizeof(path));
+ xstrlcpy(lastdir, ipath, sizeof(lastdir));
xstrlcpy(fltr, ifilter, sizeof(fltr));
oldpath[0] = '\0';
newpath[0] = '\0';
}
/* Save history */
xstrlcpy(oldpath, path, sizeof(oldpath));
+
+ /* Save last working directory */
+ xstrlcpy(lastdir, path, sizeof(lastdir));
+
xstrlcpy(path, dir, sizeof(path));
/* Reset filter */
xstrlcpy(fltr, ifilter, sizeof(fltr));
printwarn();
goto nochange;
}
+
+ /* Save last working directory */
+ xstrlcpy(lastdir, path, sizeof(lastdir));
+
xstrlcpy(path, newpath, sizeof(path));
/* Reset filter */
xstrlcpy(fltr, ifilter, sizeof(fltr));
"%s%s", home, tmp + 1);
else
mkpath(path, tmp, newpath, sizeof(newpath));
- } else
+ } else if (tmp[0] == '-' && tmp[1] == '\0')
+ xstrlcpy(newpath, lastdir, sizeof(newpath));
+ else
mkpath(path, tmp, newpath, sizeof(newpath));
if (canopendir(newpath) == 0) {
printwarn();
goto nochange;
}
+
+ /* Save last working directory */
+ xstrlcpy(lastdir, path, sizeof(lastdir));
+
xstrlcpy(path, newpath, sizeof(path));
/* Reset filter */
xstrlcpy(fltr, ifilter, sizeof(fltr));
printwarn();
goto nochange;
}
+
+ /* Save last working directory */
+ xstrlcpy(lastdir, path, sizeof(lastdir));
+
xstrlcpy(path, tmp, sizeof(path));
/* Reset filter */
xstrlcpy(fltr, ifilter, sizeof(fltr));
DPRINTF_S(path);
goto begin;
+ case SEL_LAST:
+ xstrlcpy(newpath, lastdir, sizeof(newpath));
+ xstrlcpy(lastdir, path, sizeof(lastdir));
+ xstrlcpy(path, newpath, sizeof(path));
+ DPRINTF_S(path);
+ goto begin;
case SEL_TOGGLEDOT:
showhidden ^= 1;
initfilter(showhidden, &ifilter);