Mercurial > emacs
changeset 112052:9cd818c8f3e0
* xdisp.c (Fformat_mode_line): Restrict the FACE argument to basic faces (Bug#7587).
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Thu, 16 Dec 2010 10:13:28 +0800 |
parents | bb8e2da18b9d |
children | 27e06e53f81b |
files | src/ChangeLog src/xdisp.c |
diffstat | 2 files changed, 22 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Thu Dec 16 09:11:21 2010 +0800 +++ b/src/ChangeLog Thu Dec 16 10:13:28 2010 +0800 @@ -1,3 +1,8 @@ +2010-12-16 Chong Yidong <cyd@stupidchicken.com> + + * xdisp.c (Fformat_mode_line): Restrict the FACE argument to basic + faces (Bug#7587). + 2010-12-13 Eli Zaretskii <eliz@gnu.org> * fileio.c (Fexpand_file_name): One more doc fix.
--- a/src/xdisp.c Thu Dec 16 09:11:21 2010 +0800 +++ b/src/xdisp.c Thu Dec 16 10:13:28 2010 +0800 @@ -229,7 +229,7 @@ extern int minibuffer_auto_raise; extern Lisp_Object Vminibuffer_list; -extern Lisp_Object Qface; +extern Lisp_Object Qface, Qdefault; extern Lisp_Object Qmode_line, Qmode_line_inactive, Qheader_line; extern Lisp_Object Voverriding_local_map; @@ -17883,12 +17883,13 @@ First arg FORMAT specifies the mode line format (see `mode-line-format' for details) to use. -Optional second arg FACE specifies the face property to put -on all characters for which no face is specified. -The value t means whatever face the window's mode line currently uses -\(either `mode-line' or `mode-line-inactive', depending). -A value of nil means the default is no face property. -If FACE is an integer, the value string has no text properties. +Optional second arg FACE specifies the face property to put on all +characters for which no face is specified. The value nil means the +default face. The value t means whatever face the window's mode line +currently uses \(either `mode-line' or `mode-line-inactive', +depending). An integer value means the value string has no text +properties. Otherwise, the value should be one of `default', +`mode-line', `mode-line-inactive', `header-line', or `tool-bar'. Optional third and fourth args WINDOW and BUFFER specify the window and buffer to use as the context for the formatting (defaults @@ -17900,7 +17901,7 @@ int len; struct window *w; struct buffer *old_buffer = NULL; - int face_id = -1; + int face_id; int no_props = INTEGERP (face); int count = SPECPDL_INDEX (); Lisp_Object str; @@ -17923,15 +17924,14 @@ if (no_props) face = Qnil; - if (!NILP (face)) - { - if (EQ (face, Qt)) - face = (EQ (window, selected_window) ? Qmode_line : Qmode_line_inactive); - face_id = lookup_named_face (XFRAME (WINDOW_FRAME (w)), face, 0); - } - - if (face_id < 0) - face_id = DEFAULT_FACE_ID; + face_id = (NILP (face) || EQ (face, Qdefault)) ? DEFAULT_FACE_ID + : EQ (face, Qt) ? (EQ (window, selected_window) + ? MODE_LINE_FACE_ID : MODE_LINE_INACTIVE_FACE_ID) + : EQ (face, Qmode_line) ? MODE_LINE_FACE_ID + : EQ (face, Qmode_line_inactive) ? MODE_LINE_FACE_ID + : EQ (face, Qheader_line) ? HEADER_LINE_FACE_ID + : EQ (face, Qtool_bar) ? TOOL_BAR_FACE_ID + : DEFAULT_FACE_ID; if (XBUFFER (buffer) != current_buffer) old_buffer = current_buffer;