Revert window/winner changes (Revert 0454bfd331)

See bug#23621 for an explanation.
This commit is contained in:
Lars Ingebrigtsen 2021-04-25 19:47:06 +02:00
parent 142babb9bd
commit 8f63f0078a
2 changed files with 2 additions and 50 deletions

View file

@ -3755,8 +3755,6 @@ WINDOW must be a valid window and defaults to the selected one.
If the option `window-resize-pixelwise' is non-nil minimize
WINDOW pixelwise."
(interactive)
(when switch-to-buffer-preserve-window-point
(window--before-delete-windows window))
(setq window (window-normalize-window window))
(window-resize
window
@ -4142,41 +4140,6 @@ frame can be safely deleted."
(throw 'done t)
(setq parent (window-parent parent))))))))
;; This function is called by `delete-window' and
;; `delete-other-windows' when `switch-to-buffer-preserve-window-point'
;; evaluates non-nil: it allows `winner-undo' to restore the
;; buffer point from deleted windows (Bug#23621).
(defun window--before-delete-windows (&optional window)
"Update `window-prev-buffers' before delete a window.
Optional arg WINDOW, if non-nil, update WINDOW-START and POS
in `window-prev-buffers' for all windows displaying same
buffer as WINDOW. Otherwise, update `window-prev-buffers' for
all windows.
The new values for WINDOW-START and POS are those
returned by `window-start' and `window-point' respectively.
This function is called only if `switch-to-buffer-preserve-window-point'
evaluates non-nil."
(dolist (win (window-list nil 'no-minibuf))
(let* ((buf (window-buffer (or window win)))
(start (window-start win))
(pos (window-point win))
(entry (assq buf (window-prev-buffers win))))
(cond (entry
(let ((marker (nth 2 entry)))
(unless (= pos marker)
(set-marker (nth 1 entry) start buf)
(set-marker marker pos buf))))
(t
(let ((prev-buf (window-prev-buffers win))
(start-m (make-marker))
(pos-m (make-marker)))
(set-marker start-m start buf)
(set-marker pos-m pos buf)
(push (list buf start-m pos-m) prev-buf)
(set-window-prev-buffers win prev-buf)))))))
(defun delete-window (&optional window)
"Delete WINDOW.
WINDOW must be a valid window and defaults to the selected one.
@ -4195,8 +4158,6 @@ argument. Signal an error if WINDOW is either the only window on
its frame, the last non-side window, or part of an atomic window
that is its frame's root window."
(interactive)
(when switch-to-buffer-preserve-window-point
(window--before-delete-windows))
(setq window (window-normalize-window window))
(let* ((frame (window-frame window))
(function (window-parameter window 'delete-window))

View file

@ -283,17 +283,8 @@ You may want to include buffer names such as *Help*, *Apropos*,
;; Restore points
(dolist (win (winner-sorted-window-list))
(unless (and (pop alive)
(let* ((buf (window-buffer win))
(pos (winner-get-point (window-buffer win) win))
(entry (assq buf (window-prev-buffers win))))
;; Try to restore point of buffer in the selected
;; window (Bug#23621).
(let ((marker (nth 2 entry)))
(when (and switch-to-buffer-preserve-window-point
marker
(not (= marker pos)))
(setq pos marker))
(setf (window-point win) pos)))
(setf (window-point win)
(winner-get-point (window-buffer win) win))
(not (or (member (buffer-name (window-buffer win))
winner-boring-buffers)
(and winner-boring-buffers-regexp