diff lisp/info.el @ 108471:daa05d3ccff4

Remove nodes visited during Isearch from the Info history. * info.el (Info-isearch-initial-history) (Info-isearch-initial-history-list): New variables. (Info-isearch-start): Record initial values of Info-isearch-initial-history and Info-isearch-initial-history-list. Add Info-isearch-end to isearch-mode-end-hook. (Info-isearch-end): New function.
author Juri Linkov <juri@jurta.org>
date Mon, 10 May 2010 22:07:22 +0300
parents 973b5bc5fcfe
children 35894ae393bb
line wrap: on
line diff
--- a/lisp/info.el	Mon May 10 21:40:26 2010 +0300
+++ b/lisp/info.el	Mon May 10 22:07:22 2010 +0300
@@ -266,6 +266,8 @@
   :group 'info)
 
 (defvar Info-isearch-initial-node nil)
+(defvar Info-isearch-initial-history nil)
+(defvar Info-isearch-initial-history-list nil)
 
 (defcustom Info-mode-hook
   ;; Try to obey obsolete Info-fontify settings.
@@ -1914,7 +1916,27 @@
   (setq Info-isearch-initial-node
 	;; Don't stop at initial node for nonincremental search.
 	;; Otherwise this variable is set after first search failure.
-	(and isearch-nonincremental Info-current-node)))
+	(and isearch-nonincremental Info-current-node))
+  (setq Info-isearch-initial-history      Info-history
+	Info-isearch-initial-history-list Info-history-list)
+  (add-hook 'isearch-mode-end-hook 'Info-isearch-end nil t))
+
+(defun Info-isearch-end ()
+  ;; Remove intermediate nodes (visited while searching)
+  ;; from the history.  Add only the last node (where Isearch ended).
+  (if (> (length Info-history)
+	 (length Info-isearch-initial-history))
+      (setq Info-history
+	    (nthcdr (- (length Info-history)
+		       (length Info-isearch-initial-history)
+		       1)
+		    Info-history)))
+  (if (> (length Info-history-list)
+	 (length Info-isearch-initial-history-list))
+      (setq Info-history-list
+	    (cons (car Info-history-list)
+		  Info-isearch-initial-history-list)))
+  (remove-hook 'isearch-mode-end-hook  'Info-isearch-end t))
 
 (defun Info-isearch-filter (beg-found found)
   "Test whether the current search hit is a visible useful text.