diff options
author | ridiculousfish <corydoras@ridiculousfish.com> | 2013-01-24 12:07:57 -0800 |
---|---|---|
committer | ridiculousfish <corydoras@ridiculousfish.com> | 2013-01-24 12:08:32 -0800 |
commit | 412902e4aea074dffaf20cb21c3c289cb45c0dff (patch) | |
tree | 0c580ad7c0bf62c55fb42d4418437733d3cb77b8 /screen.cpp | |
parent | 268d64d244cf6c1202c57e91d801ad772449f639 (diff) |
Fix for an issue where the newline character would appear on blank lines. Instead of inverting the newline character, draw it in gray.
Diffstat (limited to 'screen.cpp')
-rw-r--r-- | screen.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
@@ -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; |