[comp.emacs] GNU emacs font selection under X

pete@esosun.UUCP (Pete Ware) (07/31/87)

The following pops up a menu of X fonts, waits for a selection and then
sets the new font to be the one selected.  It is bound to shift-middle-button.
You may need to change the directory it searches for the fonts.
----------------------------------------------------------------------
(defun x-choose-font (arg)
    "Provide a menu of fonts and allow one to be selected.
It becomes the current font.  Default is vtsingle"
    (interactive)
    (let
      ((files (directory-files "/usr/local/lib/X/font" nil nil))
	(count 0)
	(head nil)
	(menu nil))
;;;
;;;   Menu format is ("title" ("prompt-1" (item-1 . ret-val) ...)
;;;			      ("prompt-2" (item-1 . ret-val) ...) ...)
;;;
      (while files
	(while (and files (> (window-height) count))
	  (let ((file (car files)))
	    (setq files (cdr files))
	    (if (not (or (string= "." file) (string= ".." file)))
	      (progn
		(setq count (1+ count))
		(setq head (cons (cons (format "%14s" file) file) head))
		)
	      )
	    )
	  )
	(let ((first) (last))
	  (setq last (car (car head)))
	  (setq head (nreverse head))
	  (setq first (car (car head)))
	  (setq menu (cons (cons
			     (format "%s to %s"
			       (substring first 0 -4)
			       (substring last 0 -4)) head) menu)))
	(setq head nil)
	(setq count 0)
	)
      (setq menu (nreverse menu))
      (setq menu (cons "Fonts" menu))
      (x-set-font
	(substring (or (x-popup-menu arg menu) "vtsingle.onx")
	  0 -4))))
(define-key mouse-map x-button-s-middle 'x-choose-font)
----------------------------------------------------------------------
-- 
esosun!pete@seismo.CSS.GOV	(Pete Ware) (619) 458-2520
{seismo,sdcsvax}!esosun!pete