diff options
author | hut <hut@lavabit.com> | 2009-11-27 17:57:29 +0100 |
---|---|---|
committer | hut <hut@lavabit.com> | 2009-11-27 17:57:29 +0100 |
commit | dd7a4f636fcc3c68b061d5af265aeaf38f70e45b (patch) | |
tree | 86792251ad3cb4a8580b18600941a1d888a67147 | |
parent | 3ea48208992acbcd97eaecb23a958d35684b0317 (diff) | |
download | ranger-dd7a4f636fcc3c68b061d5af265aeaf38f70e45b.tar.gz |
scrolling & stuff
-rw-r--r-- | ranger/command.py | 3 | ||||
-rw-r--r-- | ranger/directory.py | 42 | ||||
-rw-r--r-- | ranger/environment.py | 22 | ||||
-rw-r--r-- | ranger/fm.py | 18 | ||||
-rw-r--r-- | ranger/keys.py | 19 | ||||
-rw-r--r-- | ranger/options.py | 6 | ||||
-rw-r--r-- | ranger/ui.py | 3 | ||||
-rw-r--r-- | ranger/wdisplay.py | 75 |
8 files changed, 150 insertions, 38 deletions
diff --git a/ranger/command.py b/ranger/command.py index bd11dd70..f8c9f146 100644 --- a/ranger/command.py +++ b/ranger/command.py @@ -8,6 +8,9 @@ class CommandList(): self.dummies_in_paths = False self.dummy_object = CommandDummy + # We need to know when to clear the keybuffer (when a wrong key is pressed) + # and when to wait for the rest of the key combination. For "gg" we + # will assign "g" to a dummy which tells the program not to do the latter. def rebuild_paths(self): paths = self.paths diff --git a/ranger/directory.py b/ranger/directory.py index 6f468b0a..57df2e13 100644 --- a/ranger/directory.py +++ b/ranger/directory.py @@ -18,8 +18,9 @@ class Directory(ranger.fsobject.FSObject): self.filter = None self.pointed_index = None self.pointed_file = None - self.index = None + self.scroll_begin = 0 self.show_hidden = False + self.old_show_hidden = self.show_hidden def set_filter(self, string): self.filter = string @@ -34,20 +35,30 @@ class Directory(ranger.fsobject.FSObject): self.content_loaded = True if self.exists and self.runnable: - basenames = listdir(self.path) - mapped = map(lambda name: join(self.path, name), basenames) - self.filenames = list(mapped) + filenames = [] + for fname in listdir(self.path): + if not self.show_hidden and fname[0] == '.': + continue + if isinstance(self.filter, str) and self.filter in fname: + continue + filenames.append(join(self.path, fname)) +# basenames = listdir(self.path) +# mapped = map(lambda name: join(self.path, name), basenames) + self.scroll_offset = 0 + self.filenames = filenames self.infostring = ' %d' % len(self.filenames) # update the infostring - self.files = [] + files = [] for name in self.filenames: - if isinstance(self.filter, str) and self.filter in name: continue - if basename(name)[0] == '.': continue if isdir(name): f = Directory(name) else: f = file.File(name) f.load() - self.files.append(f) + files.append(f) + + files.sort(key = lambda x: x.basename) + self.files = files + if len(self.files) > 0: self.pointed_index = 0 self.pointed_file = self.files[0] @@ -73,6 +84,16 @@ class Directory(ranger.fsobject.FSObject): self.fix_pointer() return self.pointed_file + def move_pointer_to_file_path(self, path): + self.load_content_once() + i = 0 + for f in self.files: + if f.path == path: + self.move_pointer(absolute = i) + return + i += 1 + + def fix_pointer(self): i = self.pointed_index if i >= len(self.files): i = len(self.files) - 1 @@ -91,6 +112,11 @@ class Directory(ranger.fsobject.FSObject): self.stop_if_frozen() if self.load_content_once(): return True + if self.old_show_hidden != self.show_hidden: + self.old_show_hidden = self.show_hidden + self.load_content() + return True + import os real_mtime = os.stat(self.path).st_mtime cached_mtime = self.stat.st_mtime diff --git a/ranger/environment.py b/ranger/environment.py index faa3b9dc..d5678695 100644 --- a/ranger/environment.py +++ b/ranger/environment.py @@ -28,7 +28,10 @@ class Environment(): except IndexError: return None else: - return self.cf + try: + return self.directories[self.cf.path] + except KeyError: + return self.cf def get_directory(self, path): import os @@ -39,6 +42,20 @@ class Environment(): self.directories[path] = Directory(path) return self.directories[path] + def assign_correct_cursor_positions(self): + # Assign correct cursor positions for subdirectories + from ranger.debug import log + + last_path = None + for path in reversed(self.pathway): + if not last_path: + last_path = path.path + continue + + log(( path.path, last_path )) + path.move_pointer_to_file_path(last_path) + last_path = path.path + def enter_dir(self, path): # get the absolute path path = os.path.normpath(os.path.join(self.path, path)) @@ -62,10 +79,11 @@ class Environment(): currentpath = '/' for dir in path.split('/'): currentpath = os.path.join(currentpath, dir) -# debug.log(currentpath) pathway.append(self.get_directory(currentpath)) self.pathway = tuple(pathway) + self.assign_correct_cursor_positions() + # set the current file. self.cf = self.pwd.pointed_file return True diff --git a/ranger/fm.py b/ranger/fm.py index 48541f0c..141414b0 100644 --- a/ranger/fm.py +++ b/ranger/fm.py @@ -1,11 +1,3 @@ -import sys -#LOGFILE = '/tmp/errorlog' -#f = open(LOGFILE, 'a') -#f.write(str(tuple(sys.path)) + "\n") -#f.close() -#import code.ui, code.debug, code.file, code.directory, code.fstype - - class FM(): def __init__(self, environment): self.env = environment @@ -19,7 +11,6 @@ class FM(): import time while 1: try: - self.env.pwd.load_content_if_outdated() self.ui.draw() key = self.ui.get_next_key() self.ui.press(key, self) @@ -29,6 +20,9 @@ class FM(): except: raise + def resize(self): + self.ui.resize() + def exit(self): raise SystemExit() @@ -49,9 +43,13 @@ class FM(): def move_pointer(self, relative = 0, absolute = None): self.env.cf = self.env.pwd.move_pointer(relative, abso |