Function: Info-build-menu-item-completions
Info-build-menu-item-completions is a byte-compiled function defined
in hmouse-info.el.
Signature
(Info-build-menu-item-completions STRING PREDICATE ACTION)
Source Code
;; Defined in ~/.emacs.d/elpa/hyperbole-20260414.325/hmouse-info.el
;;; ************************************************************************
;;; Private functions - used by the link-to-Info-index-item action type
;;; ************************************************************************
;;; Much of this is derived in part from "info.el".
(defun Info-build-menu-item-completions (string _predicate action)
;; See comments in `Info-complete-menu-item' for free variables used.
(with-current-buffer Info-complete-menu-buffer
(save-excursion
(let ((completion-ignore-case t)
(case-fold-search t)
(orignode Info-current-node)
nextnode)
(goto-char (point-min))
(search-forward "\n* Menu:")
(cond
((eq (car-safe action) 'boundaries) nil)
(t
(let ((pattern (concat "\n\\* +\\("
(regexp-quote string)
Info-menu-entry-name-re "\\):"
Info-node-spec-re))
completions
(complete-nodes Info-complete-nodes))
;; Check the cache.
(if (and (equal (nth 0 Info-complete-cache) Info-current-file)
(equal (nth 1 Info-complete-cache) Info-current-node)
(equal (nth 2 Info-complete-cache) Info-complete-next-re)
(equal (nth 5 Info-complete-cache) Info-complete-nodes)
(string-prefix-p (nth 3 Info-complete-cache) string) t)
;; We can reuse the previous list.
(setq completions (nth 4 Info-complete-cache))
;; The cache can't be used.
(while
(progn
(while (re-search-forward pattern nil t)
(push (match-string-no-properties 1)
completions))
(setq completions (delete-dups completions))
;; Check subsequent nodes if applicable.
(or (and Info-complete-next-re
(setq nextnode (Info-extract-pointer "next" t))
(string-match Info-complete-next-re nextnode))
(and complete-nodes
(setq complete-nodes (cdr complete-nodes)
nextnode (car complete-nodes)))))
(Info-goto-node nextnode))
;; Go back to the start node (for the next completion).
(unless (equal Info-current-node orignode)
(Info-goto-node orignode))
;; Update the cache.
(setq Info-complete-cache
(list Info-current-file Info-current-node
Info-complete-next-re string completions
Info-complete-nodes)))
completions)))))))