Function: frame-parameter
frame-parameter is a function defined in frame.c.
Signature
(frame-parameter FRAME PARAMETER)
Documentation
Return FRAME's value for parameter PARAMETER.
If FRAME is nil, describe the currently selected frame.
Probably introduced at or before Emacs version 22.2.
Aliases
ps-frame-parameter (obsolete since 28.1)
allout-frame-property (obsolete since 28.1)
dframe-frame-parameter (obsolete since 27.1)
Source Code
// Defined in /usr/src/emacs/src/frame.c
{
struct frame *f = decode_any_frame (frame);
Lisp_Object value = Qnil;
CHECK_SYMBOL (parameter);
XSETFRAME (frame, f);
if (FRAME_LIVE_P (f))
{
/* Avoid consing in frequent cases. */
if (EQ (parameter, Qname))
value = f->name;
#ifdef HAVE_WINDOW_SYSTEM
/* These are used by vertical motion commands. */
else if (EQ (parameter, Qvertical_scroll_bars))
value = (f->vertical_scroll_bar_type == vertical_scroll_bar_none
? Qnil
: (f->vertical_scroll_bar_type == vertical_scroll_bar_left
? Qleft : Qright));
else if (EQ (parameter, Qhorizontal_scroll_bars))
value = f->horizontal_scroll_bars ? Qt : Qnil;
else if (EQ (parameter, Qline_spacing) && f->extra_line_spacing == 0)
/* If this is non-zero, we can't determine whether the user specified
an integer or float value without looking through 'param_alist'. */
value = make_fixnum (0);
else if (EQ (parameter, Qfont) && FRAME_X_P (f))
value = FRAME_FONT (f)->props[FONT_NAME_INDEX];
#endif /* HAVE_WINDOW_SYSTEM */
#ifdef HAVE_X_WINDOWS
else if (EQ (parameter, Qdisplay) && FRAME_X_P (f))
value = XCAR (FRAME_DISPLAY_INFO (f)->name_list_element);
#endif /* HAVE_X_WINDOWS */
else if (EQ (parameter, Qbackground_color)
|| EQ (parameter, Qforeground_color))
{
value = Fassq (parameter, f->param_alist);
if (CONSP (value))
{
value = XCDR (value);
/* Fframe_parameters puts the actual fg/bg color names,
even if f->param_alist says otherwise. This is
important when param_alist's notion of colors is
"unspecified". We need to do the same here. */
if (STRINGP (value) && !FRAME_WINDOW_P (f))
{
Lisp_Object tem = frame_unspecified_color (f, value);
if (!NILP (tem))
value = tem;
}
}
else
value = Fcdr (Fassq (parameter, Fframe_parameters (frame)));
}
else if (EQ (parameter, Qdisplay_type)
|| EQ (parameter, Qbackground_mode))
value = Fcdr (Fassq (parameter, f->param_alist));
else
/* FIXME: Avoid this code path at all (as well as code duplication)
by sharing more code with Fframe_parameters. */
value = Fcdr (Fassq (parameter, Fframe_parameters (frame)));
}
return value;
}