Krolyxon
Commit dc727b8

Branches

Refs →

nsxivdc727b8

Added support for number prefix for commands

Author
Bert Münnich
Date
2011-10-16 16:08 +0200
Parent
960026d
Commit
dc727b8dce89811d755ed03d11688b13a42e794a

+21 −10

4 files changed

  1. M commands.c +9 −5
  2. M commands.h +1 −1
  3. M config.def.h +2 −4
  4. M main.c +9 −0
M commands.c View
@@ -46,6 +46,8 @@ extern win_t win;
4646 extern fileinfo_t *files;
4747 extern int filecnt, fileidx;
4848
49+extern int prefix;
50+
4951 bool it_quit(arg_t a) {
5052 cleanup();
5153 exit(EXIT_SUCCESS);
@@ -143,12 +145,14 @@ bool it_first(arg_t a) {
143145 }
144146 }
145147
146−bool it_last(arg_t a) {
147− if (mode == MODE_IMAGE && fileidx != filecnt - 1) {
148− load_image(filecnt - 1);
148+bool it_n_or_last(arg_t a) {
149+ int n = prefix != 0 && prefix - 1 < filecnt ? prefix - 1 : filecnt - 1;
150+
151+ if (mode == MODE_IMAGE && fileidx != n) {
152+ load_image(n);
149153 return true;
150− } else if (mode == MODE_THUMB && tns.sel != tns.cnt - 1) {
151− tns.sel = tns.cnt - 1;
154+ } else if (mode == MODE_THUMB && tns.sel != n) {
155+ tns.sel = n;
152156 tns.dirty = true;
153157 return true;
154158 } else {
M commands.h View
@@ -48,7 +48,7 @@ bool it_reload_image(arg_t);
4848 bool it_remove_image(arg_t);
4949 bool i_navigate(arg_t);
5050 bool it_first(arg_t);
51−bool it_last(arg_t);
51+bool it_n_or_last(arg_t);
5252 bool i_navigate_frame(arg_t);
5353 bool i_toggle_animation(arg_t);
5454 bool it_move(arg_t);
M config.def.h View
@@ -79,7 +79,7 @@ static const keymap_t keys[] = {
7979 { false, XK_bracketright, i_navigate, (arg_t) +10 },
8080 { false, XK_bracketleft, i_navigate, (arg_t) -10 },
8181 { false, XK_g, it_first, (arg_t) None },
82− { false, XK_G, it_last, (arg_t) None },
82+ { false, XK_G, it_n_or_last, (arg_t) None },
8383
8484 { true, XK_n, i_navigate_frame, (arg_t) +1 },
8585 { true, XK_p, i_navigate_frame, (arg_t) -1 },
@@ -109,12 +109,10 @@ static const keymap_t keys[] = {
109109 { false, XK_L, i_pan_edge, (arg_t) DIR_RIGHT },
110110
111111 { false, XK_plus, i_zoom, (arg_t) +1 },
112− { false, XK_equal, i_zoom, (arg_t) +1 },
113112 { false, XK_KP_Add, i_zoom, (arg_t) +1 },
114113 { false, XK_minus, i_zoom, (arg_t) -1 },
115114 { false, XK_KP_Subtract, i_zoom, (arg_t) -1 },
116− { false, XK_0, i_zoom, (arg_t) None },
117− { false, XK_KP_0, i_zoom, (arg_t) None },
115+ { false, XK_equal, i_zoom, (arg_t) None },
118116 { false, XK_w, i_fit_to_win, (arg_t) None },
119117 { false, XK_W, i_fit_to_img, (arg_t) None },
120118
M main.c View
@@ -63,6 +63,8 @@ fileinfo_t *files;
6363 int filecnt, fileidx;
6464 size_t filesize;
6565
66+int prefix;
67+
6668 char win_title[TITLE_LEN];
6769
6870 timeout_t timeouts[] = {
@@ -335,10 +337,17 @@ void on_keypress(XKeyEvent *kev) {
335337
336338 XLookupString(kev, &key, 1, &ksym, NULL);
337339
340+ if (key >= '0' && key <= '9' && (kev->state & ControlMask) == 0) {
341+ /* number prefix for commands */
342+ prefix = prefix * 10 + (int) (key - '0');
343+ return;
344+ }
345+
338346 for (i = 0; i < ARRLEN(keys); i++) {
339347 if (keys[i].ksym == ksym && keymask(&keys[i], kev->state)) {
340348 if (keys[i].cmd != NULL && keys[i].cmd(keys[i].arg))
341349 redraw();
350+ prefix = 0;
342351 return;
343352 }
344353 }