--- rxvt-unicode/src/rxvtperl.xs 2006/07/06 23:48:11 1.102 +++ rxvt-unicode/src/rxvtperl.xs 2006/12/07 03:50:36 1.107 @@ -270,6 +270,9 @@ overlay::overlay (rxvt_term *THIS, int x_, int y_, int w_, int h_, rend_t rstyle, int border) : THIS(THIS), x(x_), y(y_), w(w_), h(h_), border(border == 2), overlay_av (0) { + if (w < 0) w = 0; + if (h < 0) h = 0; + if (border == 2) { w += 2; @@ -1121,7 +1124,14 @@ wchar_t *wstr = sv2wcs (str); rxvt_push_locale (THIS->locale); - RETVAL = wcswidth (wstr, wcslen (wstr)); + RETVAL = 0; + for (wchar_t *wc = wstr; *wc; wc++) + { + int w = WCWIDTH (*wc); + + if (w) + RETVAL += max (w, 1); + } rxvt_pop_locale (); free (wstr); @@ -1164,6 +1174,13 @@ OUTPUT: RETVAL +char * +rxvt_term::locale () + CODE: + RETVAL = THIS->locale; + OUTPUT: + RETVAL + #define TERM_OFFSET(sym) offsetof (TermWin_t, sym) #define TERM_OFFSET_width TERM_OFFSET(width)