diff options
| author | Juri Linkov | 2018-10-17 01:36:33 +0300 |
|---|---|---|
| committer | Juri Linkov | 2018-10-17 01:36:33 +0300 |
| commit | e64065bbbd21b7136a7a4efb4b0f2f39a65905dd (patch) | |
| tree | 7de853d98b0fb25e6b0a51135c4fa1e12548d0cb | |
| parent | 84efc93a5525f85659955b113c427a27c80c2a71 (diff) | |
| download | emacs-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.el | 53 |
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 |