From da08aa2d7d9ca9197896e7988dc8785006796336 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Thu, 28 Nov 2024 16:09:44 -0500 Subject: [PATCH] feat(lib): backport major-mode-remap{,-alist} Will be necessary for treesit.el support coming to the :tools tree-sitter module later. --- lisp/doom-compat.el | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/lisp/doom-compat.el b/lisp/doom-compat.el index fe9e5edb7..726332622 100644 --- a/lisp/doom-compat.el +++ b/lisp/doom-compat.el @@ -109,5 +109,33 @@ and return the value found in PLACE instead." (unless (fboundp 'bol) (defalias 'bol #'line-beginning-position)) (unless (fboundp 'eol) (defalias 'eol #'line-end-position)) +;; Introduced in Emacs 29+ +(unless (boundp 'major-mode-remap-alist) + (defvar major-mode-remap-alist nil) + (defvar-local set-auto-mode--last nil) + (define-advice set-auto-mode-0 (:override (mode &optional keep-mode-if-same) backport-major-mode-remap) + (unless (and keep-mode-if-same + (or (eq (indirect-function mode) + (indirect-function major-mode)) + (and set-auto-mode--last + (eq mode (car set-auto-mode--last)) + (eq major-mode (cdr set-auto-mode--last))))) + (when mode + (funcall (major-mode-remap mode)) + (unless (eq mode major-mode) + (setq set-auto-mode--last (cons mode major-mode))) + mode)))) + + +;;; From Emacs 30+ +;; Introduced in Emacs 30+ +(unless (fboundp 'major-mode-remap) + (defvar major-mode-remap-defaults nil) + (defun major-mode-remap (mode) + "Return the function to use to enable MODE." + (or (cdr (or (assq mode major-mode-remap-alist) + (assq mode major-mode-remap-defaults))) + mode))) + (provide 'doom-compat) ;;; doom-compat.el ends here