From: Ikumi Keita <ikumi@ikumi.que.jp>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: 67008@debbugs.gnu.org
Subject: bug#67008: 30.0.50; Multiple major mode parents
Date: Sat, 11 Nov 2023 21:21:36 +0900 [thread overview]
Message-ID: <51598.1699705296@localhost> (raw)
In-Reply-To: <jwvbkc3mqpd.fsf@iro.umontreal.ca>
[-- Attachment #1: Type: text/plain, Size: 2029 bytes --]
Hi Stefan,
>>>>> Stefan Monnier <monnier@iro.umontreal.ca> writes:
> I pushed to the branch `feature/derived-mode-add-parents` a bunch of
> patches which add support for such limited form of `multiple
> inheritance`.
I tried the branch with the attached tentative addition to AUCTeX
feature/fix-mode-names-overlap branch. I tested two modes, namely latex
mode and japanese latex mode, with the second attachment to see whether
the directory local variables stored in the .dir-locals.el are reflected
or not.
For latex mode, it works as expected. Thank you, it is promising.
On the contrary, it fails for japanese latex mode with the error:
File mode specification error: (error Cycle in the major mode hierarchy: japanese-LaTeX-mode)
I think the reason is that AUCTeX has
(defalias 'japanese-latex-mode #'japanese-LaTeX-mode)
for backward compatibility.
AUCTeX major modes are divided into two categories.
[a] Modes with former names which are overlapped with built-in tex
modes:
plain-TeX-mode, LaTeX-mode, docTeX-mode, Texinfo-mode
[b] Modes with former names which aren't overlapped with built-in tex
modes:
ConTeXt-mode, AmSTeX-mode, japanese-plain-TeX-mode, japanese-LaTeX-mode
For category [b], AUCTeX feature branch has defalias'es similar to the
above example for compatibility with files which have "%%% mode:" tag
with former mode name such as "japanese-latex".
This new feature of multiple inheritance would work well for category
[a], which retains backward compatibility by `major-mode-remap-alist'
and doesn't use defalias. However, it doesn't work for category [b].
It seems to me very difficult to arrange the proposed feature to cover
category [b], looking at its way to handle mode alias. So I think AUCTeX
feature branch must rely on some very ugly hack to be able to pick up
directory local variable entry with former mode name. :-(
(Or AUCTeX should entirely give up such compatibility with directory
local variables for category [b].)
Best regards,
Ikumi Keita
#StandWithUkraine #StopWarInUkraine
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Use multiple inheritance --]
[-- Type: text/x-diff, Size: 2459 bytes --]
diff --git a/latex.el b/latex.el
index e9b08cc1..0551c320 100644
--- a/latex.el
+++ b/latex.el
@@ -8087,6 +8087,8 @@ Run after mode hooks and file local variables application."
;;;###autoload
(put 'LaTeX-mode 'auctex-function-definition (symbol-function 'LaTeX-mode))
+(TeX-derived-mode-add-parents 'LaTeX-mode '(latex-mode))
+
(with-eval-after-load 'semantic/symref/grep
(push '(docTeX-mode "*.dtx") semantic-symref-filepattern-alist))
diff --git a/tex-jp.el b/tex-jp.el
index ff562e22..36a39ec1 100644
--- a/tex-jp.el
+++ b/tex-jp.el
@@ -471,6 +471,9 @@ Now `japanese-latex-mode-initialization' is no-op. Don't use it."))
;;;###autoload
(defalias 'japanese-latex-mode #'japanese-LaTeX-mode)
+(TeX-derived-mode-add-parents 'japanese-LaTeX-mode
+ '(japanese-latex-mode latex-mode))
+
(defun japanese-LaTeX-guess-engine ()
"Guess Japanese TeX engine and set it to `TeX-engine'.
Document class and its option are taken into account. Do not
diff --git a/tex.el b/tex.el
index d4fded73..f67e1e31 100644
--- a/tex.el
+++ b/tex.el
@@ -3875,6 +3875,15 @@ Run after mode hooks and file local variables application."
;;;###autoload
(put 'TeX-mode 'auctex-function-definition (symbol-function 'TeX-mode))
+;; COMPATIBILITY for Emacs<30
+(unless (fboundp 'derived-mode-add-parents)
+ (advice-add 'derived-mode-p :after-until #'TeX--compat-derived-mode-p)
+ (defun TeX--compat-derived-mode-p (&rest modes)
+ (let ((extra-parents (get major-mode 'derived-mode-extra-parents)))
+ (and extra-parents
+ (cl-loop for parent in extra-parents
+ thereis (memq parent modes))))))
+
;;; Hilighting
;; FIXME: It's likely that `hilit-patterns-alist' is much obsolete.
@@ -4828,6 +4837,16 @@ Also see `ignore'.
This is a compatibility function for Emacs versions prior to v.28."
t))
+;; COMPATIBILITY for Emacs<30
+(if (fboundp 'derived-mode-add-parents)
+ (defalias 'TeX-derived-mode-add-parents #'derived-mode-add-parents)
+ ;; Adapted copy of `derived-mode-add-parents'.
+ (defun TeX-derived-mode-add-parents (mode extra-parents)
+ "Add EXTRA-PARENTS to the parents of MODE.
+Declares the parents of MODE to be its main parent (as defined
+in `define-derived-mode') plus EXTRA-PARENTS."
+ (put mode 'derived-mode-extra-parents extra-parents)))
+
(defun TeX-match-buffer (n)
"Return the substring corresponding to the N'th match.
See `match-data' for details."
[-- Attachment #3: Test suit --]
[-- Type: application/gzip, Size: 731 bytes --]
next prev parent reply other threads:[~2023-11-11 12:21 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-09 5:38 bug#67008: 30.0.50; Multiple major mode parents Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-09 7:43 ` Yuan Fu
2023-11-12 22:11 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-16 15:16 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-11 0:01 ` Dmitry Gutov
2023-11-11 4:23 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-11 10:14 ` Mattias Engdegård
2023-11-11 16:20 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-11 18:12 ` Mattias Engdegård
2023-11-11 18:43 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-11 20:13 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-12 13:37 ` Mattias Engdegård
2023-11-12 16:41 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-13 12:45 ` Mattias Engdegård
2023-11-13 13:30 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-13 16:44 ` Mattias Engdegård
2023-11-13 17:46 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-16 11:07 ` Mattias Engdegård
2023-11-16 15:15 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-16 19:35 ` Mattias Engdegård
2023-11-16 21:40 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-17 14:04 ` Mattias Engdegård
2023-11-17 14:20 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-17 16:15 ` Mattias Engdegård
2023-11-11 12:21 ` Ikumi Keita [this message]
2023-11-11 16:57 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-12 9:50 ` Ikumi Keita
2023-11-12 16:04 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51598.1699705296@localhost \
--to=ikumi@ikumi.que.jp \
--cc=67008@debbugs.gnu.org \
--cc=monnier@iro.umontreal.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).