1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-02-04 20:27:45 +00:00

(comint-output-filter): Remove ad-hoc saving of restriction, and just

use save-restriction, now that it works correctly.  Don't adjust
comint-last-input-start to account for our insertion; it shouldn't have
moved because we don't use insert-before-markers anymore.  Comment out
call to `force-mode-line-update'; why is it here?
This commit is contained in:
Miles Bader 2000-08-19 01:55:40 +00:00
parent 527083d575
commit d8d972bf49

View File

@ -1493,81 +1493,68 @@ This variable is permanent-local.")
(setq string (funcall (car functions) string))
(setq functions (cdr functions))))
;; Do insertion. We don't use save-restriction because it has a
;; bug, so we fake it by saving any current restriction, and
;; then later restoring it.
(let ((opoint (point))
(obeg (point-min))
(oend (point-max))
(buffer-read-only nil)
(nchars (length string))
(ostart (process-mark process)))
(widen)
(goto-char ostart)
;; Insert STRING
(let ((buffer-read-only nil)
;; Avoid the overhead of save-excursion, since we just
;; fiddle with the point
(saved-point (point)))
;; Adjust buffer positions to account for about-to-be-inserted text
(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)))
;; We temporarly remove any buffer narrowing, in case the
;; process mark is outside of the restriction
(save-restriction
(widen)
(insert string)
(goto-char (process-mark process))
(set-marker comint-last-output-start (point))
(unless comint-use-prompt-regexp-instead-of-fields
;; We check to see if the last overlay used for output is
;; adjacent to the new input, and if so, just extend it.
(if (and comint-last-output-overlay
(equal (overlay-end comint-last-output-overlay) ostart))
;; Extend comint-last-output-overlay to include the
;; most recent output
(move-overlay comint-last-output-overlay
(overlay-start comint-last-output-overlay)
(point))
;; Create a new overlay
(let ((over (make-overlay ostart (point))))
(overlay-put over 'field 'output)
(overlay-put over 'rear-nonsticky t)
(overlay-put over 'inhibit-line-move-field-capture t)
(overlay-put over 'evaporate t)
(setq comint-last-output-overlay over))))
(insert string)
(when comint-highlight-prompt
;; Highlight the prompt, where we define `prompt' to mean
;; the most recent output that doesn't end with a newline.
(unless (and (bolp) (null comint-last-prompt-overlay))
;; Need to create or move the prompt overlay (in the case
;; where there is no prompt ((bolp) == t), we still do
;; this if there's already an existing overlay).
(let ((prompt-start (save-excursion (forward-line 0) (point))))
(if comint-last-prompt-overlay
;; Just move an existing overlay
(move-overlay comint-last-prompt-overlay
prompt-start (point))
;; Need to create the overlay
(setq comint-last-prompt-overlay
(make-overlay prompt-start (point)))
(overlay-put comint-last-prompt-overlay
'rear-nonsticky t)
(overlay-put comint-last-prompt-overlay
'face 'comint-highlight-prompt-face)))))
(set-marker (process-mark process) (point))
(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)
(unless comint-use-prompt-regexp-instead-of-fields
;; We check to see if the last overlay used for output is
;; adjacent to the new input, and if so, just extend it.
(if (and comint-last-output-overlay
(equal (overlay-end comint-last-output-overlay)
(point)))
;; Extend comint-last-output-overlay to include the
;; most recent output
(move-overlay comint-last-output-overlay
(overlay-start comint-last-output-overlay)
(point))
;; Create a new overlay
(let ((over (make-overlay comint-last-output-start (point))))
(overlay-put over 'field 'output)
(overlay-put over 'rear-nonsticky t)
(overlay-put over 'inhibit-line-move-field-capture t)
(overlay-put over 'evaporate t)
(setq comint-last-output-overlay over))))
;; Restore our saved restriction, and the point
(narrow-to-region obeg oend)
(goto-char opoint)
(when comint-highlight-prompt
;; Highlight the prompt, where we define `prompt' to mean
;; the most recent output that doesn't end with a newline.
(unless (and (bolp) (null comint-last-prompt-overlay))
;; Need to create or move the prompt overlay (in the case
;; where there is no prompt ((bolp) == t), we still do
;; this if there's already an existing overlay).
(let ((prompt-start (save-excursion (forward-line 0) (point))))
(if comint-last-prompt-overlay
;; Just move an existing overlay
(move-overlay comint-last-prompt-overlay
prompt-start (point))
;; Need to create the overlay
(setq comint-last-prompt-overlay
(make-overlay prompt-start (point)))
(overlay-put comint-last-prompt-overlay
'rear-nonsticky t)
(overlay-put comint-last-prompt-overlay
'face 'comint-highlight-prompt-face)))))
(run-hook-with-args 'comint-output-filter-functions string))))))
;;(force-mode-line-update)
(goto-char saved-point)
(run-hook-with-args 'comint-output-filter-functions string)))))))
(defun comint-preinput-scroll-to-bottom ()
"Go to the end of buffer in all windows showing it.