From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.bugs Subject: bug#32790: 27.0.50; point jumps unexpectedly after delete-window Date: Wed, 28 Nov 2018 01:18:13 +0200 Organization: LINKOV.NET Message-ID: <87h8g2m9ii.fsf@mail.linkov.net> References: <87efdnsp2k.fsf@mail.linkov.net> <87ftw2q74g.fsf@mail.linkov.net> <5BEE85A5.2070309@gmx.at> <878t1ruz4m.fsf@mail.linkov.net> <5BF12FB6.20203@gmx.at> <87o9am3smz.fsf@mail.linkov.net> <5BF2858C.40207@gmx.at> <87va4szo8n.fsf@mail.linkov.net> <5BF3D3D4.1080106@gmx.at> <87pnuzz2vf.fsf@mail.linkov.net> <5BF5151B.5000201@gmx.at> <87ftvu9f20.fsf@mail.linkov.net> <5BF65D56.9020806@gmx.at> <87pnuwenpk.fsf@mail.linkov.net> <5BF7AEC5.60808@gmx.at> <87va4mdoya.fsf@mail.linkov.net> <5BFA5BF3.50505@gmx.at> <87bm6can2p.fsf@mail.linkov.net> <5BFBBDD4.7050100@gmx.at> <87pnurjt92.fsf@mail.linkov.net> <83lg5fgivk.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1543365911 20366 195.159.176.226 (28 Nov 2018 00:45:11 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 28 Nov 2018 00:45:11 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (x86_64-pc-linux-gnu) Cc: 32790@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed Nov 28 01:45:07 2018 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gRnyU-000593-Ne for geb-bug-gnu-emacs@m.gmane.org; Wed, 28 Nov 2018 01:45:06 +0100 Original-Received: from localhost ([::1]:45264 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gRo0b-0004KI-C2 for geb-bug-gnu-emacs@m.gmane.org; Tue, 27 Nov 2018 19:47:17 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:47709) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gRnzU-0003ko-R6 for bug-gnu-emacs@gnu.org; Tue, 27 Nov 2018 19:46:11 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gRnzP-000288-Hv for bug-gnu-emacs@gnu.org; Tue, 27 Nov 2018 19:46:08 -0500 Original-Received: from debbugs.gnu.org ([208.118.235.43]:48391) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gRnzP-00027o-98 for bug-gnu-emacs@gnu.org; Tue, 27 Nov 2018 19:46:03 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1gRnzP-0002oH-7o for bug-gnu-emacs@gnu.org; Tue, 27 Nov 2018 19:46:03 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Juri Linkov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 28 Nov 2018 00:46:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 32790 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 32790-submit@debbugs.gnu.org id=B32790.154336592910666 (code B ref 32790); Wed, 28 Nov 2018 00:46:03 +0000 Original-Received: (at 32790) by debbugs.gnu.org; 28 Nov 2018 00:45:29 +0000 Original-Received: from localhost ([127.0.0.1]:52632 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gRnyr-0002ly-2z for submit@debbugs.gnu.org; Tue, 27 Nov 2018 19:45:29 -0500 Original-Received: from palegreen.birch.relay.mailchannels.net ([23.83.209.140]:47684) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gRnyn-0002ln-If for 32790@debbugs.gnu.org; Tue, 27 Nov 2018 19:45:26 -0500 X-Sender-Id: dreamhost|x-authsender|jurta@jurta.org Original-Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 074D21243A7; Wed, 28 Nov 2018 00:45:24 +0000 (UTC) Original-Received: from pdx1-sub0-mail-a3.g.dreamhost.com (unknown [100.96.36.160]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 64BD11248CF; Wed, 28 Nov 2018 00:45:21 +0000 (UTC) X-Sender-Id: dreamhost|x-authsender|jurta@jurta.org Original-Received: from pdx1-sub0-mail-a3.g.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384) by 0.0.0.0:2500 (trex/5.16.2); Wed, 28 Nov 2018 00:45:23 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|jurta@jurta.org X-MailChannels-Auth-Id: dreamhost X-Print-Shoe: 4d6998aa790e4503_1543365921650_1762652990 X-MC-Loop-Signature: 1543365921650:4245145104 X-MC-Ingress-Time: 1543365921649 Original-Received: from pdx1-sub0-mail-a3.g.dreamhost.com (localhost [127.0.0.1]) by pdx1-sub0-mail-a3.g.dreamhost.com (Postfix) with ESMTP id 6009380924; Tue, 27 Nov 2018 16:45:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=linkov.net; h=from:to:cc :subject:references:date:in-reply-to:message-id:mime-version :content-type; s=linkov.net; bh=3WhhrFbl8lCkyjr1gZaQ83KV3dY=; b= FEghoxoWBeLEflHihkTo3bZHghi8ejA6Tg6voxsjb5/A7iO/0h5SHeVVrKhiXdfY NurE7tWaIfMAnyNtNr+awiIgHuW3055sLB8VmXPJh4uZfFCokfYo9gxiRwlHYXbC gmjiyn8bW3OPV1eQ/W/VcuV2wcD2YHos4nJIuyoFMPo= Original-Received: from mail.jurta.org (m91-129-107-242.cust.tele2.ee [91.129.107.242]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: jurta@jurta.org) by pdx1-sub0-mail-a3.g.dreamhost.com (Postfix) with ESMTPSA id 2FCF080925; Tue, 27 Nov 2018 16:45:16 -0800 (PST) X-DH-BACKEND: pdx1-sub0-mail-a3 In-Reply-To: <83lg5fgivk.fsf@gnu.org> (Eli Zaretskii's message of "Tue, 27 Nov 2018 08:00:15 +0200") X-VR-OUT-STATUS: OK X-VR-OUT-SCORE: -100 X-VR-OUT-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgedtkedruddvtddgvdejucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuggftfghnshhusghstghrihgsvgdpffftgfetoffjqffuvfenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvufhofhffjgfkfgggtgesthdtredttdertdenucfhrhhomheplfhurhhiucfnihhnkhhovhcuoehjuhhriheslhhinhhkohhvrdhnvghtqeenucfkphepledurdduvdelrddutdejrddvgedvnecurfgrrhgrmhepmhhouggvpehsmhhtphdphhgvlhhopehmrghilhdrjhhurhhtrgdrohhrghdpihhnvghtpeeluddruddvledruddtjedrvdegvddprhgvthhurhhnqdhprghthheplfhurhhiucfnihhnkhhovhcuoehjuhhriheslhhinhhkohhvrdhnvghtqedpmhgrihhlfhhrohhmpehjuhhriheslhhinhhkohhvrdhnvghtpdhnrhgtphhtthhopegvlhhiiiesghhnuhdrohhrghenucevlhhushhtvghrufhiiigvpedt X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:152838 Archived-At: >> But wait, maybe still 'switch-to-buffer-pop-to' would be a better name? > > I find this name sub-optimal, as it doesn't make sense as an English > phrase, and doesn't describe well enough what it means. > > How about switch-to-buffer-use-pop-to or maybe > switch-to-buffer-obey-display-actions? Yes, this is a much better name because it reflects the purpose of the option instead of the implementation details. I also updated the docstring: diff --git a/lisp/window.el b/lisp/window.el index 2634955a75..4a1637ad0f 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 for `display-buffer'. So `switch-to-buffer' will display the +buffer in the window specified by the ACTION argument of `display-buffer', +or by the rules in `display-buffer-alist' and other related 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. @@ -7820,6 +7830,7 @@ switch-to-buffer 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 +7847,15 @@ 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)) + (not switch-to-buffer-obey-display-actions))) ((window-minibuffer-p) (if force-same-window (user-error "Cannot switch buffers in minibuffer window") @@ -7852,6 +7865,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 +7883,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)))