From 2bfcb281e7570c52e2fdd377772bc9e289f47c2e Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Sun, 4 Aug 2019 07:32:37 +0530 Subject: [PATCH] Support duplicate file/dir --- README.md | 4 ++-- src/nnn.c | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 12313a34..df705cfe 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,7 @@ Here's a video of [`nnn` on Termux (Android)](https://www.youtube.com/watch?v=Ab - FreeDesktop compliant trash (needs trash-cli) - SSHFS mounts (needs sshfs) - Mouse support - - Create, rename files and directories + - Create, rename, duplicate files and directories - Show copy, move progress on Linux (needs avdcpmv) - Per-context directory color (default: blue) - Spawn a shell in the current directory @@ -285,7 +285,7 @@ Press ? in `nnn` to see the list anytime. Q ^Q Quit ? Help, config FILES ^O Open with... n Create new/link - D File details ^R Rename entry + D File details ^R Rename/duplicate ⎵ ^K / Y Select entry/all r Batch rename K ^Y Toggle selection y List selection P Copy selection X Delete selection diff --git a/src/nnn.c b/src/nnn.c index 874b2052..fb8cf10f 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -2814,7 +2814,7 @@ static bool show_help(const char *path) "9Q ^Q Quit ? Help, config\n" "1FILES\n" "b^O Open with... n Create new/link\n" - "cD File details ^R Rename entry\n" + "cD File details ^R Rename/duplicate\n" "5⎵ ^K / Y Select entry/all r Batch rename\n" "9K ^Y Toggle selection y List selection\n" "cP Copy selection X Delete selection\n" @@ -4160,6 +4160,8 @@ nochange: case SEL_ARCHIVE: // fallthrough case SEL_NEW: { + int dup = 'n'; + switch (sel) { case SEL_ARCHIVE: r = get_input("archive selection (else current)? [y/Y confirms]"); @@ -4190,6 +4192,7 @@ nochange: tmp = xreadline(NULL, "name/link suffix [@ for none]: "); break; default: /* SEL_RENAME */ + dup = get_input("duplicate? [y/Y confirms]"); tmp = xreadline(dents[cur].name, ""); break; } @@ -4274,7 +4277,9 @@ nochange: if (sel == SEL_RENAME) { /* Rename the file */ - if (renameat(fd, dents[cur].name, fd, tmp) != 0) { + if (dup == 'y' || dup == 'Y') { + spawn("cp -r", dents[cur].name, tmp, path, F_CLI | F_NOTRACE); + } else if (renameat(fd, dents[cur].name, fd, tmp) != 0) { close(fd); printwarn(&presel); goto nochange;