Check tweet length
[rainbowstream.git] / rainbowstream / colors.py
index bdbc4b44c14d6af7c4009af898b13ed3e86bd44f..a39dcb6b0c41ac9d78e1495c27e92bf4cda17d56 100644 (file)
@@ -2,11 +2,16 @@ 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
 
 
@@ -14,9 +19,16 @@ 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