about 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>
/ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
type int-stack {
  data: (handle array int)
  top: int
}

fn initialize-int-stack _self: (addr int-stack), n: int {
  var self/esi: (addr int-stack) <- copy _self
  var d/edi: (addr handle array int) <- get self, data
  populate d, n
  var top/eax: (addr int) <- get self, top
  copy-to *top, 0
}

fn push-int-stack _self: (addr int-stack), _val: int {
  var self/esi: (addr int-stack) <- copy _self
  var top-addr/ecx: (addr int) <- get self, top
  var data-ah/edx: (addr handle array int) <- get self, data
  var data/eax: (addr array int) <- lookup *data-ah
  var top/edx: int <- copy *top-addr
  var dest-addr/edx: (addr int) <- index data, top
  var val/eax: int <- copy _val
  copy-to *dest-addr, val
  add-to *top-addr, 1
}

fn pop-int-stack _self: (addr int-stack) -> _/eax: int {
  var self/esi: (addr int-stack) <- copy _self
  var top-addr/ecx: (addr int) <- get self, top
  {
    compare *top-addr, 0
    break-if->
    return 0
  }
  subtract-from *top-addr, 1
  var data-ah/edx: (addr handle array int) <- get self, data
  var data/eax: (addr array int) <- lookup *data-ah
  var top/edx: int <- copy *top-addr
  var result-addr/eax: (addr int) <- index data, top
  var val/eax: int <- copy *result-addr
  return val
}

fn int-stack-empty? _self: (addr int-stack) -> _/eax: boolean {
  var self/esi: (addr int-stack) <- copy _self
  var top-addr/ecx: (addr int) <- get self, top
  compare *top-addr, 0
  {
    break-if-=
    return 0/false
  }
  return 1/true
}

fn int-stack-top _self: (addr int-stack) -> _/eax: int {
  var self/esi: (addr int-stack) <- copy _self
  var top-addr/ecx: (addr int) <- get self, top
  var top/ecx: int <- copy *top-addr
  {
    compare top, 0
    break-if->
    return 0
  }
  top <- decrement
  var data-ah/edx: (addr handle array int) <- get self, data
  var data/eax: (addr array int) <- lookup *data-ah
  var result-addr/eax: (addr int) <- index data, top
  var val/eax: int <- copy *result-addr
  return val
}