branch: externals/coterm
commit e64027a440fd08903d75b6b70adc4a9c8d6d91ab
Author: m <>
Commit: m <>
Restore 'window-point' of non-selected windows
---
coterm.el | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/coterm.el b/coterm.el
index 5df3688..902035b 100644
--- a/coterm.el
+++ b/coterm.el
@@ -436,6 +436,7 @@ If `coterm--t-home-marker' is nil, initialize it sensibly."
(will-insert-newlines 0)
restore-point
last-match-end
+ old-pmark
buf
ctl-params ctl-end)
@@ -465,6 +466,7 @@ If `coterm--t-home-marker' is nil, initialize it sensibly."
(with-current-buffer buf
(setq restore-point (if (= (point) pmark) pmark (point-marker)))
+ (setq old-pmark (copy-marker pmark window-point-insertion-type))
(coterm--t-maybe-adjust-from-pmark pmark)
(save-restriction
(widen)
@@ -543,7 +545,7 @@ If `coterm--t-home-marker' is nil, initialize it sensibly."
(?A (ins)) ;; Ignore term.el specific \eAnSiT sequences
(?\[
(pcase (aref string (1- ctl-end))
- (?m ; Let `comint-output-filter-functions' handle this
+ (?m ;; Let `comint-output-filter-functions' handle this
(pass-through))
(char
(setq ctl-params (mapcar #'string-to-number
@@ -697,9 +699,25 @@ If `coterm--t-home-marker' is nil, initialize it sensibly."
(coterm--t-goto 0 0)
(recenter 0)))
+ ;; Restore point (this restores it only for the selected window)
(goto-char restore-point)
(unless (eq restore-point pmark)
- (set-marker restore-point nil)))))))
+ (set-marker restore-point nil))
+
+ ;; Restore points of non-selected windows, if their `window-point'
+ ;; was on pmark
+ (let* ((sel-win (selected-window))
+ (w (next-window sel-win nil t)))
+ ;; Avoid infinite loop in strange case where minibuffer window
+ ;; is selected but not active.
+ (while (window-minibuffer-p w)
+ (setq w (next-window w nil t)))
+ (while (not (eq w sel-win))
+ (and (eq buf (window-buffer w))
+ (= (window-point w) old-pmark)
+ (set-window-point w pmark))
+ (setq w (next-window w nil t)))
+ (set-marker old-pmark nil)))))))
(provide 'coterm)
;;; coterm.el ends here