uint selmode : 1; /* Set when selecting files */
uint showdetail : 1; /* Clear to show fewer file info */
uint ctxactive : 1; /* Context active or not */
- uint reserved1 : 3;
+ uint reverse : 1; /* Reverse sort */
+ uint version : 1; /* Version sort */
+ uint reserved1 : 1;
/* The following settings are global */
uint curctx : 3; /* Current context number */
uint picker : 1; /* Write selection to user-specified file */
0, /* selmode */
0, /* showdetail */
1, /* ctxactive */
+ 0, /* reverse */
+ 0, /* version */
0, /* reserved1 */
0, /* curctx */
0, /* picker */
static size_t mkpath(const char *dir, const char *name, char *out);
static bool plugscript(const char *plugin, uchar flags);
static char *load_input(int fd, const char *path);
+static int set_sort_flags(int r);
/* Functions */
*lastdir = g_ctx[cfg.curctx].c_last;
*lastname = g_ctx[cfg.curctx].c_name;
printptr = cfg.showdetail ? &printent_long : &printent;
+ set_sort_flags('\0'); /* Set correct sort options */
status = TRUE;
END:
static int set_sort_flags(int r)
{
+ bool session = !r;
+
+ /* Set the correct input in case of a session load */
+ if (session) {
+ if (cfg.apparentsz) {
+ cfg.apparentsz = 0;
+ r = 'a';
+ } else if (cfg.blkorder) {
+ cfg.blkorder = 0;
+ r = 'd';
+ }
+
+ if (cfg.version)
+ namecmpfn = &xstrverscasecmp;
+
+ if (cfg.reverse)
+ entrycmpfn = &reventrycmp;
+ }
+
switch (r) {
case 'a': /* Apparent du */
cfg.apparentsz ^= 1;
cfg.timeorder = 0;
cfg.sizeorder = 0;
cfg.extnorder = 0;
- entrycmpfn = &entrycmp;
+ if (!session) {
+ cfg.reverse = 0;
+ entrycmpfn = &entrycmp;
+ }
endselection(); /* We are going to reload dir */
break;
case 'c':
cfg.apparentsz = 0;
cfg.blkorder = 0;
cfg.extnorder = 0;
+ cfg.reverse = 0;
+ cfg.version = 0;
entrycmpfn = &entrycmp;
namecmpfn = &xstricmp;
break;
cfg.timeorder = 0;
cfg.apparentsz = 0;
cfg.blkorder = 0;
+ cfg.reverse = 0;
entrycmpfn = &entrycmp;
break;
case 'r': /* Reverse sort */
- entrycmpfn = (entrycmpfn == &entrycmp) ? &reventrycmp : &entrycmp;
+ cfg.reverse ^= 1;
+ entrycmpfn = cfg.reverse ? &reventrycmp : &entrycmp;
break;
case 's': /* File size */
cfg.sizeorder ^= 1;
cfg.apparentsz = 0;
cfg.blkorder = 0;
cfg.extnorder = 0;
+ cfg.reverse = 0;
entrycmpfn = &entrycmp;
break;
case 't': /* Time */
cfg.apparentsz = 0;
cfg.blkorder = 0;
cfg.extnorder = 0;
+ cfg.reverse = 0;
entrycmpfn = &entrycmp;
break;
case 'v': /* Version */
- namecmpfn = (namecmpfn == &xstrverscasecmp) ? &xstricmp : &xstrverscasecmp;
+ cfg.version ^= 1;
+ namecmpfn = cfg.version ? &xstrverscasecmp : &xstricmp;
cfg.timeorder = 0;
cfg.sizeorder = 0;
cfg.apparentsz = 0;