diff --git a/nnn.c b/nnn.c index d6c1470c..aeda6064 100644 --- 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"); }