Replace delete-trailing-whitespace with ws-butler

ws-butler only strips trailing spaces on lines that have been modified.

+ ws-butler is disabled if editorconfig enables
  trim_trailing_whitespace, which resorts to delete-trailing-whitespace
  instead.
+ Updates doom|(enable|disable)-delete-trailing-whitespace hooks to use
  ws-butler-mode.
This commit is contained in:
Henrik Lissner 2018-08-31 13:56:50 +02:00
parent a33165d47a
commit d80e79203a
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
4 changed files with 20 additions and 9 deletions

View file

@ -283,12 +283,12 @@ with weak native support."
(defun doom|enable-delete-trailing-whitespace () (defun doom|enable-delete-trailing-whitespace ()
"Enables the automatic deletion of trailing whitespaces upon file save. "Enables the automatic deletion of trailing whitespaces upon file save.
i.e. adds `delete-trailing-whitespace' to `write-file-functions', buffer-locally." i.e. enables `ws-butler-mode' in the current buffer."
(add-hook 'write-file-functions #'delete-trailing-whitespace nil t)) (ws-butler-mode +1))
;;;###autoload ;;;###autoload
(defun doom|disable-delete-trailing-whitespace () (defun doom|disable-delete-trailing-whitespace ()
"Disables the automatic deletion of trailing whitespaces upon file save. "Disables the automatic deletion of trailing whitespaces upon file save.
i.e. removes `delete-trailing-whitespace' from `write-file-functions'." i.e. disables `ws-butler-mode' in the current buffer."
(remove-hook 'write-file-functions #'delete-trailing-whitespace t)) (ws-butler-mode -1))

View file

@ -81,11 +81,6 @@ fundamental-mode) for performance sake."
(add-hook 'after-save-hook #'executable-make-buffer-file-executable-if-script-p) (add-hook 'after-save-hook #'executable-make-buffer-file-executable-if-script-p)
;; Deleting trailing whitespace is on by default, but must be set on
;; write-file-functions, so that editorconfig can see it (so it doesn't add it
;; redundantly and can remove it when needed).
(add-hook 'write-file-functions #'delete-trailing-whitespace)
;; revert buffers for changed files ;; revert buffers for changed files
(def-package! autorevert (def-package! autorevert
:after-call after-find-file :after-call after-find-file
@ -300,5 +295,12 @@ savehist file."
[remap describe-variable] #'helpful-variable [remap describe-variable] #'helpful-variable
[remap describe-key] #'helpful-key) [remap describe-key] #'helpful-key)
;; `ws-butler' --- a better `delete-trailing-whitespaces'
(def-package! ws-butler
:after-call (after-find-file)
:config
(nconc ws-butler-global-exempt-modes '(special-mode comint-mode term-mode eshell-mode))
(ws-butler-global-mode))
(provide 'core-editor) (provide 'core-editor)
;;; core-editor.el ends here ;;; core-editor.el ends here

View file

@ -32,6 +32,7 @@
(package! pcre2el) (package! pcre2el)
(package! smartparens) (package! smartparens)
(package! undo-tree) (package! undo-tree)
(package! ws-butler)
;; core-projects.el ;; core-projects.el
(package! projectile) (package! projectile)

View file

@ -42,7 +42,15 @@ extension, try to guess one."
(apply orig-fn args))) (apply orig-fn args)))
(advice-add #'editorconfig-call-editorconfig-exec :around #'doom*editorconfig-smart-detection) (advice-add #'editorconfig-call-editorconfig-exec :around #'doom*editorconfig-smart-detection)
(defun +editorconfig|disable-ws-butler-maybe (props)
"Disable `ws-butler-mode' if trim_trailing_whitespace is true."
(when (equal (gethash 'trim_trailing_whitespace props) "true")
(ws-butler-mode -1)))
(add-hook 'editorconfig-custom-hooks #'+editorconfig|disable-ws-butler-maybe)
(defun +editorconfig|disable-indent-detection (props) (defun +editorconfig|disable-indent-detection (props)
"Inhibit `dtrt-indent' if an explicit indent_style and indent_size is
specified by editorconfig."
(when (or (gethash 'indent_style props) (when (or (gethash 'indent_style props)
(gethash 'indent_size props)) (gethash 'indent_size props))
(setq doom-inhibit-indent-detection t))) (setq doom-inhibit-indent-detection t)))