summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--ranger/actions.py10
-rw-r--r--ranger/defaults/keys.py2
-rw-r--r--ranger/fsobject/directory.py19
-rw-r--r--ranger/fsobject/fsobject.py15
4 files changed, 29 insertions, 17 deletions
diff --git a/ranger/actions.py b/ranger/actions.py
index 6c597615..29d92ae5 100644
--- a/ranger/actions.py
+++ b/ranger/actions.py
@@ -89,14 +89,14 @@ class Actions(EnvironmentAware, SettingsAware):
 		mode is a positive integer.
 		Both flags and mode specify how the program is run."""
 
-		if type(files) not in (list, tuple, set):
+		if isinstance(files, set):
+			files = list(files)
+		elif type(files) not in (list, tuple):
 			files = [files]
 
-		arbitrary_file = tuple(files)[0]
-
 		return self.apps.get(app)(
-				mainfile = arbitrary_file,
-				files = files,
+				mainfile = files[0],
+				files = list(files),
 				flags = flags,
 				mode = mode,
 				fm = self,
diff --git a/ranger/defaults/keys.py b/ranger/defaults/keys.py
index 4df8305c..ebcca70b 100644
--- a/ranger/defaults/keys.py
+++ b/ranger/defaults/keys.py
@@ -124,7 +124,7 @@ def initialize_commands(command_list):
 	bind('gg', ggG(1))
 	bind('G', ggG(0))
 
-	bind('%', lambda fm, n: fm.move_pointer_by_percentage(absolute=n or 0))
+	bind('%', lambda fm, n: fm.move_pointer_by_percentage(absolute=n or 50))
 
 	def jk(direction):
 		# moves up or down by the specified number or one, in
diff --git a/ranger/fsobject/directory.py b/ranger/fsobject/directory.py
index 52c4cc60..461915db 100644
--- a/ranger/fsobject/directory.py
+++ b/ranger/fsobject/directory.py
@@ -103,11 +103,12 @@ class Directory(SuperClass, SettingsAware):
 			return set()
 	
 	def load_bit_by_bit(self):
-		"""Loads the contents of the directory. Use this sparingly since
-		it takes rather long.
+		"""
+		Returns a generator which load a part of the directory
+		in each iteration.
 		"""
 
-		log("generating loader for " + self.path + "(" + str(id(self)) + ")")
+#		log("generating loader for " + self.path + "(" + str(id(self)) + ")")
 		from os.path import join, isdir, basename
 		from os import listdir
 
@@ -154,6 +155,7 @@ class Directory(SuperClass, SettingsAware):
 					self.mark_item(item, False)
 
 			self.old_directories_first = None
+			self.sort()
 
 			if len(self.files) > 0:
 				if self.pointed_file is not None:
@@ -264,9 +266,11 @@ class Directory(SuperClass, SettingsAware):
 		for f in self.files:
 			if f.path == path:
 				self.move_pointer(absolute = i)
+				self.correct_pointer()
 				return True
 			i += 1
-		return False
+
+		return self.move_pointer(absolute=self.pointed_index)
 	
 	def search(self, arg, direction = 1):
 		"""Search for a regular expression"""
@@ -314,7 +318,7 @@ class Directory(SuperClass, SettingsAware):
 		
 	def load_content_once(self, *a, **k):
 		"""Load the contents of the directory if not done yet"""
-		if not self.content_loaded:
+		if not self.content_loaded and not self.loading:
 			self.load_content(*a, **k)
 			return True
 		return False
@@ -332,7 +336,10 @@ class Directory(SuperClass, SettingsAware):
 			return True
 
 		import os
-		real_mtime = os.lstat(self.path).st_mtime
+		try:
+			real_mtime = os.lstat(self.path).st_mtime
+		except OSError:
+			real_mtime = None
 		cached_mtime = self.stat.st_mtime
 
 		if real_mtime != cached_mtime:
diff --git a/ranger/fsobject/fsobject.py b/ranger/fsobject/fsobject.py
index b1354da1..1864a7fc 100644
--- a/ranger/fsobject/fsobject.py
+++ b/ranger/fsobject/fsobject.py
@@ -101,7 +101,8 @@ class FileSystemObject(MimeTypeAware, FileManagerAware):
 		self.marked = bool(boolean)
 
 	def load(self):
-		"""reads useful information about the filesystem-object from the
+		"""
+		reads useful information about the filesystem-object from the
 		filesystem and caches it for later use
 		"""
 		import os
@@ -195,17 +196,21 @@ class FileSystemObject(MimeTypeAware, FileManagerAware):
 		return False
 
 	def load_if_outdated(self):
-		"""calls load() if the currently cached information is outdated
+		"""
+		Calls load() if the currently cached information is outdated
 		or nonexistant.
 		"""
 		if self.load_once(): return True
 
 		import os
 		try:
-			real_mtime = os.stat(self.path).st_mtime
+			real_mtime = os.lstat(self.path).st_mtime
 		except OSError:
-			return False
-		cached_mtime = self.stat.st_mtime
+			real_mtime = None
+		if self.stat:
+			cached_mtime = self.stat.st_mtime
+		else:
+			cached_mtime = 0
 
 		if real_mtime != cached_mtime:
 			self.load()