--- rxvt-unicode/src/screen.C 2005/04/17 22:36:13 1.162 +++ rxvt-unicode/src/screen.C 2005/06/22 14:33:23 1.164 @@ -2435,17 +2435,23 @@ } else if (oldcursor.row >= 0) { + int cursorwidth = 1; + int col = oldcursor.col; + + while (col && screen.text[screen.cur.row + TermWin.saveLines][col] == NOCHAR) + col--; + + while (col + cursorwidth < TermWin.ncol + && drawn_text[oldcursor.row][col + cursorwidth] == NOCHAR) + cursorwidth++; + #ifndef NO_CURSORCOLOR if (ISSET_PIXCOLOR (Color_cursor)) XSetForeground (display->display, TermWin.gc, pix_colors[Color_cursor]); #endif - int cursorwidth = 1; - while (oldcursor.col + cursorwidth < TermWin.ncol - && drawn_text[oldcursor.row][oldcursor.col + cursorwidth] == NOCHAR) - cursorwidth++; XDrawRectangle (display->display, drawBuffer, TermWin.gc, - Col2Pixel (oldcursor.col), + Col2Pixel (col), Row2Pixel (oldcursor.row), (unsigned int) (Width2Pixel (cursorwidth) - 1), (unsigned int) (Height2Pixel (1) - TermWin.lineSpace - 1)); @@ -3798,6 +3804,22 @@ } void +rxvt_term::scr_overlay_set (int x, int y, const wchar_t *s) +{ + while (*s) + { + text_t t = *s++; + int width = wcwidth (t); + + while (width--) + { + scr_overlay_set (x++, y, t); + t = NOCHAR; + } + } +} + +void rxvt_term::scr_swap_overlay () { if (!ov_text)