Mercurial > emacs
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)))))