aboutsummaryrefslogtreecommitdiffhomepage
path: root/screen.cpp
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2013-01-24 12:07:57 -0800
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2013-01-24 12:08:32 -0800
commit412902e4aea074dffaf20cb21c3c289cb45c0dff (patch)
tree0c580ad7c0bf62c55fb42d4418437733d3cb77b8 /screen.cpp
parent268d64d244cf6c1202c57e91d801ad772449f639 (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.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/screen.cpp b/screen.cpp
index 26cd975b..fa3b3e59 100644
--- a/screen.cpp
+++ b/screen.cpp
@@ -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;