char rundir[PATH_MAX] __attribute__ ((aligned));
char runfile[NAME_MAX + 1] __attribute__ ((aligned));
uchar opener_flags = (cfg.cliopener ? F_CLI : (F_NOTRACE | F_NOWAIT));
+ uint utmp;
int r = -1, fd, presel, selstartid = 0, selendid = 0;
ino_t inode = 0;
enum action sel;
errexit();
begin:
- if (cfg.selmode && nselected)
+ if (cfg.selmode && nselected && lastdir[0])
updateselbuf(lastdir, newpath);
#ifdef LINUX_INOTIFY
if (rangesel)
rangesel = FALSE;
+ /* Write the path to selection file to avoid flush */
+ if (!(dents[cur].flags & FILE_SELECTED)) {
+ utmp = selbufpos;
+ appendfpath(newpath, mkpath(path, dents[cur].name, newpath));
+ writesel(pselbuf, selbufpos - 1); /* Truncate NULL from end */
+ spawn(copier, NULL, NULL, NULL, F_NOTRACE);
+ selbufpos = utmp;
+ }
+
+ /* Toggle selection status */
dents[cur].flags ^= FILE_SELECTED;
dents[cur].flags ? ++nselected : --nselected;
selendid = ndents - 1;
}
+ /* Remember current selection buffer position */
+ utmp = selbufpos;
+
for (r = selstartid; r <= selendid; ++r)
if (!(dents[r].flags & FILE_SELECTED)) {
+ /* Write the path to selection file to avoid flush */
+ appendfpath(newpath, mkpath(path, dents[r].name, newpath));
+
dents[r].flags |= FILE_SELECTED;
++nselected;
}
+
+ if (selbufpos != utmp) {
+ writesel(pselbuf, selbufpos - 1); /* Truncate NULL from end */
+ spawn(copier, NULL, NULL, NULL, F_NOTRACE);
+ /* Restore current selection buffer position */
+ selbufpos = utmp;
+ }
continue;
case SEL_SELLIST:
if (listselbuf(path, newpath) || listselfile()) {