From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.bugs Subject: bug#45072: 28.0.50; Emacs switches other buffer back uncontrollably, if other window's buffer is changed by user during minibuffer editing Date: Wed, 04 Aug 2021 23:17:20 +0300 Organization: LINKOV.NET Message-ID: <87r1f976rr.fsf@mail.linkov.net> References: <86eek3hvu5.fsf@protected.rcdrun.com> <87eek1fvgf.fsf@gnus.org> <83eek18ref.fsf@gnu.org> <835z5d8lhc.fsf@gnu.org> <87lfe8jsok.fsf@gnus.org> <83h7ow70ty.fsf@gnu.org> <7a7c3ef0-619d-cd76-a4e4-040009e33d75@gmx.at> <87fsvr55n7.fsf@linkov.net> <87im0lhfbq.fsf@gnus.org> <87czqtbo47.fsf@mail.linkov.net> <87lf5hlh9m.fsf@gnus.org> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="6300"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) Cc: bugs@gnu.support, 45072@debbugs.gnu.org To: Lars Ingebrigtsen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Wed Aug 04 22:32:18 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mBNYo-0001Xh-50 for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 04 Aug 2021 22:32:18 +0200 Original-Received: from localhost ([::1]:60416 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mBNYm-0001uv-Ie for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 04 Aug 2021 16:32:16 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:51920) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mBNYZ-0001rT-8n for bug-gnu-emacs@gnu.org; Wed, 04 Aug 2021 16:32:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:33705) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mBNYZ-00049R-1O for bug-gnu-emacs@gnu.org; Wed, 04 Aug 2021 16:32:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mBNYY-0001JS-UT for bug-gnu-emacs@gnu.org; Wed, 04 Aug 2021 16:32:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Juri Linkov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 04 Aug 2021 20:32:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 45072 X-GNU-PR-Package: emacs Original-Received: via spool by 45072-submit@debbugs.gnu.org id=B45072.16281090854995 (code B ref 45072); Wed, 04 Aug 2021 20:32:02 +0000 Original-Received: (at 45072) by debbugs.gnu.org; 4 Aug 2021 20:31:25 +0000 Original-Received: from localhost ([127.0.0.1]:45250 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mBNXw-0001IV-Lw for submit@debbugs.gnu.org; Wed, 04 Aug 2021 16:31:24 -0400 Original-Received: from relay4-d.mail.gandi.net ([217.70.183.196]:56227) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mBNXv-0001I6-7Y for 45072@debbugs.gnu.org; Wed, 04 Aug 2021 16:31:23 -0400 Original-Received: (Authenticated sender: juri@linkov.net) by relay4-d.mail.gandi.net (Postfix) with ESMTPSA id 52D00E0005; Wed, 4 Aug 2021 20:31:13 +0000 (UTC) In-Reply-To: <87lf5hlh9m.fsf@gnus.org> (Lars Ingebrigtsen's message of "Wed, 04 Aug 2021 10:56:53 +0200") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:211184 Archived-At: >>>> + ;; When read_minibuf doesn't restore all previous windows, >>>> + ;; then at least pop down the completions window. >>>> + (unless read-minibuffer-restore-windows >>>> + (minibuffer-hide-completions)) >>> >>> Hm... Well, I guess that's what most people would want... but... >> >> The new option read-minibuffer-restore-windows is quite unusable >> without the above change: selecting a completion from the >> completions buffer will leave the completions buffer on the screen. > > Yes. But I think some people would want that -- that is, they might be > `C-g'-ing out of the minubuffer just because they want to copy some of > the text in the completions buffer. > > But on the other hand, that may be such a rare thing to do that just > applying your proposed patch is the right thing, and then we could just > see whether anybody actually requests that before tinkering any further > with it... > > So... I think you should just push the patch, and then we'll see. Actually, my previous patch doesn't handle the case of `C-g'-ing out of the minubuffer. It hides the completions buffer only after exiting in the normal way by RET. But fortunately there is an existing hook 'minibuffer-exit-hook' called in both cases of exiting by `C-g' and RET. And the users can easily change it, e.g. to not pop down the *Completions* buffer, or to remove more windows, etc. diff --git a/etc/NEWS b/etc/NEWS index f0fa686bc9..cca6956275 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -180,6 +180,8 @@ nor t. +++ ** New user option 'read-minibuffer-restore-windows'. +When customized to nil, it uses 'minibuffer-restore-windows' in +'minibuffer-exit-hook' to remove only the *Completions* window. +++ ** New system for displaying documentation for groups of functions. diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 3751ba80e0..79fb7e6afc 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -2328,6 +2342,16 @@ exit-minibuffer (setq deactivate-mark nil) (throw 'exit nil)) +(defun minibuffer-restore-windows () + "Restore some windows on exit from minibuffer. +When `read-minibuffer-restore-windows' is nil, then this function +added to `minibuffer-exit-hook' will remove at least the window +with the *Completions* buffer." + (unless read-minibuffer-restore-windows + (minibuffer-hide-completions))) + +(add-hook 'minibuffer-exit-hook 'minibuffer-restore-windows) + (defun minibuffer-quit-recursive-edit () "Quit the command that requested this recursive edit without error. Like `abort-recursive-edit' without aborting keyboard macro diff --git a/src/minibuf.c b/src/minibuf.c index 3ee0dca5e0..a054f0e20d 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -2535,8 +2535,11 @@ syms_of_minibuf (void) If this is non-nil (the default), reading input with the minibuffer will restore, on exit, the window configurations of the frame where the minibuffer was entered from and, if it is different, the frame that owns -the associated minibuffer window. If this is nil, no such restorations -are done. */); +the associated minibuffer window. + +If this is nil, no such restorations are done. +But still `minibuffer-restore-windows' in `minibuffer-exit-hook' +will remove the window with the *Completions* buffer. */); read_minibuffer_restore_windows = true; defsubr (&Sactive_minibuffer_window);