]> git.eshelyaron.com Git - emacs.git/commitdiff
(display_mode_element): Fix display of wide chars.
authorKim F. Storm <storm@cua.dk>
Mon, 18 Oct 2004 22:53:13 +0000 (22:53 +0000)
committerKim F. Storm <storm@cua.dk>
Mon, 18 Oct 2004 22:53:13 +0000 (22:53 +0000)
From Kenichi Handa  <handa@m17n.org>.

src/xdisp.c

index dbce1c5636868b8508d0ae37b66e442d4f95547d..306e26702f5c0621bfb721d4ecb25f2902e26184 100644 (file)
@@ -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