--- rxvt-unicode/src/command.C 2005/03/12 23:35:14 1.202 +++ rxvt-unicode/src/command.C 2005/07/13 03:11:51 1.205 @@ -165,9 +165,11 @@ { rxvt_fontset *fs = FONTSET (r); rxvt_font *f = (*fs)[fs->find_font (ch)]; - wchar_t *chr, *alloc, ch2; + wchar_t *chr, *alloc, ch2, *fname; int len; + fname = rxvt_utf8towcs (f->name); + #if ENABLE_COMBINING if (IS_COMPOSE (ch)) { @@ -185,7 +187,7 @@ len = 1; } - int width = strlen (f->name); + int width = wcswidth (fname, wcslen (fname)); scr_overlay_new (0, -1, width < 8+5 ? 8+5 : width, len + 1); @@ -208,7 +210,9 @@ scr_overlay_set (12, y, NOCHAR, r); } - scr_overlay_set (0, len, f->name); + scr_overlay_set (0, len, fname); + + free (fname); #if ENABLE_COMBINING if (alloc) @@ -2644,6 +2648,7 @@ bool refreshnow = false; int nlines = 0; unicode_t *str = buf; + unicode_t *eol = str + min (TermWin.ncol, UBUFSIZ); for (;;) { @@ -2652,9 +2657,11 @@ *str++ = ch; - if (ch == C0_LF) + if (ch == C0_LF || str >= eol) { - nlines++; + if (ch == C0_LF) + nlines++; + refresh_count++; if (!(options & Opt_jumpScroll) @@ -2671,13 +2678,20 @@ scr_add_lines (buf, nlines, str - buf); nlines = 0; str = buf; + eol = str + min (TermWin.ncol, UBUFSIZ); + } + + if (str >= eol) + { + if (eol >= buf + UBUFSIZ) + { + ch = NOCHAR; + break; + } + else + eol = min (eol + TermWin.ncol, buf + UBUFSIZ); } - } - if (str >= buf + UBUFSIZ) - { - ch = NOCHAR; - break; } seq_begin = cmdbuf_ptr;