changeset 46171:c1c7a7405444

(comint-displayed-dynamic-completions): New variable. (comint-dynamic-list-completions): Be more careful about choosing when to scroll an existing completions window.
author Miles Bader <miles@gnu.org>
date Thu, 04 Jul 2002 06:44:34 +0000
parents 115fa2a7cd26
children 7683b15a976a
files lisp/comint.el
diffstat 1 files changed, 20 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/comint.el	Thu Jul 04 06:43:15 2002 +0000
+++ b/lisp/comint.el	Thu Jul 04 06:44:34 2002 +0000
@@ -2798,13 +2798,29 @@
        (mapcar 'comint-quote-filename completions)))))
 
 
+;; This is bound locally in a *Completions* buffer to the list of
+;; completions displayed, and is used to detect the case where the same
+;; command is repeatedly used without the set of completions changing.
+(defvar comint-displayed-dynamic-completions nil)
+
 (defun comint-dynamic-list-completions (completions)
   "List in help buffer sorted COMPLETIONS.
 Typing SPC flushes the help buffer."
   (let ((window (get-buffer-window "*Completions*")))
     (if (and (eq last-command this-command)
 	     window (window-live-p window) (window-buffer window)
-	     (buffer-name (window-buffer window)))
+	     (buffer-name (window-buffer window))
+	     ;; The above tests are not sufficient to detect the case where we
+	     ;; should scroll, because the top-level interactive command may
+	     ;; not have displayed a completions window the last time it was
+	     ;; invoked, and there may be such a window left over from a
+	     ;; previous completion command with a different set of
+	     ;; completions.  To detect that case, we also test that the set
+	     ;; of displayed completions is in fact the same as the previously
+	     ;; displayed set.
+	     (equal completions
+		    (buffer-local-value 'comint-displayed-dynamic-completions
+					(window-buffer window))))
 	;; If this command was repeated, and
 	;; there's a fresh completion window with a live buffer,
 	;; and this command is repeated, scroll that window.
@@ -2822,6 +2838,9 @@
 	(let (key first)
 	  (if (save-excursion
 		(set-buffer (get-buffer "*Completions*"))
+		(set (make-local-variable
+		      'comint-displayed-dynamic-completions)
+		     completions)
 		(setq key (read-key-sequence nil)
 		      first (aref key 0))
 		(and (consp first) (consp (event-start first))