summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorWojciech Siewierski <wojciech.siewierski@onet.pl>2017-07-24 22:38:48 +0200
committerWojciech Siewierski <wojciech.siewierski@onet.pl>2017-07-28 23:18:14 +0200
commitbd1cd0d67060f8305655e2edb1ba095c7e1445ac (patch)
treeae71220bf20a582ba57e26e971cadc56665492b9
parent1bbee381f5c25f903cd70d2d56d6204cadf373dd (diff)
downloadranger-bd1cd0d67060f8305655e2edb1ba095c7e1445ac.tar.gz
Make the pagewise scrolling symmetrical
Moving half a page down and back up should put the user in the
original position. It was true only if the file count was even. If it
was odd, the user ended up one file above the originally focused one.
-rw-r--r--ranger/ext/direction.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/ranger/ext/direction.py b/ranger/ext/direction.py
index bbb69c9b..e337c26e 100644
--- a/ranger/ext/direction.py
+++ b/ranger/ext/direction.py
@@ -20,6 +20,8 @@ False
 
 from __future__ import (absolute_import, division, print_function)
 
+import math
+
 
 class Direction(dict):
 
@@ -142,8 +144,16 @@ class Direction(dict):
         if self.cycle():
             cycles, pos = divmod(pos, (maximum + offset - minimum))
             self['_move_cycles'] = int(cycles)
-            return int(minimum + pos)
-        return int(max(min(pos, maximum + offset - 1), minimum))
+            ret = minimum + pos
+        else:
+            ret = max(min(pos, maximum + offset - 1), minimum)
+        # Round towards the direction we're moving from.
+        # From the UI point of view, round down. See: #912.
+        if direction < 0:
+            ret = int(math.ceil(ret))
+        else:
+            ret = int(ret)
+        return ret
 
     def move_cycles(self):
         return self.get('_move_cycles', 0)