diff options
-rw-r--r-- | ranger/api/__init__.py | 8 | ||||
-rw-r--r-- | ranger/container/fsobject.py | 9 | ||||
-rw-r--r-- | ranger/core/actions.py | 4 | ||||
-rw-r--r-- | ranger/core/linemode.py | 13 | ||||
-rw-r--r-- | ranger/gui/widgets/browsercolumn.py | 4 |
5 files changed, 18 insertions, 20 deletions
diff --git a/ranger/api/__init__.py b/ranger/api/__init__.py index a50f706f..cc0815c2 100644 --- a/ranger/api/__init__.py +++ b/ranger/api/__init__.py @@ -26,3 +26,11 @@ def hook_ready(fm): This hook is executed after the user interface is initialized. You should NOT print anything to stdout anymore from here on. Use fm.notify instead. """ + +from ranger.core.linemode import LinemodeBase + +def register_linemode(*linemodes): + """Register the linemodes in a dictionary of the available linemodes.""" + from ranger.container.fsobject import FileSystemObject + for linemode in linemodes: + FileSystemObject.linemode_dict[linemode.name] = linemode() diff --git a/ranger/container/fsobject.py b/ranger/container/fsobject.py index 32b1dc8b..43499e15 100644 --- a/ranger/container/fsobject.py +++ b/ranger/container/fsobject.py @@ -17,8 +17,7 @@ from grp import getgrgid from os import lstat, stat, getcwd from os.path import abspath, basename, dirname, realpath, splitext, extsep, relpath from pwd import getpwuid -from ranger.core.linemode import REGISTERED_LINEMODES -from ranger.core.linemode import DEFAULT_LINEMODE +from ranger.core.linemode import DEFAULT_LINEMODE, REGISTERED_LINEMODES from ranger.core.shared import FileManagerAware, SettingsAware from ranger.ext.shell_escape import shell_escape from ranger.ext.spawn import spawn @@ -85,6 +84,10 @@ class FileSystemObject(FileManagerAware, SettingsAware): basename_is_rel_to = None _linemode = DEFAULT_LINEMODE + linemode_dict = dict( + (linemode.name, linemode()) for linemode in + [DefaultLinemode, TitleLinemode, PermissionsLinemode] + ) def __init__(self, path, preload=None, path_is_abs=False, basename_is_rel_to=None): if not path_is_abs: @@ -111,7 +114,7 @@ class FileSystemObject(FileManagerAware, SettingsAware): # Set the line mode from fm.default_linemodes for method, argument, linemode in self.fm.default_linemodes: - if linemode in REGISTERED_LINEMODES: + if linemode in linemode_dict: if method == "always": self._linemode = linemode break diff --git a/ranger/core/actions.py b/ranger/core/actions.py index aa10e34f..6e0dc797 100644 --- a/ranger/core/actions.py +++ b/ranger/core/actions.py @@ -27,7 +27,7 @@ from ranger.core.tab import Tab from ranger.container.file import File from ranger.core.loader import CommandLoader, CopyLoader from ranger.container.settings import ALLOWED_SETTINGS -from ranger.core.linemode import REGISTERED_LINEMODES, DEFAULT_LINEMODE +from ranger.core.linemode import DEFAULT_LINEMODE MACRO_FAIL = "<\x01\x01MACRO_HAS_NO_VALUE\x01\01>" @@ -167,7 +167,7 @@ class Actions(FileManagerAware, EnvironmentAware, SettingsAware): if mode == "normal": mode = DEFAULT_LINEMODE - if mode not in REGISTERED_LINEMODES: + if mode not in self.thisfile.linemode_dict: self.notify("Unhandled linemode: `%s'" % mode, bad=True) return diff --git a/ranger/core/linemode.py b/ranger/core/linemode.py index 8b5084b0..ee770cb0 100644 --- a/ranger/core/linemode.py +++ b/ranger/core/linemode.py @@ -3,16 +3,6 @@ from abc import * DEFAULT_LINEMODE = "filename" -REGISTERED_LINEMODES = dict() - -def register_linemode(*linemodes): - """Register a linemode in a dictionary of available linemodes.""" - for linemode in linemodes: - REGISTERED_LINEMODES[linemode.name] = linemode() - -def lookup_linemode(name): - """Lookup the linemode instance by its name""" - return REGISTERED_LINEMODES[name] class LinemodeBase(object): @@ -86,6 +76,3 @@ class PermissionsLinemode(LinemodeBase): def infostring(self, file, metadata): return "" - - -register_linemode(DefaultLinemode, PermissionsLinemode, TitleLinemode) diff --git a/ranger/gui/widgets/browsercolumn.py b/ranger/gui/widgets/browsercolumn.py index 427a323d..2e9bf7a2 100644 --- a/ranger/gui/widgets/browsercolumn.py +++ b/ranger/gui/widgets/browsercolumn.py @@ -252,12 +252,12 @@ class BrowserColumn(Pager): # Extract linemode-related information from the drawn object metadata = None - current_linemode = linemode.lookup_linemode(drawn._linemode) + current_linemode = drawn.linemode_dict[drawn._linemode] if current_linemode.uses_metadata: metadata = self.fm.metadata.get_metadata(drawn.path) if not all(getattr(metadata, tag) for tag in current_linemode.required_metadata): - current_linemode = linemode.lookup_linemode(linemode.DEFAULT_LINEMODE) + current_linemode = drawn.linemode_dict[linemode.DEFAULT_LINEMODE] metakey = hash(repr(sorted(metadata.items()))) if metadata else 0 key = (self.wid, selected_i == i, drawn.marked, self.main_column, |