From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.bugs Subject: bug#47150: [External] : bug#47150: 28.0.50; Incorrect major-mode in minibuffer Date: Mon, 19 Apr 2021 17:30:30 +0000 Message-ID: References: <8cbe7629-2091-45d3-9424-46444d7a4633@www.fastmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="28539"; mail-complaints-to="usenet@ciao.gmane.io" Cc: "47150@debbugs.gnu.org" <47150@debbugs.gnu.org>, Sheng Yang To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Apr 19 19:31:31 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 1lYXkA-0007Ii-JW for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 19 Apr 2021 19:31:30 +0200 Original-Received: from localhost ([::1]:45624 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lYXk9-0004x8-9v for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 19 Apr 2021 13:31:29 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:53112) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lYXji-0004wJ-H6 for bug-gnu-emacs@gnu.org; Mon, 19 Apr 2021 13:31:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:40386) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lYXji-00014B-8c for bug-gnu-emacs@gnu.org; Mon, 19 Apr 2021 13:31:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lYXji-0006cb-5F for bug-gnu-emacs@gnu.org; Mon, 19 Apr 2021 13:31:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Alan Mackenzie Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 19 Apr 2021 17:31:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 47150 X-GNU-PR-Package: emacs Original-Received: via spool by 47150-submit@debbugs.gnu.org id=B47150.161885344425431 (code B ref 47150); Mon, 19 Apr 2021 17:31:02 +0000 Original-Received: (at 47150) by debbugs.gnu.org; 19 Apr 2021 17:30:44 +0000 Original-Received: from localhost ([127.0.0.1]:51932 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lYXjP-0006c7-K6 for submit@debbugs.gnu.org; Mon, 19 Apr 2021 13:30:44 -0400 Original-Received: from colin.muc.de ([193.149.48.1]:34097 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1lYXjJ-0006bn-Kh for 47150@debbugs.gnu.org; Mon, 19 Apr 2021 13:30:42 -0400 Original-Received: (qmail 41226 invoked by uid 3782); 19 Apr 2021 17:30:30 -0000 Original-Received: from acm.muc.de (p4fe15b44.dip0.t-ipconnect.de [79.225.91.68]) (using STARTTLS) by colin.muc.de (tmda-ofmipd) with ESMTP; Mon, 19 Apr 2021 19:30:30 +0200 Original-Received: (qmail 1862 invoked by uid 1000); 19 Apr 2021 17:30:30 -0000 Content-Disposition: inline In-Reply-To: X-Submission-Agent: TMDA/1.3.x (Ph3nix) X-Primary-Address: acm@muc.de 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:204491 Archived-At: Hello, everybody. On Mon, Apr 19, 2021 at 09:33:04 +0000, Alan Mackenzie wrote: [ .... ] > I posted a patch for this yesterday. In the documentation bit, I > strongly advised against using minibuffer-mode-hook, instead directing > users to minibuffer-setup-hook and minibuffer-exit-hook. Was this the > right thing to write? Apologies. That post didn't make it out, after all. Here is the patch I meant to send. I invite Sheng, in particular, to report how well it fixes the bug. Thanks! diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi index 1eba7074f7..6f2935f1f6 100644 --- a/doc/emacs/mini.texi +++ b/doc/emacs/mini.texi @@ -247,6 +247,9 @@ Minibuffer Edit to show the current recursion depth in the minibuffer prompt on recursive use of the minibuffer. + When active, the minibuffer is in @code{minibuffer-mode}. This is +an internal Emacs mode without any features for the user. + @findex minibuffer-inactive-mode When not active, the minibuffer is in @code{minibuffer-inactive-mode}, and clicking @kbd{mouse-1} there shows the @file{*Messages*} buffer. diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi index d16409d6c8..edb46bbefe 100644 --- a/doc/lispref/minibuf.texi +++ b/doc/lispref/minibuf.texi @@ -97,6 +97,13 @@ Intro to Minibuffers minibuffer local maps. @xref{Completion Commands}, for the minibuffer local maps for completion. +@cindex active minibuffer + An active minibuffer has major mode @code{minibuffer-mode}. This is +an Emacs internal mode, and there is never any point in calling it or +otherwise trying to manipulate it. Rather than using +@code{minibuffer-mode-hook}, you should use +@code{minibuffer-setup-hook} (@pxref{Minibuffer Misc}). + @cindex inactive minibuffer When a minibuffer is inactive, its major mode is @code{minibuffer-inactive-mode}, with keymap diff --git a/etc/NEWS b/etc/NEWS index b641e8d95f..3e5767c953 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2392,6 +2392,10 @@ This affects the suffix specified by completion 'annotation-function'. ** 'set-process-buffer' now updates the process mark. The mark will be set to point to the end of the new buffer. ++++ +** An active minibuffer now has major mode 'minibuffer-mode', not the +erroneous 'minibuffer-inactive-mode' it formerly had. + +++ ** Some properties from completion tables are now preserved. If 'minibuffer-allow-text-properties' is non-nil, doing completion diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index c900b0d7ce..1a719a12cc 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -2474,6 +2474,16 @@ minibuffer-inactive-mode "Major mode to use in the minibuffer when it is not active. This is only used when the minibuffer area has no active minibuffer.") +(define-derived-mode minibuffer-mode nil "Minibuffer" + "Major mode used only in active minibuffers. +This mode is used internally, and should not be set by user code +in any way, although it may be tested by such code. Use +`minibuffer-setup-hook' and `minibuffer-exit-hook' rather than +the mode hook of this mode." + :syntax-table nil + :abbrev-table nil + :interactive nil) + ;;; Completion tables. (defun minibuffer--double-dollars (str) diff --git a/src/minibuf.c b/src/minibuf.c index a3c1b99bf3..439addc9a9 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -567,7 +567,7 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, Lisp_Object prompt, in previous recursive minibuffer, but was not set explicitly to t for this invocation, so set it to nil in this minibuffer. Save the old value now, before we change it. */ - specbind (intern ("minibuffer-completing-file-name"), + specbind (Qminibuffer_completing_file_name, Vminibuffer_completing_file_name); if (EQ (Vminibuffer_completing_file_name, Qlambda)) Vminibuffer_completing_file_name = Qnil; @@ -920,13 +920,13 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, Lisp_Object prompt, && !EQ (XWINDOW (XFRAME (calling_frame)->minibuffer_window) ->frame, calling_frame)))) - call2 (intern ("select-frame-set-input-focus"), calling_frame, Qnil); + call2 (Qselect_frame_set_input_focus, calling_frame, Qnil); /* Add the value to the appropriate history list, if any. This is done after the previous buffer has been made current again, in case the history variable is buffer-local. */ if (! (NILP (Vhistory_add_new_input) || NILP (histstring))) - call2 (intern ("add-to-history"), histvar, histstring); + call2 (Qadd_to_history, histvar, histstring); /* If Lisp form desired instead of string, parse it. */ if (expflag) @@ -965,13 +965,13 @@ set_minibuffer_mode (Lisp_Object buf, EMACS_INT depth) Fset_buffer (buf); if (depth > 0) { - if (!NILP (Ffboundp (intern ("fundamental-mode")))) - call0 (intern ("fundamental-mode")); + if (!NILP (Ffboundp (Qminibuffer_mode))) + call0 (Qminibuffer_mode); } else { - if (!NILP (Ffboundp (intern ("minibuffer-inactive-mode")))) - call0 (intern ("minibuffer-inactive-mode")); + if (!NILP (Ffboundp (Qminibuffer_inactive_mode))) + call0 (Qminibuffer_inactive_mode); else Fkill_all_local_variables (); } @@ -1163,7 +1163,7 @@ read_minibuf_unwind (void) dead, we may keep displaying this buffer (tho it's inactive), so reset it, to make sure we don't leave around bindings and stuff which only made sense during the read_minibuf invocation. */ - call0 (intern ("minibuffer-inactive-mode")); + call0 (Qminibuffer_inactive_mode); /* We've exited the recursive edit, so switch the current windows away from the expired minibuffer window, both in the current @@ -2332,6 +2332,12 @@ syms_of_minibuf (void) /* A frame parameter. */ DEFSYM (Qminibuffer_exit, "minibuffer-exit"); + DEFSYM (Qminibuffer_mode, "minibuffer-mode"); + DEFSYM (Qminibuffer_inactive_mode, "minibuffer-inactive-mode"); + DEFSYM (Qminibuffer_completing_file_name, "minibuffer-completing-file-name"); + DEFSYM (Qselect_frame_set_input_focus, "select-frame-set-input-focus"); + DEFSYM (Qadd_to_history, "add-to-history"); + DEFVAR_LISP ("read-expression-history", Vread_expression_history, doc: /* A history list for arguments that are Lisp expressions to evaluate. For example, `eval-expression' uses this. */); [ .... ] -- Alan Mackenzie (Nuremberg, Germany).