From: Arun Prakash Jana <engineerarun@gmail.com>
Date: Thu, 16 Apr 2020 12:15:58 +0000 (+0530)
Subject: Experimental: guards to reduce repeat screen redraws
X-Git-Tag: v3.2~125
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=ddaddcaf218ea2b1600e72e344e8c8720cd03c97;p=nnn.git

Experimental: guards to reduce repeat screen redraws
---

diff --git a/src/nnn.c b/src/nnn.c
index 97e12b8a..b6bb768d 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -4917,8 +4917,6 @@ static void redraw(char *path)
 	xlines = LINES;
 	xcols = COLS;
 
-	DPRINTF_S(__FUNCTION__);
-
 	int ncols = (xcols <= PATH_MAX) ? xcols : PATH_MAX;
 	int onscreen = xlines - 4;
 	int i;
@@ -4932,6 +4930,8 @@ static void redraw(char *path)
 			return draw_line(path, ncols);
 	}
 
+	DPRINTF_S(__FUNCTION__);
+
 	/* Clear screen */
 	erase();
 
@@ -5141,7 +5141,9 @@ begin:
 #endif
 
 	while (1) {
-		redraw(path);
+		/* Do not do a double redraw in filterentries */
+		if ((presel != FILTER) || !filterset())
+			redraw(path);
 
 		/* Display a one-time message */
 		if (listpath && (g_states & STATE_MSG)) {
@@ -5667,8 +5669,10 @@ nochange:
 			/* In case of successful operation, reload contents */
 
 			/* Continue in type-to-nav mode, if enabled */
-			if ((cfg.filtermode || filterset()) && !refresh)
-				break;
+			if ((cfg.filtermode || filterset()) && !refresh) {
+				presel = FILTER;
+				goto nochange;
+			}
 
 			/* Save current */
 			if (ndents)