Function: imenu--completion-buffer

imenu--completion-buffer is a byte-compiled function defined in imenu.el.gz.

Signature

(imenu--completion-buffer INDEX-ALIST &optional PROMPT)

Documentation

Let the user select from INDEX-ALIST in a completion buffer with PROMPT.

Return one of the entries in index-alist or nil.

Source Code

;; Defined in /usr/src/emacs/lisp/imenu.el.gz
(defun imenu--completion-buffer (index-alist &optional prompt)
  "Let the user select from INDEX-ALIST in a completion buffer with PROMPT.

Return one of the entries in index-alist or nil."
  ;; Create a list for this buffer only when needed.
  (let ((name (thing-at-point 'symbol))
	choice
	(prepared-index-alist
	 (if (not imenu-space-replacement) index-alist
	   (mapcar
	    (lambda (item)
	      (cons (subst-char-in-string ?\s (aref imenu-space-replacement 0)
					  (car item))
		    (cdr item)))
	    index-alist))))
    (when (stringp name)
      (setq name (or (imenu-find-default name prepared-index-alist) name)))
    (unless prompt
      (setq prompt (format-prompt
                    "Index item"
                    (and name
                         (imenu--in-alist name prepared-index-alist)
                         ;; Default to `name' if it's in the alist.
                         name))))
    ;; Display the completion buffer.
    (minibuffer-with-setup-hook
        (lambda ()
          (setq-local minibuffer-allow-text-properties t)
          (setq-local completion-extra-properties
                      `( :category imenu
                         ,@(when (eq imenu-flatten 'annotation)
                             `(:annotation-function
                               ,(lambda (s) (get-text-property
                                             0 'imenu-section s))))
                         ,@(when (eq imenu-flatten 'group)
                             `(:group-function
                               ,(lambda (s transform)
                                  (if transform s
                                    (get-text-property
                                     0 'imenu-section s)))))))
          (unless imenu-eager-completion-buffer
            (minibuffer-completion-help)))
      (setq name (completing-read prompt
				  prepared-index-alist
				  nil t nil 'imenu--history-list name)))

    (when (stringp name)
      (or (get-text-property 0 'imenu-choice name)
	  (progn
	    (setq choice (assoc name prepared-index-alist))
	    (if (imenu--subalist-p choice)
		(imenu--completion-buffer (cdr choice) prompt)
	      choice))))))