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)