Function: font-xlfd-name

font-xlfd-name is a function defined in font.c.

Signature

(font-xlfd-name FONT &optional FOLD-WILDCARDS LONG-XLFDS)

Documentation

Return XLFD name of FONT.

FONT is a font-spec, font-entity, or font-object.

If the name is too long to be represented as an XLFD (maximum 255 chars) and LONG_XLFDS is nil, return nil.

If the 2nd optional arg FOLD-WILDCARDS is non-nil, the consecutive wildcards are folded into one.

View in manual

Probably introduced at or before Emacs version 23.1.

Source Code

// Defined in /usr/src/emacs/src/font.c
{
  char name_buffer[256], *name;
  int namelen, pixel_size = 0;
  Lisp_Object string;

  CHECK_FONT (font);

  if (FONT_OBJECT_P (font))
    {
      Lisp_Object font_name = AREF (font, FONT_NAME_INDEX);

      if (STRINGP (font_name)
	  && SDATA (font_name)[0] == '-')
	{
	  if (NILP (fold_wildcards))
	    return font_name;
	  name = name_buffer;
	  lispstpcpy (name, font_name);
	  namelen = SBYTES (font_name);
	  goto done;
	}
      pixel_size = XFONT_OBJECT (font)->pixel_size;
    }

  if (NILP (long_xlfds))
    {
      name = name_buffer;
      namelen = font_unparse_xlfd (font, pixel_size, name, 256);
      if (namelen < 0)
	return Qnil;
    }
  else
    {
      /* Dynamically allocate the XLFD.  */
      name = font_dynamic_unparse_xlfd (font, pixel_size);

      if (!name)
	return Qnil;

      namelen = strlen (name);
    }

 done:
  if (! NILP (fold_wildcards))
    {
      char *p0 = name, *p1;

      while ((p1 = strstr (p0, "-*-*")))
	{
	  memmove (p1, p1 + 2, (name + namelen + 1) - (p1 + 2));
	  namelen -= 2;
	  p0 = p1;
	}
    }

  /* If NAME is dynamically allocated, free it.  */

  string = make_string (name, namelen);

  if (name != name_buffer)
    xfree (name);

  return string;
}