[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#37862: [PATCH] Use alternative C++ source files for determining C/C+
From: |
Hong Xu |
Subject: |
bug#37862: [PATCH] Use alternative C++ source files for determining C/C++ header files. |
Date: |
Mon, 21 Oct 2019 20:12:51 -0700 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) |
* lisp/progmodes/cc-mode.el (c-or-c++-mode): Add check for the
existence of alternative C++ source files.
---
lisp/progmodes/cc-mode.el | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index 6bdfb170f1ba..940bd4be3f92 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -2492,16 +2492,23 @@ c-or-c++-mode
matching on file name insufficient for detecting major mode that
should be used.
-This function attempts to use file contents to determine whether
-the code is C or C++ and based on that chooses whether to enable
-`c-mode' or `c++-mode'."
- (if (save-excursion
+This function attempts to use file contents and the existence of
+alternative C++ source files to determine whether the code is C
+or C++ and based on that chooses whether to enable `c-mode' or
+`c++-mode'."
+ (if (or
+ (save-excursion
(save-restriction
(save-match-data
(widen)
(goto-char (point-min))
(re-search-forward c-or-c++-mode--regexp
(+ (point) c-guess-region-max) t))))
+ ;; We could have gone through auto-mode-alist here, but it
+ ;; might be too slow.
+ (let ((base-name (file-name-sans-extension (buffer-file-name))))
+ (seq-find (lambda (ext) (file-exists-p (concat base-name ext)))
+ '(".cc" ".cpp" ".cxx" ".c++"))))
(c++-mode)
(c-mode)))
--
2.20.1
- bug#37862: [PATCH] Use alternative C++ source files for determining C/C++ header files.,
Hong Xu <=