diff options
| author | baskerville <nihilhill@gmail.com> | 2012-07-15 10:30:58 +0200 | 
|---|---|---|
| committer | baskerville <nihilhill@gmail.com> | 2012-07-15 10:30:58 +0200 | 
| commit | c330b55de4035b058965d45989a14662b99a77a3 (patch) | |
| tree | f1e270bd074a345fd794ffa6d212eaeebf9617b0 | |
| parent | 4451f4a5eb62beda28cdb5f32ca57dc654b66621 (diff) | |
handle count prefix in thumbnail movements
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | commands.c | 2 | ||||
| -rw-r--r-- | sxiv.1 | 16 | ||||
| -rw-r--r-- | thumbs.c | 17 | ||||
| -rw-r--r-- | thumbs.h | 2 | 
5 files changed, 21 insertions, 18 deletions
| @@ -99,7 +99,7 @@ The following general key commands are available:  The following additional key commands are available in *thumbnail mode*: -    h,j,k,l      Move selection left/down/up/right +    h,j,k,l      Move selection left/down/up/right [count] times      Ctrl-j,k     Scroll thumbnail grid one window height down/up  The following additional key commands are available in *image mode*: @@ -209,7 +209,7 @@ bool it_scroll_move(arg_t a) {  	if (mode == MODE_IMAGE)  		return img_pan(&img, dir, prefix);  	else -		return tns_move_selection(&tns, dir); +		return tns_move_selection(&tns, dir, prefix);  }  bool it_scroll_screen(arg_t a) { @@ -126,16 +126,24 @@ Remove current image from file list and go to next image.  The following keyboard commands are only available in thumbnail mode:  .TP  .BR h ", " Left -Move selection left. +Move selection left +.I count +times.  .TP  .BR j ", " Down -Move selection down. +Move selection down +.I count +times.  .TP  .BR k ", " Up -Move selection up. +Move selection up +.I count +times.  .TP  .BR l ", " Right -Move selection right. +Move selection right +.I count +times.  .TP  .BR Ctrl-j ", " Ctrl-Down  Scroll thumbnail grid one window height down. @@ -390,8 +390,9 @@ void tns_highlight(tns_t *tns, int n, bool hl) {  	}  } -bool tns_move_selection(tns_t *tns, direction_t dir) { +bool tns_move_selection(tns_t *tns, direction_t dir, int count) {  	int old; +    int c = (count > 0 ? count : 1);  	if (tns == NULL || tns->thumbs == NULL)  		return false; @@ -400,22 +401,16 @@ bool tns_move_selection(tns_t *tns, direction_t dir) {  	switch (dir) {  		case DIR_UP: -			if (tns->sel >= tns->cols) -				tns->sel -= tns->cols; +            tns->sel = MAX(tns->sel - c * tns->cols, tns->sel % tns->cols);  			break;  		case DIR_DOWN: -			if (tns->sel + tns->cols < tns->cnt) -				tns->sel += tns->cols; -			else if (tns->sel < tns->cnt - tns->cnt % tns->cols) -				tns->sel = tns->cnt - 1; +            tns->sel = MIN(tns->sel + c * tns->cols, tns->cols * ((tns->cnt - 1) / tns->cols) + MIN((tns->cnt - 1) % tns->cols, tns->sel % tns->cols));  			break;  		case DIR_LEFT: -			if (tns->sel > 0) -				tns->sel--; +            tns->sel = MAX(tns->sel - c, 0);  			break;  		case DIR_RIGHT: -			if (tns->sel < tns->cnt - 1) -				tns->sel++; +			tns->sel = MIN(tns->sel + c, tns->cnt - 1);  			break;  	} @@ -61,7 +61,7 @@ bool tns_load(tns_t*, int, const fileinfo_t*, bool, bool);  void tns_render(tns_t*);  void tns_highlight(tns_t*, int, bool); -bool tns_move_selection(tns_t*, direction_t); +bool tns_move_selection(tns_t*, direction_t, int);  bool tns_scroll(tns_t*, direction_t, bool);  int tns_translate(tns_t*, int, int); | 
