From e2b4d7e087986b20c96bedb0008750ac56e98db5 Mon Sep 17 00:00:00 2001 From: Thomas Ulmer Date: Thu, 26 Feb 2026 14:15:34 -0800 Subject: emacs diablable prog formatting --- config/emacs/init.el | 62 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 21 deletions(-) diff --git a/config/emacs/init.el b/config/emacs/init.el index 20970b0..19f640f 100644 --- a/config/emacs/init.el +++ b/config/emacs/init.el @@ -77,6 +77,16 @@ "Skip reindenting the buffer if it is longer than this many lines. Nil for no limit.") +(define-minor-mode my/global-prog-clean-mode + "Do auto formating on save in prog mode buffers." + :global t + (if my/global-prog-clean-mode + (progn ;enable + (add-hook 'before-save-hook 'my/clean-prog-file)) + (progn ;disable + (remove-hook 'before-save-hook 'my/clean-prog-file)))) +(my/global-prog-clean-mode 1) + (defun my/clean-prog-file (&optional buffer) "Perform whitespace cleanup and some normalization on `buffer'. Defaults to the current BUFFER. Converts tabs to spaces unless the @@ -84,20 +94,23 @@ major mode is in `my/prog-cleanup-want-tabs-modes', otherwise do the reverse. Delete trailing whitespace." (unless buffer (setq buffer (current-buffer))) (with-current-buffer buffer - (cond - ((and (functionp 'clang-format-buffer) - ; safety valve for undef'd - (derived-mode-p '(c-mode c++-mode))) - (clang-format-buffer)) - (t - (when (and my/prog-cleanup-indent-max-lines - (< (car (buffer-line-statistics buffer)) - my/prog-cleanup-indent-max-lines)) - (indent-region (point-min) (point-max))))) - (if (member major-mode my/prog-cleanup-want-tabs-modes) - (tabify (point-min) (point-max)) - (untabify (point-min) (point-max))) - (delete-trailing-whitespace))) + (when (and my/global-prog-clean-mode + (not (member major-mode my/prog-cleanup-excluded-modes)) + (derived-mode-p '(prog-mode)) + (cond + ((and (functionp 'clang-format-buffer) + ; safety valve for undef'd + (derived-mode-p '(c-mode c++-mode))) + (clang-format-buffer)) + (t + (when (and my/prog-cleanup-indent-max-lines + (< (car (buffer-line-statistics buffer)) + my/prog-cleanup-indent-max-lines)) + (indent-region (point-min) (point-max))))) + (if (member major-mode my/prog-cleanup-want-tabs-modes) + (tabify (point-min) (point-max)) + (untabify (point-min) (point-max))) + (delete-trailing-whitespace))))) (defun my/prog-buffer-setup () "Do setup in for code buffers." @@ -106,13 +119,10 @@ reverse. Delete trailing whitespace." (hs-minor-mode 1) (display-fill-column-indicator-mode 1) (smerge-mode 1) - (when (and (derived-mode-p '(c-mode c++-mode)) - (> (car (buffer-line-statistics)) 0)) - (c-guess)) - (add-hook 'before-save-hook - (lambda () - (unless (member major-mode my/prog-cleanup-excluded-modes) - (my/clean-prog-file))))) + (ignore-errors + (when (and (derived-mode-p '(c-mode c++-mode)) + (> (car (buffer-line-statistics)) 0)) + (c-guess)))) (add-hook 'prog-mode-hook 'my/prog-buffer-setup) (defun my/wrap-region-paren () @@ -328,6 +338,8 @@ With ARG, don't save the current layout." (if my/keys-mode (repeat-mode 1) (repeat-mode -1))) + (require 'eshell) + (require 'em-prompt) (put 'other-window 'repeat-map nil) (put 'eshell-previous-prompt 'repeat-map nil) (put 'eshell-next-prompt 'repeat-map nil) @@ -556,6 +568,14 @@ With ARG, don't save the current layout." (emacs-lock-mode 'kill) (iimage-mode 1))))) +(use-package which-func ; headline + :custom + (which-func-display 'header) + (which-func-modes '(c-mode c++-mode)) + :config + (set-face-foreground 'which-func "sky-blue") + (which-function-mode)) + (progn ; vc and related binds (setq vc-follow-symlinks t) (vc-auto-revert-mode 1) -- cgit v1.2.3