- Only lines edited get meaningless whitespace trimmed (e.g. end-of-line).
- Trimming only happens when saving.
"Unobtrusive" is doing double duty here.
- ws-butleris keeping frivolous whitespace at bay in the background.- The user doesn't enable show-trailing-whitespace, seeing whitespace is wasted mental energy.
 
- The user doesn't enable 
- In a cooperative environment, the user is considerate of other people's time by not making PRs that contain meaningless whitespace change.
By default, ws-butler preserves "virtual spaces" in front of point if necessary. The file on disk is cleaned up however.
This can be disabled with ws-butler-keep-whitespace-before-point.
There might be lines you don't want to get trimmed, e.g. spaces in multi-line
strings. The behavior can be customized through ws-butler-trim-predicate. This
variable should hold a function that expects 2 arguments (region beginning and
end) and should return true only for regions that one wants to get trimmed. As
an example
(setq ws-butler-trim-predicate
      (lambda (beg end)
        (not (eq 'font-lock-string-face
                 (get-text-property end 'face)))))
(use-package ws-butler :ensure t :hook (prog-mode . ws-butler-mode))
To use ws-butler, require it and add ws-butler-mode as a hook on any mode where you would like it to be enabled. For example, to enable for all programming language modes, add this to your .emacs:
(require 'ws-butler)
(add-hook 'prog-mode-hook #'ws-butler-mode)
Alternatively, you can use ws-butler-global-mode to turn it on everywhere.
apt-get install elpa-ws-butler
- 
I started by trimming all spaces at EOL in source code in a "write-file-hook" when I started programming. It seemed like a great idea. 
- 
Then I got a job working on a code base where no one else trimmed spaces, so my commits became super noisy. I wanted to stop being the "white space" police, so switched to ws-trim. - ws-trim works in a post-command-hookand trims white space while you edit.
- This was too eager for me. For example, I would stop and scroll away to look at some code, and when I get back to continue, my indentation is gone.
- It caused some problems with other customizations which also rely on
post-command-hook.
 
- ws-trim works in a 
- 
I started experimenting with using highlight-changes-modeto trim only lines I touch on save.
- 
Now, the dependency on highlight-changes-modehas been removed and we handle change changing through text properties ourselves.
