diff options
-rw-r--r-- | ranger/actions.py | 14 | ||||
-rw-r--r-- | ranger/applications.py | 3 | ||||
-rw-r--r-- | ranger/commands.py | 6 | ||||
-rw-r--r-- | ranger/defaults/keys.py | 4 | ||||
-rw-r--r-- | ranger/fsobject/__init__.py | 2 | ||||
-rw-r--r-- | ranger/fsobject/directory.py | 20 |
6 files changed, 31 insertions, 18 deletions
diff --git a/ranger/actions.py b/ranger/actions.py index 29d92ae5..681751e3 100644 --- a/ranger/actions.py +++ b/ranger/actions.py @@ -59,9 +59,13 @@ class Actions(EnvironmentAware, SettingsAware): """Delete the bookmark with the name <key>""" self.bookmarks.delete(key) - def move_left(self): + def move_left(self, n=1): """Enter the parent directory""" - self.env.enter_dir('..') + try: + directory = os.path.join(*(['..'] * n)) + except: + return + self.env.enter_dir(directory) def move_right(self, mode=0): """Enter the current directory or execute the current file""" @@ -193,7 +197,7 @@ class Actions(EnvironmentAware, SettingsAware): for f in self.env.copy: try: shutil.move(f.path, self.env.pwd.path) - except (shutil.Error, IOError) as x: + except (shutil.Error, IOError, OSError) as x: self.notify(str(x), bad=True) self.env.copy.clear() self.env.cut = False @@ -204,12 +208,12 @@ class Actions(EnvironmentAware, SettingsAware): if isdir(f.path): try: shutil.copytree(f.path, join(self.env.pwd.path, f.basename)) - except (shutil.Error, IOError) as x: + except (shutil.Error, IOError, OSError) as x: self.notify(str(x), bad=True) else: try: shutil.copy(f.path, self.env.pwd.path) - except (shutil.Error, IOError) as x: + except (shutil.Error, IOError, OSError) as x: self.notify(str(x), bad=True) msg.delete() diff --git a/ranger/applications.py b/ranger/applications.py index 3acf6da5..a046a839 100644 --- a/ranger/applications.py +++ b/ranger/applications.py @@ -16,7 +16,7 @@ class Applications(object): """Returns a list with all application functions""" return [x for x in self.__dict__ if x.startswith('app_')] -import os +import os, sys null = open(os.devnull, 'a') def run(*args, **kw): @@ -33,6 +33,7 @@ def run(*args, **kw): args = map(str, args) popen_kw = {} + popen_kw['stdout'] = sys.stderr if kw['stdin'] is not None: popen_kw['stdin'] = kw['stdin'] diff --git a/ranger/commands.py b/ranger/commands.py index 009de586..0ddd5d01 100644 --- a/ranger/commands.py +++ b/ranger/commands.py @@ -46,7 +46,8 @@ class Command(FileManagerAware): # -------------------------------- definitions class cd(Command): - """The cd command changes the directory. The command 'cd -' is + """ + The cd command changes the directory. The command 'cd -' is equivalent to typing ``. In the quick console, the directory will be entered without the need to press enter, as soon as there is one unambiguous match. @@ -117,7 +118,8 @@ class cd(Command): return rel_dest != '.' and isdir(abs_dest) class find(Command): - """The find command will attempt to find a partial, case insensitive + """ + The find command will attempt to find a partial, case insensitive match in the filenames of the current directory. In the quick command console, once there is one unambiguous match, the file will be run automatically. diff --git a/ranger/defaults/keys.py b/ranger/defaults/keys.py index ebcca70b..9129541e 100644 --- a/ranger/defaults/keys.py +++ b/ranger/defaults/keys.py @@ -25,7 +25,6 @@ def initialize_commands(command_list): def bind(*args): command_list.bind(args[-1], *args[:-1]) - bind('h', KEY_LEFT, KEY_BACKSPACE, DEL, do('move_left')) bind('l', KEY_RIGHT, do('move_right')) bind(KEY_ENTER, ctrl('j'), do('move_right', mode=1)) bind('H', do('history_go', -1)) @@ -135,6 +134,9 @@ def initialize_commands(command_list): bind('j', KEY_DOWN, jk(1)) bind('k', KEY_UP, jk(-1)) + bind('h', KEY_LEFT, KEY_BACKSPACE, DEL, lambda fm, n: \ + fm.move_left(n)) + command_list.rebuild_paths() diff --git a/ranger/fsobject/__init__.py b/ranger/fsobject/__init__.py index 79645c5e..736175cd 100644 --- a/ranger/fsobject/__init__.py +++ b/ranger/fsobject/__init__.py @@ -11,7 +11,7 @@ BAD_INFO = None class NotLoadedYet(Exception): pass +from .fsobject import FileSystemObject from .file import File from .directory import Directory, NoDirectoryGiven -from .fsobject import FileSystemObject from .loader import Loader diff --git a/ranger/fsobject/directory.py b/ranger/fsobject/directory.py index 461915db..8fb4d0ac 100644 --- a/ranger/fsobject/directory.py +++ b/ranger/fsobject/directory.py @@ -1,6 +1,4 @@ -from . import BAD_INFO -from .file import File -from .fsobject import FileSystemObject as SuperClass +from ranger.fsobject import BAD_INFO, File, FileSystemObject from ranger.shared import SettingsAware from ranger import log import ranger.fsobject @@ -16,7 +14,7 @@ def sort_by_directory(path): class NoDirectoryGiven(Exception): pass -class Directory(SuperClass, SettingsAware): +class Directory(FileSystemObject, SettingsAware): enterable = False load_generator = None loading = False @@ -48,7 +46,7 @@ class Directory(SuperClass, SettingsAware): if isfile(path): raise NoDirectoryGiven() - SuperClass.__init__(self, path) + FileSystemObject.__init__(self, path) self.marked_items = set() @@ -313,8 +311,11 @@ class Directory(SuperClass, SettingsAware): self.pointed_index = i self.pointed_file = self[i] - if self == self.fm.env.pwd: - self.fm.env.cf = self.pointed_file + try: + if self == self.fm.env.pwd: + self.fm.env.cf = self.pointed_file + except: + pass def load_content_once(self, *a, **k): """Load the contents of the directory if not done yet""" @@ -340,7 +341,10 @@ class Directory(SuperClass, SettingsAware): real_mtime = os.lstat(self.path).st_mtime except OSError: real_mtime = None - cached_mtime = self.stat.st_mtime + if self.stat: + cached_mtime = self.stat.st_mtime + else: + cached_mtime = 0 if real_mtime != cached_mtime: self.load_content() |