From a10edf435b5609d0a6859b41a48a846990c8a8a3 Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Wed, 1 Dec 2004 09:25:20 +0000 Subject: [PATCH] term_bidi_cache_store() now has a need to distinguish between the _width_ of a terminal line (number of character cell positions) and its _size_ (number of termchars), since of course these differ in the presence of combining characters. [originally from svn r4938] --- terminal.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/terminal.c b/terminal.c index 5de2e4be..c6dee33f 100644 --- a/terminal.c +++ b/terminal.c @@ -4371,7 +4371,7 @@ static int term_bidi_cache_hit(Terminal *term, int line, static void term_bidi_cache_store(Terminal *term, int line, termchar *lbefore, termchar *lafter, bidi_char *wcTo, - int width) + int width, int size) { int i; @@ -4403,14 +4403,14 @@ static void term_bidi_cache_store(Terminal *term, int line, termchar *lbefore, sfree(term->post_bidi_cache[line].backward); term->pre_bidi_cache[line].width = width; - term->pre_bidi_cache[line].chars = snewn(width, termchar); + term->pre_bidi_cache[line].chars = snewn(size, termchar); term->post_bidi_cache[line].width = width; - term->post_bidi_cache[line].chars = snewn(width, termchar); + term->post_bidi_cache[line].chars = snewn(size, termchar); term->post_bidi_cache[line].forward = snewn(width, int); term->post_bidi_cache[line].backward = snewn(width, int); - memcpy(term->pre_bidi_cache[line].chars, lbefore, width * TSIZE); - memcpy(term->post_bidi_cache[line].chars, lafter, width * TSIZE); + memcpy(term->pre_bidi_cache[line].chars, lbefore, size * TSIZE); + memcpy(term->post_bidi_cache[line].chars, lafter, size * TSIZE); memset(term->post_bidi_cache[line].forward, 0, width * sizeof(int)); memset(term->post_bidi_cache[line].backward, 0, width * sizeof(int)); @@ -4512,7 +4512,8 @@ static termchar *term_bidi_line(Terminal *term, struct termline *ldata, term->ltemp[it].chr = term->wcTo[it].wc; } term_bidi_cache_store(term, scr_y, ldata->chars, - term->ltemp, term->wcTo, ldata->size); + term->ltemp, term->wcTo, + term->cols, ldata->size); lchars = term->ltemp; } else {