branch: elpa/ws-butler commit d25953806615f8523c7544f6d14369dbae3c2758 Author: Sean Whitton <spwhit...@spwhitton.name> Commit: Sean Whitton <spwhit...@spwhitton.name>
Rewrite docstrings, reformat default values --- ws-butler.el | 88 +++++++++++++++++++++++++----------------------------------- 1 file changed, 37 insertions(+), 51 deletions(-) diff --git a/ws-butler.el b/ws-butler.el index db4b00c1a6..7f1d0af1be 100644 --- a/ws-butler.el +++ b/ws-butler.el @@ -1,6 +1,7 @@ ;;; ws-butler.el --- Unobtrusively remove trailing whitespace -*- lexical-binding:t -*- ;; Copyright (C) 2013 Le Wang <l26w...@gmail.com> +;; Copyright (C) 2025 Sean Whitton <spwhit...@spwhitton.name> ;; Author: Le Wang <l26w...@gmail.com> ;; Maintainer: Sean Whitton <spwhit...@spwhitton.name> @@ -35,6 +36,7 @@ ;; Ver 1.0 YYYY/MM/DD Sean Whitton ;; Bump to version 1.0: core functionality not expected to change. ;; Move customisation group from `convenience' to `text'. +;; Rewrite docstrings. ;;; Code: @@ -42,62 +44,54 @@ (require 'cl-lib)) (defgroup ws-butler nil - "Unobtrusively whitespace deletion like a butler." + "Unobtrusive whitespace deletion, like a butler." :group 'text) -(defcustom ws-butler-keep-whitespace-before-point - t - "Keep whitespace at current point after save. - -That is to say, if whitespace around is trimmed, perform the -cleanup only on disk, don't move the point in the buffer. - -i.e. only the \"virtual\" space is preserved in the buffer." +(defcustom ws-butler-keep-whitespace-before-point t + "If non-nil, restore to the buffer trimmed whitespace right before point. +The effect is that cleanup of whitespace right before point is performed +on only the visited file on disk, while point in the buffer does not move. +This means that point does not jump when whitespace is trimmed." :type 'boolean :group 'ws-butler) -(defcustom ws-butler-convert-leading-tabs-or-spaces - nil - "Make leading whitespace be tabs or spaces. - -If `indent-tabs-mode' is non-nil, call `tabify', else call -`untabify'. Do neither if `smart-tabs-mode' is enabled for this -buffer. This is off by default because it's unwanted if you -occasionally edit files where leading whitespace should not be -changed in this specific way." - +(defcustom ws-butler-convert-leading-tabs-or-spaces nil + "If non-nil, apply `indent-tabs-mode' to leading indentation when saving. +If `indent-tabs-mode' is non-nil, convert leading indentation to use tabs, +like `tabify'. Otherwise, replace all tabs with spaces, like `untabify'. +If `smart-tabs-mode' is enabled, these conversions are suppressed." :type 'boolean :group 'ws-butler) (defcustom ws-butler-global-exempt-modes '(special-mode minibuffer-mode + comint-mode term-mode eshell-mode + diff-mode markdown-mode) - "Don't enable ws-butler in modes that inherit from these. - -This should be a list of trailing whitespace significant major-modes." + "Trailing whitespace-significant major modes. +`ws-butler-mode' will not activate in these modes or in their derivatives." :type '(repeat (symbol :tag "Major mode")) :group 'ws-butler) (defcustom ws-butler-trim-predicate (lambda (_beg _end) t) - "Return true for regions that should be trimmed. - -Expects 2 arguments - beginning and end of a region. -Should return a truthy value for regions that should -have their trailing whitespace trimmed. -When not defined all regions are trimmed." + "Function to exclude regions from whitespace trimming. +Called with two arguments delimiting a region of the current buffer. +If the function returns non-nil, trailing whitespace in that region will be +trimmed. The default is to trim everywhere." :type 'function :group 'ws-butler) (defvar ws-butler-saved) (defmacro ws-butler-with-save (&rest forms) - "Run FORMS with restriction and excursion saved once." + "Like `save-excursion' and `save-restriction', but only once. +If within the scope of another use of this macro, just evaluate FORMS." (declare (debug (body))) `(if (and (boundp 'ws-butler-saved) ws-butler-saved) @@ -109,8 +103,8 @@ When not defined all regions are trimmed." ,@forms))))) (defun ws-butler-trim-eob-lines () - "Trim lines at EOB in efficient manner. -Also see `require-final-newline'." + "Efficiently trim blank lines at end-of-buffer. +Affected by `require-final-newline', which see." (ws-butler-with-save (widen) ;; we need to clean up multiple blank lines at EOF to just one. Or if @@ -133,7 +127,7 @@ Also see `require-final-newline'." (replace-match "")))) (defun ws-butler-maybe-trim-eob-lines (last-modified-pos) - "Trim newlines at EOB if LAST-MODIFIED-POS is inside the excess newlines." + "Trim empty lines at end-of-buffer if LAST-MODIFIED-POS is within them." (interactive (list nil)) (unless buffer-read-only (unless last-modified-pos @@ -154,10 +148,8 @@ Also see `require-final-newline'." nil) (defun ws-butler-clean-region (beg end) - "Delete trailing blanks in region BEG END. - -If `indent-tabs-mode' is nil, then tabs in indentation are -replaced by spaces, and vice versa if t." + "Delete trailing whitespace in the region delimited by BEG and END. +Respects `ws-butler-convert-leading-tabs-or-spaces', which see." (interactive "*r") (ws-butler-with-save (narrow-to-region beg end) @@ -191,12 +183,10 @@ replaced by spaces, and vice versa if t." This is the key to the virtual spaces preserving indentation mechanism.") (make-variable-buffer-local 'ws-butler-presave-coord) +;; Call FUNC with each changed region (START-POSITION END-POSITION). +;; This simply uses an end marker since we are modifying the buffer in place. +;; See also `hilit-chg-map-changes'. (defun ws-butler-map-changes (func &optional start-position end-position) - "Call FUNC with each changed region (START-POSITION END-POSITION). - -This simply uses an end marker since we are modifying the buffer -in place." - ;; See `hilit-chg-map-changes'. (let ((start (or start-position (point-min))) (limit (copy-marker (or end-position (point-max)))) prop end) @@ -210,10 +200,7 @@ in place." (defun ws-butler-before-save () "Trim white space before save. - -Setting `ws-butler-keep-whitespace-before-point' will also -ensure point doesn't jump due to white space trimming." - +Respects `ws-butler-keep-whitespace-before-point', which see." ;; save data to restore later (when ws-butler-keep-whitespace-before-point (ws-butler-with-save @@ -237,14 +224,14 @@ ensure point doesn't jump due to white space trimming." (ws-butler-maybe-trim-eob-lines last-end))) (defun ws-butler-clear-properties () - "Clear all ws-butler text properties in buffer." + "Clear all `ws-butler-mode' text properties in the buffer." (with-silent-modifications (ws-butler-map-changes (lambda (_prop start end) (remove-list-of-text-properties start end '(ws-butler-chg)))))) (defun ws-butler-after-change (beg end length-before) "Update ws-butler text properties. -See `after-change-functions' for explanation of BEG, END & LENGTH-BEFORE." +The arguments are as to members of `after-change-functions', which see." (let ((type (if (and (= beg end) (> length-before 0)) 'delete 'chg))) @@ -281,10 +268,9 @@ See `after-change-functions' for explanation of BEG, END & LENGTH-BEFORE." ;;;###autoload (define-minor-mode ws-butler-mode - "White space cleanup, without obtrusive white space removal. - -Whitespaces at EOL and EOF are trimmed upon file save, and only -for lines modified by you." + "Whitespace cleanup without obtrusive whitespace removal. +Whitespaces at end-of-line and end-of-buffer are trimmed upon save, but +only for lines modified by you." :lighter " wb" :group 'ws-butler (if ws-butler-mode