diff options
author | Egmont Koblinger <egmont@gmail.com> | 2017-04-23 23:57:57 +0200 |
---|---|---|
committer | Egmont Koblinger <egmont@gmail.com> | 2017-04-23 23:57:57 +0200 |
commit | a26a60b8e564968b61716f0d2e52e17cd9362413 (patch) | |
tree | 67548709195fb10b1ded351600e2e500c05307cf | |
parent | 8e670e32809911094d8fd1c127d80115dce7fcc7 (diff) | |
download | vte-a26a60b8e564968b61716f0d2e52e17cd9362413.tar.gz |
emulation: Disregard bce only when autowrapping to the new line
Apply bce (background color erase) on a line that newly appears due to an
explicit escape sequence, but not when the text overflows to the next line.
This improves the fix from commit 18171bcfeaf8f3bf4bcb8a04dfcff916a3fbc40b
and fixes the le editor.
https://bugzilla.gnome.org/show_bug.cgi?id=754596#c15
-rw-r--r-- | src/vte.cc | 13 | ||||
-rw-r--r-- | src/vteinternal.hh | 2 | ||||
-rw-r--r-- | src/vteseq.cc | 4 |
3 files changed, 10 insertions, 9 deletions
@@ -2773,7 +2773,7 @@ VteTerminalPrivate::cleanup_fragments(long start, /* Cursor down, with scrolling. */ void -VteTerminalPrivate::cursor_down() +VteTerminalPrivate::cursor_down(bool explicit_sequence) { long start, end; @@ -2822,13 +2822,14 @@ VteTerminalPrivate::cursor_down() update_insert_delta(); } - /* Match xterm and fill the new row when scrolling. */ -#if 0 /* Disable for now: see bug 754596. */ - if (m_fill_defaults.attr.back != VTE_DEFAULT_BG) { + /* Handle bce (background color erase), however, diverge from xterm: + * only fill the new row with the background color if scrolling + * happens due to an explicit escape sequence, not due to autowrapping. + * See bug 754596 for details. */ + if (explicit_sequence && m_fill_defaults.attr.back != VTE_DEFAULT_BG) { VteRowData *rowdata = ensure_row(); _vte_row_data_fill (rowdata, &m_fill_defaults, m_column_count); } -#endif } else { /* Otherwise, just move the cursor down. */ m_screen->cursor.row++; @@ -2965,7 +2966,7 @@ VteTerminalPrivate::insert_char(gunichar c, /* Mark this line as soft-wrapped. */ row = ensure_row(); row->attr.soft_wrapped = 1; - cursor_down(); + cursor_down(false); } else { /* Don't wrap, stay at the rightmost column. */ col = m_screen->cursor.col = diff --git a/src/vteinternal.hh b/src/vteinternal.hh index a43455e8..61dcb956 100644 --- a/src/vteinternal.hh +++ b/src/vteinternal.hh @@ -560,7 +560,7 @@ public: void cleanup_fragments(long start, long end); - void cursor_down(); + void cursor_down(bool explicit_sequence); void drop_scrollback(); void restore_cursor(VteScreen *screen__); diff --git a/src/vteseq.cc b/src/vteseq.cc index 2d97170f..be2868f0 100644 --- a/src/vteseq.cc +++ b/src/vteseq.cc @@ -1661,7 +1661,7 @@ static void vte_sequence_handler_next_line (VteTerminalPrivate *that, GValueArray *params) { that->set_cursor_column(0); - that->cursor_down(); + that->cursor_down(true); } /* No-op. */ @@ -1818,7 +1818,7 @@ vte_sequence_handler_line_feed (VteTerminalPrivate *that, GValueArray *params) { that->ensure_cursor_is_onscreen(); - that->cursor_down(); + that->cursor_down(true); } /* Cursor up 1 line, with scrolling. */ |