changeset 8032:936532a595dd

(comint-read-input-ring): Use ring-insert-at-beginning. Insert most recent string first and only as many as we need. Don't visit the file, just read it.
author Richard M. Stallman <rms@gnu.org>
date Thu, 23 Jun 1994 23:11:23 +0000
parents 4b45aa6d5d76
children bedead77e86f
files lisp/comint.el
diffstat 1 files changed, 17 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/comint.el	Thu Jun 23 23:11:02 1994 +0000
+++ b/lisp/comint.el	Thu Jun 23 23:11:23 1994 +0000
@@ -616,27 +616,30 @@
 	     (message "Cannot read history file %s"
 		      comint-input-ring-file-name)))
 	(t
-	 (let ((history-buf (get-file-buffer comint-input-ring-file-name))
+	 (let ((history-buf (get-buffer-create " *temp*"))
+	       (file comint-input-ring-file-name)
+	       (count 0)
 	       (ring (make-ring comint-input-ring-size)))
-	   (save-excursion
-	     (set-buffer (or history-buf
-			     (find-file-noselect comint-input-ring-file-name)))
-	     ;; Save restriction in case file is already visited...
-	     ;; Watch for those date stamps in history files!
-	     (save-excursion
-	       (save-restriction
+	   (unwind-protect
+	       (save-excursion
+		 (set-buffer history-buf)
 		 (widen)
-		 (goto-char (point-min))
-		 (while (re-search-forward "^[ \t]*\\([^#\n].*\\)[ \t]*$" nil t)
+		 (erase-buffer)
+		 (insert-file-contents file)
+		 ;; Save restriction in case file is already visited...
+		 ;; Watch for those date stamps in history files!
+		 (goto-char (point-max))
+		 (while (and (< count comint-input-ring-size)
+			     (re-search-backward "^[ \t]*\\([^#\n].*\\)[ \t]*$"
+						 nil t))
 		   (let ((history (buffer-substring (match-beginning 1)
 						    (match-end 1))))
 		     (if (or (null comint-input-ignoredups)
 			     (ring-empty-p ring)
 			     (not (string-equal (ring-ref ring 0) history)))
-			 (ring-insert ring history)))))
-	       ;; Kill buffer unless already visited.
-	       (if (null history-buf)
-		   (kill-buffer nil))))
+			 (ring-insert-at-beginning ring history)))
+		   (setq count (1+ count))))
+	     (kill-buffer history-buf))
 	   (setq comint-input-ring ring
 		 comint-input-ring-index nil)))))