diff options
author | Arun Prakash Jana <engineerarun@gmail.com> | 2020-07-09 20:25:39 +0530 |
---|---|---|
committer | Arun Prakash Jana <engineerarun@gmail.com> | 2020-07-09 20:25:39 +0530 |
commit | 1d8a14c6b434d00dfb95e68094d8d7d31cdbe2bb (patch) | |
tree | d834c5a4bcc21777cf7f33039b6d829e7eef2eb7 /src | |
parent | 53bbcbc223f013c531a2b3ea7bb7b4cb2e3df182 (diff) | |
download | nnn-1d8a14c6b434d00dfb95e68094d8d7d31cdbe2bb.tar.gz |
Fix #675
Diffstat (limited to 'src')
-rw-r--r-- | src/nnn.c | 29 |
1 files changed, 23 insertions, 6 deletions
@@ -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)) { |