From 72f62cb50cd1b98fe786985674e31546aa56323d Mon Sep 17 00:00:00 2001 From: Gerd Moellmann Date: Wed, 19 Sep 2001 14:48:52 +0000 Subject: [PATCH] (decode_mode_spec): Add parameter MULTIBYTE. (display_mode_element): Display the string from decode_mode_spec depending on its multibyteness. --- src/ChangeLog | 4 ++++ src/xdisp.c | 39 ++++++++++++++++++++++++--------------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index c55917d77b..ef2f0947d2 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2001-09-19 Gerd Moellmann + * xdisp.c (decode_mode_spec): Add parameter MULTIBYTE. + (display_mode_element): Display the string from decode_mode_spec + depending on its multibyteness. + * s/netbsd.h (LD_SWITCH_SYSTEM, C_SWITCH_SYSTEM): Add /usr/pkg. * m/macppc.h (DATA_SEG_BITS): Also define for GCC 3. diff --git a/src/xdisp.c b/src/xdisp.c index df8720ee0e..7ffa35b67a 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -732,7 +732,7 @@ static int display_line P_ ((struct it *)); 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 @@ display_mode_element (it, depth, field_width, precision, elt) 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 @@ decode_mode_spec_coding (coding_system, buf, eol_flag) /* 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 @@ decode_mode_spec (w, c, field_width, precision) struct buffer *b = XBUFFER (w->buffer); obj = Qnil; + *multibyte = 0; switch (c) { @@ -14109,7 +14115,10 @@ decode_mode_spec (w, c, field_width, precision) } if (STRINGP (obj)) - return (char *) XSTRING (obj)->data; + { + *multibyte = STRING_MULTIBYTE (obj); + return (char *) XSTRING (obj)->data; + } else return ""; } -- 2.39.2