diff options
| author | matthew <matt.kosarek@canonical.com> | 2025-12-08 20:20:46 -0500 |
|---|---|---|
| committer | matthew <matt.kosarek@canonical.com> | 2025-12-08 20:20:46 -0500 |
| commit | a1e93569af7e744076a5253dbcdf3f4ed96196c2 (patch) | |
| tree | b6a391c43bd438c0821d9ba89203f522431979a0 | |
| parent | 467abd17985cfdc1375ffbb1e192baa788bb1e40 (diff) | |
Add C++ auto format hook
| -rw-r--r-- | init.el | 12 | ||||
| -rw-r--r-- | lisp/cpp.el | 20 |
2 files changed, 25 insertions, 7 deletions
@@ -74,12 +74,12 @@ "a27c00821ccfd5a78b01e4f35dc056706dd9ede09a8b90c6955ae6a390eb1c1e" default)) '(package-selected-packages - '(all-the-icons company-quickhelp css-eldoc dracula-theme drag-stuff - fish-mode flycheck git-gutter-fringe go-mode - hl-todo ledger-mode marginalia markdown-mode - mood-line orderless org-download org-modern - org-roam perfect-margin plantuml-mode projectile - pyvenv rg rust-mode vertico web-mode + '(all-the-icons clang-format company-quickhelp css-eldoc dracula-theme + drag-stuff fish-mode flycheck git-gutter-fringe + go-mode hl-todo ledger-mode marginalia + markdown-mode mood-line orderless org-download + org-modern org-roam perfect-margin plantuml-mode + projectile pyvenv rg rust-mode vertico web-mode yasnippet-snippets)) '(package-vc-selected-packages '((aider :url "https://github.com/tninja/aider.el"))) '(safe-local-variable-values diff --git a/lisp/cpp.el b/lisp/cpp.el index c22f771..d6b1cad 100644 --- a/lisp/cpp.el +++ b/lisp/cpp.el @@ -1,4 +1,9 @@ +(use-package clang-format + :ensure t) +(use-package projectile + :ensure t) + ;;; Code: (defun setup-c() "Set up c common mode." @@ -26,10 +31,23 @@ (shell-command (format "cd %s && cmake -S . -B build -D CMAKE_EXPORT_COMPILE_COMMANDS=1" (projectile-project-root))) ) -(defun maybe-regenerate-compile-commands() +(defun mk/cpp/maybe-regenerate-compile-commands() (if (string= (buffer-file-name) "CMakeLists.txt") (mk/cpp/generate-compile-commands-cmake))) +(defun mk/clang-format-buffer-if-project-file () + "Run clang-format-buffer only if a .clang-format exists in the Projectile project." + (when (and (projectile-project-p) ; inside a projectile project + (locate-dominating-file (buffer-file-name) ".clang-format")) + (clang-format-buffer))) + +;; Add this hook to C/C++/ObjC modes +(add-hook 'c-mode-common-hook + (lambda () + (add-hook 'before-save-hook + #'mk/clang-format-buffer-if-project-file + nil 'local))) + (add-hook 'after-save-hook 'maybe-regenerate-compile-commands) (provide 'cpp) |
