Fix for an issue where the newline character would appear on blank lines. Instead of inverting the newline character, draw it in gray.

This commit is contained in:
ridiculousfish 2013-01-24 12:07:57 -08:00
parent 268d64d244
commit 412902e4ae
2 changed files with 18 additions and 3 deletions

View File

@ -135,7 +135,7 @@ public:
/** Returns whether the color is bold */
bool is_bold() const
{
return flags & flag_bold;
return !! (flags & flag_bold);
}
/** Set whether the color is bold */

View File

@ -1361,17 +1361,32 @@ void s_reset(screen_t *s, screen_reset_mode_t mode)
/* Do the PROMPT_SP hack */
int screen_width = common_get_width();
wcstring abandon_line_string;
abandon_line_string.reserve(screen_width);
abandon_line_string.reserve(screen_width + 32); //should be enough
int non_space_width = wcwidth(omitted_newline_char);
if (screen_width >= non_space_width)
{
abandon_line_string.append(L"\x1b[7m"); //invert text ANSI escape sequence
if (output_get_supports_term256())
{
// draw the string in term256 gray
abandon_line_string.append(L"\x1b[38;5;245m");
}
else
{
// draw in "bright black" (gray)
abandon_line_string.append(L"\x1b[0m" //bright
L"\x1b[30;1m"); //black
}
abandon_line_string.push_back(omitted_newline_char);
abandon_line_string.append(L"\x1b[0m"); //normal text ANSI escape sequence
abandon_line_string.append(screen_width - non_space_width, L' ');
}
abandon_line_string.push_back(L'\r');
// now we are certainly on a new line. But we may have dropped the omitted newline char on it. So append enough spaces to overwrite the omitted newline char, and then
abandon_line_string.append(non_space_width, L' ');
abandon_line_string.push_back(L'\r');
const std::string narrow_abandon_line_string = wcs2string(abandon_line_string);
write_loop(STDOUT_FILENO, narrow_abandon_line_string.c_str(), narrow_abandon_line_string.size());
s->actual.cursor.x = 0;