]> Sergey Matveev's repositories - nnn.git/commitdiff
Fix #214: show cp, mv progress with advcpmv
authorArun Prakash Jana <engineerarun@gmail.com>
Mon, 25 Feb 2019 14:07:23 +0000 (19:37 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Mon, 25 Feb 2019 14:07:23 +0000 (19:37 +0530)
README.md
nnn.1
src/nnn.c

index b2edfd8acecf564158c32eb0f9e46285bb9576f9..d38686ba298c9207f4b7ee234975686325ebd49a 100644 (file)
--- a/README.md
+++ b/README.md
@@ -103,6 +103,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
+  - Show copy, move progress on Linux (needs avdcpmv)
   - Create sym/hard link(s) to selection
   - Transfer files using lftp
   - Batch rename/move/delete (needs vidir)
@@ -154,6 +155,7 @@ Intrigued? Find out [HOW](https://github.com/jarun/nnn/wiki/performance-factors)
 | atool, patool ([integration](https://github.com/jarun/nnn/wiki/How-to#integrate-patool)) | create, list and extract archives |
 | vidir (from moreutils) | batch rename, move, delete dir entries |
 | vlock (Linux), bashlock (macOS), lock(1) (BSD) | terminal locker |
+| advcpmv (Linux-only) ([integration](https://github.com/jarun/nnn/wiki/How-to#show-cp-mv-progress)) | copy, move progress |
 | $EDITOR (overridden by $VISUAL, if defined) | edit files (fallback vi) |
 | $PAGER (less, most) | page through files (fallback less) |
 | $SHELL (single coombined argument) | spawn a shell, run script (fallback sh) |
@@ -389,6 +391,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 <kbd> ↵</kbd>, not <kbd>→</kbd> or <kbd>l</kbd> |
 | `NNN_RESTRICT_0B=1` | do not open 0-byte files |
+| `NNN_CP_MV_PROG=1` | show copy, move progress (Linux-only) |
 
 #### Help
 
diff --git a/nnn.1 b/nnn.1
index 9ef1f9ea0a66f4114f8c3831c0ea0c18e469dc6a..1a42db475b4ec00182a79029dc807d4622964259 100644 (file)
--- a/nnn.1
+++ b/nnn.1
@@ -340,6 +340,11 @@ files.
 .Bd -literal
     export NNN_RESTRICT_0B=1
 .Ed
+.Pp
+\fBNNN_CP_MV_PROG:\fR show progress of copy, move operations (Linux-only, needs advcpmv).
+.Bd -literal
+    export NNN_CP_MV_PROG=1
+.Ed
 .Sh KNOWN ISSUES
 If you are using urxvt you might have to set backspace key to DEC.
 .Sh AUTHORS
index 2704befb5190a7261482baffd6d0766253fc0058..b205126c72a17c8e2cc54f33361b1f9cc94eb29c 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -404,6 +404,11 @@ static char * const utils[] = {
        "UNKNOWN"
 };
 
+#ifdef __linux__
+static char cp[] = "cpg -giRp";
+static char mv[] = "mvg -gi";
+#endif
+
 /* Common strings */
 #define STR_NFTWFAIL_ID 0
 #define STR_NOHOME_ID 1
@@ -438,6 +443,9 @@ static const char * const messages[] = {
 #define NNN_NO_AUTOSELECT 11
 #define NNN_RESTRICT_NAV_OPEN 12
 #define NNN_RESTRICT_0B 13
+#ifdef __linux__
+#define NNN_CP_MV_PROG 14
+#endif
 
 static const char * const env_cfg[] = {
        "NNN_BMS",
@@ -454,6 +462,9 @@ static const char * const env_cfg[] = {
        "NNN_NO_AUTOSELECT",
        "NNN_RESTRICT_NAV_OPEN",
        "NNN_RESTRICT_0B",
+#ifdef __linux__
+       "NNN_CP_MV_PROG",
+#endif
 };
 
 /* Required env vars */
@@ -3574,19 +3585,21 @@ nochange:
                        if (sel == SEL_CP) {
                                snprintf(g_buf, CMD_LEN_MAX,
 #ifdef __linux__
-                                        "xargs -0 -a %s -%c src cp -iRp src .",
+                                        "xargs -0 -a %s -%c src %s src .",
+                                        g_cppath, REPLACE_STR, cp);
 #else
                                         "cat %s | xargs -0 -o -%c src cp -iRp src .",
-#endif
                                         g_cppath, REPLACE_STR);
+#endif
                        } else if (sel == SEL_MV) {
                                snprintf(g_buf, CMD_LEN_MAX,
 #ifdef __linux__
-                                        "xargs -0 -a %s -%c src mv -i src .",
+                                        "xargs -0 -a %s -%c src %s src .",
+                                        g_cppath, REPLACE_STR, mv);
 #else
                                         "cat %s | xargs -0 -o -%c src mv -i src .",
-#endif
                                         g_cppath, REPLACE_STR);
+#endif
                        } else { /* SEL_RMMUL */
                                snprintf(g_buf, CMD_LEN_MAX,
 #ifdef __linux__
@@ -4215,6 +4228,16 @@ int main(int argc, char *argv[])
        if (getenv(env_cfg[NNN_RESTRICT_0B]))
                cfg.restrict0b = 1;
 
+#ifdef __linux__
+       if (!getenv(env_cfg[NNN_CP_MV_PROG])) {
+               cp[5] = cp[4];
+               cp[2] = cp[4] = ' ';
+
+               mv[5] = mv[4];
+               mv[2] = mv[4] = ' ';
+       }
+#endif
+
        /* Ignore/handle certain signals */
        struct sigaction act;