# HG changeset patch # User Stefan Monnier # Date 1208878613 0 # Node ID 6ff724be739175c53c6b21a58d80811812380511 # Parent 059120338e2ccc7d48f1f718c3935d2a60c7e778 (Info-complete-menu-item): Save point. diff -r 059120338e2c -r 6ff724be7391 lisp/ChangeLog --- a/lisp/ChangeLog Tue Apr 22 10:20:05 2008 +0000 +++ b/lisp/ChangeLog Tue Apr 22 15:36:53 2008 +0000 @@ -1,3 +1,7 @@ +2008-04-22 Stefan Monnier + + * info.el (Info-complete-menu-item): Save point. + 2008-04-22 Juanma Barranquero * minibuffer.el (minibuffer-complete-and-exit): Fix last change. diff -r 059120338e2c -r 6ff724be7391 lisp/info.el --- a/lisp/info.el Tue Apr 22 10:20:05 2008 +0000 +++ b/lisp/info.el Tue Apr 22 15:36:53 2008 +0000 @@ -2263,49 +2263,50 @@ ;; Note that `Info-complete-menu-buffer' could be current already, ;; so we want to save point. (with-current-buffer Info-complete-menu-buffer - (let ((completion-ignore-case t) - (case-fold-search t) - (orignode Info-current-node) - nextnode) - (goto-char (point-min)) - (search-forward "\n* Menu:") - (if (not (memq action '(nil t))) - (re-search-forward - (concat "\n\\* +" (regexp-quote string) ":") 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) - (let ((prev (nth 3 Info-complete-cache))) - (eq t (compare-strings string 0 (length prev) - prev 0 nil 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)) - ;; 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. - (set (make-local-variable 'Info-complete-cache) + (save-excursion + (let ((completion-ignore-case t) + (case-fold-search t) + (orignode Info-current-node) + nextnode) + (goto-char (point-min)) + (search-forward "\n* Menu:") + (if (not (memq action '(nil t))) + (re-search-forward + (concat "\n\\* +" (regexp-quote string) ":") 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) + (let ((prev (nth 3 Info-complete-cache))) + (eq t (compare-strings string 0 (length prev) + prev 0 nil 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)) + ;; 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. + (set (make-local-variable 'Info-complete-cache) (list Info-current-file Info-current-node Info-complete-next-re string completions Info-complete-nodes)))