From bdbd182c65cee58c2d09374a93a9ca3425e4ab7b Mon Sep 17 00:00:00 2001
From: Arun Prakash Jana <engineerarun@gmail.com>
Date: Mon, 1 Nov 2021 12:54:47 +0530
Subject: [PATCH] Handle plugin selection early

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

diff --git a/src/nnn.c b/src/nnn.c
index 97177537..020cba43 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -6896,6 +6896,36 @@ nochange:
 				printwait(messages[MSG_UNSUPPORTED], &presel);
 				goto nochange;
                         }
+
+			/* Handle plugin selection mode */
+			if (g_state.runplugin) {
+				g_state.runplugin = 0;
+				/* Must be in plugin dir and same context to select plugin */
+				if ((g_state.runctx == cfg.curctx) && !strcmp(path, plgpath)) {
+					endselection(FALSE);
+					/* Copy path so we can return back to earlier dir */
+					xstrsncpy(path, rundir, PATH_MAX);
+					rundir[0] = '\0';
+					clearfilter();
+
+					if (chdir(path) == -1
+					    || !run_plugin(&path, pent->name,
+								    runfile, &lastname, &lastdir)) {
+						DPRINTF_S("plugin failed!");
+					}
+
+					if (g_state.picked)
+						return EXIT_SUCCESS;
+
+					if (runfile[0]) {
+						xstrsncpy(lastname, runfile, NAME_MAX + 1);
+						runfile[0] = '\0';
+					}
+					setdirwatch();
+					goto begin;
+				}
+			}
+
 #ifndef NOFIFO
 			if (g_state.fifomode && (sel == SEL_OPEN)) {
 				send_to_explorer(&presel); /* Write selection to explorer fifo */
@@ -6936,35 +6966,6 @@ nochange:
 					goto nochange;
 			}
 
-			/* Handle plugin selection mode */
-			if (g_state.runplugin) {
-				g_state.runplugin = 0;
-				/* Must be in plugin dir and same context to select plugin */
-				if ((g_state.runctx == cfg.curctx) && !strcmp(path, plgpath)) {
-					endselection(FALSE);
-					/* Copy path so we can return back to earlier dir */
-					xstrsncpy(path, rundir, PATH_MAX);
-					rundir[0] = '\0';
-					clearfilter();
-
-					if (chdir(path) == -1
-					    || !run_plugin(&path, pent->name,
-								    runfile, &lastname, &lastdir)) {
-						DPRINTF_S("plugin failed!");
-					}
-
-					if (g_state.picked)
-						return EXIT_SUCCESS;
-
-					if (runfile[0]) {
-						xstrsncpy(lastname, runfile, NAME_MAX + 1);
-						runfile[0] = '\0';
-					}
-					setdirwatch();
-					goto begin;
-				}
-			}
-
 			if (!sb.st_size) {
 				printwait(messages[MSG_EMPTY_FILE], &presel);
 				goto nochange;
-- 
2.51.0