commit 2ec91038599c775822f4b49c61d8c634db78ebf8
parent d54033089c939d3e4cb28b866214caee7adce9af
Author: Arun Prakash Jana <engineerarun@gmail.com>
Date: Tue, 24 Nov 2020 23:48:48 +0530
Loop the command prompt
Diffstat:
| M | src/nnn.c | | | 47 | ++++++++++++++++++++++++++++------------------- |
1 file changed, 28 insertions(+), 19 deletions(-)
diff --git a/src/nnn.c b/src/nnn.c
@@ -1966,12 +1966,6 @@ static int spawn(char *file, char *arg1, char *arg2, uchar flag)
return retstatus;
}
-static void prompt_run(char *cmd, const char *current)
-{
- setenv(envs[ENV_NCUR], current, 1);
- spawn(shell, "-c", cmd, F_CLI | F_CONFIRM);
-}
-
/* Get program name from env var, else return fallback program */
static char *xgetenv(const char * const name, char *fallback)
{
@@ -3190,6 +3184,33 @@ static char *getreadline(const char *prompt)
}
#endif
+/* Returns TRUE if at least command was run */
+static bool prompt_run(const char *current)
+{
+ bool ret = FALSE;
+ char *tmp;
+
+ setenv(envs[ENV_NCUR], current, 1);
+
+ while (1) {
+#ifndef NORL
+ if (g_state.picker) {
+#endif
+ tmp = xreadline(NULL, ">>> ");
+#ifndef NORL
+ } else
+ tmp = getreadline("\n>>> ");
+#endif
+ if (tmp && *tmp) { // NOLINT
+ ret = TRUE;
+ spawn(shell, "-c", tmp, F_CLI | F_CONFIRM);
+ } else
+ break;
+ }
+
+ return ret;
+}
+
/*
* Create symbolic/hard link(s) to file(s) in selection list
* Returns the number of links created, -1 on error
@@ -7003,19 +7024,7 @@ nochange:
r = FALSE;
break;
default: /* SEL_RUNCMD */
- r = TRUE;
-#ifndef NORL
- if (g_state.picker) {
-#endif
- tmp = xreadline(NULL, ">>> ");
-#ifndef NORL
- } else
- tmp = getreadline("\n>>> ");
-#endif
- if (tmp && *tmp) // NOLINT
- prompt_run(tmp, (ndents ? pdents[cur].name : ""));
- else
- r = FALSE;
+ r = prompt_run(ndents ? pdents[cur].name : "");
}
/* Continue in type-to-nav mode, if enabled */