diff --git a/README.md b/README.md index 064fb70..cf3797f 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,6 @@ sxiv supports the following command-line options: Use the following keys to control the basic behaviour of sxiv: q Quit sxiv - Escape Quit sxiv and return an exit value of 2 (useful for scripting) f Toggle fullscreen mode (requires an EWMH/NetWM compliant window manager) @@ -73,6 +72,7 @@ Inside image view mode, the following key mappings are available: a Toggle anti-aliasing A Toggle visibility of alpha-channel, i.e. transparency r Reload image + D Remove image from file list and go to next image Return Switch to thumbnail mode Additionally, the image view offers the following mouse commands: @@ -91,6 +91,7 @@ In thumbnail mode, the following key and mouse mappings are available: h,j,k,l Move selection left/down/up/right (also with arrow keys) g/G Move selection to first/last image + D Remove selected image from file list and select next image Return Open selected image Button1 Select image/open image if it is already selected diff --git a/main.c b/main.c index 1efdfed..8c0b575 100644 --- a/main.c +++ b/main.c @@ -370,7 +370,7 @@ void redraw() { } void on_keypress(XKeyEvent *kev) { - int x, y; + int i, x, y; unsigned int w, h; char key; KeySym ksym; @@ -385,10 +385,10 @@ void on_keypress(XKeyEvent *kev) { #ifdef EXT_COMMANDS /* external commands from commands.h */ if (CLEANMASK(kev->state) & ControlMask) { - for (x = 0; x < LEN(commands); ++x) { - if (commands[x].ksym == ksym) { + for (i = 0; i < LEN(commands); ++i) { + if (commands[i].ksym == ksym) { win_set_cursor(&win, CURSOR_WATCH); - if (run_command(commands[x].cmdline, commands[x].reload)) { + if (run_command(commands[i].cmdline, commands[i].reload)) { if (mode == MODE_NORMAL) { img_close(&img, 1); load_image(fileidx); @@ -571,6 +571,38 @@ void on_keypress(XKeyEvent *kev) { win_toggle_fullscreen(&win); /* render on next configurenotify */ break; + + case XK_D: + if (mode == MODE_THUMBS) { + if (tns.sel >= tns.cnt) + break; + i = tns.sel; + } else { + i = fileidx; + } + if (filecnt == 1) { + cleanup(); + exit(0); + } + if (i + 1 < filecnt) + memmove(filenames + i, filenames + i + 1, (filecnt - i - 1) * + sizeof(const char*)); + else if (fileidx) + fileidx--; + if (i + 1 < tns.cnt) { + memmove(tns.thumbs + i, tns.thumbs + i + 1, (tns.cnt - i - 1) * + sizeof(thumb_t)); + memset(tns.thumbs + tns.cnt - 1, 0, sizeof(thumb_t)); + } else if (tns.sel) { + tns.sel--; + } + filecnt--; + if (mode == MODE_NORMAL) + load_image(fileidx); + if (i < tns.cnt) + tns.cnt--; + changed = tns.dirty = 1; + break; } if (changed) diff --git a/sxiv.1 b/sxiv.1 index 068b388..7eb1e20 100644 --- a/sxiv.1 +++ b/sxiv.1 @@ -82,9 +82,6 @@ at startup. .B q Quit sxiv. .TP -.B Escape -Quit sxiv and return an exit value of 2. -.TP .B Return Switch to thumbnail mode; in thumbnail mode: open selected image. .SS Navigate image list @@ -156,6 +153,10 @@ Toggle visibility of alpha-channel, i.e. image transparency. .TP .B r Reload image. +.TP +.B D +Remove image from file list and go to next image; in thumbnail mode: remove +selected image from file list and select next image. .SH MOUSE COMMANDS .SS Navigate image list .TP