int_range, only fallback if given nothing
authorJack Miller <jack@codezen.org>
Tue, 13 Sep 2016 22:18:39 +0000 (17:18 -0500)
committerJack Miller <jack@codezen.org>
Tue, 13 Sep 2016 22:22:48 +0000 (17:22 -0500)
This keeps us from stupidly falling back to default args (usu.
selection) if the user gives bad arguments. Only fallback on defaults if
the context is supposed to be implied.

i.e. ':del' with a selection deletes that feed
     ':del adsada' with a selection properly errors out

Closes #42

canto_curses/command.py

index 4b00c29..03ad817 100644 (file)
@@ -348,6 +348,14 @@ def _int_check(x):
         return (False, None)
 
 def _int_range(name, itrs, syms, fallback, s):
+    s.strip()
+
+    if (not s):
+        if fallback:
+            log.debug("falling back to %s", fallback)
+            return (True, fallback)
+        return (False, fallback)
+
     slist = s.split(',')
 
     # Default domain is 'all'
@@ -414,10 +422,6 @@ def _int_range(name, itrs, syms, fallback, s):
         else:
             log.warn("%s out of range of %s domain: %s idx with len %s" % (name, domain, idx, len(itrs[domain])))
 
-    if not rlist:
-        rlist = fallback
-        log.debug("%s falling back to %s", rlist, fallback)
-
     # If our fallback was empty, fail it.
     if not rlist:
         return (False, None)