changeset 39351:17ddc09facff

(decode_mode_spec): Add parameter MULTIBYTE. (display_mode_element): Display the string from decode_mode_spec depending on its multibyteness.
author Gerd Moellmann <gerd@gnu.org>
date Wed, 19 Sep 2001 14:48:30 +0000
parents 0be887929f9f
children ab0a49e251ff
files src/xdisp.c
diffstat 1 files changed, 24 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/xdisp.c	Wed Sep 19 10:55:52 2001 +0000
+++ b/src/xdisp.c	Wed Sep 19 14:48:30 2001 +0000
@@ -732,7 +732,7 @@
 static int display_mode_lines P_ ((struct window *));
 static int display_mode_line P_ ((struct window *, enum face_id, Lisp_Object));
 static int display_mode_element P_ ((struct it *, int, int, int, Lisp_Object));
-static char *decode_mode_spec P_ ((struct window *, int, int, int));
+static char *decode_mode_spec P_ ((struct window *, int, int, int, int *));
 static void display_menu_bar P_ ((struct window *));
 static int display_count_lines P_ ((int, int, int, int, int *));
 static int display_string P_ ((unsigned char *, Lisp_Object, Lisp_Object,
@@ -13449,22 +13449,25 @@
 					     Vglobal_mode_string);
 		else if (c != 0)
 		  {
+		    int multibyte;
 		    unsigned char *spec
-		      = decode_mode_spec (it->w, c, field, prec);
-		    
+		      = decode_mode_spec (it->w, c, field, prec, &multibyte);
+
 		    if (frame_title_ptr)
 		      n += store_frame_title (spec, field, prec);
 		    else
 		      {
-			int nglyphs_before
-			  = it->glyph_row->used[TEXT_AREA];
-			int bytepos
-			  = percent_position - XSTRING (elt)->data;
-			int charpos
-			  = string_byte_to_char (elt, bytepos);
-			int nwritten
-			  = display_string (spec, Qnil, elt, charpos, 0, it,
-					    field, prec, 0, -1);
+			int nglyphs_before, bytepos, charpos, nwritten;
+			
+			nglyphs_before = it->glyph_row->used[TEXT_AREA];
+			bytepos = percent_position - XSTRING (elt)->data;
+			charpos = (multibyte
+				   ? string_byte_to_char (elt, bytepos)
+				   : bytepos);
+			nwritten = display_string (spec, Qnil, elt,
+						   charpos, 0, it,
+						   field, prec, 0,
+						   multibyte);
 
 			/* Assign to the glyphs written above the
 			   string where the `%x' came from, position
@@ -13760,15 +13763,17 @@
 /* Return a string for the output of a mode line %-spec for window W,
    generated by character C.  PRECISION >= 0 means don't return a
    string longer than that value.  FIELD_WIDTH > 0 means pad the
-   string returned with spaces to that value.  */
+   string returned with spaces to that value.  Return 1 in *MULTIBYTE
+   if the result is multibyte text.  */
 
 static char lots_of_dashes[] = "--------------------------------------------------------------------------------------------------------------------------------------------";
 
 static char *
-decode_mode_spec (w, c, field_width, precision)
+decode_mode_spec (w, c, field_width, precision, multibyte)
      struct window *w;
      register int c;
      int field_width, precision;
+     int *multibyte;
 {
   Lisp_Object obj;
   struct frame *f = XFRAME (WINDOW_FRAME (w));
@@ -13776,6 +13781,7 @@
   struct buffer *b = XBUFFER (w->buffer);
 
   obj = Qnil;
+  *multibyte = 0;
 
   switch (c)
     {
@@ -14109,7 +14115,10 @@
     }
 
   if (STRINGP (obj))
-    return (char *) XSTRING (obj)->data;
+    {
+      *multibyte = STRING_MULTIBYTE (obj);
+      return (char *) XSTRING (obj)->data;
+    }
   else
     return "";
 }