version command fixed
[rainbowstream.git] / rainbowstream / colors.py
index 95d34c3bafe9124c33ecf742be6b6cdf1e85045b..a39dcb6b0c41ac9d78e1495c27e92bf4cda17d56 100644 (file)
@@ -1,13 +1,17 @@
-
 def basic_color(code):
     """
     16 colors supported
     """
-    def inner(text, bold=True):
+    def inner(text, rl=False):
+        """
+        Every raw_input with color sequences should be called with
+        rl=True to avoid readline messed up the length calculation
+        """
         c = code
-        if bold:
-            c = "1;%s" % c
-        return "\033[%sm%s\033[0m" % (c, text)
+        if rl:
+            return "\001\033[%sm\002%s\001\033[0m\002" % (c, text)
+        else:
+            return "\033[%sm%s\033[0m" % (c, text)
     return inner
 
 
@@ -15,12 +19,22 @@ def term_color(code):
     """
     256 colors supported
     """
-    def inner(text):
+    def inner(text, rl=False):
+        """
+        Every raw_input with color sequences should be called with
+        rl=True to avoid readline messed up the length calculation
+        """
         c = code
-        return "\033[38;5;%sm%s\033[0m" % (c, text)
+        if rl:
+            return "\001\033[38;5;%sm\002%s\001\033[0m\002" % (c, text)
+        else:
+            return "\033[38;5;%sm%s\033[0m" % (c, text)
     return inner
 
 
+"""
+16 basic colors
+"""
 default = basic_color('39')
 black = basic_color('30')
 red = basic_color('31')
@@ -38,6 +52,9 @@ light_magenta = basic_color('95')
 light_cyan = basic_color('96')
 white = basic_color('97')
 
+"""
+16 basic colors on background
+"""
 on_default = basic_color('49')
 on_black = basic_color('40')
 on_red = basic_color('41')