This repository has been archived on 2024-10-22. You can view files and clone it, but cannot push or open issues or pull requests.
spacemacs/layers/+spacemacs/spacemacs-editing/local/spacemacs-whitespace-cleanup/spacemacs-whitespace-cleanup.el
Lucius Hu 46a02ed29b spacemacs-editing: refactor
- Refactored function
- Replaced unnecessary backquote construct with simple quotation
2021-04-04 12:48:21 +02:00

90 lines
3.5 KiB
EmacsLisp

;;; spacemacs-whitespace-cleanup.el --- Cleanup whitspace automatically.
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
;; Keywords: editing, whitespace, spacemacs
;; Version: 0.1
;; This file is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 3, or (at your option)
;; any later version.
;; This file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Commentary:
;; This package adds a minor mode to automatically cleanup whitespace.
;; It requires Spacemacs and depends on the value of the variable
;; `dotspacemacs-whitespace-cleanup' (see documentation in dotfile).
;;; Code:
(defvar spacemacs-whitespace-cleanup-globally nil
"If non nil then `spacemacs-whitespace-cleanup-mode' is applied globally.")
;;;###autoload
(define-minor-mode spacemacs-whitespace-cleanup-mode
"Minor mode to clean whitespace.
The minor mode is based on the value of the dotfile variable
`dotspacemacs-whitespace-cleanup' to determine the behavior
of the cleanup."
:lighter " CleanW"
:group 'spacemacs
(if spacemacs-whitespace-cleanup-mode
(spacemacs-whitespace-cleanup//turn-on
spacemacs-whitespace-cleanup-globally)
(spacemacs-whitespace-cleanup//turn-off
spacemacs-whitespace-cleanup-globally)))
(define-global-minor-mode global-spacemacs-whitespace-cleanup-mode
spacemacs-whitespace-cleanup-mode
(lambda ()
(let ((spacemacs-whitespace-cleanup-globally t))
(spacemacs-whitespace-cleanup-mode)))
:group 'spacemacs
:require 'spacemacs-whitespace-cleanup-mode)
(defun spacemacs-whitespace-cleanup/on-message (&optional global)
"Return a string to display when the mode is activated."
(format "whitespace-cleanup enabled%s (%s)"
(if global " globally" "")
(pcase dotspacemacs-whitespace-cleanup
('all "all whitespace")
('trailing "trailing whitespace")
('changed "changed lines")
(x (user-error
"%s is not a valid option for 'dotspacemacs-whitespace-cleanup'"
x)))))
(defun spacemacs-whitespace-cleanup//turn-on (&optional global)
"Turn on `spacemacs-whitespace-cleanup-mode'."
(pcase dotspacemacs-whitespace-cleanup
('all
(add-hook 'before-save-hook 'whitespace-cleanup nil (not global)))
('trailing
(add-hook 'before-save-hook 'delete-trailing-whitespace nil (not global)))
('changed
(when (fboundp 'ws-butler-mode)
(if global (ws-butler-global-mode) (ws-butler-mode))))))
(defun spacemacs-whitespace-cleanup//turn-off (&optional global)
"Turn off `spacemacs-whitespace-cleanup-mode'."
(pcase dotspacemacs-whitespace-cleanup
('all
(remove-hook 'before-save-hook 'whitespace-cleanup (not global)))
('trailing
(remove-hook 'before-save-hook 'delete-trailing-whitespace (not global)))
('changed
(when (fboundp 'ws-butler-mode)
(if global (ws-butler-global-mode -1) (ws-butler-mode -1))))))
(provide 'spacemacs-whitespace-cleanup)
;;; spacemacs-whitespace-cleanup.el ends here.