diff options
author | hut <hut@lepus.uberspace.de> | 2016-04-04 00:01:34 +0200 |
---|---|---|
committer | hut <hut@lepus.uberspace.de> | 2016-04-04 00:02:07 +0200 |
commit | b90640b0a99a98eb0db71417b0447eb077412785 (patch) | |
tree | e148b616b9c0cae41e6ffe238c20f79b0f615cfb | |
parent | 62c45b6f36cdad7b49f019f8bf982c818f372871 (diff) | |
download | ranger-b90640b0a99a98eb0db71417b0447eb077412785.tar.gz |
implement switching viewmodes with ~ key
-rw-r--r-- | ranger/config/rc.conf | 8 | ||||
-rw-r--r-- | ranger/container/settings.py | 1 | ||||
-rw-r--r-- | ranger/gui/displayable.py | 3 | ||||
-rw-r--r-- | ranger/gui/ui.py | 19 |
4 files changed, 21 insertions, 10 deletions
diff --git a/ranger/config/rc.conf b/ranger/config/rc.conf index 25972904..993f0563 100644 --- a/ranger/config/rc.conf +++ b/ranger/config/rc.conf @@ -19,6 +19,13 @@ # == Options # =================================================================== +# Which viewmode should be used? Possible values are: +# miller: Use miller columns which show multiple levels of the hierarchy +# multipane: Midnight-commander like multipane view showing all tabs next +# to each other +set viewmode miller +#set viewmode multipane + # How many columns are there, and what are their relative widths? set column_ratios 1,3,4 @@ -235,6 +242,7 @@ map <C-r> reset map <C-l> redraw_window map <C-c> abort map <esc> change_mode normal +map ~ set viewmode! map i display_file map ? help diff --git a/ranger/container/settings.py b/ranger/container/settings.py index 2a673588..14ff9bca 100644 --- a/ranger/container/settings.py +++ b/ranger/container/settings.py @@ -73,6 +73,7 @@ ALLOWED_VALUES = { 'vcs_backend_git': ['enabled', 'local', 'disabled'], 'vcs_backend_hg': ['enabled', 'local', 'disabled'], 'vcs_backend_svn': ['enabled', 'local', 'disabled'], + 'viewmode': ['miller', 'multipane'], } DEFAULT_VALUES = { diff --git a/ranger/gui/displayable.py b/ranger/gui/displayable.py index 8415b82c..c6e21d54 100644 --- a/ranger/gui/displayable.py +++ b/ranger/gui/displayable.py @@ -95,7 +95,8 @@ class Displayable(FileManagerAware, CursesShortcuts): def destroy(self): """Called when the object is destroyed.""" - del self.win + if hasattr(self, 'win'): + del self.win def contains_point(self, y, x): """Test whether the point lies inside this object. diff --git a/ranger/gui/ui.py b/ranger/gui/ui.py index 67db51d3..14d6f247 100644 --- a/ranger/gui/ui.py +++ b/ranger/gui/ui.py @@ -47,7 +47,6 @@ class UI(DisplayableContainer): self.keymaps = KeyMaps(self.keybuffer) self.redrawlock = threading.Event() self.redrawlock.set() - self._browser_viewmodes = dict() if fm is not None: self.fm = fm @@ -242,8 +241,8 @@ class UI(DisplayableContainer): # Create the browser view self.settings.signal_bind('setopt.viewmode', self._set_viewmode) self._viewmode = None - self.viewmode = 'miller' # this line sets self.browser implicitly - # through the signal handler bound above + # The following line sets self.browser implicitly through the signal + self.viewmode = self.settings.viewmode self.add_child(self.browser) # Create the process manager @@ -434,15 +433,17 @@ class UI(DisplayableContainer): if value in self.ALLOWED_VIEWMODES: if self._viewmode != value: self._viewmode = value + resize = False if hasattr(self, 'browser'): + old_size = self.browser.y, self.browser.x, self.browser.hei, self.browser.wid self.remove_child(self.browser) - if value in self._browser_viewmodes: - self.browser = self._browser_viewmodes[value] - else: - browser = self._viewmode_to_class(value)(self.win) - self.browser = self._browser_viewmodes[value] = browser - self.browser.resize(self.y, self.x, self.hei, self.wid) + self.browser.destroy() + resize = True + + self.browser = self._viewmode_to_class(value)(self.win) self.add_child(self.browser) + if resize: + self.browser.resize(*old_size) else: raise ValueError("Attempting to set invalid viewmode `%s`, should " "be one of `%s`." % (value, "`, `".join(self.ALLOWED_VIEWMODES))) |