diff --git a/lisp/emacs-lisp/ewoc.el b/lisp/emacs-lisp/ewoc.el index 5112322cfd..b71ae5864c 100644 --- a/lisp/emacs-lisp/ewoc.el +++ b/lisp/emacs-lisp/ewoc.el @@ -209,10 +209,19 @@ ewoc--refresh-node (R (ewoc--node-right node)) (end (ewoc--node-start-marker R)) (inhibit-read-only t) - (offset (if (= (point) end) - 'end - (when (< m (point) end) - (- (point) m))))) + (get-offset (lambda (point) + (if (= point end) + 'end + (when (< m point end) + (- point m))))) + (offset (funcall get-offset (point))) + (windows (mapcar (lambda (w) + (unless (eq w (selected-window)) + (let ((offset (funcall get-offset + (window-point w)))) + (when offset + (cons w offset))))) + (get-buffer-window-list nil nil t)))) (save-excursion ;; First, remove the string from the buffer: (delete-region m end) @@ -224,7 +233,14 @@ ewoc--refresh-node (when offset (goto-char (if (eq offset 'end) end - (min (+ m offset) (1- end))))))) + (min (+ m offset) (1- end))))) + (mapc (lambda (w) + (when (window-live-p (car w)) + (set-window-point (car w) + (if (eq (cdr w) 'end) + end + (min (+ m (cdr w)) (1- end)))))) + windows))) (defun ewoc--wrap (func) (lambda (data)