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 09:33:04 +0000 Message-ID: References: <0f564ae1-ab0a-4e0f-a436-68f29b71d8a9@www.fastmail.com> <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="12507"; mail-complaints-to="usenet@ciao.gmane.io" Cc: "47150@debbugs.gnu.org" <47150@debbugs.gnu.org>, acm@muc.de, 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 11:34:21 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 1lYQIO-00037y-I6 for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 19 Apr 2021 11:34:20 +0200 Original-Received: from localhost ([::1]:53394 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lYQIN-0006sZ-Lt for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 19 Apr 2021 05:34:19 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:50112) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lYQI6-0006sN-0d for bug-gnu-emacs@gnu.org; Mon, 19 Apr 2021 05:34:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:36904) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lYQI5-0006L9-Pv for bug-gnu-emacs@gnu.org; Mon, 19 Apr 2021 05:34:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lYQI5-0005Nk-Nh for bug-gnu-emacs@gnu.org; Mon, 19 Apr 2021 05:34:01 -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 09:34:01 +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.161882479420625 (code B ref 47150); Mon, 19 Apr 2021 09:34:01 +0000 Original-Received: (at 47150) by debbugs.gnu.org; 19 Apr 2021 09:33:14 +0000 Original-Received: from localhost ([127.0.0.1]:48448 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lYQHK-0005Mb-AX for submit@debbugs.gnu.org; Mon, 19 Apr 2021 05:33:14 -0400 Original-Received: from colin.muc.de ([193.149.48.1]:18704 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1lYQHI-0005MN-FR for 47150@debbugs.gnu.org; Mon, 19 Apr 2021 05:33:13 -0400 Original-Received: (qmail 3532 invoked by uid 3782); 19 Apr 2021 09:33:05 -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 11:33:05 +0200 Original-Received: (qmail 4989 invoked by uid 1000); 19 Apr 2021 09:33:04 -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:204426 Archived-At: Hello, Stefan. On Sun, Apr 18, 2021 at 11:22:18 -0400, Stefan Monnier wrote: > >> Their code was buggy/naive, will be broken no matter what we choose > >> to do (except for sticking to what we had in Emacs<28), and is easy > >> to fix in a backward compatible way using `minibufferp`. > > This would make a special case of minibuffer_mode, which would > > require minibufferp, when other modes would be matched with (memq > > major-mode foo-list). > No, you could also use (derived-mode-p ) instead of > (minibufferp). I can't see how that's different in principle from (memq major-mode foo-list). But that's probably not important any more. > >> > How about having just minibuffer-mode, and calling it at the end > >> > of every MB action (as was previously done with > >> > minibuffer-inactive-mode), but not at the start of a MB action? > >> > This will call the mode hook at the same times as the > >> > m-inactive-m-hook used to be called, and reset the MB's keymap to > >> > the inactive map at the same time. > >> IOW just renaming `minibuffer-inactive-mode` to `minibuffer-mode` > >> and calling it one extra time at the very beginning? > > Yes. It's that "one extra time at the very beginning" which makes > > it nasty. :-( > Could you explain the problem you see with calling it one extra time? That extra time would be calling it just before the MB gets used. Every other call to minibuffer-mode would be just after MB use. This is ugly, and one way or another, would be bound to cause problems. > > The scheme you propose, having two modes > > minibuffer-\(inactive-\)?mode also has disadvantages, pointed out by > > Drew in his post in this thread from Date: Mon, 22 Mar 2021 17:09:32 > > +0000 - minibuffer-mode would be a useless mode, just a placeholder; > > it has a key map, a syntax table, an abbreviation table which will > > never be used (OK, some of these can be specified nil in > > define-derived-mode), a redundant mode hook (there exist > > minibuffer-setup-hook and minibuffer-exit-hook). These can surely > > only cause trouble down the line. So Drew is right, too. > These "extras" haven't caused any trouble in all the other major modes > where they're not used (including minibuffer-inactive-mode), so it seems > to me like you're worried about something perfectly harmless. Maybe they won't cause trouble, but they can't do anything positive. That was what I meant by "only". :-) > > The problem is, we're in an anomalous situation. Major modes aren't > > really the right tool for the minibuffer, but not using major modes > > isn't any better. Anything we do here is bad. :-( > I disagree. The minibuffers are normal buffers, and the more normal we > can make them, the better. Clearly, the major modes that make sense in > a minibuffer will almost invariably be different from the major modes > that make sense in other buffers, but that doesn't mean that the concept > of "major mode" is wrong for minibuffers. Not at all. > On the contrary, from where I stand, it is The Right Thing. OK, please add an IMHO to my last paragraph. While hacking minibuf.c, the major mode stuff didn't feel natural to me. It felt like something forced into something which didn't need it. That's just my view on it. > I'd argue that we're de-facto already using major modes, just without > the advantages that come from having conventions. > E.g. `minibuffer-setup-hook` is the hook for the "parent major mode" > of all the minibuffer "major modes". The `minibuffer-*-map` are the > keymaps of the various different "major modes". > The advantages we can gain by bringing the conventions of "real" major > modes would be for example that `C-h m` would give useful information > when used in the minibuffer. 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? > > Over the past few days, I've come to the conclusion that having two > > modes for the minibuffer is the lesser evil than having just one > > mode whose mode function would be called at the end of a minibuffer > > use. The deciding criterion, which might seem minor, is that with > > the one mode, we'd have to call it "one extra time at the very > > beginning" as discussed above. > > So I intend to leave minibuffer-inactive-mode more or less alone, > > and to implement minibuffer-mode, which will get called at the start > > of each minibuffer use, flushing out old stuff from any previous > > minibuffer (non-)use. > Sounds good to me ;-) Excellent! We've disagreed about a few things, but in the end they've made no difference to the changes to be made. :-) As I said, I posted a patch yesterday. We'll see how much reaction there is to it, and after dealing with that reaction I'll commit the patch and close the bug. > Stefan -- Alan Mackenzie (Nuremberg, Germany).