GNU bug report logs - #75961
set-auto-mode--apply-alist

Previous Next

Package: emacs;

Reported by: nat chapman <nat.chapman <at> proton.me>

Date: Fri, 31 Jan 2025 07:59:02 UTC

Severity: normal

Done: Stefan Monnier <monnier <at> iro.umontreal.ca>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Eli Zaretskii <eliz <at> gnu.org>
To: nat chapman <nat.chapman <at> proton.me>
Cc: 75961 <at> debbugs.gnu.org, tom <at> tromey.com, monnier <at> iro.umontreal.ca
Subject: bug#75961: set-auto-mode--apply-alist
Date: Sat, 15 Feb 2025 12:25:17 +0200
Ping! Stefan, any comments?

> Date: Fri, 31 Jan 2025 15:42:32 +0000
> From: nat chapman <nat.chapman <at> proton.me>
> Cc: Stefan Monnier <monnier <at> iro.umontreal.ca>, Tom Tromey <tom <at> tromey.com>, 75961 <at> debbugs.gnu.org
> 
> On Friday, January 31st, 2025 at 02:16, Eli Zaretskii <eliz <at> gnu.org> wrote:
> 
> > 
> > 
> > > Date: Fri, 31 Jan 2025 06:24:02 +0000
> > 
> > > From: nat chapman via "Bug reports for GNU Emacs,
> > > the Swiss army knife of text editors" bug-gnu-emacs <at> gnu.org
> > > 
> > > On https://www.gnu.org/software/emacs/manual/html_node/emacs/Choosing-Modes.html, the manual says:
> > > "If the element has the form (regexp mode-function flag) and flag is non-nil, then after calling
> > > mode-function (if it is non-nil), Emacs discards the suffix that matched regexp and searches the list again
> > > for another match. This “recursive extension stripping” is used for files which have multiple extensions, and
> > > the “outer” extension hides the “inner” one that actually specifies the right mode. For example, backup files
> > > and GPG-encrypted files with .gpg extension use this feature."
> > > 
> > > My understanding of this paragraph is that the outside mode-function should be called, and then
> > > subsequent mode-functions should be called after. Currently, only the inner-most matched suffix has its
> > > mode-function called.
> > > 
> > > I believe this was changed in this commit:
> > > https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=ad5faa424a5d2f0d67265906d21f7af98220df26
> > > 
> > > It looks like the (when mode (set-auto-mode-0 ...)) was moved from inside the (while name ...) to outside
> > > when the section was pulled into its own function. It's been four and a half years, so maybe it doesn't matter
> > > anymore, but if that's the case the manual should be updated; it would have saved me a couple hours of
> > > difficulty.
> > 
> > 
> > Thanks.
> > 
> > Do you have a recipe for showing some failure, preferably starting
> > from "emacs -Q", to behave according to the documentation, due to the
> > above change? If so, can you please show such a recipe?
> 
> emacs -Q --eval '(progn (define-derived-mode test-mode fundamental-mode "TEST" (message "Test mode called")) (add-to-list (quote auto-mode-alist) (quote ("\\.test$" test-mode t))))' file.html.test file.test
> 
> Buffer visiting file.html.test is in mhtml-mode, buffer visiting file.test is in fundamental mode, no message is emitted. 
> 
> Using edebug to step through set-auto-mode--apply alist, (regexp mode-function t) matches correctly but the mode-function is never called.
> 
> 




This bug report was last modified 96 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.