mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-02-02 20:16:25 +00:00
(comint-output-filter):
Revert to using `insert-before-markers'. Add bletcherous hack to undo damage caused by `insert-before-markers'. Put `front-sticky' property on overlays created here so that the field code understands how the overlay works. Use a let when making comint-last-prompt-overlay, so that the code is easier to read.
This commit is contained in:
parent
8c907a5633
commit
bdf08678db
@ -1,3 +1,12 @@
|
||||
2000-09-13 Miles Bader <miles@gnu.org>
|
||||
|
||||
* comint.el (comint-output-filter): Revert to using
|
||||
`insert-before-markers'. Add bletcherous hack to undo damage
|
||||
caused by `insert-before-markers'. Put `front-sticky' property on
|
||||
overlays created here so that the field code understands how the
|
||||
overlay works. Use a let when making comint-last-prompt-overlay,
|
||||
so that the code is easier to read.
|
||||
|
||||
2000-09-12 Dave Love <fx@gnu.org>
|
||||
|
||||
* simple.el (read-mail-command): Doc fix.
|
||||
|
@ -1510,8 +1510,46 @@ This variable is permanent-local.")
|
||||
(goto-char (process-mark process))
|
||||
(set-marker comint-last-output-start (point))
|
||||
|
||||
(insert string)
|
||||
;; insert-before-markers is a bad thing. XXX
|
||||
;;
|
||||
;; It is used here to force window-point markers (used to
|
||||
;; store the value of point in non-selected windows) to
|
||||
;; advance, but it also screws up any other markers that we
|
||||
;; don't _want_ to advance, such as the start-marker of some
|
||||
;; of the overlays we create.
|
||||
;;
|
||||
;; We work around the problem with the overlays by
|
||||
;; explicitly adjusting them after we do the insertion, but
|
||||
;; in the future this problem should be solved correctly, by
|
||||
;; using `insert', and making the insertion-type of
|
||||
;; window-point markers settable (via a buffer-local
|
||||
;; variable). In comint buffers, this variable would be set
|
||||
;; to `t', to cause point in non-select windows to advance.
|
||||
(insert-before-markers string)
|
||||
;; Fixup markers and overlays that got screwed up because we
|
||||
;; used `insert-before-markers'.
|
||||
(let ((old-point (- (point) (length string))))
|
||||
;; comint-last-output-start marker
|
||||
(set-marker comint-last-output-start old-point)
|
||||
;; No overlays we create are set to advance upon insertion
|
||||
;; (at the start/end), so we assume that any overlay which
|
||||
;; is at the current point was incorrectly advanced by
|
||||
;; insert-before-markers. First fixup overlays that might
|
||||
;; start at point:
|
||||
(dolist (over (overlays-at (point)))
|
||||
(when (= (overlay-start over) (point))
|
||||
(let ((end (overlay-end over)))
|
||||
(move-overlay over
|
||||
old-point
|
||||
(if (= end (point)) old-point end)))))
|
||||
;; Then do overlays that might end at point:
|
||||
(dolist (over (overlays-at (1- (point))))
|
||||
(when (= (overlay-end over) (point))
|
||||
(move-overlay over
|
||||
(min (overlay-start over) old-point)
|
||||
old-point))))
|
||||
|
||||
;; Advance process-mark
|
||||
(set-marker (process-mark process) (point))
|
||||
|
||||
(unless comint-use-prompt-regexp-instead-of-fields
|
||||
@ -1528,8 +1566,9 @@ This variable is permanent-local.")
|
||||
;; 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 'front-sticky t)
|
||||
(overlay-put over 'rear-nonsticky t)
|
||||
(overlay-put over 'evaporate t)
|
||||
(setq comint-last-output-overlay over))))
|
||||
|
||||
@ -1546,12 +1585,11 @@ This variable is permanent-local.")
|
||||
(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)))))
|
||||
(let ((over (make-overlay prompt-start (point))))
|
||||
(overlay-put over 'face 'comint-highlight-prompt-face)
|
||||
(overlay-put over 'front-sticky t)
|
||||
(overlay-put over 'rear-nonsticky t)
|
||||
(setq comint-last-prompt-overlay over))))))
|
||||
|
||||
;;(force-mode-line-update)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user