diff options
author | Arun Prakash Jana <engineerarun@gmail.com> | 2020-01-09 23:51:41 +0530 |
---|---|---|
committer | Arun Prakash Jana <engineerarun@gmail.com> | 2020-01-09 23:51:41 +0530 |
commit | 4c0210ce2b50dab849874e86f7d61549a667d138 (patch) | |
tree | 851909b0d54d90a6073c43cd8ac78b65eba2a517 /src | |
parent | 19940efd6489af976c25388fe27cd8b8a09f9526 (diff) | |
download | nnn-4c0210ce2b50dab849874e86f7d61549a667d138.tar.gz |
Do not reload dir on sort order change when filter is on
Diffstat (limited to 'src')
-rw-r--r-- | src/nnn.c | 34 | ||||
-rw-r--r-- | src/nnn.h | 1 |
2 files changed, 17 insertions, 18 deletions
@@ -2158,7 +2158,7 @@ static int filterentries(char *path, char *lastname) goto end; } end: - if (*ch != '\t' && *ch != KEY_UP && *ch != KEY_DOWN) { + if (*ch != 27 && *ch != '\t' && *ch != KEY_UP && *ch != KEY_DOWN && *ch != CONTROL('T')) { g_ctx[cfg.curctx].c_fltr[0] = g_ctx[cfg.curctx].c_fltr[1] = '\0'; move_cursor(cur, 0); } else if (ndents) @@ -3516,7 +3516,7 @@ static void show_help(const char *path) "cS Disk usage%-14cA Apparent du\n" "cz Size%-20ct Time\n" "cv Version%-17cE Extension\n" - "cR Reverse%-0c\n" + "9R ^T Reverse%-0c\n" "1MISC\n" "9! ^] Shell%-17c; x Execute plugin\n" "c] Cmd prompt%-13c^P Pick plugin\n" @@ -4800,6 +4800,9 @@ nochange: case SEL_MTIME: // fallthrough case SEL_VERSION: // fallthrough case SEL_REVERSE: + if (sel >= SEL_FSIZE && sel < SEL_REVERSE && entrycmpfn == &reventrycmp) + entrycmpfn = &entrycmp; + switch (sel) { case SEL_MFLTR: cfg.filtermode ^= 1; @@ -4828,8 +4831,6 @@ nochange: cfg.apparentsz = 0; cfg.blkorder = 0; cfg.extnorder = 0; - if (!cfg.sizeorder) - entrycmpfn = &entrycmp; break; case SEL_ASIZE: cfg.apparentsz ^= 1; @@ -4852,11 +4853,12 @@ nochange: if (cfg.blkorder) { cfg.showdetail = 1; printptr = &printent_long; - } else - entrycmpfn = &entrycmp; + } cfg.mtimeorder = 0; cfg.sizeorder = 0; cfg.extnorder = 0; + clearfilter(); /* Reload directory */ + endselection(); /* We are going to reload dir */ break; case SEL_EXTN: cfg.extnorder ^= 1; @@ -4864,8 +4866,6 @@ nochange: cfg.mtimeorder = 0; cfg.apparentsz = 0; cfg.blkorder = 0; - if (!cfg.extnorder) - entrycmpfn = &entrycmp; break; case SEL_MTIME: cfg.mtimeorder ^= 1; @@ -4873,28 +4873,26 @@ nochange: cfg.apparentsz = 0; cfg.blkorder = 0; cfg.extnorder = 0; - if (!cfg.mtimeorder) - entrycmpfn = &entrycmp; break; case SEL_VERSION: - if (namecmpfn == &xstrverscasecmp) { - namecmpfn = &xstricmp; - entrycmpfn = &entrycmp; - } else - namecmpfn = &xstrverscasecmp; + namecmpfn = (namecmpfn == &xstrverscasecmp) ? &xstricmp : &xstrverscasecmp; break; default: /* SEL_REVERSE */ entrycmpfn = (entrycmpfn == &entrycmp) ? &reventrycmp : &entrycmp; break; } - clearfilter(); - endselection(); + if (cfg.filtermode) + presel = FILTER; /* Save current */ if (ndents) copycurname(); - goto begin; + + /* If there's no filter, reload the directory */ + if (!g_ctx[cfg.curctx].c_fltr[1]) + goto begin; + break; case SEL_STATS: // fallthrough case SEL_CHMODX: if (ndents) { @@ -197,6 +197,7 @@ static struct key bindings[] = { { 'v', SEL_VERSION }, /* Toggle reverse sort */ { 'R', SEL_REVERSE }, + { CONTROL('T'), SEL_REVERSE }, /* Redraw window */ { CONTROL('L'), SEL_REDRAW }, { KEY_F(5), SEL_REDRAW }, |