]> Sergey Matveev's repositories - nnn.git/commitdiff
Fix #675
authorArun Prakash Jana <engineerarun@gmail.com>
Thu, 9 Jul 2020 14:55:39 +0000 (20:25 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Thu, 9 Jul 2020 14:55:39 +0000 (20:25 +0530)
src/nnn.c

index e23a5a89fe196b3876ae7fadc19f271a8c5efd23..b4c53357f8e057bd2f72a11f3b383589fcb37f60 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -902,7 +902,11 @@ static char confirm_force(bool selection)
        snprintf(str, 32, messages[MSG_FORCE_RM],
                 (selection ? xitoa(nselected) : "current"), (selection ? "(s)" : ""));
 
-       if (xconfirm(get_input(str)))
+       int r = get_input(str);
+
+       if (r == 27)
+               return '\0'; /* cancel */
+       if (r == 'y' || r == 'Y')
                return 'f'; /* forceful */
        return 'i'; /* interactive */
 }
@@ -1806,13 +1810,21 @@ static void opstr(char *buf, char *op)
                 op, selpath);
 }
 
-static void rmmulstr(char *buf)
+static bool rmmulstr(char *buf)
 {
        if (g_state.trash)
                snprintf(buf, CMD_LEN_MAX, "xargs -0 trash-put < %s", selpath);
-       else
+       else {
+               char r = confirm_force(TRUE);
+
+               if (!r)
+                       return FALSE;
+
                snprintf(buf, CMD_LEN_MAX, "xargs -0 sh -c 'rm -%cr \"$0\" \"$@\" < /dev/tty' < %s",
-                        confirm_force(TRUE), selpath);
+                        r, selpath);
+       }
+
+       return TRUE;
 }
 
 /* Returns TRUE if file is removed, else FALSE */
@@ -1824,6 +1836,9 @@ static bool xrm(char *fpath)
                char rm_opts[] = "-ir";
 
                rm_opts[1] = confirm_force(FALSE);
+               if (!rm_opts[1])
+                       return FALSE;
+
                spawn("rm", rm_opts, fpath, F_NORMAL | F_CHKRTN);
        }
 
@@ -1922,8 +1937,10 @@ static bool cpmvrm_selection(enum action sel, char *path)
                }
                break;
        default: /* SEL_RM */
-               rmmulstr(g_buf);
-               break;
+               if (!rmmulstr(g_buf)) {
+                       printmsg(messages[MSG_CANCEL]);
+                       return FALSE;
+               }
        }
 
        if (sel != SEL_CPMVAS && spawn(utils[UTIL_SH_EXEC], g_buf, NULL, F_CLI | F_CHKRTN)) {