[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/ws-butler a5add4ea85 39/64: Merge branch 'remove-highlight
From: |
Stefan Kangas |
Subject: |
[nongnu] elpa/ws-butler a5add4ea85 39/64: Merge branch 'remove-highlight-changes-mode' |
Date: |
Fri, 31 Dec 2021 11:09:31 -0500 (EST) |
branch: elpa/ws-butler
commit a5add4ea852b7e414a258e54b786324e88f9fc58
Merge: d62694365c 0fbba548ff
Author: Le Wang <le.wang@agworld.com.au>
Commit: Le Wang <le.wang@agworld.com.au>
Merge branch 'remove-highlight-changes-mode'
---
README.md | 3 +++
ws-butler.el | 56 +++++++++++++++++++++++++++++++++-----------------------
2 files changed, 36 insertions(+), 23 deletions(-)
diff --git a/README.md b/README.md
index 0d5a5005ef..d02f45c9b4 100644
--- a/README.md
+++ b/README.md
@@ -35,6 +35,9 @@ the data on disk has been cleaned up (revert the buffer to
confirm).
3. I started experimenting with using `highlight-changes-mode` to trim only
lines I touch on save.
+4. Now, the dependency to `highlight-changes-mode` has been removed and we
+ handle change changing through text properties ourselves.
+
## This is the result
diff --git a/ws-butler.el b/ws-butler.el
index b3c424479a..f500ebe25d 100644
--- a/ws-butler.el
+++ b/ws-butler.el
@@ -10,7 +10,7 @@
;; Maintainer: Le Wang
;; Created: Sat Jan 5 16:49:23 2013 (+0800)
-;; Version: 0.2
+;; Version: 0.3
;; Last-Updated:
;; By:
;; URL: https://github.com/lewang/ws-butler
@@ -54,8 +54,7 @@
;;; Code:
(eval-when-compile
- (require 'cl)
- (require 'hilit-chg))
+ (require 'cl))
(defgroup ws-butler nil
"Unobtrusively whitespace deletion like a butler."
@@ -163,19 +162,17 @@ This is the key to the virtual spaces preserving
indentation mechanism.")
(make-variable-buffer-local 'ws-butler-presave-coord)
(defun ws-butler-map-changes (func &optional start-position end-position)
- "See `hilit-chg-map-changes'.
-
-Call FUNC with each changed region (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)
(while (and start (< start limit))
- (setq prop (get-text-property start 'hilit-chg))
- (setq end (text-property-not-all start limit 'hilit-chg prop))
+ (setq prop (get-text-property start 'ws-butler-chg))
+ (setq end (text-property-not-all start limit 'ws-butler-chg prop))
(if prop
(funcall func prop start (or end limit)))
(setq start end))
@@ -207,12 +204,31 @@ ensure point doesn't jump due to white space trimming."
(setq last-end end)))
(ws-butler-maybe-trim-eob-lines last-end)))
+(defun ws-butler-clear-properties ()
+ "Clear all ws-butler text properties in 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)
+ (let ((type (if (and (= beg end) (> length-before 0))
+ 'delete
+ 'chg)))
+ (if undo-in-progress
+ ;; add back deleted text during undo
+ (if (and (zerop length-before)
+ (> end beg)
+ (eq (get-text-property end 'ws-butler-chg) 'delete))
+ (remove-list-of-text-properties end (1+ end) '(ws-butler-chg)))
+ (with-silent-modifications
+ (when (eq type 'delete)
+ (setq end (min (+ end 1) (point-max))))
+ (put-text-property beg end 'ws-butler-chg type)))))
+
(defun ws-butler-after-save ()
"Restore trimmed whitespace before point."
- ;; reset text properties
- (highlight-changes-mode 0)
- (highlight-changes-mode 1)
+ (ws-butler-clear-properties)
;; go to saved line+col
(when ws-butler-presave-coord
(let (remaining-lines)
@@ -231,27 +247,21 @@ ensure point doesn't jump due to white space trimming."
;;;###autoload
(define-minor-mode ws-butler-mode
- "White space cleanup mode implemented on top of `highlight-changes-mode'.
-
-With this mode in operation, it's not possible to rotate changes,
-etc.
+ "White space cleanup, without obtrusive white space removal.
-Change visibility can be toggled with
-`highlight-changes-visible-mode', but changes get reset on every
-save."
+Whitespaces at EOL and EOF are trimmed upon file save, and only
+for lines modified by you."
:lighter " wb"
:group 'ws-butler
(if ws-butler-mode
(progn
- (require 'hilit-chg)
- (setq highlight-changes-visibility-initial-state nil)
- (highlight-changes-mode 1)
+ (add-hook 'after-change-functions 'ws-butler-after-change t t)
(add-hook 'before-save-hook 'ws-butler-before-save t t)
(add-hook 'after-save-hook 'ws-butler-after-save t t)
(add-hook 'before-revert-hook 'ws-butler-before-revert t t)
(add-hook 'after-revert-hook 'ws-butler-after-save t t)
(add-hook 'edit-server-done-hook 'ws-butler-before-save t t))
- (highlight-changes-mode 0)
+ (remove-hook 'after-change-functions 'ws-butler-after-change t)
(remove-hook 'before-save-hook 'ws-butler-before-save t)
(remove-hook 'after-save-hook 'ws-butler-after-save t)
(remove-hook 'before-revert-hook 'ws-butler-before-revert t)
- [nongnu] elpa/ws-butler 11311538f6 50/64: fix up tests, simplify predicate code a bit., (continued)
- [nongnu] elpa/ws-butler 11311538f6 50/64: fix up tests, simplify predicate code a bit., Stefan Kangas, 2021/12/31
- [nongnu] elpa/ws-butler a998a23ee8 41/64: Clarify ws-butler-keep-whitespace-before-point docs., Stefan Kangas, 2021/12/31
- [nongnu] elpa/ws-butler 9b40da8428 46/64: add exemptions to ws-butler-global-mode, Stefan Kangas, 2021/12/31
- [nongnu] elpa/ws-butler e5fc878904 54/64: disable changing leading whitespace by default, Stefan Kangas, 2021/12/31
- [nongnu] elpa/ws-butler 52321b99be 59/64: Merge pull request #29 from alevy03/master, Stefan Kangas, 2021/12/31
- [nongnu] elpa/ws-butler 323b651dd7 55/64: bump version, Stefan Kangas, 2021/12/31
- [nongnu] elpa/ws-butler a02607ef63 33/64: Some minor grammatical fixes, Stefan Kangas, 2021/12/31
- [nongnu] elpa/ws-butler f6ac856b82 13/64: clean up newlines at EOB when appropriate, Stefan Kangas, 2021/12/31
- [nongnu] elpa/ws-butler 81143ac737 25/64: Add customization for virtual space preservation., Stefan Kangas, 2021/12/31
- [nongnu] elpa/ws-butler 93409c1ca7 51/64: polyfill for setq-local, Stefan Kangas, 2021/12/31
- [nongnu] elpa/ws-butler a5add4ea85 39/64: Merge branch 'remove-highlight-changes-mode',
Stefan Kangas <=
- [nongnu] elpa/ws-butler 7e2f32dcfc 45/64: Merge pull request #22 from spwhitton/apt-get, Stefan Kangas, 2021/12/31
- [nongnu] elpa/ws-butler 9e7449445b 48/64: Merge branch 'global-mode-exemptions', Stefan Kangas, 2021/12/31
- [nongnu] elpa/ws-butler 8ccf6a0b74 61/64: Merge pull request #31 from hlissner/patch-1, Stefan Kangas, 2021/12/31
- [nongnu] elpa/ws-butler c907dde343 58/64: Change example config to use prog-mode-hook., Stefan Kangas, 2021/12/31