view src/x-list-font.c @ 21873:3ab8be88f2ef

Generalized region skipping added. Checks comments only in code. Added backward compatible support for customize. (ispell-query-replace-choices, ispell-message-dictionary-alist) (ispell-grep-command, ispell-grep-options, ispell-look-command) (ispell-look-options, ispell-use-ptys-p, ispell-local-dictionary) (ispell-dictionary-alist): Now customizable. Fixed type of custom variables: ispell-help-in-bufferp. (ispell-use-framepop-p): New variable. (ispell-dictionary-alist): Added dictionaries: castellano, castellano8 czech, esperanto, esperanto-tex, norsk, russian. Capitalize XEmacs correctly, and change lucid to xemacs in code: (ispell-menu-lucid): Renamed to ispell-menu-xemacs. Changed string compares for version number to be correct for XEmacs. Fixed to work with string properties. (ispell-recursive-edit-marker): new marker saving return point. (ispell-skip-region-alist): New variable defining regions. (ispell-tex-skip-alists): New variable for LaTeX regions. (ispell-skip-sgml): Now buffer-mode aware. (ispell-highlight-p): Support block cursors. (ispell-message-text-end): Don't check signatures. (ispell-comments-and-strings): New command, added to menu. (ispell-int-char): New function for character incrementing. (ispell-word): Produces message on error when called from ispell-minor-mode. Potential infinite loop removed. (ispell-command-loop): prevent XEmacs modeline hiding. Allow temporary split of dedicated windows. Improve recursive edit support. Support block cursors. (ispell-show-choices): New function cleaning up command loop. (ispell-highlight-spelling-error-generic): Block cursor support added. (ispell-highlight-spelling-error-xemacs): Block cursor, name change. (ispell-overlay-window): dedicated window splitting, XEmacs changes. (ispell-parse-output): Displays ispell process error messages. (check-ispell-version): Interactive mode that shows ispell versions. (ispell-begin-skip-region-regexp): New region skipping function. (ispell-begin-tex-skip-regexp): New tex mode region skipping function. (ispell-begin-skip-region): New region skipping function. (ispell-tex-arg-end): New tex mode region skipping function. (ispell-skip-region): New region skipping function. (ispell-get-line): New function to clean up command loop. (ispell-process-line): New function cleaning up command loop. (ispell-continue): Improve recursive editor support. (ispell-complete-word): Interior fragment support improved. (ispell-message): Region skipping vastly improved.
author Richard M. Stallman <rms@gnu.org>
date Thu, 30 Apr 1998 06:43:48 +0000
parents f21dd94faebc
children 6303fc8c3e7c
line wrap: on
line source

DEFUN ("x-list-fonts", Fx_list_fonts, Sx_list_fonts, 1, 5, 0,
  "Return a list of the names of available fonts matching PATTERN.\n\
If optional arguments FACE and FRAME are specified, return only fonts\n\
the same size as FACE on FRAME.\n\
PATTERN is a string, perhaps with wildcard characters;\n\
  the * character matches any substring, and\n\
  the ? character matches any single character.\n\
  PATTERN is case-insensitive.\n\
FACE is a face name--a symbol.\n\
\n\
The return value is a list of strings, suitable as arguments to\n\
set-face-font.\n\
\n\
Fonts Emacs can't use (i.e. proportional fonts) may or may not be excluded\n\
even if they match PATTERN and FACE.\n\
The optional fourth argument MAXIMUM sets a limit on how many\n\
fonts to match.  The first MAXIMUM fonts are reported.\n\
The optional fifth argument WIDTH, if specified, is a number of columns\n\
occupied by a character of a font.  In that case, return only fonts\n\
the WIDTH times as wide as FACE on FRAME.")
  (pattern, face, frame, maximum, width)
    Lisp_Object pattern, face, frame, maximum, width;
{
  FRAME_PTR f;
  int size, cols;
  int maxnames;

  check_x ();
  CHECK_STRING (pattern, 0);
  if (!NILP (face))
    CHECK_SYMBOL (face, 1);

  if (NILP (maximum))
    maxnames = 2000;
  else
    {
      CHECK_NATNUM (maximum, 0);
      maxnames = XINT (maximum);
    }

  if (!NILP (width))
    CHECK_NUMBER (width, 4);

  /* We can't simply call check_x_frame because this function may be
     called before any frame is created.  */
  if (NILP (frame))
    f = selected_frame;
  else
    {
      CHECK_LIVE_FRAME (frame, 0);
      f = XFRAME (frame);
    }
  if (! FRAME_X_P (f))
    {
      /* Perhaps we have not yet created any frame.  */
      f = NULL;
      face = Qnil;
    }

  /* Determine the width standard for comparison with the fonts we find.  */

  if (NILP (face))
    size = 0;
  else
    {
      int face_id;

      face_id = face_name_id_number (f, face);

      if (face_id < 0 || face_id >= FRAME_N_PARAM_FACES (f)
	  || FRAME_PARAM_FACES (f) [face_id] == 0
	  || FRAME_PARAM_FACES (f) [face_id]->font == (XFontStruct *) (~0))
	size = f->output_data.x->font->max_bounds.width;
      else
	size = FRAME_PARAM_FACES (f) [face_id]->font->max_bounds.width;

      if (!NILP (width))
	  size *= XINT (width);
    }

  {
    Lisp_Object args[2];

    args[0] = x_list_fonts (f, pattern, size, maxnames);
    if (f == NULL)
      /* We don't have to check fontsets.  */
      return args[0];
    args[1] = list_fontsets (f, pattern, size);
    return Fnconc (2, args);
  }
}