Use buffer-local value of 'comint-input-ring-size'

When 'comint-read-input-ring' was reading history to the ring,
the global value of 'comint-input-ring-size' was used regardless
of the local value, due to the use of a temporary buffer.
This change fixes the problem.
* lisp/comint.el (comint-read-input-ring): Use buffer-local
value of the ring size.  (Bug#72138)
This commit is contained in:
Liu Hui 2024-07-16 18:05:46 +08:00 committed by Eli Zaretskii
parent 9e9121ed63
commit c1436ac64d

View file

@ -1056,6 +1056,7 @@ See also `comint-input-ignoredups' and `comint-write-input-ring'."
(ring-size (min 1500 comint-input-ring-size))
(ring (make-ring ring-size))
;; Use possibly buffer-local values of these variables.
(ring-max-size comint-input-ring-size)
(ring-separator comint-input-ring-separator)
(ring-file-prefix comint-input-ring-file-prefix)
(history-ignore comint-input-history-ignore)
@ -1066,7 +1067,7 @@ See also `comint-input-ignoredups' and `comint-write-input-ring'."
;; Watch for those date stamps in history files!
(goto-char (point-max))
(let (start end history)
(while (and (< count comint-input-ring-size)
(while (and (< count ring-max-size)
(re-search-backward ring-separator nil t)
(setq end (match-beginning 0)))
(goto-char (if (re-search-backward ring-separator nil t)
@ -1084,7 +1085,7 @@ See also `comint-input-ignoredups' and `comint-write-input-ring'."
(not (string-equal (ring-ref ring 0)
history))))
(when (= count ring-size)
(ring-extend ring (min (- comint-input-ring-size ring-size)
(ring-extend ring (min (- ring-max-size ring-size)
ring-size))
(setq ring-size (ring-size ring)))
(ring-insert-at-beginning ring history)