about summary refs log tree commit diff stats
path: root/ranger/actions.py
diff options
context:
space:
mode:
authorhut <hut@lavabit.com>2009-12-27 16:09:33 +0100
committerhut <hut@lavabit.com>2009-12-27 16:09:33 +0100
commitd309f218d7d00405d5bca2f8c77344ce0c33a0bb (patch)
treef6f1b9e8bb9a0d98eedd3f29bfc8a89336a9acff /ranger/actions.py
parentef0ee84300be230ab5ef417f4a303d07e5b5f0b9 (diff)
downloadranger-d309f218d7d00405d5bca2f8c77344ce0c33a0bb.tar.gz
changed search implementation
Diffstat (limited to 'ranger/actions.py')
-rw-r--r--ranger/actions.py41
1 files changed, 32 insertions, 9 deletions
diff --git a/ranger/actions.py b/ranger/actions.py
index e1005201..9ccbc93f 100644
--- a/ranger/actions.py
+++ b/ranger/actions.py
@@ -5,15 +5,38 @@ from ranger.shared import EnvironmentAware, SettingsAware
 from ranger import fsobject
 
 class Actions(EnvironmentAware, SettingsAware):
-	def search_forward(self):
-		"""Search forward for the regexp in self.env.last_search"""
-		if self.env.pwd:
-			self.env.pwd.search(self.env.last_search)
-
-	def search_backward(self):
-		"""Search backward for the regexp in self.env.last_search"""
-		if self.env.pwd:
-			self.env.pwd.search(self.env.last_search, -1)
+	search_method = None
+	search_forward = False
+
+	def search(self, order=None, forward=True):
+		if self.search_forward:
+			direction = bool(forward)
+		else:
+			direction = not bool(forward)
+
+		if order is None:
+			order = self.search_method
+		else:
+			self.set_search_method(order=order)
+
+		if order in ('search', 'tag'):
+			if order == 'search':
+				arg = self.env.last_search
+				if arg is None:
+					return False
+				if hasattr(arg, 'search'):
+					fnc = lambda x: arg.search(x.basename)
+				else:
+					fnc = lambda x: arg in x.basename
+			elif order == 'tag':
+				fnc = lambda x: x.realpath in self.tags
+
+			return self.env.pwd.search_fnc(fnc=fnc, forward=forward)
+
+	def set_search_method(self, order, forward=True):
+		if order in ('search', 'tag', 'size', 'type', 'time'):
+			self.search_method = order
+			self.search_forward = forward
 
 	def interrupt(self):
 		"""