Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
;;
;;   Copyright (c) 2004-2007 by Keith M. Knowles.
;;   Confidential, unpublished property of Keith M. Knowles.
;;   All rights reserved.
;;
;;   Note: this is reformatted version of kmk's original file.
;;   URLs ("0" means kmk's, "non-0" means edrx's):
;;     http://angg.twu.net/elisp/elinks0.el.html
;;     http://angg.twu.net/elisp/elinks0.el
;;     http://angg.twu.net/elisp/elinks.el.html
;;     http://angg.twu.net/elisp/elinks.el
;;     http://angg.twu.net/elisp/menu0.el.html
;;     http://angg.twu.net/elisp/menu0.el
;;     http://angg.twu.net/elisp/menu.el.html
;;     http://angg.twu.net/elisp/menu.el
;;   Edrx, 2008apr18.
;;
;;   Program:		Mini-Menu.
;;   Module:		menu.el -- mini-menu facility.
;;   Version:		1
;;   Author:		Keith M. Knowles.
;;   Date:		Dec 2004
;;
;;
;;   Changes:
;;
;;   07/07/28 kmk	Changed option letter format to [x] from x:.  Also,
;;			return an ordinal, rather than the member.
;;   06/04/27 kmk	Fixed the menu overflow case by truncation.
;;   04/12/28 kmk	Initial version.
;;
;;
;;   Notes:
;;
;;
;;
;;   Description:
;;
;;   Pop up a "mini-menu" in the mini-buffer and return the user selection.
;;

(defun mini-menu (list)
  "Pop-up mini-menu"
  (interactive)

  ;; Assemble a menu.
  ;;
  (let ((menu nil)
	(letter "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"))
    (dolist (menu-item list nil)
      (if (= (string-to-char menu-item) ?\")
	  (setq menu-item (substring menu-item 1 -1)))
      (if (not (string-equal letter ""))
	  (progn
	    (setq menu (concat menu "[" (substring letter 0 1) "] " menu-item " "))
	    (setq letter (substring letter 1 -1)))))
    (setq menu (concat menu "? "))
    (setq answer (read-char menu))
    (setq
     answer
     (cond
      ((and (>= answer ?a) (<= answer ?z))
       ;; (elt list (- answer ?a))
       (- answer ?a))
      ((and (>= answer ?A) (<= answer ?Z))
       ;; (elt list (+ (- answer ?A) 26))
       (+ (- answer ?A) 26))
      ((and (>= answer ?0) (<= answer ?9))
	  ;; (elt list (+ (- answer ?0) 52))
       (+ (- answer ?0) 52))
      (t nil)))))


(provide 'menu)