]> Sergey Matveev's repositories - nnn.git/commitdiff
Quicker re-sort
authorArun Prakash Jana <engineerarun@gmail.com>
Mon, 30 Mar 2020 21:02:13 +0000 (02:32 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Mon, 30 Mar 2020 22:14:52 +0000 (03:44 +0530)
src/nnn.c

index c4f0fcca3232387c55aa393a26f3e2e5845dff0e..942d9506323c4567054672b1d61e2b09a2ec00f0 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -692,6 +692,7 @@ static haiku_nm_h haiku_hnd;
 #endif /* __GNUC__ */
 
 /* Forward declarations */
+static size_t xstrlcpy(char *dest, const char *src, size_t n);
 static void redraw(char *path);
 static int spawn(char *file, char *arg1, char *arg2, const char *dir, uchar flag);
 static int (*nftw_fn)(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf);
@@ -797,8 +798,11 @@ static void printmsg(const char *msg)
 static void printwait(const char *msg, int *presel)
 {
        printmsg(msg);
-       if (presel)
+       if (presel) {
                *presel = MSGWAIT;
+               if (ndents)
+                       xstrlcpy(g_ctx[cfg.curctx].c_name, dents[cur].name, NAME_MAX + 1);
+       }
 }
 
 /* Kill curses and display error before exiting */
@@ -2307,8 +2311,8 @@ static int nextsel(int presel)
                //DPRINTF_D(c);
                //DPRINTF_S(keyname(c));
 
-               if (c == ERR)
-                       c = 0;
+               if (c == ERR && presel == MSGWAIT)
+                       c = (cfg.filtermode || filterset()) ? FILTER : CONTROL('L');
                else if (c == FILTER || c == CONTROL('L'))
                        /* Clear previous filter when manually starting */
                        clearfilter();
@@ -5238,11 +5242,8 @@ nochange:
                }
 
                sel = nextsel(presel);
-               if (presel) {
-                       if (presel == MSGWAIT)
-                               statusbar(path);
+               if (presel)
                        presel = 0;
-               }
 
                switch (sel) {
 #ifndef NOMOUSE
@@ -5657,17 +5658,18 @@ nochange:
                                }
                        }
 
-                       /* Save current */
-                       if (ndents)
-                               copycurname();
-
                        if (cfg.filtermode || filterset())
                                presel = FILTER;
 
-                       if (r == 'd' || r == 'a')
-                               goto begin;
+                       if (ndents) {
+                               copycurname();
 
-                       qsort(dents, ndents, sizeof(*dents), entrycmpfn);
+                               if (r == 'd' || r == 'a')
+                                       goto begin;
+
+                               qsort(dents, ndents, sizeof(*dents), entrycmpfn);
+                               move_cursor(ndents ? dentfind(lastname, ndents) : 0, 0);
+                       }
                        continue;
                case SEL_STATS: // fallthrough
                case SEL_CHMODX: