]> git.eshelyaron.com Git - emacs.git/commitdiff
* xdisp.c (Fformat_mode_line): Restrict the FACE argument to basic faces (Bug#7587).
authorChong Yidong <cyd@stupidchicken.com>
Thu, 16 Dec 2010 02:13:28 +0000 (10:13 +0800)
committerChong Yidong <cyd@stupidchicken.com>
Thu, 16 Dec 2010 02:13:28 +0000 (10:13 +0800)
src/ChangeLog
src/xdisp.c

index 4d1225a112ea8d98aa07d2b608074017d5092b9d..4e56c1da05d7848ca1c5e96b117473e1fd5764f3 100644 (file)
@@ -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.
index d3afac26a684a2d72ce2f203e79b1dce33326754..29a1f346b884de1f9913defeb9384e9a132802a6 100644 (file)
@@ -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;