From 2ec91038599c775822f4b49c61d8c634db78ebf8 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Tue, 24 Nov 2020 23:48:48 +0530 Subject: [PATCH] Loop the command prompt --- src/nnn.c | 47 ++++++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/src/nnn.c b/src/nnn.c index a4890c27..448a1f5a 100644 --- 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 */