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