From bd1cd0d67060f8305655e2edb1ba095c7e1445ac Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Mon, 24 Jul 2017 22:38:48 +0200 Subject: 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. --- ranger/ext/direction.py | 14 ++++++++++++-- 1 file 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) -- cgit 1.4.1-2-gfad0