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: Thu, 29 Nov 2018 01:25:18 +0200 [thread overview]
Message-ID: <87woowrdi9.fsf@mail.linkov.net> (raw)
In-Reply-To: <5BFE52CC.4000600@gmx.at> (martin rudalics's message of "Wed, 28 Nov 2018 09:33:16 +0100")
> I don't think this is right because 'switch-to-buffer' does not have a
> display action it can pass to 'display-buffer'. The behavior is
> subject to 'display-buffer-overriding-action', 'display-buffer-alist'
> and other related variables alone IIUC.
>
> Furthermore, the doc-string of 'switch-to-buffer' should be amended
> like:
>
> 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 an arbitrary 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.
>
> And the following part of the doc-string
>
> 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'.
>
> is presumably invalid when 'switch-to-buffer-obey-display-actions' is
> non-nil. Right?
Is this better?
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,15 +7821,26 @@ 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
+ (unless switch-to-buffer-obey-display-actions
(cond
((window-minibuffer-p) nil)
((not (eq (window-dedicated-p) t)) 'force-same-window)
@@ -7836,13 +7857,17 @@ switch-to-buffer
(user-error
"Cannot switch buffers in a dedicated window")))
('pop nil)
- (_ (set-window-dedicated-p nil nil) 'force-same-window))))))
+ (_ (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,6 +7877,13 @@ switch-to-buffer
(user-error "Cannot switch buffers in a dedicated window")
(pop-to-buffer buffer norecord)))
(t
+ (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)
@@ -7863,7 +7895,7 @@ switch-to-buffer
;; 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))))))
+ (set-window-point nil (nth 2 entry)))))))
(unless norecord
(select-window (selected-window)))
next prev parent reply other threads:[~2018-11-28 23:25 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 [this message]
2018-11-29 8:30 ` martin rudalics
2018-11-29 22:50 ` Juri Linkov
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87woowrdi9.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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).