diff options
author | bd <bdunahu@colostate.edu> | 2024-03-29 19:11:40 -0600 |
---|---|---|
committer | bd <bdunahu@colostate.edu> | 2024-03-29 19:11:40 -0600 |
commit | bb92d2715f9ea0868ea5edd3ac870bbec9d4f343 (patch) | |
tree | f268e5d0da421f6183cc492d0d834fb7a9c96e09 /.config/emacs/libraries | |
parent | 69aaa9077b9e8aa575ae5681f82e019e8c34ee18 (diff) |
Create autoformatter library, replacing cleanup function
Diffstat (limited to '.config/emacs/libraries')
-rw-r--r-- | .config/emacs/libraries/autoformat.el | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/.config/emacs/libraries/autoformat.el b/.config/emacs/libraries/autoformat.el new file mode 100644 index 0000000..f9914e2 --- /dev/null +++ b/.config/emacs/libraries/autoformat.el @@ -0,0 +1,44 @@ +;; -*- lexical-binding: t; -*- + +(defcustom autoformat-do-untabify t + "If the value is t, then `autoformat-mode' will replace all tabs +with spaces upon saving a file. Else, the function greedily replaces +spaces with tabs." + :type 'boolean + :group 'quality + :safe t) + +(defun autoformat-toggle-space-rule (&optional ARG) + (interactive (list 'toggle)) + (setq autoformat-do-untabify + (if (eq ARG 'toggle) + (not autoformat-do-untabify) + ARG))) + +(defun autoformat--before-save-handler () + "Automatically reformats spacing of the current buffer." + (when autoformat-mode + (delete-trailing-whitespace) + (if autoformat-do-untabify + (untabify (point-min) (point-max)) + (tabify (point-min) (point-max))) + (indent-region (point-min) (point-max)))) + +(defun autoformat--prog-mode-hook () + (add-hook 'before-save-hook #'autoformat--before-save-handler nil t)) + +(define-minor-mode autoformat-mode + "Toggles global autoformat-mode." + :init-value nil + :global t + :group 'quality + :lighter " Autoformatter" + :keymap (list + (cons (kbd "C-z f") #'autoformat-toggle-space-rule)) + + (if (not autoformat-mode) + (add-hook 'prog-mode-hook #'autoformat--prog-mode-hook) + (remove-hook 'prog-mode-hook #'autoformat--prog-mode-hook))) + + +(provide 'autoformat) |