From 3e0aa7a0ae37768dbe19f07ae086d3ded0064d19 Mon Sep 17 00:00:00 2001 From: hut Date: Wed, 3 Dec 2014 16:45:37 +0100 Subject: allow setting a "linemode" for each file/directory --- ranger/container/directory.py | 4 ++++ ranger/container/file.py | 2 ++ ranger/container/fsobject.py | 6 ++++++ ranger/core/actions.py | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 48 insertions(+) diff --git a/ranger/container/directory.py b/ranger/container/directory.py index c6987a76..c331053a 100644 --- a/ranger/container/directory.py +++ b/ranger/container/directory.py @@ -567,6 +567,10 @@ class Directory(FileSystemObject, Accumulator, Loadable): """Is the directory empty?""" return self.files is None or len(self.files) == 0 + def _set_linemode_of_children(self, mode): + for f in self.files: + f._set_linemode(mode) + def __nonzero__(self): """Always True""" return True diff --git a/ranger/container/file.py b/ranger/container/file.py index ab677125..7297dc30 100644 --- a/ranger/container/file.py +++ b/ranger/container/file.py @@ -43,6 +43,8 @@ class File(FileSystemObject): preview_known = False preview_loading = False + _linemode = "filename" + @property def firstbytes(self): try: diff --git a/ranger/container/fsobject.py b/ranger/container/fsobject.py index 6f206d0d..1bdbcde7 100644 --- a/ranger/container/fsobject.py +++ b/ranger/container/fsobject.py @@ -80,6 +80,9 @@ class FileSystemObject(FileManagerAware, SettingsAware): basename_is_rel = False + # the line mode may be "filename", "details" or "title" + _linemode = "filename" + def __init__(self, path, preload=None, path_is_abs=False, basename_is_rel=False): if not path_is_abs: path = abspath(path) @@ -373,3 +376,6 @@ class FileSystemObject(FileManagerAware, SettingsAware): self.vcs_outdated = True return True return False + + def _set_linemode(self, mode): + self._linemode = mode diff --git a/ranger/core/actions.py b/ranger/core/actions.py index ba6b3658..f3f1f04c 100644 --- a/ranger/core/actions.py +++ b/ranger/core/actions.py @@ -151,6 +151,42 @@ class Actions(FileManagerAware, EnvironmentAware, SettingsAware): """Redraw the window""" self.ui.redraw_window() + def linemode(self, mode, directory=None, depth=0): + """ + Change what is displayed as a filename. + + "mode" may be: "filename", "details", "title" + "directory" specifies the directory. None means the current directory + "depth" specifies the recursion depth + """ + + assert mode in ("filename", "details", "title") + + if directory is None: + directory = self.fm.thisdir + + directories = set([directory]) + bucket = set() + + current_depth = 0 + + while True: + if current_depth >= depth: + for direct in directories: + direct._set_linemode_of_children(mode) + break + + else: + for direct in directories: + direct._set_linemode_of_children(mode) + for file_ in direct.files: + if file_.is_directory: + bucket.add(file_) + + directories, bucket = bucket, directories + bucket.clear() + current_depth += 1 + def open_console(self, string='', prompt=None, position=None): """Open the console""" self.change_mode('normal') -- cgit 1.4.1-2-gfad0