From: Juri Linkov <juri@linkov.net>
To: martin rudalics <rudalics@gmx.at>
Cc: 32790@debbugs.gnu.org
Subject: bug#32790: 27.0.50; point jumps unexpectedly after delete-window
Date: Fri, 30 Nov 2018 00:50:34 +0200 [thread overview]
Message-ID: <87tvjz8pmt.fsf@mail.linkov.net> (raw)
In-Reply-To: <5BFFA3C0.9070102@gmx.at> (martin rudalics's message of "Thu, 29 Nov 2018 09:30:56 +0100")
[-- Attachment #1: Type: text/plain, Size: 301 bytes --]
>> Is this better?
>
> I think so but the patch again doesn't apply for some reason. Can you
> resend it as attachment, please?
Sorry, no code changes were performed, so I thought it would be better
to see just documentation changes ignoring whitespace differences.
But here it's a complete patch:
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: switch-to-buffer-obey-display-actions.patch --]
[-- Type: text/x-diff, Size: 5995 bytes --]
diff --git a/lisp/window.el b/lisp/window.el
index 2634955a75..bc07300f0c 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -7779,6 +7779,16 @@ switch-to-buffer-in-dedicated-window
:group 'windows
:version "25.1")
+(defcustom switch-to-buffer-obey-display-actions nil
+ "If non-nil, have `switch-to-buffer' run `pop-to-buffer-same-window'.
+This means that when switching the buffer it respects display actions
+specified by `display-buffer-overriding-action', `display-buffer-alist'
+and other display related variables. So `switch-to-buffer' will display
+the buffer in the window specified by the rules from these variables."
+ :type 'boolean
+ :group 'windows
+ :version "27.1")
+
(defun switch-to-buffer (buffer-or-name &optional norecord force-same-window)
"Display buffer BUFFER-OR-NAME in the selected window.
@@ -7811,38 +7821,53 @@ switch-to-buffer
If optional argument FORCE-SAME-WINDOW is non-nil, the buffer
must be displayed in the selected window when called
non-interactively; if that is impossible, signal an error rather
-than calling `pop-to-buffer'.
+than calling `pop-to-buffer'. It has no effect when the option
+`switch-to-buffer-obey-display-actions' is non-nil.
The option `switch-to-buffer-preserve-window-point' can be used
to make the buffer appear at its last position in the selected
window.
+If the option `switch-to-buffer-obey-display-actions' is non-nil,
+run the function `pop-to-buffer-same-window' instead.
+This may display the buffer in another window as specified by
+`display-buffer-overriding-action', `display-buffer-alist' and
+other display related variables. If this results in displaying
+the buffer in the selected window, window start and point are adjusted
+as prescribed by the option `switch-to-buffer-preserve-window-point'.
+Otherwise, these are left alone.
+
Return the buffer switched to."
(interactive
(let ((force-same-window
- (cond
- ((window-minibuffer-p) nil)
- ((not (eq (window-dedicated-p) t)) 'force-same-window)
- ((pcase switch-to-buffer-in-dedicated-window
- ('nil (user-error
- "Cannot switch buffers in a dedicated window"))
- ('prompt
- (if (y-or-n-p
- (format "Window is dedicated to %s; undedicate it"
- (window-buffer)))
- (progn
- (set-window-dedicated-p nil nil)
- 'force-same-window)
- (user-error
- "Cannot switch buffers in a dedicated window")))
- ('pop nil)
- (_ (set-window-dedicated-p nil nil) 'force-same-window))))))
+ (unless switch-to-buffer-obey-display-actions
+ (cond
+ ((window-minibuffer-p) nil)
+ ((not (eq (window-dedicated-p) t)) 'force-same-window)
+ ((pcase switch-to-buffer-in-dedicated-window
+ ('nil (user-error
+ "Cannot switch buffers in a dedicated window"))
+ ('prompt
+ (if (y-or-n-p
+ (format "Window is dedicated to %s; undedicate it"
+ (window-buffer)))
+ (progn
+ (set-window-dedicated-p nil nil)
+ 'force-same-window)
+ (user-error
+ "Cannot switch buffers in a dedicated window")))
+ ('pop nil)
+ (_ (set-window-dedicated-p nil nil) 'force-same-window)))))))
(list (read-buffer-to-switch "Switch to buffer: ") nil force-same-window)))
- (let ((buffer (window-normalize-buffer-to-switch-to buffer-or-name)))
+ (let ((buffer (window-normalize-buffer-to-switch-to buffer-or-name))
+ (set-window-start-and-point (not switch-to-buffer-obey-display-actions)))
(cond
;; Don't call set-window-buffer if it's not needed since it
;; might signal an error (e.g. if the window is dedicated).
- ((eq buffer (window-buffer)))
+ ((and (eq buffer (window-buffer))
+ ;; pop-to-buffer-same-window might decide to display
+ ;; the same buffer in another window
+ (not switch-to-buffer-obey-display-actions)))
((window-minibuffer-p)
(if force-same-window
(user-error "Cannot switch buffers in minibuffer window")
@@ -7852,18 +7877,25 @@ switch-to-buffer
(user-error "Cannot switch buffers in a dedicated window")
(pop-to-buffer buffer norecord)))
(t
- (let* ((entry (assq buffer (window-prev-buffers)))
- (displayed (and (eq switch-to-buffer-preserve-window-point
- 'already-displayed)
- (get-buffer-window buffer 0))))
- (set-window-buffer nil buffer)
- (when (and entry
- (or (eq switch-to-buffer-preserve-window-point t)
- displayed))
- ;; Try to restore start and point of buffer in the selected
- ;; window (Bug#4041).
- (set-window-start (selected-window) (nth 1 entry) t)
- (set-window-point nil (nth 2 entry))))))
+ (when switch-to-buffer-obey-display-actions
+ (let ((selected-window (selected-window)))
+ (pop-to-buffer-same-window buffer norecord)
+ (when (eq (selected-window) selected-window)
+ (setq set-window-start-and-point t))))
+
+ (when set-window-start-and-point
+ (let* ((entry (assq buffer (window-prev-buffers)))
+ (displayed (and (eq switch-to-buffer-preserve-window-point
+ 'already-displayed)
+ (get-buffer-window buffer 0))))
+ (set-window-buffer nil buffer)
+ (when (and entry
+ (or (eq switch-to-buffer-preserve-window-point t)
+ displayed))
+ ;; Try to restore start and point of buffer in the selected
+ ;; window (Bug#4041).
+ (set-window-start (selected-window) (nth 1 entry) t)
+ (set-window-point nil (nth 2 entry)))))))
(unless norecord
(select-window (selected-window)))
next prev parent reply other threads:[~2018-11-29 22:50 UTC|newest]
Thread overview: 127+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-20 23:33 bug#32790: 27.0.50; point jumps unexpectedly after delete-window Juri Linkov
2018-09-21 6:34 ` martin rudalics
2018-09-22 22:23 ` Juri Linkov
2018-09-23 5:44 ` Eli Zaretskii
2018-09-23 8:27 ` martin rudalics
2018-09-23 20:57 ` Juri Linkov
2018-09-24 8:33 ` martin rudalics
2018-09-24 18:49 ` Juri Linkov
2018-09-25 7:28 ` martin rudalics
2018-09-25 19:28 ` Juri Linkov
2018-09-26 8:51 ` martin rudalics
2018-09-26 23:05 ` Juri Linkov
2018-09-27 18:44 ` martin rudalics
2018-10-15 21:12 ` Juri Linkov
2018-10-16 8:46 ` martin rudalics
2018-10-16 22:20 ` Juri Linkov
2018-10-17 7:30 ` martin rudalics
2018-10-17 21:30 ` Juri Linkov
2018-10-18 8:05 ` martin rudalics
2018-10-18 22:49 ` Juri Linkov
2018-10-19 7:39 ` martin rudalics
2018-10-20 21:27 ` Juri Linkov
2018-10-21 8:22 ` martin rudalics
2018-10-21 18:17 ` Juri Linkov
2018-10-22 9:07 ` martin rudalics
2018-10-23 20:55 ` Juri Linkov
2018-10-24 9:45 ` martin rudalics
2018-10-25 20:48 ` Juri Linkov
2018-10-26 7:41 ` martin rudalics
2018-10-27 19:51 ` Juri Linkov
2018-10-28 8:59 ` martin rudalics
2018-10-28 19:36 ` Juri Linkov
2018-10-29 8:44 ` martin rudalics
2018-10-29 13:45 ` martin rudalics
2018-10-29 22:38 ` Juri Linkov
2018-10-30 9:00 ` martin rudalics
2018-10-30 21:42 ` Juri Linkov
2018-10-31 8:11 ` martin rudalics
2018-10-31 21:20 ` Juri Linkov
2018-11-01 9:03 ` martin rudalics
2018-11-01 22:42 ` Juri Linkov
2018-11-02 8:44 ` martin rudalics
2018-11-02 14:36 ` Drew Adams
2018-11-04 22:01 ` Juri Linkov
2018-11-05 9:35 ` martin rudalics
2018-11-04 22:21 ` Juri Linkov
2018-11-05 9:36 ` martin rudalics
2018-11-05 22:14 ` Juri Linkov
2018-11-06 8:48 ` martin rudalics
2018-11-06 22:22 ` Juri Linkov
2018-11-07 9:23 ` martin rudalics
2018-11-07 21:44 ` Juri Linkov
2018-11-08 8:52 ` martin rudalics
2018-11-08 21:38 ` Juri Linkov
2018-11-09 9:08 ` martin rudalics
2018-11-10 21:25 ` Juri Linkov
2018-12-26 2:04 ` Dmitry Gutov
2018-11-08 21:53 ` Juri Linkov
2018-11-09 9:13 ` martin rudalics
2018-11-10 21:37 ` Juri Linkov
2018-11-11 8:51 ` martin rudalics
2018-11-12 23:24 ` Juri Linkov
2018-11-13 9:08 ` martin rudalics
2018-11-13 23:20 ` Juri Linkov
2018-11-14 8:33 ` martin rudalics
2018-11-15 0:15 ` Juri Linkov
2018-11-15 9:13 ` martin rudalics
2018-11-15 22:59 ` Juri Linkov
2018-11-16 8:53 ` martin rudalics
2018-11-17 22:18 ` Juri Linkov
2018-11-18 9:24 ` martin rudalics
2018-11-18 22:52 ` Juri Linkov
2018-11-19 9:42 ` martin rudalics
2018-11-19 22:39 ` Juri Linkov
2018-11-20 9:28 ` martin rudalics
2018-11-21 0:12 ` Juri Linkov
2018-11-21 8:19 ` martin rudalics
2018-11-21 23:38 ` Juri Linkov
2018-11-22 7:40 ` martin rudalics
2018-11-22 22:45 ` Juri Linkov
2018-11-23 7:39 ` martin rudalics
2018-11-24 23:40 ` Juri Linkov
2018-11-25 8:23 ` martin rudalics
2018-11-25 21:01 ` Juri Linkov
2018-11-26 9:33 ` martin rudalics
2018-11-26 23:47 ` Juri Linkov
2018-11-27 6:00 ` Eli Zaretskii
2018-11-27 23:18 ` Juri Linkov
2018-11-28 8:33 ` martin rudalics
2018-11-28 23:25 ` Juri Linkov
2018-11-29 8:30 ` martin rudalics
2018-11-29 22:50 ` Juri Linkov [this message]
2018-11-30 8:22 ` martin rudalics
2018-12-01 22:43 ` Juri Linkov
2018-12-02 8:34 ` martin rudalics
2018-12-03 0:45 ` Juri Linkov
2018-12-03 7:45 ` martin rudalics
2018-12-20 23:28 ` Juri Linkov
2018-12-21 9:14 ` martin rudalics
2018-12-22 23:34 ` Juri Linkov
2018-12-23 9:40 ` martin rudalics
2018-11-27 8:08 ` martin rudalics
2018-11-04 22:07 ` Juri Linkov
2018-11-05 9:35 ` martin rudalics
2018-11-05 22:12 ` Juri Linkov
2018-11-06 8:47 ` martin rudalics
2018-11-21 23:35 ` Juri Linkov
2018-11-22 7:40 ` martin rudalics
2018-11-22 22:39 ` Juri Linkov
2018-11-23 7:40 ` martin rudalics
2018-11-24 23:20 ` Juri Linkov
2018-11-25 8:24 ` martin rudalics
2018-11-26 23:53 ` Juri Linkov
2018-11-27 8:08 ` martin rudalics
2018-11-27 23:28 ` Juri Linkov
2018-11-28 8:33 ` martin rudalics
2018-09-21 6:55 ` Eli Zaretskii
2018-09-22 22:34 ` Juri Linkov
2018-09-23 8:28 ` martin rudalics
2018-09-23 10:56 ` Eli Zaretskii
2018-09-23 20:49 ` Juri Linkov
2018-09-24 8:23 ` martin rudalics
2018-09-24 8:30 ` Eli Zaretskii
2018-09-24 12:25 ` martin rudalics
2018-09-24 18:53 ` Juri Linkov
2018-09-25 7:28 ` martin rudalics
2019-11-24 23:19 ` Juri Linkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87tvjz8pmt.fsf@mail.linkov.net \
--to=juri@linkov.net \
--cc=32790@debbugs.gnu.org \
--cc=rudalics@gmx.at \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.