Browse Source

Retain order on session load

master
Arun Prakash Jana 4 years ago
parent
commit
b481b23280
No known key found for this signature in database GPG Key ID: A75979F35C080412
1 changed files with 39 additions and 4 deletions
  1. +39
    -4
      src/nnn.c

+ 39
- 4
src/nnn.c View File

@@ -258,7 +258,9 @@ typedef struct {
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 */
@@ -325,6 +327,8 @@ static settings cfg = {
0, /* selmode */
0, /* showdetail */
1, /* ctxactive */
0, /* reverse */
0, /* version */
0, /* reserved1 */
0, /* curctx */
0, /* picker */
@@ -708,6 +712,7 @@ static inline bool getutil(char *util);
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 */

@@ -3563,6 +3568,7 @@ static bool load_session(const char *sname, char **path, char **lastdir, char **
*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:
@@ -4937,6 +4943,25 @@ static int handle_context_switch(enum action sel)

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;
@@ -4963,7 +4988,10 @@ static int set_sort_flags(int r)
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':
@@ -4972,6 +5000,8 @@ static int set_sort_flags(int r)
cfg.apparentsz = 0;
cfg.blkorder = 0;
cfg.extnorder = 0;
cfg.reverse = 0;
cfg.version = 0;
entrycmpfn = &entrycmp;
namecmpfn = &xstricmp;
break;
@@ -4981,10 +5011,12 @@ static int set_sort_flags(int r)
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;
@@ -4992,6 +5024,7 @@ static int set_sort_flags(int r)
cfg.apparentsz = 0;
cfg.blkorder = 0;
cfg.extnorder = 0;
cfg.reverse = 0;
entrycmpfn = &entrycmp;
break;
case 't': /* Time */
@@ -5000,10 +5033,12 @@ static int set_sort_flags(int r)
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;


||||||
x
 
000:0
Loading…
Cancel
Save