New mappings: ctrl-[hjkl], pan image one window width/height

This commit is contained in:
Bert 2011-06-03 23:39:22 +02:00
parent ea23115af4
commit a6100373c1
6 changed files with 44 additions and 23 deletions

View file

@ -1,6 +1,6 @@
all: sxiv all: sxiv
VERSION=git-20110529 VERSION=git-20110603
CC?=gcc CC?=gcc
DESTDIR?= DESTDIR?=

View file

@ -69,6 +69,8 @@ thumbnail mode are denoted via brackets:
h,j,k,l Pan image [move selection] left/down/up/right h,j,k,l Pan image [move selection] left/down/up/right
(also with arrow keys) (also with arrow keys)
H,J,K,L Pan to left/bottom/top/right image edge H,J,K,L Pan to left/bottom/top/right image edge
Ctrl-h,j,k,l Pan image one window width/height left/down/up/right
(also with Ctrl-arrow keys)
<,> Rotate image (counter-)clockwise by 90 degrees <,> Rotate image (counter-)clockwise by 90 degrees

10
image.c
View file

@ -275,19 +275,19 @@ int img_move(img_t *img, win_t *win, int dx, int dy) {
return ox != img->x || oy != img->y; return ox != img->x || oy != img->y;
} }
int img_pan(img_t *img, win_t *win, pandir_t dir) { int img_pan(img_t *img, win_t *win, pandir_t dir, int page) {
if (!img || !img->im || !win) if (!img || !img->im || !win)
return 0; return 0;
switch (dir) { switch (dir) {
case PAN_LEFT: case PAN_LEFT:
return img_move(img, win, win->w / 5, 0); return img_move(img, win, win->w / (page ? 1 : 5), 0);
case PAN_RIGHT: case PAN_RIGHT:
return img_move(img, win, win->w / 5 * -1, 0); return img_move(img, win, win->w / (page ? 1 : 5) * -1, 0);
case PAN_UP: case PAN_UP:
return img_move(img, win, 0, win->h / 5); return img_move(img, win, 0, win->h / (page ? 1 : 5));
case PAN_DOWN: case PAN_DOWN:
return img_move(img, win, 0, win->h / 5 * -1); return img_move(img, win, 0, win->h / (page ? 1 : 5) * -1);
} }
return 0; return 0;

View file

@ -68,7 +68,7 @@ int img_zoom_in(img_t*, win_t*);
int img_zoom_out(img_t*, win_t*); int img_zoom_out(img_t*, win_t*);
int img_move(img_t*, win_t*, int, int); int img_move(img_t*, win_t*, int, int);
int img_pan(img_t*, win_t*, pandir_t); int img_pan(img_t*, win_t*, pandir_t, int);
int img_pan_edge(img_t*, win_t*, pandir_t); int img_pan_edge(img_t*, win_t*, pandir_t);
void img_rotate_left(img_t*, win_t*); void img_rotate_left(img_t*, win_t*);

31
main.c
View file

@ -357,17 +357,18 @@ void on_keypress(XKeyEvent *kev) {
unsigned int w, h; unsigned int w, h;
char key; char key;
KeySym ksym; KeySym ksym;
int changed; int changed, ctrl;
if (!kev) if (!kev)
return; return;
XLookupString(kev, &key, 1, &ksym, NULL); XLookupString(kev, &key, 1, &ksym, NULL);
changed = 0; changed = 0;
ctrl = CLEANMASK(kev->state) & ControlMask;
#if EXT_COMMANDS #if EXT_COMMANDS
/* external commands from commands.h */ /* external commands from commands.h */
if (CLEANMASK(kev->state) & ControlMask) { if (ctrl) {
for (x = 0; x < LEN(commands); ++x) { for (x = 0; x < LEN(commands); ++x) {
if (commands[x].ksym == ksym) { if (commands[x].ksym == ksym) {
win_set_cursor(&win, CURSOR_WATCH); win_set_cursor(&win, CURSOR_WATCH);
@ -446,19 +447,25 @@ void on_keypress(XKeyEvent *kev) {
/* panning */ /* panning */
case XK_h: case XK_h:
case XK_Left: case XK_Left:
changed = img_pan(&img, &win, PAN_LEFT); changed = img_pan(&img, &win, PAN_LEFT, ctrl);
break; break;
case XK_j: case XK_j:
case XK_Down: case XK_Down:
changed = img_pan(&img, &win, PAN_DOWN); changed = img_pan(&img, &win, PAN_DOWN, ctrl);
break; break;
case XK_k: case XK_k:
case XK_Up: case XK_Up:
changed = img_pan(&img, &win, PAN_UP); changed = img_pan(&img, &win, PAN_UP, ctrl);
break; break;
case XK_l: case XK_l:
case XK_Right: case XK_Right:
changed = img_pan(&img, &win, PAN_RIGHT); changed = img_pan(&img, &win, PAN_RIGHT, ctrl);
break;
case XK_Prior:
changed = img_pan(&img, &win, PAN_UP, 1);
break;
case XK_Next:
changed = img_pan(&img, &win, PAN_DOWN, 1);
break; break;
case XK_H: case XK_H:
@ -632,23 +639,23 @@ void on_buttonpress(XButtonEvent *bev) {
if (mask == ControlMask) if (mask == ControlMask)
changed = img_zoom_in(&img, &win); changed = img_zoom_in(&img, &win);
else if (mask == ShiftMask) else if (mask == ShiftMask)
changed = img_pan(&img, &win, PAN_LEFT); changed = img_pan(&img, &win, PAN_LEFT, 0);
else else
changed = img_pan(&img, &win, PAN_UP); changed = img_pan(&img, &win, PAN_UP, 0);
break; break;
case Button5: case Button5:
if (mask == ControlMask) if (mask == ControlMask)
changed = img_zoom_out(&img, &win); changed = img_zoom_out(&img, &win);
else if (mask == ShiftMask) else if (mask == ShiftMask)
changed = img_pan(&img, &win, PAN_RIGHT); changed = img_pan(&img, &win, PAN_RIGHT, 0);
else else
changed = img_pan(&img, &win, PAN_DOWN); changed = img_pan(&img, &win, PAN_DOWN, 0);
break; break;
case 6: case 6:
changed = img_pan(&img, &win, PAN_LEFT); changed = img_pan(&img, &win, PAN_LEFT, 0);
break; break;
case 7: case 7:
changed = img_pan(&img, &win, PAN_RIGHT); changed = img_pan(&img, &win, PAN_RIGHT, 0);
break; break;
} }
} else { } else {

20
sxiv.1
View file

@ -138,17 +138,29 @@ Pan image [move selection] up.
.BR l ", " Right .BR l ", " Right
Pan image [move selection] right. Pan image [move selection] right.
.TP .TP
.BR H .B H
Pan to left image edge. Pan to left image edge.
.TP .TP
.BR J .B J
Pan to bottom image edge. Pan to bottom image edge.
.TP .TP
.BR K .B K
Pan to top image edge. Pan to top image edge.
.TP .TP
.BR L .B L
Pan to right image edge. Pan to right image edge.
.TP
.BR Ctrl-h ", " Ctrl-Left
Pan image one window width left.
.TP
.BR Ctrl-j ", " Ctrl-Down ", " PageDn
Pan image one window height down.
.TP
.BR Ctrl-k ", " Ctrl-Up ", " PageUp
Pan image one window height up.
.TP
.BR Ctrl-l ", " Ctrl-Right
Pan image one window width right.
.SS Rotation .SS Rotation
.TP .TP
.B < .B <