|  | @@ -508,13 +508,25 @@ static int main_loop ( struct settings *settings ) {
 | 
		
	
		
			
			| 508 | 508 |  			key = getkey ( 0 );
 | 
		
	
		
			
			| 509 | 509 |  			move = 0;
 | 
		
	
		
			
			| 510 | 510 |  			switch ( key ) {
 | 
		
	
		
			
			|  | 511 | +			case KEY_UP:
 | 
		
	
		
			
			|  | 512 | +				move = -1;
 | 
		
	
		
			
			|  | 513 | +				break;
 | 
		
	
		
			
			| 511 | 514 |  			case KEY_DOWN:
 | 
		
	
		
			
			| 512 |  | -				if ( widget.current < ( widget.num_rows - 1 ) )
 | 
		
	
		
			
			| 513 |  | -					move = +1;
 | 
		
	
		
			
			|  | 515 | +				move = +1;
 | 
		
	
		
			
			| 514 | 516 |  				break;
 | 
		
	
		
			
			| 515 |  | -			case KEY_UP:
 | 
		
	
		
			
			| 516 |  | -				if ( widget.current > 0 )
 | 
		
	
		
			
			| 517 |  | -					move = -1;
 | 
		
	
		
			
			|  | 517 | +			case KEY_PPAGE:
 | 
		
	
		
			
			|  | 518 | +				move = ( widget.first_visible -
 | 
		
	
		
			
			|  | 519 | +					 widget.current - 1 );
 | 
		
	
		
			
			|  | 520 | +				break;
 | 
		
	
		
			
			|  | 521 | +			case KEY_NPAGE:
 | 
		
	
		
			
			|  | 522 | +				move = ( widget.first_visible - widget.current
 | 
		
	
		
			
			|  | 523 | +					 + SETTINGS_LIST_ROWS );
 | 
		
	
		
			
			|  | 524 | +				break;
 | 
		
	
		
			
			|  | 525 | +			case KEY_HOME:
 | 
		
	
		
			
			|  | 526 | +				move = -widget.num_rows;
 | 
		
	
		
			
			|  | 527 | +				break;
 | 
		
	
		
			
			|  | 528 | +			case KEY_END:
 | 
		
	
		
			
			|  | 529 | +				move = +widget.num_rows;
 | 
		
	
		
			
			| 518 | 530 |  				break;
 | 
		
	
		
			
			| 519 | 531 |  			case CTRL_D:
 | 
		
	
		
			
			| 520 | 532 |  				if ( ! widget.row.setting )
 | 
		
	
	
		
			
			|  | @@ -545,10 +557,16 @@ static int main_loop ( struct settings *settings ) {
 | 
		
	
		
			
			| 545 | 557 |  			}
 | 
		
	
		
			
			| 546 | 558 |  			if ( move ) {
 | 
		
	
		
			
			| 547 | 559 |  				next = ( widget.current + move );
 | 
		
	
		
			
			| 548 |  | -				draw_setting_row ( &widget );
 | 
		
	
		
			
			| 549 |  | -				redraw = 1;
 | 
		
	
		
			
			| 550 |  | -				reveal_setting_row ( &widget, next );
 | 
		
	
		
			
			| 551 |  | -				select_setting_row ( &widget, next );
 | 
		
	
		
			
			|  | 560 | +				if ( ( int ) next < 0 )
 | 
		
	
		
			
			|  | 561 | +					next = 0;
 | 
		
	
		
			
			|  | 562 | +				if ( next >= widget.num_rows )
 | 
		
	
		
			
			|  | 563 | +					next = ( widget.num_rows - 1 );
 | 
		
	
		
			
			|  | 564 | +				if ( next != widget.current ) {
 | 
		
	
		
			
			|  | 565 | +					draw_setting_row ( &widget );
 | 
		
	
		
			
			|  | 566 | +					redraw = 1;
 | 
		
	
		
			
			|  | 567 | +					reveal_setting_row ( &widget, next );
 | 
		
	
		
			
			|  | 568 | +					select_setting_row ( &widget, next );
 | 
		
	
		
			
			|  | 569 | +				}
 | 
		
	
		
			
			| 552 | 570 |  			}
 | 
		
	
		
			
			| 553 | 571 |  		}
 | 
		
	
		
			
			| 554 | 572 |  	}
 |