summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorhut <hut@lepus.uberspace.de>2016-04-04 00:00:56 +0200
committerhut <hut@lepus.uberspace.de>2016-04-04 00:00:56 +0200
commit62c45b6f36cdad7b49f019f8bf982c818f372871 (patch)
tree665614fc727891da7e8a592e59e6fe62e57e2e96
parent3ae25fa5b14c224c699e572c31cd8c95dc3d9040 (diff)
downloadranger-62c45b6f36cdad7b49f019f8bf982c818f372871.tar.gz
make `set foo!` cycle through non-boolean options too
-rw-r--r--ranger/container/settings.py9
-rw-r--r--ranger/core/actions.py13
2 files changed, 21 insertions, 1 deletions
diff --git a/ranger/container/settings.py b/ranger/container/settings.py
index 36db03ad..2a673588 100644
--- a/ranger/container/settings.py
+++ b/ranger/container/settings.py
@@ -66,6 +66,15 @@ ALLOWED_SETTINGS = {
     'clear_filters_on_dir_change': bool
 }
 
+ALLOWED_VALUES = {
+    'confirm_on_delete': ['always', 'multiple', 'never'],
+    'preview_images_method': ['w3m', 'iterm2'],
+    'vcs_backend_bzr': ['enabled', 'local', 'disabled'],
+    'vcs_backend_git': ['enabled', 'local', 'disabled'],
+    'vcs_backend_hg': ['enabled', 'local', 'disabled'],
+    'vcs_backend_svn': ['enabled', 'local', 'disabled'],
+}
+
 DEFAULT_VALUES = {
     bool: False,
     type(None): None,
diff --git a/ranger/core/actions.py b/ranger/core/actions.py
index 825a1cc0..3b1fc47a 100644
--- a/ranger/core/actions.py
+++ b/ranger/core/actions.py
@@ -26,7 +26,7 @@ from ranger.core.tab import Tab
 from ranger.container.directory import Directory
 from ranger.container.file import File
 from ranger.core.loader import CommandLoader, CopyLoader
-from ranger.container.settings import ALLOWED_SETTINGS
+from ranger.container.settings import ALLOWED_SETTINGS, ALLOWED_VALUES
 from ranger.core.linemode import DEFAULT_LINEMODE
 
 MACRO_FAIL = "<\x01\x01MACRO_HAS_NO_VALUE\x01\01>"
@@ -595,6 +595,17 @@ class Actions(FileManagerAware, SettingsAware):
         """
         if isinstance(self.settings[string], bool):
             self.settings[string] ^= True
+        elif string in ALLOWED_VALUES:
+            current = self.settings[string]
+            allowed = ALLOWED_VALUES[string]
+            if len(allowed) > 0:
+                if current not in allowed and current == "":
+                    current = allowed[0]
+                if current in allowed:
+                    self.settings[string] = \
+                        allowed[(allowed.index(current) + 1) % len(allowed)]
+                else:
+                    self.settings[string] = allowed[0]
 
     def set_option(self, optname, value):
         """:set_option <optname>