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

allout-frame-property (obsolete since 28.1) ps-frame-parameter (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;
}