summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChong Yidong <cyd@stupidchicken.com>2010-12-16 10:13:28 +0800
committerChong Yidong <cyd@stupidchicken.com>2010-12-16 10:13:28 +0800
commit4bf3e46ed9236e0a8cfc538583c981468255357a (patch)
tree72042a04eda1210a8c7b5a54b1c9d51a50e84e06
parentc1cf05f4bb18bf2ded3d1cc5991f15c2dd6ead81 (diff)
downloademacs-4bf3e46ed9236e0a8cfc538583c981468255357a.tar.gz
* xdisp.c (Fformat_mode_line): Restrict the FACE argument to basic faces (Bug#7587).
-rw-r--r--src/ChangeLog5
-rw-r--r--src/xdisp.c34
2 files changed, 22 insertions, 17 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 4d1225a112e..4e56c1da05d 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -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.
diff --git a/src/xdisp.c b/src/xdisp.c
index d3afac26a68..29a1f346b88 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -229,7 +229,7 @@ extern Lisp_Object do_mouse_tracking;
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 @@ DEFUN ("format-mode-line", Fformat_mode_line, Sformat_mode_line,
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 @@ are the selected window and the window's buffer). */)
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 @@ are the selected window and the window's buffer). */)
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;