Mercurial > emacs
changeset 4939:d9ad390ef4e3
(comint-preinput-scroll-to-bottom): Added
comint-magic-space to list of commands recognised as inserting.
(comint-output-filter): Corrected check for killed buffer.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Mon, 08 Nov 1993 23:55:50 +0000 |
parents | dfb65242faf4 |
children | 2f65b0f9c6fc |
files | lisp/comint.el |
diffstat | 1 files changed, 51 insertions(+), 54 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/comint.el Mon Nov 08 23:40:37 1993 +0000 +++ b/lisp/comint.el Mon Nov 08 23:55:50 1993 +0000 @@ -182,35 +182,33 @@ This variable is buffer-local, and is a good thing to set in mode hooks.") -(defvar comint-scroll-to-bottom-on-input - nil +(defvar comint-scroll-to-bottom-on-input nil "*Controls whether input to interpreter causes window to scroll. If nil, then do not scroll. If t or `all', scroll all windows showing buffer. If `this', scroll only the selected window. -The default nil. +The default is nil. See `comint-preinput-scroll-to-bottom'. This variable is buffer-local.") -(defvar comint-scroll-to-bottom-on-output - nil +(defvar comint-scroll-to-bottom-on-output nil "*Controls whether interpreter output causes window to scroll. If nil, then do not scroll. If t or `all', scroll all windows showing buffer. If `this', scroll only the selected window. If `others', scroll only those that are not the selected window. - -The default is `this' for fast terminals, nil for slower ones. + +The default is nil. See variable `comint-scroll-show-maximum-output' and function `comint-postoutput-scroll-to-bottom'. This variable is buffer-local.") - + (defvar comint-scroll-show-maximum-output t "*Controls how interpreter output causes window to scroll. If non-nil, then show the maximum output when the window is scrolled. - + See variable `comint-scroll-to-bottom-on-output' and function `comint-postoutput-scroll-to-bottom'. This variable is buffer-local.") - + (defvar comint-input-ring-size 32 "Size of input history ring.") @@ -1112,60 +1110,59 @@ ;; when output is inserted. (defun comint-output-filter (process string) ;; First check for killed buffer - (if (not (comint-check-proc (process-buffer process))) - (message - "comint-output-filter: buffer %s received output with no process" - (process-buffer process)) - (let ((obuf (current-buffer)) - (opoint nil) (obeg nil) (oend nil)) - (set-buffer (process-buffer process)) - (setq opoint (point)) - (setq obeg (point-min)) - (setq oend (point-max)) - (let ((buffer-read-only nil) - (nchars (length string)) - (ostart nil)) - (widen) - (goto-char (process-mark process)) - (setq ostart (point)) - (if (<= (point) opoint) - (setq opoint (+ opoint nchars))) - ;; Insert after old_begv, but before old_zv. - (if (< (point) obeg) - (setq obeg (+ obeg nchars))) - (if (<= (point) oend) - (setq oend (+ oend nchars))) - (insert-before-markers string) - ;; Don't insert initial prompt outside the top of the window. - (if (= (window-start (selected-window)) (point)) - (set-window-start (selected-window) (- (point) (length string)))) - (if (and comint-last-input-end - (marker-buffer comint-last-input-end) - (= (point) comint-last-input-end)) - (set-marker comint-last-input-end (- comint-last-input-end nchars))) - (set-marker comint-last-output-start ostart) - (set-marker (process-mark process) (point)) - (force-mode-line-update)) + (let ((oprocbuf (process-buffer process))) + (if (and oprocbuf (buffer-name oprocbuf)) + (let ((obuf (current-buffer)) + (opoint nil) (obeg nil) (oend nil)) + (set-buffer oprocbuf) + (setq opoint (point)) + (setq obeg (point-min)) + (setq oend (point-max)) + (let ((buffer-read-only nil) + (nchars (length string)) + (ostart nil)) + (widen) + (goto-char (process-mark process)) + (setq ostart (point)) + (if (<= (point) opoint) + (setq opoint (+ opoint nchars))) + ;; Insert after old_begv, but before old_zv. + (if (< (point) obeg) + (setq obeg (+ obeg nchars))) + (if (<= (point) oend) + (setq oend (+ oend nchars))) + (insert-before-markers string) + ;; Don't insert initial prompt outside the top of the window. + (if (= (window-start (selected-window)) (point)) + (set-window-start (selected-window) (- (point) (length string)))) + (if (and comint-last-input-end + (marker-buffer comint-last-input-end) + (= (point) comint-last-input-end)) + (set-marker comint-last-input-end (- comint-last-input-end nchars))) + (set-marker comint-last-output-start ostart) + (set-marker (process-mark process) (point)) + (force-mode-line-update)) - (narrow-to-region obeg oend) - (goto-char opoint) - (let ((functions comint-output-filter-functions)) - (while functions - (funcall (car functions) string) - (setq functions (cdr functions)))) - (set-buffer obuf)))) + (narrow-to-region obeg oend) + (goto-char opoint) + (let ((functions comint-output-filter-functions)) + (while functions + (funcall (car functions) string) + (setq functions (cdr functions)))) + (set-buffer obuf))))) (defun comint-preinput-scroll-to-bottom () "Go to the end of buffer in all windows showing it. Movement occurs if point in the selected window is not after the process mark, and `this-command' is an insertion command. Insertion commands recognised -are `self-insert-command', `yank', `mouse-yank-at-click', and `hilit-yank'. +are `self-insert-command', `comint-magic-space', `yank', `mouse-yank-at-click', +and `hilit-yank'. Depends on the value of `comint-scroll-to-bottom-on-input'. This function should be a pre-command hook." (if (and comint-scroll-to-bottom-on-input - (memq this-command '(self-insert-command yank mouse-yank-at-click - hilit-yank))) + (memq this-command '(self-insert-command comint-magic-space yank + mouse-yank-at-click hilit-yank))) (let* ((selected (selected-window)) (current (current-buffer)) (process (get-buffer-process current))