From 2d27902ac0e4f31c58d08aff3ba10f6a6d6af8e3 Mon Sep 17 00:00:00 2001
From: Arun Prakash Jana <engineerarun@gmail.com>
Date: Tue, 31 Mar 2020 02:32:13 +0530
Subject: [PATCH] Quicker re-sort

---
 src/nnn.c | 30 ++++++++++++++++--------------
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/src/nnn.c b/src/nnn.c
index c4f0fcca..942d9506 100644
--- 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:
-- 
2.51.0