summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBert Münnich <ber.t@posteo.de>2018-06-09 12:17:03 +0200
committerBert Münnich <ber.t@posteo.de>2018-06-09 12:17:03 +0200
commit1892ed9fd7c930c6435e8f16f6bd6eca4573600a (patch)
tree835136a85744da010177aa7d5a8db489afae7496
parenta1165df878466c3e7bd297ab36e3afd1a5401819 (diff)
downloadnsxiv-1892ed9fd7c930c6435e8f16f6bd6eca4573600a.tar.zst
Simplify cg_mark_range
-rw-r--r--commands.c33
1 files changed, 11 insertions, 22 deletions
diff --git a/commands.c b/commands.c
index b5497d2..894ddd1 100644
--- a/commands.c
+++ b/commands.c
@@ -216,30 +216,19 @@ bool cg_reverse_marks(arg_t _)
bool cg_mark_range(arg_t _)
{
- int i, from, to;
-
- from = markidx;
- to = fileidx;
- if (fileidx < markidx) {
- from = fileidx;
- to = markidx;
- }
- for (i = from; i <= to; i++) {
- if (files[markidx].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;
- }
+ int i, d = fileidx < markidx ? 1 : -1;
+ int flag = files[markidx].flags & FF_MARK;
+ int oldmarkcnt = markcnt;
+
+ for (i = fileidx; i != markidx; i += d) {
+ if ((files[i].flags & FF_MARK) ^ flag) {
+ files[i].flags = (files[i].flags & ~FF_MARK) | flag;
+ markcnt += flag ? 1 : -1;
+ if (mode == MODE_THUMB)
+ tns_mark(&tns, i, !!flag);
}
- if (mode == MODE_THUMB)
- tns_mark(&tns, i, !!(files[i].flags & FF_MARK));
}
- return true;
+ return markcnt != oldmarkcnt;
}
bool cg_unmark_all(arg_t _)