From: Eli Zaretskii Date: Thu, 21 Nov 2024 07:43:34 +0000 (+0200) Subject: Fix overriding 'c-ts-mode' by 'c-mode' X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ecade28ceb399f09628bae5285b49fbcc1b450b1;p=emacs.git Fix overriding 'c-ts-mode' by 'c-mode' * lisp/progmodes/c-ts-mode.el: Remove all c- and c++-mode associations from 'major-mode-remap-defaults' before installing entries that remap to 'c-ts-mode' and 'c++-ts-mode'. (Bug#74339) (cherry picked from commit 70dd5705e11f2259dd1890cee6c72ddcf9d7dd33) --- diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index 256d18e3a55..417d1a8723a 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -1539,19 +1539,20 @@ the code is C or C++, and based on that chooses whether to enable 'c-ts-mode))) (funcall (major-mode-remap mode)))) -;; The entries for C++ must come first to prevent *.c files be taken -;; as C++ on case-insensitive filesystems, since *.C files are C++, -;; not C. -(if (treesit-ready-p 'cpp) - (add-to-list 'major-mode-remap-defaults - '(c++-mode . c++-ts-mode))) +(when (treesit-ready-p 'cpp) + (setq major-mode-remap-defaults + (assq-delete-all 'c++-mode major-mode-remap-defaults)) + (add-to-list 'major-mode-remap-defaults '(c++-mode . c++-ts-mode))) (when (treesit-ready-p 'c) - (add-to-list 'major-mode-remap-defaults '(c++-mode . c++-ts-mode)) + (setq major-mode-remap-defaults + (assq-delete-all 'c-mode major-mode-remap-defaults)) (add-to-list 'major-mode-remap-defaults '(c-mode . c-ts-mode))) (when (and (treesit-ready-p 'cpp) (treesit-ready-p 'c)) + (setq major-mode-remap-defaults + (assq-delete-all 'c-or-c++-mode major-mode-remap-defaults)) (add-to-list 'major-mode-remap-defaults '(c-or-c++-mode . c-or-c++-ts-mode))) (when (and c-ts-mode-enable-doxygen (not (treesit-ready-p 'doxygen t)))