aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKim F. Storm <[email protected]>2004-10-18 22:53:13 +0000
committerKim F. Storm <[email protected]>2004-10-18 22:53:13 +0000
commit7a6b6cce54820af5ab876fdbb253f8eecee37060 (patch)
tree2758b76243a2abad203ff87905dbe459ce0a9540 /src
parente3e55463715754c2d3cdc64dddc9d08ab15e6455 (diff)
(display_mode_element): Fix display of wide chars.
From Kenichi Handa <[email protected]>.
Diffstat (limited to 'src')
-rw-r--r--src/xdisp.c14
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