billiob pushed a commit to branch master.

http://git.enlightenment.org/apps/terminology.git/commit/?id=b0226726f8ea6b55ddd2e5a539da9d1798d23345

commit b0226726f8ea6b55ddd2e5a539da9d1798d23345
Author: Boris Faure <bill...@gmail.com>
Date:   Mon Jun 26 23:36:23 2017 +0200

    termpty: correctly handle DECFRA wrt SGR 0
---
 src/bin/termpty.c    | 25 +++++++++++++++++++++++++
 src/bin/termptyesc.c |  2 +-
 src/bin/termptyops.h |  2 ++
 3 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/src/bin/termpty.c b/src/bin/termpty.c
index 2357576..5ef82f1 100644
--- a/src/bin/termpty.c
+++ b/src/bin/termpty.c
@@ -1597,6 +1597,31 @@ termpty_cells_set_content(Termpty *ty, Termcell *cells,
      }
 }
 
+void
+termpty_cells_att_fill_preserve_colors(Termpty *ty, Termcell *cells,
+                                       Eina_Unicode codepoint, int count)
+{
+   int i;
+   Termcell local = { .codepoint = codepoint, .att = ty->termstate.att};
+
+   for (i = 0; i < count; i++)
+     {
+        Termatt att = cells[i].att;
+        _handle_block_codepoint_overwrite(ty, cells[i].codepoint, codepoint);
+        cells[i] = local;
+        if (ty->termstate.att.fg == 0 && ty->termstate.att.bg == 0)
+          {
+             cells[i].att.fg = att.fg;
+             cells[i].att.fg256 = att.fg256;
+             cells[i].att.fgintense = att.fgintense;
+
+             cells[i].att.bg = att.bg;
+             cells[i].att.bg256 = att.bg256;
+             cells[i].att.bgintense = att.bgintense;
+          }
+     }
+}
+
 
 void
 termpty_cell_codepoint_att_fill(Termpty *ty, Eina_Unicode codepoint,
diff --git a/src/bin/termptyesc.c b/src/bin/termptyesc.c
index 6794d2c..aef05eb 100644
--- a/src/bin/termptyesc.c
+++ b/src/bin/termptyesc.c
@@ -907,7 +907,7 @@ _handle_esc_csi_decfra(Termpty *ty, Eina_Unicode **b)
    for (; top <= bottom; top++)
      {
         Termcell *cells = &(TERMPTY_SCREEN(ty, left, top));
-        termpty_cells_fill(ty, c, cells, len);
+        termpty_cells_att_fill_preserve_colors(ty, cells, c, len);
      }
 }
 
diff --git a/src/bin/termptyops.h b/src/bin/termptyops.h
index 177fab0..7046d5b 100644
--- a/src/bin/termptyops.h
+++ b/src/bin/termptyops.h
@@ -12,6 +12,8 @@ void termpty_text_save_top(Termpty *ty, Termcell *cells, 
ssize_t w_max);
 void termpty_cells_copy(Termpty *ty, Termcell *cells, Termcell *dest, int 
count);
 void termpty_cells_fill(Termpty *ty, Eina_Unicode codepoint, Termcell *cells, 
int count);
 void termpty_cells_clear(Termpty *ty, Termcell *cells, int count);
+void termpty_cells_att_fill_preserve_colors(Termpty *ty, Termcell *cells,
+                                       Eina_Unicode codepoint, int count);
 void termpty_text_scroll(Termpty *ty, Eina_Bool clear);
 void termpty_text_scroll_rev(Termpty *ty, Eina_Bool clear);
 void termpty_text_scroll_test(Termpty *ty, Eina_Bool clear);

-- 


Reply via email to