From 43facb76534c54d334b5e396ec624aff3a9c01bc Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Wed, 12 Jan 2005 05:06:46 +0000 Subject: [PATCH] (Fformat_mode_line): New arg FACE specifies a default face property for characters that don't specify one. --- src/xdisp.c | 49 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/src/xdisp.c b/src/xdisp.c index 600e01a13e1..7c3eb3cb378 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -15978,27 +15978,50 @@ store_mode_line_string (string, lisp_string, copy_string, field_width, precision DEFUN ("format-mode-line", Fformat_mode_line, Sformat_mode_line, - 1, 4, 0, + 1, 5, 0, doc: /* Return the mode-line of selected window as a string. First arg FORMAT specifies the mode line format (see `mode-line-format' for -details) to use. Second optional arg WINDOW specifies a different window to -use as the context for the formatting. If third optional arg NO-PROPS is -non-nil, string is not propertized. Fourth optional arg BUFFER specifies -which buffer to use. */) - (format, window, no_props, buffer) - Lisp_Object format, window, no_props, buffer; +details) to use. Second (optional) arg WINDOW specifies the window to +use as the context for the formatting (default is the selected window). + +If third (optional) arg NO-PROPS is non-nil, the value string has +no text properties. The fourth (optional) arg BUFFER specifies +which buffer to use (default, the current buffer). + +Fifth (optional) arg FACE specifies the face property to put +on all characters for which no face is specified. +t means whatever face the window's mode line currently uses +\(either `mode-line' or `mode-line-inactive', depending). +nil means the default is no face property. */) + (format, window, no_props, buffer, face) + Lisp_Object format, window, no_props, buffer, face; { struct it it; int len; struct window *w; struct buffer *old_buffer = NULL; - enum face_id face_id = DEFAULT_FACE_ID; + enum face_id face_id; if (NILP (window)) window = selected_window; CHECK_WINDOW (window); w = XWINDOW (window); + if (EQ (face, Qt)) + face = (EQ (window, selected_window) ? Qmode_line : Qmode_line_inactive); + + if (!NILP (face)) + { + Lisp_Object tem = Fget (face, Qface); + if (INTEGERP (tem)) + face_id = XINT (tem); + else + { + face = Qnil; + face_id = DEFAULT_FACE_ID; + } + } + if (NILP (buffer)) buffer = w->buffer; @@ -16010,14 +16033,16 @@ which buffer to use. */) set_buffer_internal_1 (XBUFFER (buffer)); } + if (NILP (format) || EQ (format, Qt)) + face_id = (NILP (format) + ? CURRENT_MODE_LINE_FACE_ID (w) + : HEADER_LINE_FACE_ID); + init_iterator (&it, w, -1, -1, NULL, face_id); if (NILP (no_props)) { - mode_line_string_face - = (face_id == MODE_LINE_FACE_ID ? Qmode_line - : face_id == MODE_LINE_INACTIVE_FACE_ID ? Qmode_line_inactive - : face_id == HEADER_LINE_FACE_ID ? Qheader_line : Qnil); + mode_line_string_face = face; mode_line_string_face_prop = (NILP (mode_line_string_face) ? Qnil -- 2.39.2