[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buf
From: |
Juri Linkov |
Subject: |
bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers |
Date: |
Sun, 28 Oct 2018 00:39:14 +0300 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (x86_64-pc-linux-gnu) |
>>> The most simple way to find out is to define such a list in window.c
>>> and have 'set-window-prev-buffers' holler if the prev_buffers argument
>>> is equal to that list.
>>
>> I can't find out how '(nil nil nil)' gets into the prev-buffers,
>
> Did you try what I proposed? If that doesn't catch it, I have no
> idea. IIUC mark_discard_killed_buffers just removes entries from that
> list, it cannot introduce any nil valued elements.
>
>> so to avoid the error, I propose to install this patch:
>
> Well this will just cache the underlying problem. But I have no good
> idea how to investigate this issue any furher, so install if you like.
Now I found a reproducible test case:
1. create and remember a window-configuration
2. switch to a different window-configuration
3. kill the buffer that was in prev-buffers of the
first window-configuration
4. restore the first window-configuration
5. look into its prev-buffers, it contains:
(#<killed buffer> #<marker in no buffer> #<marker in no buffer>)
6. (window-state-get nil t) on the window with such prev-buffers
produces:
(nil nil nil)
I believe this patch should fix the problem:
diff --git a/lisp/window.el b/lisp/window.el
index 27d7e42280..ad8164052f 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -5552,9 +5552,14 @@ window--state-get-1
(buffer (window-buffer window))
(selected (eq window (selected-window)))
(next-buffers (when (window-live-p window)
- (window-next-buffers window)))
+ (delq nil (mapcar (lambda (buffer)
+ (and (buffer-live-p buffer)
buffer))
+ (window-next-buffers window)))))
(prev-buffers (when (window-live-p window)
- (window-prev-buffers window)))
+ (delq nil (mapcar (lambda (entry)
+ (and (buffer-live-p (nth 0 entry))
+ entry))
+ (window-prev-buffers window)))))
(head
`(,type
,@(unless (window-next-sibling window) `((last . t)))
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, (continued)
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, Juri Linkov, 2018/10/29
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, martin rudalics, 2018/10/30
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, Juri Linkov, 2018/10/30
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, martin rudalics, 2018/10/31
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, Juri Linkov, 2018/10/31
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, Juri Linkov, 2018/10/18
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, martin rudalics, 2018/10/19
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, Juri Linkov, 2018/10/25
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, martin rudalics, 2018/10/26
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, Juri Linkov, 2018/10/27
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers,
Juri Linkov <=
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, martin rudalics, 2018/10/28
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, Juri Linkov, 2018/10/28
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, martin rudalics, 2018/10/29