|  | @@ -140,8 +140,21 @@ $(document).ready(function() {
 | 
	
		
			
			| 140 | 140 |                  next = which;
 | 
	
		
			
			| 141 | 141 |              } else {
 | 
	
		
			
			| 142 | 142 |                  switch (which) {
 | 
	
		
			
			| 143 |  | -                    // case 'visible':
 | 
	
		
			
			| 144 |  | -                    // TODO
 | 
	
		
			
			|  | 143 | +                    case 'visible':
 | 
	
		
			
			|  | 144 | +                        var top = $(window).scrollTop();
 | 
	
		
			
			|  | 145 | +                        var bot = top + $(window).height();
 | 
	
		
			
			|  | 146 | +                        var results = $('.result');
 | 
	
		
			
			|  | 147 | +
 | 
	
		
			
			|  | 148 | +                        for (var i = 0; i < results.length; i++) {
 | 
	
		
			
			|  | 149 | +                            next = $(results[i]);
 | 
	
		
			
			|  | 150 | +                            var etop = next.offset().top;
 | 
	
		
			
			|  | 151 | +                            var ebot = etop + next.height();
 | 
	
		
			
			|  | 152 | +
 | 
	
		
			
			|  | 153 | +                            if ((ebot <= bot) && (etop > top)) {
 | 
	
		
			
			|  | 154 | +                                break;
 | 
	
		
			
			|  | 155 | +                            }
 | 
	
		
			
			|  | 156 | +                        }
 | 
	
		
			
			|  | 157 | +                        break;
 | 
	
		
			
			| 145 | 158 |                      case 'down':
 | 
	
		
			
			| 146 | 159 |                          next = current.next('.result');
 | 
	
		
			
			| 147 | 160 |                          if (next.length === 0) {
 | 
	
	
		
			
			|  | @@ -163,8 +176,11 @@ $(document).ready(function() {
 | 
	
		
			
			| 163 | 176 |                  }
 | 
	
		
			
			| 164 | 177 |              }
 | 
	
		
			
			| 165 | 178 |  
 | 
	
		
			
			| 166 |  | -            current.removeAttr('data-vim-selected').removeClass('well well-sm');
 | 
	
		
			
			| 167 |  | -            next.attr('data-vim-selected', 'true').addClass('well well-sm');
 | 
	
		
			
			|  | 179 | +            if (next) {
 | 
	
		
			
			|  | 180 | +                current.removeAttr('data-vim-selected').removeClass('well well-sm');
 | 
	
		
			
			|  | 181 | +                next.attr('data-vim-selected', 'true').addClass('well well-sm');
 | 
	
		
			
			|  | 182 | +                scrollPageToSelected();
 | 
	
		
			
			|  | 183 | +            }
 | 
	
		
			
			| 168 | 184 |          }
 | 
	
		
			
			| 169 | 185 |      }
 | 
	
		
			
			| 170 | 186 |  
 | 
	
	
		
			
			|  | @@ -193,6 +209,31 @@ $(document).ready(function() {
 | 
	
		
			
			| 193 | 209 |          }
 | 
	
		
			
			| 194 | 210 |      }
 | 
	
		
			
			| 195 | 211 |  
 | 
	
		
			
			|  | 212 | +    function scrollPageToSelected() {
 | 
	
		
			
			|  | 213 | +        var sel = $('.result[data-vim-selected]');
 | 
	
		
			
			|  | 214 | +        if (sel.length !== 1) {
 | 
	
		
			
			|  | 215 | +            return;
 | 
	
		
			
			|  | 216 | +        }
 | 
	
		
			
			|  | 217 | +
 | 
	
		
			
			|  | 218 | +        var wnd = $(window);
 | 
	
		
			
			|  | 219 | +
 | 
	
		
			
			|  | 220 | +        var wtop = wnd.scrollTop();
 | 
	
		
			
			|  | 221 | +        var etop = sel.offset().top;
 | 
	
		
			
			|  | 222 | +
 | 
	
		
			
			|  | 223 | +        var offset = 30;
 | 
	
		
			
			|  | 224 | +
 | 
	
		
			
			|  | 225 | +        if (wtop > etop) {
 | 
	
		
			
			|  | 226 | +            wnd.scrollTop(etop - offset);
 | 
	
		
			
			|  | 227 | +        } else  {
 | 
	
		
			
			|  | 228 | +            var ebot = etop + sel.height();
 | 
	
		
			
			|  | 229 | +            var wbot = wtop + wnd.height();
 | 
	
		
			
			|  | 230 | +
 | 
	
		
			
			|  | 231 | +            if (wbot < ebot) {
 | 
	
		
			
			|  | 232 | +                wnd.scrollTop(ebot - wnd.height() + offset);
 | 
	
		
			
			|  | 233 | +            }
 | 
	
		
			
			|  | 234 | +        }
 | 
	
		
			
			|  | 235 | +    }
 | 
	
		
			
			|  | 236 | +
 | 
	
		
			
			| 196 | 237 |      function scrollPage(amount) {
 | 
	
		
			
			| 197 | 238 |          return function() {
 | 
	
		
			
			| 198 | 239 |              window.scrollBy(0, amount);
 |