Subject: Re: bug#75961: set-auto-mode--apply-alist

From: nat chapman <[email-masked]>
Date: Fri, 31 Jan 2025 15:42:32 +0000

On Friday, January 31st, 2025 at 02:16, Eli Zaretskii <[email-masked]> 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" [email-masked]
> > 
> > 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.