diff options
author | Kim F. Storm <[email protected]> | 2004-10-18 22:53:13 +0000 |
---|---|---|
committer | Kim F. Storm <[email protected]> | 2004-10-18 22:53:13 +0000 |
commit | 7a6b6cce54820af5ab876fdbb253f8eecee37060 (patch) | |
tree | 2758b76243a2abad203ff87905dbe459ce0a9540 /src | |
parent | e3e55463715754c2d3cdc64dddc9d08ab15e6455 (diff) |
(display_mode_element): Fix display of wide chars.
From Kenichi Handa <[email protected]>.
Diffstat (limited to 'src')
-rw-r--r-- | src/xdisp.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/xdisp.c b/src/xdisp.c index dbce1c5636..306e26702f 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -7976,7 +7976,7 @@ store_frame_title (str, field_width, precision) /* Copy at most PRECISION chars from STR. */ nbytes = strlen (str); - n+= c_string_width (str, nbytes, precision, &dummy, &nbytes); + n += c_string_width (str, nbytes, precision, &dummy, &nbytes); while (nbytes--) store_frame_title_char (*str++); @@ -15457,14 +15457,15 @@ display_mode_element (it, depth, field_width, precision, elt, props, risky) if (this - 1 != last) { + int nchars, nbytes; + /* Output to end of string or up to '%'. Field width is length of string. Don't output more than PRECISION allows us. */ --this; - prec = chars_in_text (last, this - last); - if (precision > 0 && prec > precision - n) - prec = precision - n; + prec = c_string_width (last, this - last, precision - n, + &nchars, &nbytes); if (frame_title_ptr) n += store_frame_title (last, 0, prec); @@ -15472,9 +15473,12 @@ display_mode_element (it, depth, field_width, precision, elt, props, risky) { int bytepos = last - lisp_string; int charpos = string_byte_to_char (elt, bytepos); + int endpos = (precision <= 0 ? SCHARS (elt) + : charpos + nchars); + n += store_mode_line_string (NULL, Fsubstring (elt, make_number (charpos), - make_number (charpos + prec)), + make_number (endpos)), 0, 0, 0, Qnil); } else |