]> Sergey Matveev's repositories - nnn.git/commitdiff
Sync file paths correctly for clipboard copy
authorArun Prakash Jana <engineerarun@gmail.com>
Thu, 12 Dec 2019 19:06:30 +0000 (00:36 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Thu, 12 Dec 2019 19:06:30 +0000 (00:36 +0530)
src/nnn.c

index 2ad8f274a8e4785e7bcec6db80c7db27ca3e0956..6fdae5a33b1a28c5217c65ff6cbb10c2f6c41b8c 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -4864,26 +4864,34 @@ nochange:
                        if (rangesel)
                                rangesel = FALSE;
 
-                       /* Write the path to selection file to avoid flush */
-                       if (!(dents[cur].flags & FILE_SELECTED)) {
+                       /* Toggle selection status */
+                       dents[cur].flags ^= FILE_SELECTED;
+
+                       if (dents[cur].flags & FILE_SELECTED) {
+                               ++nselected;
                                utmp = selbufpos;
                                selbufpos = lastappendpos;
                                appendfpath(newpath, mkpath(path, dents[cur].name, newpath));
                                writesel(pselbuf, selbufpos - 1); /* Truncate NULL from end */
-                               if (cfg.x11)
-                                       plugscript(utils[UTIL_CBCP], newpath, F_NOWAIT | F_NOTRACE);
                                lastappendpos = selbufpos;
                                selbufpos = utmp;
+                       } else {
+                               --nselected;
+                               if (nselected) {
+                                       utmp = selbufpos;
+                                       updateselbuf(path, newpath);
+                                       writesel(pselbuf, selbufpos - 1); /* Truncate NULL from end */
+                                       lastappendpos = selbufpos;
+                                       selbufpos = utmp;
+                               } else
+                                       writesel(NULL, 0);
                        }
 
-                       /* Toggle selection status */
-                       dents[cur].flags ^= FILE_SELECTED;
-                       (dents[cur].flags & FILE_SELECTED) ? ++nselected : --nselected;
+                       if (cfg.x11)
+                               plugscript(utils[UTIL_CBCP], newpath, F_NOWAIT | F_NOTRACE);
 
-                       if (!nselected) {
-                               writesel(NULL, 0);
+                       if (!nselected)
                                unlink(g_selpath);
-                       }
 
                        /* move cursor to the next entry if this is not the last entry */
                        if (!cfg.picker && cur != ndents - 1)