[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: |
Mon, 05 Nov 2018 23:38:27 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (x86_64-pc-linux-gnu) |
> Sounds reasonable (Bug#16793 just wants a live window there and
> splitting and deleting the old one should do that trivially). Feel
> free to install if you see no further problems.
After reading bug#16793, I see that the original intention was
to restore a window state on the same frame where the subtree of
the specified internal window is. If this is important, then
a better change is:
diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi
index 772bcdf9a6..49698f45bf 100644
--- a/doc/lispref/windows.texi
+++ b/doc/lispref/windows.texi
@@ -5706,9 +5706,10 @@ Window Configurations
The argument @var{state} should be the state of a window returned by
an earlier invocation of @code{window-state-get}, see above. The
optional argument @var{window} can be either a live window or an
-internal window (@pxref{Windows and Frames}) and defaults to the
-selected one. If @var{window} is not live, it is replaced by a live
-window before putting @var{state} into it.
+internal window (@pxref{Windows and Frames}). If @var{window} is not
+live, it is replaced by a new live window created on the same subtree
+before putting @var{state} into it. If @var{window} is nil, it puts
+the window state into a new window.
If the optional argument @var{ignore} is non-@code{nil}, it means to ignore
minimum window sizes and fixed-size restrictions. If @var{ignore}
diff --git a/lisp/window.el b/lisp/window.el
index bcd4fa2959..b8a8b81af3 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -5889,29 +5889,34 @@ window-state-put
"Put window state STATE into WINDOW.
STATE should be the state of a window returned by an earlier
invocation of `window-state-get'. Optional argument WINDOW must
-specify a valid window and defaults to the selected one. If
-WINDOW is not live, replace WINDOW by a live one before putting
-STATE into it.
+specify a valid window. If WINDOW is not live, replace WINDOW
+by a new live one created on the same subtree. If WINDOW is nil,
+create a new window before putting STATE into it.
Optional argument IGNORE non-nil means ignore minimum window
sizes and fixed size restrictions. IGNORE equal `safe' means
windows can get as small as `window-safe-min-height' and
`window-safe-min-width'."
(setq window-state-put-stale-windows nil)
- (setq window (window-normalize-window window))
- ;; When WINDOW is internal, reduce it to a live one to put STATE into,
- ;; see Bug#16793.
+ ;; When WINDOW is internal or nil, reduce it to a live one,
+ ;; then create a new window on the same subtree to put STATE into.
(unless (window-live-p window)
(let ((root window))
- (setq window (catch 'live
- (walk-window-subtree
- (lambda (window)
- (when (and (window-live-p window)
- (not (window-parameter window
'window-side)))
- (throw 'live window)))
- root)))
- (delete-other-windows-internal window root)))
+ (setq window (if root
+ (catch 'live
+ (walk-window-subtree
+ (lambda (window)
+ (when (and (window-live-p window)
+ (not (window-parameter
+ window 'window-side)))
+ (throw 'live window)))
+ root))
+ (selected-window)))
+ (delete-other-windows-internal window root)
+ ;; Create a new window to replace the existing one.
+ (setq window (prog1 (split-window window)
+ (delete-window window)))))
(set-window-dedicated-p window nil)
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, Juri Linkov, 2018/11/10
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, martin rudalics, 2018/11/11
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, Juri Linkov, 2018/11/11
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, martin rudalics, 2018/11/12
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, Juri Linkov, 2018/11/12
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, martin rudalics, 2018/11/13
- bug#32850: 27.0.50; window-swap-states doesn't swap window prev/next-buffers, Juri Linkov, 2018/11/13