Function: Info-menu-update
Info-menu-update is a byte-compiled function defined in info.el.gz.
Signature
(Info-menu-update)
Documentation
Update the Info menu for the current node.
Source Code
;; Defined in /usr/src/emacs/lisp/info.el.gz
;; Last node the menu was created for.
;; Value is a list, (FILE-NAME NODE-NAME).
(defun Info-menu-update ()
"Update the Info menu for the current node."
(condition-case nil
(if (or (not (derived-mode-p 'Info-mode))
(equal (list Info-current-file Info-current-node)
Info-menu-last-node))
()
;; Update menu menu.
(let* ((Info-complete-menu-buffer (current-buffer))
(items (nreverse (condition-case nil
(Info-complete-menu-item "" nil t)
(error nil))))
entries current
(number 0))
(while (and items (< number 9))
(setq current (car items)
items (cdr items)
number (1+ number))
(setq entries (cons `[,current
(Info-menu ,current)
:keys ,(format "%d" number)]
entries)))
(if items
(setq entries (cons ["Other..." Info-menu t] entries)))
(or entries
(setq entries (list ["No menu" nil nil] nil :active)))
(easy-menu-change '("Info") "Menu Item" (nreverse entries)))
;; Update reference menu. Code stolen from `Info-follow-reference'.
(let ((items nil)
str i entries current
(number 0)
(case-fold-search t))
(save-excursion
(goto-char (point-min))
(while (re-search-forward "\\*note[ \n\t]+\\([^:]*\\):" nil t)
(setq str (match-string 1))
(setq i 0)
(while (setq i (string-match "[ \n\t]+" str i))
(setq str (concat (substring str 0 i) " "
(substring str (match-end 0))))
(setq i (1+ i)))
(setq items
(cons str items)))
(setq items (nreverse items)))
(while (and items (< number 9))
(setq current (car items)
items (cdr items)
number (1+ number))
(setq entries (cons `[,current
(Info-follow-reference ,current)
t]
entries)))
(if items
(setq entries (cons ["Other..." Info-follow-reference t]
entries)))
(or entries
(setq entries (list ["No references" nil nil] nil :active)))
(easy-menu-change '("Info") "Reference" (nreverse entries)))
;; Update last seen node.
(setq Info-menu-last-node (list Info-current-file Info-current-node)))
;; Try to avoid entering infinite beep mode in case of errors.
(error (ding))))