aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/nnn.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/nnn.c b/src/nnn.c
index e5d1f56..4eb4112 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -306,7 +306,7 @@ static int ndents, cur, curscroll, total_dents = ENTRY_INCR;
static int xlines, xcols;
static int nselected;
static uint idle;
-static uint idletimeout, selbufpos, selbuflen;
+static uint idletimeout, selbufpos, lastappendpos, selbuflen;
static char *bmstr;
static char *pluginstr;
static char *opener;
@@ -1007,6 +1007,8 @@ static void startselection(void)
writesel(NULL, 0);
selbufpos = 0;
}
+
+ lastappendpos = 0;
}
}
@@ -4834,9 +4836,11 @@ nochange:
/* Write the path to selection file to avoid flush */
if (!(dents[cur].flags & FILE_SELECTED)) {
utmp = selbufpos;
+ selbufpos = lastappendpos;
appendfpath(newpath, mkpath(path, dents[cur].name, newpath));
writesel(pselbuf, selbufpos - 1); /* Truncate NULL from end */
spawn(copier, NULL, NULL, NULL, F_NOTRACE);
+ lastappendpos = selbufpos;
selbufpos = utmp;
}
@@ -4901,6 +4905,7 @@ nochange:
/* Remember current selection buffer position */
utmp = selbufpos;
+ selbufpos = lastappendpos;
for (r = selstartid; r <= selendid; ++r)
if (!(dents[r].flags & FILE_SELECTED)) {
@@ -4915,6 +4920,7 @@ nochange:
writesel(pselbuf, selbufpos - 1); /* Truncate NULL from end */
spawn(copier, NULL, NULL, NULL, F_NOTRACE);
/* Restore current selection buffer position */
+ lastappendpos = selbufpos;
selbufpos = utmp;
}
continue;