src/nnn.c | 29 +++++++++++++++++++++++------ diff --git a/src/nnn.c b/src/nnn.c index e23a5a89fe196b3876ae7fadc19f271a8c5efd23..b4c53357f8e057bd2f72a11f3b383589fcb37f60 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -902,7 +902,11 @@ 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 @@ snprintf(buf, CMD_LEN_MAX, "xargs -0 sh -c '%s \"$0\" \"$@\" . < /dev/tty' < %s", 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 @@ else { 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 @@ return FALSE; } 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)) {