From: Miles Bader Date: Thu, 4 Jul 2002 06:44:45 +0000 (+0000) Subject: (comint-displayed-dynamic-completions): New variable. X-Git-Tag: ttn-vms-21-2-B4~14314 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=9669f2d6d54b0e6835a01ef3b0ac462e36e09859;p=emacs.git (comint-displayed-dynamic-completions): New variable. (comint-dynamic-list-completions): Be more careful about choosing when to scroll an existing completions window. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 28847f723be..b47761de024 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2002-07-04 Miles Bader + + * comint.el (comint-displayed-dynamic-completions): New variable. + (comint-dynamic-list-completions): Be more careful about choosing + when to scroll an existing completions window. + 2002-07-03 Andreas Schwab * net/tramp.el (tramp-handle-ange-ftp): Move interactive spec diff --git a/lisp/comint.el b/lisp/comint.el index bdbe2fdb709..3c0be25c199 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -2798,13 +2798,29 @@ See also `comint-dynamic-complete-filename'." (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 @@ Typing SPC flushes the help buffer." (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))