GNU bug report logs -
#13837
24.2; Make it possible to turn whitespace-mode only when there are no existing problems
Previous Next
Reported by: Reuben Thomas <rrt <at> sc3d.org>
Date: Wed, 27 Feb 2013 21:45:02 UTC
Severity: wishlist
Found in version 24.2
Fixed in version 25.1
Done: Glenn Morris <rgm <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #11 received at 13837 <at> debbugs.gnu.org (full text, mbox):
> Unfortunately, my current solution is non-optional: it requires
> modifying whitespace-turn-on-if-enabled. This could be fixed, for
> example by adding a preference.
Indeed. I suggest to add a whitespace-enable-predicate hook.
Then you can do
(defun whitespace-check-cleanliness ()
(not (whitespace-test-region (point-min) (point-max))))
(add-function :after-while whitespace-enable-predicate
#'whitespace-check-cleanliness)
> If maintainers are interested in adding this feature, I'd be happy to
> take guidance on how to modify my code into a patch (currently it just
> sits in my .emacs).
You can start with the patch below, and refactor the
whitespace-report-region so as to provide whitespace-test-region.
Your .emacs can then be reduced to the above 4 lines, and if you add the
whitespace-check-cleanliness function to whitespace.el that gets reduced
to just 2 lines.
Stefan
=== modified file 'lisp/whitespace.el'
--- lisp/whitespace.el 2013-01-11 23:08:55 +0000
+++ lisp/whitespace.el 2013-02-28 16:19:01 +0000
@@ -1145,29 +1145,31 @@
(unless whitespace-mode
(whitespace-turn-off)))))))
-
-(defun whitespace-turn-on-if-enabled ()
- (when (cond
+(defvar whitespace-enable-predicate
+ (lambda ()
+ (and (cond
((eq whitespace-global-modes t))
((listp whitespace-global-modes)
(if (eq (car-safe whitespace-global-modes) 'not)
(not (memq major-mode (cdr whitespace-global-modes)))
(memq major-mode whitespace-global-modes)))
(t nil))
- (let (inhibit-quit)
- ;; Don't turn on whitespace mode if...
- (or
- ;; ...we don't have a display (we're running a batch job)
- noninteractive
- ;; ...or if the buffer is invisible (name starts with a space)
- (eq (aref (buffer-name) 0) ?\ )
- ;; ...or if the buffer is temporary (name starts with *)
- (and (eq (aref (buffer-name) 0) ?*)
+ ;; ...we have a display (we're running a batch job)
+ (not noninteractive)
+ ;; ...the buffer is not internal (name starts with a space)
+ (not (eq (aref (buffer-name) 0) ?\ ))
+ ;; ...the buffer is not special (name starts with *)
+ (or (not (eq (aref (buffer-name) 0) ?*))
;; except the scratch buffer.
- (not (string= (buffer-name) "*scratch*")))
- ;; Otherwise, turn on whitespace mode.
- (whitespace-turn-on)))))
+ (string= (buffer-name) "*scratch*"))))
+ "Predicate to decide which buffers obey `global-whitespace-mode'.
+This function is called with no argument and should return non-nil
+if the current buffer should obey `global-whitespace-mode'.
+This variable is normally modified via `add-function'.")
+(defun whitespace-turn-on-if-enabled ()
+ (when (funcall whitespace-enable-predicate)
+ (whitespace-turn-on)))
;;;###autoload
(define-minor-mode global-whitespace-newline-mode
This bug report was last modified 10 years and 235 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.