aboutsummaryrefslogtreecommitdiffstats
path: root/src/nnn.c
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-04-27 01:41:35 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-04-27 01:41:35 +0530
commitc4f39a200aa4e059805326aa3232665be0479590 (patch)
tree2a717ecbe043e8b4249e77585ff2b5aa01aaf77c /src/nnn.c
parent810cf2e4035b99a0b429fbe7ce0a5fd9869a5173 (diff)
downloadnnn-c4f39a200aa4e059805326aa3232665be0479590.tar.gz
Modular readline call
Diffstat (limited to 'src/nnn.c')
-rw-r--r--src/nnn.c69
1 files changed, 43 insertions, 26 deletions
diff --git a/src/nnn.c b/src/nnn.c
index afcb3ca..aa891c2 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -1778,6 +1778,44 @@ END:
return g_buf + ((NAME_MAX + 1) << 2);
}
+#ifndef NORL
+/*
+ * Caller should check the value of presel to confirm if it needs to wait to show warning
+ */
+static char *getreadline(char *prompt, char *path, char *curpath, int *presel)
+{
+ char *input;
+
+ /* Switch to current path for readline(3) */
+ if (chdir(path) == -1) {
+ printwarn(presel);
+ return NULL;
+ }
+
+ exitcurses();
+
+ input = readline(prompt);
+
+ refresh();
+
+ if (chdir(curpath) == -1) {
+ printwarn(presel);
+ free(input);
+ return NULL;
+ }
+
+ if (input && input[0]) {
+ add_history(input);
+ xstrlcpy(g_buf, input, CMD_LEN_MAX);
+ free(input);
+ return g_buf;
+ }
+
+ free(input);
+ return NULL;
+}
+#endif
+
/*
* Updates out with "dir/name or "/name"
* Returns the number of bytes copied including the terminating NULL byte
@@ -3921,37 +3959,16 @@ nochange:
if (cfg.picker) {
#endif
tmp = xreadline(NULL, "> ");
- if (tmp[0])
- spawn(shell, "-c", tmp, path, F_CLI);
#ifndef NORL
} else {
- /* Switch to current path for readline(3) */
- if (chdir(path) == -1) {
- printwarn(&presel);
+ presel = 0;
+ tmp = getreadline("> ", path, ipath, &presel);
+ if (presel == MSGWAIT)
goto nochange;
- }
-
- exitcurses();
-
- tmp = readline("nnn> ");
-
- refresh();
-
- if (chdir(ipath) == -1) {
- printwarn(&presel);
- free(tmp);
- goto nochange;
- }
-
- if (tmp && tmp[0]) {
- spawn(shell, "-c", tmp, path, F_CLI);
- /* readline finishing touches */
- add_history(tmp);
- }
-
- free(tmp);
}
#endif
+ if (tmp[0])
+ spawn(shell, "-c", tmp, path, F_CLI);
}
/* Continue in navigate-as-you-type mode, if enabled */