diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/xdisp.c | 70 |
1 files changed, 32 insertions, 38 deletions
diff --git a/src/xdisp.c b/src/xdisp.c index 7c3eb3cb378..2facc873743 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -15978,54 +15978,55 @@ store_mode_line_string (string, lisp_string, copy_string, field_width, precision | |||
| 15978 | 15978 | ||
| 15979 | 15979 | ||
| 15980 | DEFUN ("format-mode-line", Fformat_mode_line, Sformat_mode_line, | 15980 | DEFUN ("format-mode-line", Fformat_mode_line, Sformat_mode_line, |
| 15981 | 1, 5, 0, | 15981 | 1, 4, 0, |
| 15982 | doc: /* Return the mode-line of selected window as a string. | 15982 | doc: /* Format a string out of a mode line format specification. |
| 15983 | First arg FORMAT specifies the mode line format (see `mode-line-format' for | 15983 | First arg FORMAT specifies the mode line format (see `mode-line-format' |
| 15984 | details) to use. Second (optional) arg WINDOW specifies the window to | 15984 | for details) to use. |
| 15985 | use as the context for the formatting (default is the selected window). | ||
| 15986 | 15985 | ||
| 15987 | If third (optional) arg NO-PROPS is non-nil, the value string has | 15986 | Optional second arg FACE specifies the face property to put |
| 15988 | no text properties. The fourth (optional) arg BUFFER specifies | ||
| 15989 | which buffer to use (default, the current buffer). | ||
| 15990 | |||
| 15991 | Fifth (optional) arg FACE specifies the face property to put | ||
| 15992 | on all characters for which no face is specified. | 15987 | on all characters for which no face is specified. |
| 15993 | t means whatever face the window's mode line currently uses | 15988 | t means whatever face the window's mode line currently uses |
| 15994 | \(either `mode-line' or `mode-line-inactive', depending). | 15989 | \(either `mode-line' or `mode-line-inactive', depending). |
| 15995 | nil means the default is no face property. */) | 15990 | nil means the default is no face property. |
| 15996 | (format, window, no_props, buffer, face) | 15991 | If FACE is an integer, the value string has no text properties. |
| 15997 | Lisp_Object format, window, no_props, buffer, face; | 15992 | |
| 15993 | Optional third and fourth args WINDOW and BUFFER specify the window | ||
| 15994 | and buffer to use as the context for the formatting (defaults | ||
| 15995 | are the selected window and the window's buffer). */) | ||
| 15996 | (format, face, window, buffer) | ||
| 15997 | Lisp_Object format, face, window, buffer; | ||
| 15998 | { | 15998 | { |
| 15999 | struct it it; | 15999 | struct it it; |
| 16000 | int len; | 16000 | int len; |
| 16001 | struct window *w; | 16001 | struct window *w; |
| 16002 | struct buffer *old_buffer = NULL; | 16002 | struct buffer *old_buffer = NULL; |
| 16003 | enum face_id face_id; | 16003 | int face_id = -1; |
| 16004 | int no_props = INTEGERP (face); | ||
| 16004 | 16005 | ||
| 16005 | if (NILP (window)) | 16006 | if (NILP (window)) |
| 16006 | window = selected_window; | 16007 | window = selected_window; |
| 16007 | CHECK_WINDOW (window); | 16008 | CHECK_WINDOW (window); |
| 16008 | w = XWINDOW (window); | 16009 | w = XWINDOW (window); |
| 16009 | 16010 | ||
| 16010 | if (EQ (face, Qt)) | 16011 | if (NILP (buffer)) |
| 16011 | face = (EQ (window, selected_window) ? Qmode_line : Qmode_line_inactive); | 16012 | buffer = w->buffer; |
| 16013 | CHECK_BUFFER (buffer); | ||
| 16014 | |||
| 16015 | if (NILP (format)) | ||
| 16016 | return build_string (""); | ||
| 16017 | |||
| 16018 | if (no_props) | ||
| 16019 | face = Qnil; | ||
| 16012 | 16020 | ||
| 16013 | if (!NILP (face)) | 16021 | if (!NILP (face)) |
| 16014 | { | 16022 | { |
| 16015 | Lisp_Object tem = Fget (face, Qface); | 16023 | if (EQ (face, Qt)) |
| 16016 | if (INTEGERP (tem)) | 16024 | face = (EQ (window, selected_window) ? Qmode_line : Qmode_line_inactive); |
| 16017 | face_id = XINT (tem); | 16025 | face_id = lookup_named_face (XFRAME (WINDOW_FRAME (w)), face, 0, 0); |
| 16018 | else | ||
| 16019 | { | ||
| 16020 | face = Qnil; | ||
| 16021 | face_id = DEFAULT_FACE_ID; | ||
| 16022 | } | ||
| 16023 | } | 16026 | } |
| 16024 | 16027 | ||
| 16025 | if (NILP (buffer)) | 16028 | if (face_id < 0) |
| 16026 | buffer = w->buffer; | 16029 | face_id = DEFAULT_FACE_ID; |
| 16027 | |||
| 16028 | CHECK_BUFFER (buffer); | ||
| 16029 | 16030 | ||
| 16030 | if (XBUFFER (buffer) != current_buffer) | 16031 | if (XBUFFER (buffer) != current_buffer) |
| 16031 | { | 16032 | { |
| @@ -16033,20 +16034,13 @@ nil means the default is no face property. */) | |||
| 16033 | set_buffer_internal_1 (XBUFFER (buffer)); | 16034 | set_buffer_internal_1 (XBUFFER (buffer)); |
| 16034 | } | 16035 | } |
| 16035 | 16036 | ||
| 16036 | if (NILP (format) || EQ (format, Qt)) | ||
| 16037 | face_id = (NILP (format) | ||
| 16038 | ? CURRENT_MODE_LINE_FACE_ID (w) | ||
| 16039 | : HEADER_LINE_FACE_ID); | ||
| 16040 | |||
| 16041 | init_iterator (&it, w, -1, -1, NULL, face_id); | 16037 | init_iterator (&it, w, -1, -1, NULL, face_id); |
| 16042 | 16038 | ||
| 16043 | if (NILP (no_props)) | 16039 | if (!no_props) |
| 16044 | { | 16040 | { |
| 16045 | mode_line_string_face = face; | 16041 | mode_line_string_face = face; |
| 16046 | |||
| 16047 | mode_line_string_face_prop | 16042 | mode_line_string_face_prop |
| 16048 | = (NILP (mode_line_string_face) ? Qnil | 16043 | = (NILP (face) ? Qnil : Fcons (Qface, Fcons (face, Qnil))); |
| 16049 | : Fcons (Qface, Fcons (mode_line_string_face, Qnil))); | ||
| 16050 | 16044 | ||
| 16051 | /* We need a dummy last element in mode_line_string_list to | 16045 | /* We need a dummy last element in mode_line_string_list to |
| 16052 | indicate we are building the propertized mode-line string. | 16046 | indicate we are building the propertized mode-line string. |
| @@ -16069,7 +16063,7 @@ nil means the default is no face property. */) | |||
| 16069 | if (old_buffer) | 16063 | if (old_buffer) |
| 16070 | set_buffer_internal_1 (old_buffer); | 16064 | set_buffer_internal_1 (old_buffer); |
| 16071 | 16065 | ||
| 16072 | if (NILP (no_props)) | 16066 | if (!no_props) |
| 16073 | { | 16067 | { |
| 16074 | Lisp_Object str; | 16068 | Lisp_Object str; |
| 16075 | mode_line_string_list = Fnreverse (mode_line_string_list); | 16069 | mode_line_string_list = Fnreverse (mode_line_string_list); |