diff options
-rw-r--r-- | ranger/actions.py | 10 | ||||
-rw-r--r-- | ranger/defaults/keys.py | 2 | ||||
-rw-r--r-- | ranger/fsobject/directory.py | 19 | ||||
-rw-r--r-- | ranger/fsobject/fsobject.py | 15 |
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() |