|
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)