]> Sergey Matveev's repositories - nnn.git/commitdiff
multi-cp: show number of cherrypicked files
authorArun Prakash Jana <engineerarun@gmail.com>
Sun, 22 Apr 2018 14:13:18 +0000 (19:43 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sun, 22 Apr 2018 16:07:45 +0000 (21:37 +0530)
nnn.c

diff --git a/nnn.c b/nnn.c
index d6c1470cacba23b7fde2077b8a608da14eb408b5..aeda6064f629af71612442e73ac1c3da5be0ccfa 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -640,7 +640,7 @@ writecp(const char *buf, const size_t buflen)
 }
 
 static bool
-appendfilepath(const char *path, const size_t len)
+appendfpath(const char *path, const size_t len)
 {
        if ((copybufpos >= copybuflen) || ((len + 3) > (copybuflen - copybufpos))) {
                copybuflen += PATH_MAX;
@@ -2422,7 +2422,7 @@ browse(char *ipath, char *ifilter)
        static char oldname[NAME_MAX + 1] __attribute__ ((aligned));
        char *dir, *tmp, *run = NULL, *env = NULL;
        struct stat sb;
-       int r, fd, presel, copystartid = 0, copyendid = 0;
+       int r, fd, presel, ncp, copystartid = 0, copyendid = 0;
        enum action sel = SEL_RUNARG + 1;
        bool dir_changed = FALSE;
 
@@ -2985,8 +2985,9 @@ nochange:
                        else if (ndents) {
                                if (cfg.copymode) {
                                        r = mkpath(path, dents[cur].name, newpath, PATH_MAX);
-                                       if (!appendfilepath(newpath, r))
+                                       if (!appendfpath(newpath, r))
                                                goto nochange;
+                                       ++ncp;
                                        printmsg(newpath);
                                } else if (cfg.quote) {
                                        g_buf[0] = '\'';
@@ -3020,15 +3021,11 @@ nochange:
                                        g_crc = crc8fast((uchar *)dents, ndents * sizeof(struct entry));
                                        copystartid = cur;
                                        copybufpos = 0;
+                                       ncp = 0;
                                        printmsg("multi-copy on");
                                        DPRINTF_S("copymode on");
                                } else {
-                                       static size_t len;
-                                       len = 0;
-
-                                       /* Handle range selection */
-                                       if (copybufpos == 0) {
-
+                                       if (!ncp) { /* Handle range selection */
                                                if (cur < copystartid) {
                                                        copyendid = copystartid;
                                                        copystartid = cur;
@@ -3036,24 +3033,26 @@ nochange:
                                                        copyendid = cur;
 
                                                if (copystartid < copyendid) {
-                                                       for (r = copystartid; r <= copyendid; ++r) {
-                                                               len = mkpath(path, dents[r].name, newpath, PATH_MAX);
-                                                               if (!appendfilepath(newpath, len))
-                                                                       goto nochange;;
-                                                       }
+                                                       for (r = copystartid; r <= copyendid; ++r)
+                                                               if (!appendfpath(newpath, mkpath(path, dents[r].name, newpath, PATH_MAX)))
+                                                                       goto nochange;
 
                                                        snprintf(newpath, PATH_MAX, "%d files copied", copyendid - copystartid + 1);
                                                        printmsg(newpath);
                                                }
                                        }
 
-                                       if (copybufpos) {
+                                       if (copybufpos) { /* File path(s) written to the buffer */
                                                if (cfg.noxdisplay)
                                                        writecp(pcopybuf, copybufpos - 1); /* Truncate NULL from end */
                                                else
                                                        spawn(copier, pcopybuf, NULL, NULL, F_NOTRACE);
-                                               if (!len)
-                                                       printmsg("files copied");
+
+                                               if (ncp) /* Some files cherry picked */
+                                               {
+                                                       snprintf(newpath, PATH_MAX, "%d files copied", ncp);
+                                                       printmsg(newpath);
+                                               }
                                        } else
                                                printmsg("multi-copy off");
                                }