From bb92d2715f9ea0868ea5edd3ac870bbec9d4f343 Mon Sep 17 00:00:00 2001 From: bd Date: Fri, 29 Mar 2024 19:11:40 -0600 Subject: Create autoformatter library, replacing cleanup function --- .config/emacs/libraries/autoformat.el | 44 +++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .config/emacs/libraries/autoformat.el (limited to '.config/emacs/libraries/autoformat.el') 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) -- cgit v1.2.3