Mercurial > emacs
changeset 92016:4a8a943b5b75
(decode_mode_spec): New arg string.
(display_mode_element): Adjusted for the above change.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Thu, 21 Feb 2008 07:03:56 +0000 |
parents | bfea5b2e7fd3 |
children | 621d5b9785f1 |
files | src/xdisp.c |
diffstat | 1 files changed, 17 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xdisp.c Thu Feb 21 06:29:02 2008 +0000 +++ b/src/xdisp.c Thu Feb 21 07:03:56 2008 +0000 @@ -917,7 +917,8 @@ 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, Lisp_Object, int)); static int store_mode_line_string P_ ((char *, Lisp_Object, int, int, int, Lisp_Object)); -static char *decode_mode_spec P_ ((struct window *, int, int, int, int *)); +static char *decode_mode_spec P_ ((struct window *, int, int, int, int *, + Lisp_Object *)); 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, @@ -17234,14 +17235,14 @@ int multibyte; int bytepos, charpos; unsigned char *spec; + Lisp_Object string; bytepos = percent_position; charpos = (STRING_MULTIBYTE (elt) ? string_byte_to_char (elt, bytepos) : bytepos); - - spec - = decode_mode_spec (it->w, c, field, prec, &multibyte); + spec = decode_mode_spec (it->w, c, field, prec, &multibyte, + &string); switch (mode_line_target) { @@ -17251,8 +17252,11 @@ break; case MODE_LINE_STRING: { - int len = strlen (spec); - Lisp_Object tem = make_string (spec, len); + if (NILP (string)) + { + int len = strlen (spec); + string = make_string (spec, len); + } props = Ftext_properties_at (make_number (charpos), elt); /* Should only keep face property in props */ n += store_mode_line_string (NULL, tem, 0, field, prec, props); @@ -17262,8 +17266,10 @@ { int nglyphs_before, nwritten; + if (STRINGP (string)) + spec = NULL; nglyphs_before = it->glyph_row->used[TEXT_AREA]; - nwritten = display_string (spec, Qnil, elt, + nwritten = display_string (spec, string, elt, charpos, 0, it, field, prec, 0, multibyte); @@ -17927,18 +17933,19 @@ static char lots_of_dashes[] = "--------------------------------------------------------------------------------------------------------------------------------------------"; static char * -decode_mode_spec (w, c, field_width, precision, multibyte) +decode_mode_spec (w, c, field_width, precision, multibyte, string) struct window *w; register int c; int field_width, precision; int *multibyte; + Lisp_Object *string; { Lisp_Object obj; struct frame *f = XFRAME (WINDOW_FRAME (w)); char *decode_mode_spec_buf = f->decode_mode_spec_buffer; struct buffer *b = current_buffer; - obj = Qnil; + *string = obj = Qnil; *multibyte = 0; switch (c) @@ -18331,6 +18338,7 @@ if (STRINGP (obj)) { *multibyte = STRING_MULTIBYTE (obj); + *string = obj; return (char *) SDATA (obj); } else