summary refs log tree commit diff stats
path: root/ranger/gui
diff options
context:
space:
mode:
authorhut <hut@lavabit.com>2009-12-17 17:50:27 +0100
committerhut <hut@lavabit.com>2009-12-17 17:50:27 +0100
commit16246965082ce5d319f5cef07da3ff533ca50cc2 (patch)
treebbf080d50c33a5a910235cb0fdb018f738b17d22 /ranger/gui
parente48e3c5c5046bf992a563d112629f10a3adc8168 (diff)
downloadranger-16246965082ce5d319f5cef07da3ff533ca50cc2.tar.gz
tons of stuff
Diffstat (limited to 'ranger/gui')
-rw-r--r--ranger/gui/widgets/console.py53
-rw-r--r--ranger/gui/widgets/filelistcontainer.py2
2 files changed, 43 insertions, 12 deletions
diff --git a/ranger/gui/widgets/console.py b/ranger/gui/widgets/console.py
index 7421db98..ca21189c 100644
--- a/ranger/gui/widgets/console.py
+++ b/ranger/gui/widgets/console.py
@@ -11,6 +11,7 @@ class Console(Widget):
 	commandlist = None
 	last_cursor_mode = 1
 	prompt = ':'
+	copy = ''
 	tab_deque = None
 	original_line = None
 
@@ -90,6 +91,7 @@ class Console(Widget):
 			self.line = self.line[:self.pos] + key + self.line[self.pos:]
 
 		self.pos += len(key)
+		self.on_line_change()
 
 	def move(self, relative = 0, absolute = None):
 		if absolute is not None:
@@ -103,10 +105,21 @@ class Console(Widget):
 	def delete_rest(self, direction):
 		self.tab_deque = None
 		if direction > 0:
+			self.copy = self.line[self.pos:]
 			self.line = self.line[:self.pos]
 		else:
+			self.copy = self.line[:self.pos]
 			self.line = self.line[self.pos:]
 			self.pos = 0
+		self.on_line_change()
+
+	def paste(self):
+		if self.pos == len(self.line):
+			self.line += self.copy
+		else:
+			self.line = self.line[:self.pos] + self.copy + self.line[self.pos:]
+		self.pos += len(self.copy)
+		self.on_line_change()
 
 	def delete_word(self):
 		self.tab_deque = None
@@ -117,6 +130,7 @@ class Console(Widget):
 		except ValueError:
 			self.line = ''
 			self.pos = 0
+		self.on_line_change()
 	
 	def delete(self, mod):
 		self.tab_deque = None
@@ -126,21 +140,26 @@ class Console(Widget):
 
 		self.line = self.line[0:pos] + self.line[pos+1:]
 		self.move(relative = mod)
+		self.on_line_change()
 
 	def execute(self):
 		self.tab_deque = None
-		self.line = ''
-		self.pos = 0
+		self.clear()
 		self.close()
 
 	def tab(self):
 		pass
 
+	def on_line_change(self):
+		pass
+
 class CommandConsole(Console):
 	prompt = ':'
 
 	def execute(self):
-		commands.execute(self._get_cmd(), self.line)
+		cmd = self._get_cmd()
+		if cmd: cmd.execute()
+
 		Console.execute(self)
 	
 	def tab(self, n=1):
@@ -150,6 +169,7 @@ class CommandConsole(Console):
 			if isinstance(tab_result, str):
 				self.line = tab_result
 				self.pos = len(tab_result)
+				self.on_line_change()
 
 			elif tab_result == None:
 				pass
@@ -162,24 +182,35 @@ class CommandConsole(Console):
 			self.tab_deque.rotate(-n)
 			self.line = self.tab_deque[0]
 			self.pos = len(self.line)
+			self.on_line_change()
 
 	def _get_cmd(self):
 		try:
-			return self.line.split()[0]
+			command_name = self.line.split()[0]
 		except:
-			return ''
+			return None
+
+		try:
+			command_class = commands.by_name[command_name]
+		except KeyError:
+			return None
+
+		return command_class(self.line, self.mode)
 	
 	def _get_tab(self):
 		cmd = self._get_cmd()
-		try:
-			return commands.tab(cmd, self.line)
-		except KeyError:
-			return commands.tab(None, self.line)
+		if cmd:
+			return cmd.tab()
+		else:
+			return None
 
 
-class QuickCommandConsole(Console):
+class QuickCommandConsole(CommandConsole):
 	prompt = '>'
-
+	def on_line_change(self):
+		cmd = self._get_cmd()
+		if cmd and cmd.quick_open():
+			self.execute()
 
 class SearchConsole(Console):
 	prompt = '/'
diff --git a/ranger/gui/widgets/filelistcontainer.py b/ranger/gui/widgets/filelistcontainer.py
index cc45f2c9..6e925f83 100644
--- a/ranger/gui/widgets/filelistcontainer.py
+++ b/ranger/gui/widgets/filelistcontainer.py
@@ -20,7 +20,7 @@ class FileListContainer(Widget, DisplayableContainer):
 		ratio_sum = float(reduce(lambda x,y: x + y, ratios))
 		self.ratios = tuple(map(lambda x: x / ratio_sum, ratios))
 
-		if self.ratios >= 2:
+		if len(self.ratios) >= 2:
 			self.stretch_ratios = self.ratios[:-2] + \
 					((self.ratios[-2] + self.ratios[-1] * 0.9), \
 					(self.ratios[-1] * 0.1))