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.

View in manual

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;
}