Index: src/display/utils.h =================================================================== --- src/display/utils.h (revision 719) +++ src/display/utils.h (working copy) @@ -75,6 +75,10 @@ char* print_status_info(char* first, char* last); char* print_status_extra(char* first, char* last, Control* c); +char* escape_amps(const char* string); +int colored_size(char *fmt, ...); + + inline char* print_buffer(char* first, char* last, const char* format) { if (first >= last) Index: src/display/window_title.cc =================================================================== --- src/display/window_title.cc (revision 719) +++ src/display/window_title.cc (working copy) @@ -38,6 +38,7 @@ #include "canvas.h" #include "window_title.h" +#include "utils.h" namespace display { @@ -51,8 +52,10 @@ m_slotSchedule(this, (cachedTime + rak::timer::from_seconds(1)).round_seconds()); m_canvas->erase(); - m_canvas->print(std::max(0, (m_canvas->get_width() - (int)m_title.size()) / 2 - 4), 0, - "*** %s ***", m_title.c_str()); + char *escaped = escape_amps(m_title.c_str()); + m_canvas->print_color(std::max(0, (m_canvas->get_width() - colored_size(escaped)) / 2 - 4), 0, + "*** &bold;%s&clear; ***", escaped); + free(escaped); } } Index: src/display/utils.cc =================================================================== --- src/display/utils.cc (revision 719) +++ src/display/utils.cc (working copy) @@ -46,6 +46,7 @@ #include #include #include +#include #include "core/download.h" @@ -266,4 +267,66 @@ return first; } +// +// return a new string with '&' replaced with "&", +// so it gets saved during print_color +// +char* +escape_amps(const char *input) { + unsigned int i = 0, o = 0; + int count = 0; + char *output; + + for (i=0; i