Krolyxon
Commit 6e696ba

Branches

Refs →

nsxiv6e696ba

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.
Author
Daniel Lublin
Date
2018-06-04 22:18 +0200
Committer
Bert Münnich · 2018-06-09 11:44 +0200
Parent
8bf1adc
Commit
6e696ba98c49715be8da2609f8a64be8a023547f

+42 −0

5 files changed

  1. M commands.c +35 −0
  2. M commands.lst +1 −0
  3. M config.def.h +1 −0
  4. M main.c +1 −0
  5. M sxiv.1 +4 −0
M commands.c View
@@ -46,6 +46,7 @@ extern fileinfo_t *files;
4646 extern int filecnt, fileidx;
4747 extern int alternate;
4848 extern int markcnt;
49+extern int toggledidx;
4950
5051 extern int prefix;
5152 extern bool extprefix;
@@ -196,6 +197,7 @@ bool cg_toggle_image_mark(arg_t _)
196197 markcnt += files[fileidx].flags & FF_MARK ? 1 : -1;
197198 if (mode == MODE_THUMB)
198199 tns_mark(&tns, fileidx, !!(files[fileidx].flags & FF_MARK));
200+ toggledidx = fileidx;
199201 return true;
200202 }
201203
@@ -212,6 +214,39 @@ bool cg_reverse_marks(arg_t _)
212214 return true;
213215 }
214216
217+bool cg_mark_range(arg_t _)
218+{
219+ int i, from, to;
220+
221+ if (toggledidx < 0)
222+ return true;
223+ if (toggledidx == fileidx)
224+ return true;
225+
226+ from = toggledidx;
227+ to = fileidx;
228+ if (fileidx < toggledidx) {
229+ from = fileidx;
230+ to = toggledidx;
231+ }
232+ for (i = from; i <= to; i++) {
233+ if (files[toggledidx].flags & FF_MARK) {
234+ if (!(files[i].flags & FF_MARK)) {
235+ files[i].flags |= FF_MARK;
236+ markcnt += 1;
237+ }
238+ } else {
239+ if (files[i].flags & FF_MARK) {
240+ files[i].flags &= ~FF_MARK;
241+ markcnt -= 1;
242+ }
243+ }
244+ if (mode == MODE_THUMB)
245+ tns_mark(&tns, i, !!(files[i].flags & FF_MARK));
246+ }
247+ return true;
248+}
249+
215250 bool cg_unmark_all(arg_t _)
216251 {
217252 int i;
M commands.lst View
@@ -11,6 +11,7 @@ G_CMD(scroll_screen)
1111 G_CMD(zoom)
1212 G_CMD(toggle_image_mark)
1313 G_CMD(reverse_marks)
14+G_CMD(mark_range)
1415 G_CMD(unmark_all)
1516 G_CMD(navigate_marked)
1617 G_CMD(change_gamma)
M config.def.h View
@@ -91,6 +91,7 @@ static const keymap_t keys[] = {
9191 { 0, XK_KP_Subtract, g_zoom, -1 },
9292 { 0, XK_m, g_toggle_image_mark, None },
9393 { 0, XK_M, g_reverse_marks, None },
94+ { ControlMask, XK_M, g_mark_range, None },
9495 { ControlMask, XK_m, g_unmark_all, None },
9596 { 0, XK_N, g_navigate_marked, +1 },
9697 { 0, XK_P, g_navigate_marked, -1 },
M main.c View
@@ -57,6 +57,7 @@ fileinfo_t *files;
5757 int filecnt, fileidx;
5858 int alternate;
5959 int markcnt;
60+int toggledidx = -1;
6061
6162 int prefix;
6263 bool extprefix;
M sxiv.1 View
@@ -172,6 +172,10 @@ Mark/unmark the current image.
172172 .B M
173173 Reverse all image marks.
174174 .TP
175+.B Ctrl-M
176+Repeat last mark action on all images from the last marked/unmarked up to the
177+current one.
178+.TP
175179 .B Ctrl-m
176180 Remove all image marks.
177181 .TP