summaryrefslogtreecommitdiff
path: root/lisp/window.el
diff options
context:
space:
mode:
authorJuri Linkov <juri@linkov.net>2018-10-17 01:36:33 +0300
committerJuri Linkov <juri@linkov.net>2018-10-17 01:36:33 +0300
commite64065bbbd21b7136a7a4efb4b0f2f39a65905dd (patch)
tree7de853d98b0fb25e6b0a51135c4fa1e12548d0cb /lisp/window.el
parent84efc93a5525f85659955b113c427a27c80c2a71 (diff)
downloademacs-e64065bbbd21b7136a7a4efb4b0f2f39a65905dd.tar.gz
Use next-buffers and prev-buffers in window-state-get and window-state-put
* lisp/window.el (window--state-get-1): Get next-buffers and prev-buffers. (window--state-put-2): Set next-buffers and prev-buffers. (Bug#32850)
Diffstat (limited to 'lisp/window.el')
-rw-r--r--lisp/window.el53
1 files changed, 49 insertions, 4 deletions
diff --git a/lisp/window.el b/lisp/window.el
index 8ff8497768d..a7318308ef1 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -5541,6 +5541,10 @@ specific buffers."
(t 'leaf)))
(buffer (window-buffer window))
(selected (eq window (selected-window)))
+ (next-buffers (when (window-live-p window)
+ (window-next-buffers window)))
+ (prev-buffers (when (window-live-p window)
+ (window-prev-buffers window)))
(head
`(,type
,@(unless (window-next-sibling window) `((last . t)))
@@ -5593,7 +5597,22 @@ specific buffers."
(start . ,(if writable
start
(with-current-buffer buffer
- (copy-marker start))))))))))
+ (copy-marker start))))))))
+ ,@(when next-buffers
+ `((next-buffers . ,(mapcar (lambda (buffer)
+ (buffer-name buffer))
+ next-buffers))))
+ ,@(when prev-buffers
+ `((prev-buffers .
+ ,(mapcar (lambda (entry)
+ (list (buffer-name (nth 0 entry))
+ (if writable
+ (marker-position (nth 1 entry))
+ (nth 1 entry))
+ (if writable
+ (marker-position (nth 2 entry))
+ (nth 2 entry))))
+ prev-buffers))))))
(tail
(when (memq type '(vc hc))
(let (list)
@@ -5736,7 +5755,9 @@ value can be also stored on disk and read back in a new session."
(let ((window (car item))
(combination-limit (cdr (assq 'combination-limit item)))
(parameters (cdr (assq 'parameters item)))
- (state (cdr (assq 'buffer item))))
+ (state (cdr (assq 'buffer item)))
+ (next-buffers (cdr (assq 'next-buffers item)))
+ (prev-buffers (cdr (assq 'prev-buffers item))))
(when combination-limit
(set-window-combination-limit window combination-limit))
;; Reset window's parameters and assign saved ones (we might want
@@ -5748,7 +5769,8 @@ value can be also stored on disk and read back in a new session."
(set-window-parameter window (car parameter) (cdr parameter))))
;; Process buffer related state.
(when state
- (let ((buffer (get-buffer (car state))))
+ (let ((buffer (get-buffer (car state)))
+ (state (cdr state)))
(if buffer
(with-current-buffer buffer
(set-window-buffer window buffer)
@@ -5817,7 +5839,30 @@ value can be also stored on disk and read back in a new session."
(set-window-point window (cdr (assq 'point state))))
;; Select window if it's the selected one.
(when (cdr (assq 'selected state))
- (select-window window)))
+ (select-window window))
+ (when next-buffers
+ (set-window-next-buffers
+ window
+ (delq nil (mapcar (lambda (buffer)
+ (setq buffer (get-buffer buffer))
+ (when (buffer-live-p buffer) buffer))
+ next-buffers))))
+ (when prev-buffers
+ (set-window-prev-buffers
+ window
+ (delq nil (mapcar (lambda (entry)
+ (let ((buffer (get-buffer (nth 0 entry)))
+ (m1 (nth 1 entry))
+ (m2 (nth 2 entry)))
+ (when (buffer-live-p buffer)
+ (list buffer
+ (if (markerp m1) m1
+ (set-marker (make-marker) m1
+ buffer))
+ (if (markerp m2) m2
+ (set-marker (make-marker) m2
+ buffer))))))
+ prev-buffers)))))
;; We don't want to raise an error in case the buffer does
;; not exist anymore, so we switch to a previous one and
;; save the window with the intention of deleting it later