about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--ranger/core/actions.py12
-rw-r--r--ranger/ext/direction.py11
2 files changed, 10 insertions, 13 deletions
diff --git a/ranger/core/actions.py b/ranger/core/actions.py
index 15d0d017..b320396a 100644
--- a/ranger/core/actions.py
+++ b/ranger/core/actions.py
@@ -547,19 +547,19 @@ class Actions(FileManagerAware, EnvironmentAware, SettingsAware):
 		cwd = self.env.cwd
 		if not narg and not dirarg:
 			selected = (f for f in self.env.get_selection() if f in cwd.files)
-			self.env.copy = set(selected)
 		else:
-			direction = Direction(dirarg or {})
-			offset = 0
-			if not direction.vertical():
+			if not dirarg and narg:
 				direction = Direction(down=1)
-				offset = -1
+				offset = 0
+			else:
+				direction = Direction(dirarg)
+				offset = 1
 			pos, selected = direction.select(
 					override=narg, lst=cwd.files, current=cwd.pointer,
 					pagesize=self.env.termsize[0], offset=offset)
-			self.env.copy = set(selected)
 			self.env.cwd.pointer = pos
 			self.env.cwd.correct_pointer()
+		self.env.copy = set(selected)
 		self.env.cut = False
 		self.ui.browser.main_column.request_redraw()
 
diff --git a/ranger/ext/direction.py b/ranger/ext/direction.py
index cefd32bc..b9fbcac9 100644
--- a/ranger/ext/direction.py
+++ b/ranger/ext/direction.py
@@ -134,11 +134,8 @@ class Direction(dict):
 			pos += current
 		return int(max(min(pos, maximum + offset - 1), minimum))
 
-	def select(self, lst, override, current, pagesize, offset=0):
-		destination = self.move(direction=self.down(), override=override,
+	def select(self, lst, override, current, pagesize, offset=1):
+		dest = self.move(direction=self.down(), override=override,
 			current=current, pagesize=pagesize, minimum=0, maximum=len(lst))
-		if destination > current:
-			destination += offset
-			return destination, lst[current:destination + 1]
-		destination -= offset
-		return destination, lst[destination:current + 1]
+		selection = lst[min(current, dest):max(current, dest) + offset]
+		return dest + offset - 1, selection