From: Arun Prakash Jana <engineerarun@gmail.com>
Date: Mon, 1 Jun 2020 15:51:01 +0000 (+0530)
Subject: Fix #624: wait for user input if cmd fails
X-Git-Tag: v3.3~75
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=0ebc6db163ea3873fd55fc8adf4236c05060315a;p=nnn.git

Fix #624: wait for user input if cmd fails
---

diff --git a/src/nnn.c b/src/nnn.c
index 493a9204..167a5644 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -185,6 +185,7 @@
 #define F_NOTRACE 0x04  /* suppress stdout and strerr (no traces) */
 #define F_NORMAL  0x08  /* spawn child process in non-curses regular CLI mode */
 #define F_CONFIRM 0x10  /* run command - show results before exit (must have F_NORMAL) */
+#define F_CHKRTN  0x20  /* wait for user prompt if cmd returns failure status */
 #define F_CLI     (F_NORMAL | F_MULTI)
 #define F_SILENT  (F_CLI | F_NOTRACE)
 
@@ -1715,7 +1716,7 @@ static int spawn(char *file, char *arg1, char *arg2, uchar flag)
 
 		DPRINTF_D(pid);
 
-		if (flag & F_CONFIRM) {
+		if ((flag & F_CONFIRM) || ((flag & F_CHKRTN) && retstatus)) {
 			printf("%s", messages[MSG_CONTINUE]);
 #ifndef NORL
 			fflush(stdout);
@@ -1794,7 +1795,7 @@ static void xrm(char *fpath)
 		char rm_opts[] = "-ir";
 
 		rm_opts[1] = confirm_force(FALSE);
-		spawn("rm", rm_opts, fpath, F_NORMAL);
+		spawn("rm", rm_opts, fpath, F_NORMAL | F_CHKRTN);
 	}
 }
 
@@ -1854,9 +1855,8 @@ static bool cpmv_rename(int choice, const char *path)
 	}
 
 	snprintf(buf, sizeof(buf), patterns[P_CPMVRNM], path, g_tmpfpath, cmd);
-	spawn(utils[UTIL_SH_EXEC], buf, NULL, F_CLI);
-	ret = TRUE;
-
+	if (!spawn(utils[UTIL_SH_EXEC], buf, NULL, F_CLI | F_CHKRTN))
+		ret = TRUE;
 finish:
 	if (fd >= 0)
 		close(fd);
@@ -1895,8 +1895,10 @@ static bool cpmvrm_selection(enum action sel, char *path)
 		break;
 	}
 
-	if (sel != SEL_CPMVAS)
-		spawn(utils[UTIL_SH_EXEC], g_buf, NULL, F_CLI);
+	if (sel != SEL_CPMVAS && spawn(utils[UTIL_SH_EXEC], g_buf, NULL, F_CLI | F_CHKRTN)) {
+		printmsg(messages[MSG_FAILED]);
+		return FALSE;
+	}
 
 	/* Clear selection on move or delete */
 	if (sel != SEL_CP)