From 33f5bc1cbc22e6b6b600f219aab0fdc4f987eec7 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 10 Mar 2013 17:39:11 -0400 Subject: [PATCH] * lisp/whitespace.el (whitespace-enable-predicate): New variable. (whitespace-enable-predicate): Use it. --- lisp/ChangeLog | 3 +++ lisp/whitespace.el | 44 +++++++++++++++++++++++--------------------- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8d2fdc9fcd6..4add4d9383f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-03-10 Stefan Monnier + * whitespace.el (whitespace-enable-predicate): New variable. + (whitespace-enable-predicate): Use it. + * comint.el (comint-send-input, comint-snapshot-last-prompt) (comint-output-filter, comint-update-fence): Use with-silent-modifications. diff --git a/lisp/whitespace.el b/lisp/whitespace.el index ed7edbc5a68..975b89f2fc2 100644 --- a/lisp/whitespace.el +++ b/lisp/whitespace.el @@ -1145,29 +1145,31 @@ See also `whitespace-style', `whitespace-newline' and (unless whitespace-mode (whitespace-turn-off))))))) +(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)) + ;; ...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. + (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 (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) ?*) - ;; except the scratch buffer. - (not (string= (buffer-name) "*scratch*"))) - ;; Otherwise, turn on whitespace mode. - (whitespace-turn-on))))) - + (when (funcall whitespace-enable-predicate) + (whitespace-turn-on))) ;;;###autoload (define-minor-mode global-whitespace-newline-mode -- 2.11.4.GIT