diff --git a/cucul/import.c b/cucul/import.c index 6dd87e7..6907034 100644 --- a/cucul/import.c +++ b/cucul/import.c @@ -350,22 +350,25 @@ static long int import_ansi(cucul_canvas_t *cv, unsigned char const *buffer = (unsigned char const*)data; unsigned int i, j, skip, dummy = 0; unsigned int width = 0, height = 0, wch = 1; + uint32_t savedattr, resizeattr; unsigned long int ch; int x = 0, y = 0, save_x = 0, save_y = 0; - cucul_set_canvas_size(cv, width, height); + cucul_set_canvas_size(cv, 0, 0); if(utf8) { - grcm.dfg = cucul_attr_to_ansi_fg(cv->curattr); - grcm.dbg = cucul_attr_to_ansi_bg(cv->curattr); + grcm.dfg = CUCUL_DEFAULT; + grcm.dbg = CUCUL_TRANSPARENT; } else { grcm.dfg = CUCUL_LIGHTGRAY; grcm.dbg = CUCUL_BLACK; - cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg); + cucul_set_color_ansi(cv, CUCUL_LIGHTGRAY, CUCUL_BLACK); } + resizeattr = cucul_get_attr(cv, -1, -1); + ansi_parse_grcm(cv, &grcm, 1, &dummy); for(i = 0; i < size; i += skip) @@ -491,8 +494,12 @@ static long int import_ansi(cucul_canvas_t *cv, break; case 'K': /* EL - Erase In Line */ if(width < 80) - cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg); + { + savedattr = cucul_get_attr(cv, -1, -1); + cucul_set_attr(cv, resizeattr); cucul_set_canvas_size(cv, width = 80, height); + cucul_set_attr(cv, savedattr); + } for(j = x; j < 80; j++) cucul_put_char(cv, j, y, ' '); x = 80; @@ -541,26 +548,31 @@ static long int import_ansi(cucul_canvas_t *cv, /* Make sure the canvas is big enough. */ if((unsigned int)x + wch > width) { - cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg); + savedattr = cucul_get_attr(cv, -1, -1); + cucul_set_attr(cv, resizeattr); cucul_set_canvas_size(cv, width = x + wch, height); + cucul_set_attr(cv, savedattr); } if((unsigned int)y >= height) { - cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg); + savedattr = cucul_get_attr(cv, -1, -1); + cucul_set_attr(cv, resizeattr); cucul_set_canvas_size(cv, width, height = y + 1); + cucul_set_attr(cv, savedattr); } /* Now paste our character */ - cucul_set_color_ansi(cv, grcm.efg, grcm.ebg); cucul_put_char(cv, x, y, ch); x += wch; } if((unsigned int)y > height) { - cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg); + savedattr = cucul_get_attr(cv, -1, -1); + cucul_set_attr(cv, resizeattr); cucul_set_canvas_size(cv, width, height = y); + cucul_set_attr(cv, savedattr); } return size; @@ -645,5 +657,7 @@ static void ansi_parse_grcm(cucul_canvas_t *cv, struct ansi_grcm *g, g->efg = CUCUL_WHITE; } } + + cucul_set_color_ansi(cv, g->efg, g->ebg); }