From 6e696ba98c49715be8da2609f8a64be8a023547f Mon Sep 17 00:00:00 2001 From: Daniel Lublin Date: Mon, 4 Jun 2018 22:18:57 +0200 Subject: Add mark range function Sets the marked state of all images ranging from the latest marked/unmarked image to the current image, to the state of that latest toggled image. --- commands.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'commands.c') diff --git a/commands.c b/commands.c index 360b771..33ae5a3 100644 --- a/commands.c +++ b/commands.c @@ -46,6 +46,7 @@ extern fileinfo_t *files; extern int filecnt, fileidx; extern int alternate; extern int markcnt; +extern int toggledidx; extern int prefix; extern bool extprefix; @@ -196,6 +197,7 @@ bool cg_toggle_image_mark(arg_t _) markcnt += files[fileidx].flags & FF_MARK ? 1 : -1; if (mode == MODE_THUMB) tns_mark(&tns, fileidx, !!(files[fileidx].flags & FF_MARK)); + toggledidx = fileidx; return true; } @@ -212,6 +214,39 @@ bool cg_reverse_marks(arg_t _) return true; } +bool cg_mark_range(arg_t _) +{ + int i, from, to; + + if (toggledidx < 0) + return true; + if (toggledidx == fileidx) + return true; + + from = toggledidx; + to = fileidx; + if (fileidx < toggledidx) { + from = fileidx; + to = toggledidx; + } + for (i = from; i <= to; i++) { + if (files[toggledidx].flags & FF_MARK) { + if (!(files[i].flags & FF_MARK)) { + files[i].flags |= FF_MARK; + markcnt += 1; + } + } else { + if (files[i].flags & FF_MARK) { + files[i].flags &= ~FF_MARK; + markcnt -= 1; + } + } + if (mode == MODE_THUMB) + tns_mark(&tns, i, !!(files[i].flags & FF_MARK)); + } + return true; +} + bool cg_unmark_all(arg_t _) { int i; -- cgit v1.2.3-70-g09d2