Make :color work with symbolic color, improve help text
authorJack Miller <jack@codezen.org>
Fri, 5 Jun 2015 01:58:54 +0000 (20:58 -0500)
committerJack Miller <jack@codezen.org>
Fri, 5 Jun 2015 01:58:54 +0000 (20:58 -0500)
canto_curses/config.py
canto_curses/screen.py
canto_curses/story.py
canto_curses/tag.py

index 14f1972..e9b40c2 100644 (file)
@@ -369,6 +369,7 @@ class CantoCursesConfig(SubThread):
                 "pending" : 1,
                 "text" : 8,
                 "error" : 2,
+                "marked" : 8,
                 "reader_quote" : 6,
                 "reader_link" : 3,
                 "reader_image_link" : 5,
index 45b6512..2507285 100644 (file)
@@ -81,13 +81,47 @@ class Screen(CommandHandler):
         self.subwindows()
 
         args = {
-            "color_idx" : ("[color idx] between 1 and 256 ( >8 will be ignored on 8 color terminals)", self.type_color_idx),
+            "color_name" : ("[color name] Either a pair number (0-255, >8 ignored on 8 color terminals), a default fore/background (deffg, defbg), or an arbitrary name to be used in themes (unread, pending, etc.)", self.type_color_name),
             "fg-color" : ("[fg-color] Foreground color", self.type_color),
             "bg-color" : ("[bg-color] Background color (optional)\n\nNamed colors: white black red yellow green blue magenta pink\nNumeric colors: 1-256", self.type_color),
         }
 
         cmds = {
-            "color": (self.cmd_color, ["color_idx", "fg-color", "bg-color"], "Change the color palette"),
+            "color": (self.cmd_color, ["color_name", "fg-color", "bg-color"],
+"""
+Change the color palette.
+
+Most like you want to use this to change a color used in the theme. For example,
+
+   :color unread green
+
+Will change the color of unread items to green, with the default background. The list of names used in the default theme are:
+
+    unread
+    read
+    marked
+    pending
+    error
+    reader_quote
+    reader_link
+    reader_image_link
+    reader_italics
+    enum_hints
+
+You can also change the defaults
+
+    :color deffg blue
+    :color defbg white
+
+Which will be used anywhere a color pair doesn't have an explicit foreground/background.
+
+Lastly you can change the color pairs themselves. This isn't recommended, they're initialized so each available color is available with the default background. If you change these pairs, the named colors above may not make any sense (i.e. green really turns on the color pair set aside for green, so if you change that pair to actually be yellow, don't expect this command to figure it out).
+
+    :color 1 white red
+
+Arguments:"""
+
+),
         }
 
         register_arg_types(self, args)
@@ -669,13 +703,6 @@ class Screen(CommandHandler):
         self.focused = win
         log.debug("Focusing window (%s)", self.focused)
 
-    def type_color_idx(self):
-        def ci(x):
-            if x in ["deffg","defbg"] + [ str(x) for x in range(0, 256) ]:
-                return (True, x)
-            return (False, None)
-        return (None, ci)
-
     def type_color(self):
         colors = {
             'white' : curses.COLOR_WHITE,
@@ -703,6 +730,19 @@ class Screen(CommandHandler):
                 return (False, None)
         return (list(colors.keys()), c)
 
+    def type_color_name(self):
+        color_conf = self.callbacks["get_opt"]("color")
+
+        completions = []
+        for key in color_conf:
+            try:
+                pair = int(key)
+                continue
+            except:
+                completions.append(key)
+
+        return (completions, lambda x : (True, x))
+
     def cmd_color(self, idx, fg, bg):
         conf = self.callbacks["get_conf"]()
 
@@ -710,12 +750,16 @@ class Screen(CommandHandler):
         if idx in ['deffg', 'defbg']:
             conf["color"][idx] = fg  # Ignore second color pair
         else:
-            color = {}
-            if fg != -1:
-                color['fg'] = fg
-            if bg != -1:
-                color['bg'] = bg
-            conf["color"][idx] = color
+            try:
+                pair = int(idx)
+                color = {}
+                if fg != -1:
+                    color['fg'] = fg
+                if bg != -1:
+                    color['bg'] = bg
+                conf["color"][idx] = color
+            except:
+                conf["color"][idx] = fg + 1 # +1 since the color pairs are offset
 
         log.debug("color %s set: %s", idx, conf["color"][idx])
 
index 2d510ff..0ada4b4 100644 (file)
@@ -124,6 +124,9 @@ class Story(PluginHandler):
         if "taglist" in config and "border" in config["taglist"]:
             self.need_redraw()
 
+        if "color" in config:
+            self.need_redraw()
+
         if "story" not in config:
             return
 
@@ -259,7 +262,7 @@ class Story(PluginHandler):
             s += "%R"
 
         if self.marked:
-            s += "%B[*]"
+            s += "%B[*]" + cc("marked")
 
         if "read" in self.content["canto-state"]:
             s += cc("read")
@@ -274,7 +277,7 @@ class Story(PluginHandler):
             s += "%b%0"
 
         if self.marked:
-            s += "%b"
+            s += "%0%b"
 
         if self.selected:
             s += "%r"
index 42b68c4..4d2b855 100644 (file)
@@ -137,6 +137,9 @@ class Tag(PluginHandler, list):
         if "tagobj" in opts:
             self.need_redraw()
 
+        if "color" in opts:
+            self.need_redraw()
+
     def on_tag_opt_change(self, opts):
         if self.tag in list(opts.keys()):
             tc = opts[self.tag]