aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuri Linkov2018-10-17 01:36:33 +0300
committerJuri Linkov2018-10-17 01:36:33 +0300
commite64065bbbd21b7136a7a4efb4b0f2f39a65905dd (patch)
tree7de853d98b0fb25e6b0a51135c4fa1e12548d0cb
parent84efc93a5525f85659955b113c427a27c80c2a71 (diff)
downloademacs-e64065bbbd21b7136a7a4efb4b0f2f39a65905dd.tar.gz
emacs-e64065bbbd21b7136a7a4efb4b0f2f39a65905dd.zip
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)
-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."
5541 (t 'leaf))) 5541 (t 'leaf)))
5542 (buffer (window-buffer window)) 5542 (buffer (window-buffer window))
5543 (selected (eq window (selected-window))) 5543 (selected (eq window (selected-window)))
5544 (next-buffers (when (window-live-p window)
5545 (window-next-buffers window)))
5546 (prev-buffers (when (window-live-p window)
5547 (window-prev-buffers window)))
5544 (head 5548 (head
5545 `(,type 5549 `(,type
5546 ,@(unless (window-next-sibling window) `((last . t))) 5550 ,@(unless (window-next-sibling window) `((last . t)))
@@ -5593,7 +5597,22 @@ specific buffers."
5593 (start . ,(if writable 5597 (start . ,(if writable
5594 start 5598 start
5595 (with-current-buffer buffer 5599 (with-current-buffer buffer
5596 (copy-marker start)))))))))) 5600 (copy-marker start))))))))
5601 ,@(when next-buffers
5602 `((next-buffers . ,(mapcar (lambda (buffer)
5603 (buffer-name buffer))
5604 next-buffers))))
5605 ,@(when prev-buffers
5606 `((prev-buffers .
5607 ,(mapcar (lambda (entry)
5608 (list (buffer-name (nth 0 entry))
5609 (if writable
5610 (marker-position (nth 1 entry))
5611 (nth 1 entry))
5612 (if writable
5613 (marker-position (nth 2 entry))
5614 (nth 2 entry))))
5615 prev-buffers))))))
5597 (tail 5616 (tail
5598 (when (memq type '(vc hc)) 5617 (when (memq type '(vc hc))
5599 (let (list) 5618 (let (list)
@@ -5736,7 +5755,9 @@ value can be also stored on disk and read back in a new session."
5736 (let ((window (car item)) 5755 (let ((window (car item))
5737 (combination-limit (cdr (assq 'combination-limit item))) 5756 (combination-limit (cdr (assq 'combination-limit item)))
5738 (parameters (cdr (assq 'parameters item))) 5757 (parameters (cdr (assq 'parameters item)))
5739 (state (cdr (assq 'buffer item)))) 5758 (state (cdr (assq 'buffer item)))
5759 (next-buffers (cdr (assq 'next-buffers item)))
5760 (prev-buffers (cdr (assq 'prev-buffers item))))
5740 (when combination-limit 5761 (when combination-limit
5741 (set-window-combination-limit window combination-limit)) 5762 (set-window-combination-limit window combination-limit))
5742 ;; Reset window's parameters and assign saved ones (we might want 5763 ;; 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."
5748 (set-window-parameter window (car parameter) (cdr parameter)))) 5769 (set-window-parameter window (car parameter) (cdr parameter))))
5749 ;; Process buffer related state. 5770 ;; Process buffer related state.
5750 (when state 5771 (when state
5751 (let ((buffer (get-buffer (car state)))) 5772 (let ((buffer (get-buffer (car state)))
5773 (state (cdr state)))
5752 (if buffer 5774 (if buffer
5753 (with-current-buffer buffer 5775 (with-current-buffer buffer
5754 (set-window-buffer window buffer) 5776 (set-window-buffer window buffer)
@@ -5817,7 +5839,30 @@ value can be also stored on disk and read back in a new session."
5817 (set-window-point window (cdr (assq 'point state)))) 5839 (set-window-point window (cdr (assq 'point state))))
5818 ;; Select window if it's the selected one. 5840 ;; Select window if it's the selected one.
5819 (when (cdr (assq 'selected state)) 5841 (when (cdr (assq 'selected state))
5820 (select-window window))) 5842 (select-window window))
5843 (when next-buffers
5844 (set-window-next-buffers
5845 window
5846 (delq nil (mapcar (lambda (buffer)
5847 (setq buffer (get-buffer buffer))
5848 (when (buffer-live-p buffer) buffer))
5849 next-buffers))))
5850 (when prev-buffers
5851 (set-window-prev-buffers
5852 window
5853 (delq nil (mapcar (lambda (entry)
5854 (let ((buffer (get-buffer (nth 0 entry)))
5855 (m1 (nth 1 entry))
5856 (m2 (nth 2 entry)))
5857 (when (buffer-live-p buffer)
5858 (list buffer
5859 (if (markerp m1) m1
5860 (set-marker (make-marker) m1
5861 buffer))
5862 (if (markerp m2) m2
5863 (set-marker (make-marker) m2
5864 buffer))))))
5865 prev-buffers)))))
5821 ;; We don't want to raise an error in case the buffer does 5866 ;; We don't want to raise an error in case the buffer does
5822 ;; not exist anymore, so we switch to a previous one and 5867 ;; not exist anymore, so we switch to a previous one and
5823 ;; save the window with the intention of deleting it later 5868 ;; save the window with the intention of deleting it later