Subject: bug#69373: closed (Re: bug#69373: 14.0.3; hack-local-variables misbehaves after loading AUCTeX)

From: [email-masked] (GNU bug Tracking System)
Date: Sun, 25 Feb 2024 16:58:02 +0000

Your bug report

#69373: 14.0.3; hack-local-variables misbehaves after loading AUCTeX

which was filed against the auctex package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
69373: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=69373
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#69373: 14.0.3; hack-local-variables misbehaves after loading AUCTeX
From: Stefan Monnier <[email-masked]>
To: Tony Zorman <[email-masked]>
Cc: Tony Zorman via bug-auctex via Bug reporting list for AUCTeX <[email-masked]>, Arash Esbati <[email-masked]>, [email-masked]
Date: Sun, 25 Feb 2024 11:47:34 -0500
List-Id: <debbugs-submit.debbugs.gnu.org>

> Yup, things are working as expected with that patch applied. Thank you!

Great, thank you, pushed.

[ That was an oversight from many years ago (until Emacs-28, that code
  was identical to the body of `set-auto-mode-0` and that was short
  enough that it wasn't important to use the function) which I failed to
  noticed when I changed `set-auto-mode-0` for Emacs-29.1.  ]

        Stefan

Subject: 14.0.3; hack-local-variables misbehaves after loading AUCTeX
From: Tony Zorman <[email-masked]>
To: [email-masked]
Date: Sun, 25 Feb 2024 08:09:26 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi,

AUCTeX 14.x changed major-mode names from latex-mode to LaTeX-mode. As
indicated in the relevant changes file, the local variables added by
AUCTeX at the bottom of a file are now

    %%% Local Variables:
    %%% mode: LaTeX      <-- not `latex'
    %%% End:

However, it seems like this is not enough. It might be that a minor mode
calls hack-local-variables after AUCTeX is loaded; what will happen then
is that the regular latex-mode is activated, and AUCTeX vanishes!

The reason for that is that hack-local-variables eventually calls
hack-one-local-variable, which features this piece of code:

    (defun hack-one-local-variable (var val)
      "...DOCSTRING..."
      (pcase var
        ('mode                      ; vvvvvvvv
         (let ((mode (intern (concat (downcase (symbol-name val))
                                     "-mode"))))
           (unless (eq (indirect-function mode)
                       (indirect-function major-mode))
             (funcall mode))))
        …))

In other words, LaTeX-mode gets turned into latex-mode anyways.
Curiously, executing this does indeed drop one down into the built in
latex-mode—it seems that the settings in major-mode-remap-alist are
ignored somehow.

This is not a theoretical issue, and has happened with a particular
minor mode (that issue was fixed, but I reckon there are potentially
more modes out there that do something like this).

I'm not sure there to report this (Is this an Emacs bug with repect to
major-mode-remap-alist not being respected? or hack-one-local-variable
just downcasing the mode?) so I will try here first.

Thanks!
  Tony

Emacs  : GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, Motif Version 2.3.8, cairo version 1.18.0)
Package: 14.0.3

current state:
==============
(setq
 AUCTeX-date "2024-02-20"
 window-system 'x
 LaTeX-version "2e"
 TeX-style-path '("~/.emacs.d/auctex"
                  "/nix/store/2q9acgmrj6bya64wn83y5h2kw8ravgij-emacs-packages-deps/share/emacs/site-lisp/elpa/auctex-14.0.3/style"
                  "/home/slot/.config/emacs/auctex/auto" "/home/slot/.config/emacs/auctex/style" "auto" "style")
 TeX-auto-save t
 TeX-parse-self t
 TeX-master t
 TeX-command-list '(("TeX" "%(PDF)%(tex) %(file-line-error) %`%(extraopts) %S%(PDFout)%(mode)%' %(output-dir) %t" TeX-run-TeX nil
                     (plain-TeX-mode AmSTeX-mode Texinfo-mode) :help "Run plain TeX")
                    ("LaTeX" "%`%l%(mode)%' %T" TeX-run-TeX nil (LaTeX-mode docTeX-mode) :help "Run LaTeX")
                    ("Makeinfo" "makeinfo %(extraopts) %(o-dir) %t" TeX-run-compile nil (Texinfo-mode) :help
                     "Run Makeinfo with Info output")
                    ("Makeinfo HTML" "makeinfo %(extraopts) %(o-dir) --html %t" TeX-run-compile nil (Texinfo-mode) :help
                     "Run Makeinfo with HTML output")
                    ("AmSTeX" "amstex %(PDFout) %`%(extraopts) %S%(mode)%' %(output-dir) %t" TeX-run-TeX nil (AmSTeX-mode) :help
                     "Run AMSTeX")
                    ("ConTeXt" "%(cntxcom) --once --texutil %(extraopts) %(execopts)%t" TeX-run-TeX nil (ConTeXt-mode) :help
                     "Run ConTeXt once")
                    ("ConTeXt Full" "%(cntxcom) %(extraopts) %(execopts)%t" TeX-run-TeX nil (ConTeXt-mode) :help
                     "Run ConTeXt until completion")
                    ("BibTeX" "bibtex %(O?aux)" TeX-run-BibTeX nil
                     (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode ConTeXt-mode) :help "Run BibTeX")
                    ("Biber" "biber %(output-dir) %s" TeX-run-Biber nil
                     (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help "Run Biber")
                    ("Texindex" "texindex %s.??" TeX-run-command nil (Texinfo-mode) :help "Run Texindex")
                    ("Texi2dvi" "%(PDF)texi2dvi %t" TeX-run-command nil (Texinfo-mode) :help "Run Texi2dvi or Texi2pdf")
                    ("View" "%V" TeX-run-discard-or-function t t :help "Run Viewer")
                    ("Print" "%p" TeX-run-command t t :help "Print the file")
                    ("Queue" "%q" TeX-run-background nil t :help "View the printer queue" :visible TeX-queue-command)
                    ("File" "%(o?)dvips %d -o %f " TeX-run-dvips t (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode)
                     :help "Generate PostScript file")
                    ("Dvips" "%(o?)dvips %d -o %f " TeX-run-dvips nil
                     (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help "Convert DVI file to PostScript")
                    ("Dvipdfmx" "dvipdfmx -o %(O?pdf) %d" TeX-run-dvipdfmx nil
                     (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help "Convert DVI file to PDF with dvipdfmx")
                    ("Ps2pdf" "ps2pdf %f %(O?pdf)" TeX-run-ps2pdf nil
                     (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help "Convert PostScript file to PDF")
                    ("Glossaries" "makeglossaries %(d-dir) %s" TeX-run-command nil
                     (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help
                     "Run makeglossaries to create glossary file")
                    ("Index" "makeindex %(O?idx)" TeX-run-index nil (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode)
                     :help "Run makeindex to create index file")
                    ("upMendex" "upmendex %(O?idx)" TeX-run-index t (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode)
                     :help "Run upmendex to create index file")
                    ("Xindy" "texindy %s" TeX-run-command nil (plain-TeX-mode LaTeX-mode docTeX-mode AmSTeX-mode Texinfo-mode) :help
                     "Run xindy to create index file")
                    ("Check" "lacheck %s" TeX-run-compile nil (LaTeX-mode) :help "Check LaTeX file for correctness")
                    ("ChkTeX" "chktex -v6 %s" TeX-run-compile nil (LaTeX-mode) :help "Check LaTeX file for common mistakes")
                    ("Spell" "(TeX-ispell-document \"\")" TeX-run-function nil t :help "Spell-check the document")
                    ("Clean" "TeX-clean" TeX-run-function nil t :help "Delete generated intermediate files")
                    ("Clean All" "(TeX-clean t)" TeX-run-function nil t :help "Delete generated intermediate and output files")
                    ("Other" "" TeX-run-command t t :help "Run an arbitrary command"))
 )

-- 
Tony Zorman | https://tony-zorman.com/