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.
This commit is contained in:
parent
8bf1adcd9a
commit
6e696ba98c
35
commands.c
35
commands.c
|
@ -46,6 +46,7 @@ extern fileinfo_t *files;
|
||||||
extern int filecnt, fileidx;
|
extern int filecnt, fileidx;
|
||||||
extern int alternate;
|
extern int alternate;
|
||||||
extern int markcnt;
|
extern int markcnt;
|
||||||
|
extern int toggledidx;
|
||||||
|
|
||||||
extern int prefix;
|
extern int prefix;
|
||||||
extern bool extprefix;
|
extern bool extprefix;
|
||||||
|
@ -196,6 +197,7 @@ bool cg_toggle_image_mark(arg_t _)
|
||||||
markcnt += files[fileidx].flags & FF_MARK ? 1 : -1;
|
markcnt += files[fileidx].flags & FF_MARK ? 1 : -1;
|
||||||
if (mode == MODE_THUMB)
|
if (mode == MODE_THUMB)
|
||||||
tns_mark(&tns, fileidx, !!(files[fileidx].flags & FF_MARK));
|
tns_mark(&tns, fileidx, !!(files[fileidx].flags & FF_MARK));
|
||||||
|
toggledidx = fileidx;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,6 +214,39 @@ bool cg_reverse_marks(arg_t _)
|
||||||
return true;
|
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 _)
|
bool cg_unmark_all(arg_t _)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -11,6 +11,7 @@ G_CMD(scroll_screen)
|
||||||
G_CMD(zoom)
|
G_CMD(zoom)
|
||||||
G_CMD(toggle_image_mark)
|
G_CMD(toggle_image_mark)
|
||||||
G_CMD(reverse_marks)
|
G_CMD(reverse_marks)
|
||||||
|
G_CMD(mark_range)
|
||||||
G_CMD(unmark_all)
|
G_CMD(unmark_all)
|
||||||
G_CMD(navigate_marked)
|
G_CMD(navigate_marked)
|
||||||
G_CMD(change_gamma)
|
G_CMD(change_gamma)
|
||||||
|
|
|
@ -91,6 +91,7 @@ static const keymap_t keys[] = {
|
||||||
{ 0, XK_KP_Subtract, g_zoom, -1 },
|
{ 0, XK_KP_Subtract, g_zoom, -1 },
|
||||||
{ 0, XK_m, g_toggle_image_mark, None },
|
{ 0, XK_m, g_toggle_image_mark, None },
|
||||||
{ 0, XK_M, g_reverse_marks, None },
|
{ 0, XK_M, g_reverse_marks, None },
|
||||||
|
{ ControlMask, XK_M, g_mark_range, None },
|
||||||
{ ControlMask, XK_m, g_unmark_all, None },
|
{ ControlMask, XK_m, g_unmark_all, None },
|
||||||
{ 0, XK_N, g_navigate_marked, +1 },
|
{ 0, XK_N, g_navigate_marked, +1 },
|
||||||
{ 0, XK_P, g_navigate_marked, -1 },
|
{ 0, XK_P, g_navigate_marked, -1 },
|
||||||
|
|
1
main.c
1
main.c
|
@ -57,6 +57,7 @@ fileinfo_t *files;
|
||||||
int filecnt, fileidx;
|
int filecnt, fileidx;
|
||||||
int alternate;
|
int alternate;
|
||||||
int markcnt;
|
int markcnt;
|
||||||
|
int toggledidx = -1;
|
||||||
|
|
||||||
int prefix;
|
int prefix;
|
||||||
bool extprefix;
|
bool extprefix;
|
||||||
|
|
4
sxiv.1
4
sxiv.1
|
@ -172,6 +172,10 @@ Mark/unmark the current image.
|
||||||
.B M
|
.B M
|
||||||
Reverse all image marks.
|
Reverse all image marks.
|
||||||
.TP
|
.TP
|
||||||
|
.B Ctrl-M
|
||||||
|
Repeat last mark action on all images from the last marked/unmarked up to the
|
||||||
|
current one.
|
||||||
|
.TP
|
||||||
.B Ctrl-m
|
.B Ctrl-m
|
||||||
Remove all image marks.
|
Remove all image marks.
|
||||||
.TP
|
.TP
|
||||||
|
|
Loading…
Reference in a new issue