summary refs log tree commit diff stats
path: root/ranger/core/actions.py
diff options
context:
space:
mode:
Diffstat (limited to 'ranger/core/actions.py')
-rw-r--r--ranger/core/actions.py42
1 files changed, 18 insertions, 24 deletions
diff --git a/ranger/core/actions.py b/ranger/core/actions.py
index b52ae0ed..51a70844 100644
--- a/ranger/core/actions.py
+++ b/ranger/core/actions.py
@@ -17,7 +17,7 @@ import os
 import re
 import shutil
 import string
-from os.path import join, isdir
+from os.path import join, isdir, realpath
 from os import symlink, getcwd
 from inspect import cleandoc
 
@@ -430,39 +430,33 @@ class Actions(FileManagerAware, EnvironmentAware, SettingsAware):
 	# Tags are saved in ~/.config/ranger/tagged and simply mark if a
 	# file is important to you in any context.
 
-	def tag_toggle(self, movedown=None):
-		try:
-			toggle = self.tags.toggle
-		except AttributeError:
+	def tag_toggle(self, paths=None, value=None, movedown=None):
+		if not self.tags:
 			return
-
-		sel = self.env.get_selection()
-		toggle(*tuple(map(lambda x: x.realpath, sel)))
+		if paths is None:
+			tags = tuple(x.realpath for x in self.env.get_selection())
+		else:
+			tags = [realpath(path) for path in paths]
+		if value is True:
+			self.tags.add(*tags)
+		elif value is False:
+			self.tags.remove(*tags)
+		else:
+			self.tags.toggle(*tags)
 
 		if movedown is None:
-			movedown = len(sel) == 1
+			movedown = len(tags) == 1 and paths is None
 		if movedown:
 			self.move(down=1)
 
 		if hasattr(self.ui, 'redraw_main_column'):
 			self.ui.redraw_main_column()
 
-	def tag_remove(self, movedown=None):
-		try:
-			remove = self.tags.remove
-		except AttributeError:
-			return
-
-		sel = self.env.get_selection()
-		remove(*tuple(map(lambda x: x.realpath, sel)))
+	def tag_remove(self, paths=None, movedown=None):
+		self.tag_toggle(paths=paths, value=False, movedown=movedown)
 
-		if movedown is None:
-			movedown = len(sel) == 1
-		if movedown:
-			self.move(down=1)
-
-		if hasattr(self.ui, 'redraw_main_column'):
-			self.ui.redraw_main_column()
+	def tag_add(self, paths=None, movedown=None):
+		self.tag_toggle(paths=paths, value=True, movedown=movedown)
 
 	# --------------------------
 	# -- Bookmarks