Fix item list / make int_range more permissive
authorJack Miller <jack@codezen.org>
Wed, 28 Jun 2017 03:07:31 +0000 (22:07 -0500)
committerJack Miller <jack@codezen.org>
Wed, 28 Jun 2017 03:24:35 +0000 (22:24 -0500)
Ugh, this code was tangled. Fix a braindead conditional sequence, drop
the first_sel fallback. Make sure all items refers to all visible items,
as TagList assumes, so skip collapsed tags when setting up domains.

Also, shutup about failing the check when item-list returns empty. It's
harmless and now it can occur when we don't have a fallback.

Closes #45

canto_curses/command.py
canto_curses/taglist.py

index 03ad817..964eee1 100644 (file)
@@ -354,7 +354,7 @@ def _int_range(name, itrs, syms, fallback, s):
         if fallback:
             log.debug("falling back to %s", fallback)
             return (True, fallback)
-        return (False, fallback)
+        return (True, [])
 
     slist = s.split(',')
 
@@ -422,12 +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 our fallback was empty, fail it.
-    if not rlist:
-        return (False, None)
-
-    # XXX should we return (False, []) on rlist empty, or...?
-
     return (True, rlist)
 
 class CommandPlugin(Plugin):
index 0e84270..a0ef2e0 100644 (file)
@@ -186,6 +186,8 @@ class TagList(GuiBase):
     def type_item_list(self):
         all_items = []
         for tag in self.tags:
+            if tag.collapsed:
+                continue
             for s in tag:
                 all_items.append(s)
 
@@ -193,25 +195,24 @@ class TagList(GuiBase):
 
         syms = { 'all' : {} }
         sel = self.callbacks["get_var"]("selected")
-        if sel and not sel.is_tag:
 
+        if sel:
             # If we have a selection, we have a sensible tag domain
 
-            tag = self.tag_by_item(sel)
-            domains['tag']  = [ x for x in self.tag_by_item(sel) ]
+            tag = self.tag_by_obj(sel)
+            domains['tag']  = [ x for x in tag ]
             syms['tag'] = {}
 
             if not sel.is_tag:
                 syms['tag']['.'] = [ domains['tag'].index(sel) ]
                 syms['tag']['*'] = range(0, len(domains['tag']))
+                syms['all']['.'] = [ all_items.index(sel) ]
             elif len(sel) > 0:
                 syms['tag']['.'] = [ 0 ]
                 syms['tag']['*'] = range(0, len(sel))
             else:
                 syms['tag']['.'] = []
                 syms['tag']['*'] = []
-
-            syms['all']['.'] = [ all_items.index(sel) ]
         else:
             syms['all']['.'] = [ ]
 
@@ -220,11 +221,8 @@ class TagList(GuiBase):
         # if we have items, pass them in, otherwise pass in selected which is the implied context
 
         fallback = self.got_items[:]
-        if fallback == []:
-            if sel and not sel.is_tag:
-                fallback = [ sel ]
-            elif self.first_sel and not self.first_sel.is_tag:
-                fallback = [ self.first_sel ]
+        if fallback == [] and sel and not sel.is_tag:
+            fallback = [ sel ]
 
         return (None, lambda x: _int_range("item", domains, syms, fallback, x))