From 5dd5710b310a79652e092631d29313b83f33e8bb Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Sat, 9 Mar 2019 09:05:32 +0530 Subject: [PATCH] Support trash-cli to trash --- README.md | 6 +++--- src/nnn.c | 24 ++++++++++++++++++------ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index e442851f..8b20ef3c 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ It runs on Linux, macOS, Raspberry Pi, BSD, Cygwin, Linux subsystem for Windows - Create, rename files and directories - Select files across dirs; all/range selection - Copy, move, delete, archive selection - - Freedeskp compliant trash (needs trash-cli) + - FreeDesktop compliant trash (needs trash-cli) - Show copy, move progress on Linux (needs avdcpmv) - Create sym/hard link(s) to selection - Transfer files using lftp @@ -136,7 +136,7 @@ It runs on Linux, macOS, Raspberry Pi, BSD, Cygwin, Linux subsystem for Windows | xdg-open (Linux), open(1) (macOS), cygstart (Cygwin) | desktop opener | | file | determine file type | | coreutils (cp, mv, rm), findutils (xargs) | copy, move and remove files | -| trash-cli | trash files instead of delete | +| trash-cli | trash files (instead of delete) | | mediainfo or exiftool | multimedia file details | | atool, patool ([integration](https://github.com/jarun/nnn/wiki/How-to#integrate-patool)) | create, list and extract archives | | vidir (from moreutils) | batch rename dir entries | @@ -378,7 +378,7 @@ The following indicators are used in the detail view: | `NNN_NO_AUTOSELECT=1` | do not auto-select matching dir in _nav-as-you-type` mode | | `NNN_RESTRICT_NAV_OPEN=1` | open files on , not or l | | `NNN_RESTRICT_0B=1` | do not open 0-byte files | -| `NNN_TRASH=1` | trash (instead of _delete_) files to desktop Trash | +| `NNN_TRASH=1` | trash files to the desktop Trash [default: delete] | | `NNN_CP_MV_PROG=1` | show copy, move progress on Linux | #### Help diff --git a/src/nnn.c b/src/nnn.c index c66a69e2..fdf43392 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -1141,20 +1141,32 @@ static void mvstr(char *buf) static void rmmulstr(char *buf) { - snprintf(buf, CMD_LEN_MAX, + if (cfg.trash) { + snprintf(buf, CMD_LEN_MAX, #ifdef __linux__ - "xargs -0 -a %s rm -%cr", + "xargs -0 -a %s trash-put", g_cppath); #else - "cat %s | xargs -0 -o rm -%cr", + "cat %s | xargs -0 trash-put", g_cppath); #endif - g_cppath, confirm_force()); + } else { + snprintf(buf, CMD_LEN_MAX, +#ifdef __linux__ + "xargs -0 -a %s rm -%cr", g_cppath, confirm_force()); +#else + "cat %s | xargs -0 -o rm -%cr", g_cppath, confirm_force()); +#endif + } } static void xrm(char *path) { - char rm_opts[] = {'-', confirm_force(), 'r'}; + if (cfg.trash) + spawn("trash-put", path, NULL, NULL, F_NORMAL | F_SIGINT); + else { + char rm_opts[] = {'-', confirm_force(), 'r'}; - spawn("rm", rm_opts, path, NULL, F_NORMAL | F_SIGINT); + spawn("rm", rm_opts, path, NULL, F_NORMAL | F_SIGINT); + } } static void archive_selection(const char *archive, const char *curpath)