Function: ffap-menu-ask

ffap-menu-ask is a byte-compiled function defined in ffap.el.gz.

Signature

(ffap-menu-ask TITLE ALIST CONT)

Documentation

Prompt from a menu of choices, and then apply some action.

Arguments are TITLE, ALIST, and CONT (a continuation function). This uses either a menu or the minibuffer depending on invocation. The TITLE string is used as either the prompt or menu title. Each ALIST entry looks like (STRING . DATA) and defines one choice. Function CONT is applied to the entry chosen by the user.

Source Code

;; Defined in /usr/src/emacs/lisp/ffap.el.gz
(defun ffap-menu-ask (title alist cont)
  "Prompt from a menu of choices, and then apply some action.
Arguments are TITLE, ALIST, and CONT (a continuation function).
This uses either a menu or the minibuffer depending on invocation.
The TITLE string is used as either the prompt or menu title.
Each ALIST entry looks like (STRING . DATA) and defines one choice.
Function CONT is applied to the entry chosen by the user."
  ;; Note: this function is used with a different continuation
  ;; by the ffap-url add-on package.
  ;; Could try rewriting to use easymenu.el.
  (let (choice)
    (cond
     ;; Emacs mouse:
     ((and (fboundp 'x-popup-menu)
           (listp last-nonmenu-event)
           last-nonmenu-event)
      (setq choice
	    (x-popup-menu
	     t
	     (list "" (cons title
			    (mapcar (lambda (i) (cons (car i) i))
				    alist))))))
     ;; minibuffer with completion buffer:
     (t
      ;; Bug: prompting may assume unique strings, no "".
      (setq choice
	    (completing-read
	     (format-prompt title (car (car alist)))
             (completion-table-with-metadata
	      alist '((category . ffap-menu) (eager-display . t)))
             nil t
	     ;; (cons (car (car alist)) 0)
	     nil))
      (sit-for 0)			; redraw original screen
      ;; Convert string to its entry, or else the default:
      (setq choice (or (assoc choice alist) (car alist)))))
    (if choice
	(funcall cont choice)
      (message "No choice made!")	; possible with menus
      nil)))