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,
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
/* 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));
struct buffer *b = XBUFFER (w->buffer);
obj = Qnil;
+ *multibyte = 0;
switch (c)
{
}
if (STRINGP (obj))
- return (char *) XSTRING (obj)->data;
+ {
+ *multibyte = STRING_MULTIBYTE (obj);
+ return (char *) XSTRING (obj)->data;
+ }
else
return "";
}