Colorized output breaks linewrapping with readline

前端 未结 3 667
迷失自我
迷失自我 2020-12-16 03:52

I\'m working with colorizing some output using readline in Ruby, but I am not having any luck getting line wrapping to work properly. For example:

\"\\e[01;         


        
3条回答
  •  离开以前
    2020-12-16 04:19

    Ok, sunkencity gets the check mark because I ended up using most of his solution, but I had to modify it as follows:

    # encoding: utf-8
    class String
        def console_red;          colorize(self, "\001\e[1m\e[31m\002");  end
        def console_dark_red;     colorize(self, "\001\e[31m\002");       end
        def console_green;        colorize(self, "\001\e[1m\e[32m\002");  end
        def console_dark_green;   colorize(self, "\001\e[32m\002");       end
        def console_yellow;       colorize(self, "\001\e[1m\e[33m\002");  end
        def console_dark_yellow;  colorize(self, "\001\e[33m\002");       end
        def console_blue;         colorize(self, "\001\e[1m\e[34m\002");  end
        def console_dark_blue;    colorize(self, "\001\e[34m\002");       end
        def console_purple;       colorize(self, "\001\e[1m\e[35m\002");  end
    
        def console_def;          colorize(self, "\001\e[1m\002");  end
        def console_bold;         colorize(self, "\001\e[1m\002");  end
        def console_blink;        colorize(self, "\001\e[5m\002");  end
    
        def colorize(text, color_code)  "#{color_code}#{text}\001\e[0m\002" end
    end
    

    Each sequence needs to be wrapped in \001..\002 so that Readline knows to ignore non printing characters.

提交回复
热议问题