]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix overriding 'c-ts-mode' by 'c-mode'
authorEli Zaretskii <eliz@gnu.org>
Thu, 21 Nov 2024 07:43:34 +0000 (09:43 +0200)
committerEshel Yaron <me@eshelyaron.com>
Wed, 27 Nov 2024 19:50:00 +0000 (20:50 +0100)
* 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)

lisp/progmodes/c-ts-mode.el

index 256d18e3a55245a379e48ac6e38dacaa3f2d819a..417d1a8723a0cd5297d9238b83d78d79b61f1a32 100644 (file)
@@ -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)))