aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerd Moellmann <[email protected]>2001-09-19 14:48:52 +0000
committerGerd Moellmann <[email protected]>2001-09-19 14:48:52 +0000
commit72f62cb50cd1b98fe786985674e31546aa56323d (patch)
tree3394034b42dfa28889eaffb32e61cca00c3d177a
parenta269702287bf8e97aa9c4200ab0ee1d96d1d6746 (diff)
(decode_mode_spec): Add parameter MULTIBYTE.
(display_mode_element): Display the string from decode_mode_spec depending on its multibyteness.
-rw-r--r--src/ChangeLog4
-rw-r--r--src/xdisp.c39
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 <[email protected]>
+ * 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 "";
}