38436
|
1 ;;; whitespace.el --- warn about and clean bogus whitespaces in the file
|
25582
|
2
|
34304
|
3 ;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
|
25582
|
4
|
29333
|
5 ;; Author: Rajesh Vaidheeswarran <rv@gnu.org>
|
25582
|
6 ;; Keywords: convenience
|
|
7
|
|
8 ;; This file is part of GNU Emacs.
|
|
9
|
|
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
|
|
11 ;; it under the terms of the GNU General Public License as published by
|
|
12 ;; the Free Software Foundation; either version 2, or (at your option)
|
|
13 ;; any later version.
|
|
14
|
|
15 ;; GNU Emacs is distributed in the hope that it will be useful,
|
|
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
18 ;; GNU General Public License for more details.
|
|
19
|
|
20 ;; You should have received a copy of the GNU General Public License
|
|
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
|
|
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
23 ;; Boston, MA 02111-1307, USA.
|
|
24
|
|
25 ;;; Commentary:
|
51542
|
26 ;;
|
|
27 ;; URL: http://www.dsmit.com/lisp/
|
|
28 ;;
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
29 ;; The whitespace library is intended to find and help fix five different types
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
30 ;; of whitespace problems that commonly exist in source code.
|
51542
|
31 ;;
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
32 ;; 1. Leading space (empty lines at the top of a file).
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
33 ;; 2. Trailing space (empty lines at the end of a file).
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
34 ;; 3. Indentation space (8 or more spaces at beginning of line, that should be
|
52672
d4d213cfb340
whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
35 ;; replaced with TABS).
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
36 ;; 4. Spaces followed by a TAB. (Almost always, we never want that).
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
37 ;; 5. Spaces or TABS at the end of a line.
|
51542
|
38 ;;
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
39 ;; Whitespace errors are reported in a buffer, and on the modeline.
|
51542
|
40 ;;
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
41 ;; Modeline will show a W:<x>!<y> to denote a particular type of whitespace,
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
42 ;; where `x' and `y' can be one (or more) of:
|
51542
|
43 ;;
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
44 ;; e - End-of-Line whitespace.
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
45 ;; i - Indentation whitespace.
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
46 ;; l - Leading whitespace.
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
47 ;; s - Space followed by Tab.
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
48 ;; t - Trailing whitespace.
|
51542
|
49 ;;
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
50 ;; If any of the whitespace checks is turned off, the modeline will display a
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
51 ;; !<y>.
|
51542
|
52 ;;
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
53 ;; (since (3) is the most controversial one, here is the rationale: Most
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
54 ;; terminal drivers and printer drivers have TAB configured or even
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
55 ;; hardcoded to be 8 spaces. (Some of them allow configuration, but almost
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
56 ;; always they default to 8.)
|
51542
|
57 ;;
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
58 ;; Changing `tab-width' to other than 8 and editing will cause your code to
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
59 ;; look different from within Emacs, and say, if you cat it or more it, or
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
60 ;; even print it.
|
51542
|
61 ;;
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
62 ;; Almost all the popular programming modes let you define an offset (like
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
63 ;; c-basic-offset or perl-indent-level) to configure the offset, so you
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
64 ;; should never have to set your `tab-width' to be other than 8 in all
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
65 ;; these modes. In fact, with an indent level of say, 4, 2 TABS will cause
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
66 ;; Emacs to replace your 8 spaces with one \t (try it). If vi users in
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
67 ;; your office complain, tell them to use vim, which distinguishes between
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
68 ;; tabstop and shiftwidth (vi equivalent of our offsets), and also ask them
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
69 ;; to set smarttab.)
|
51542
|
70 ;;
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
71 ;; All the above have caused (and will cause) unwanted codeline integration and
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
72 ;; merge problems.
|
51542
|
73 ;;
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
74 ;; whitespace.el will complain if it detects whitespaces on opening a file, and
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
75 ;; warn you on closing a file also (in case you had inserted any
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
76 ;; whitespaces during the process of your editing).
|
51542
|
77 ;;
|
25582
|
78 ;; Exported functions:
|
51542
|
79 ;;
|
25582
|
80 ;; `whitespace-buffer' - To check the current buffer for whitespace problems.
|
|
81 ;; `whitespace-cleanup' - To cleanup all whitespaces in the current buffer.
|
25625
|
82 ;; `whitespace-region' - To check between point and mark for whitespace
|
|
83 ;; problems.
|
|
84 ;; `whitespace-cleanup-region' - To cleanup all whitespaces between point
|
|
85 ;; and mark in the current buffer.
|
25582
|
86
|
|
87 ;;; Code:
|
|
88
|
52672
d4d213cfb340
whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
89 (defvar whitespace-version "3.4" "Version of the whitespace library.")
|
25625
|
90
|
|
91 (defvar whitespace-all-buffer-files nil
|
|
92 "An associated list of buffers and files checked for whitespace cleanliness.
|
|
93
|
|
94 This is to enable periodic checking of whitespace cleanliness in the files
|
|
95 visited by the buffers.")
|
|
96
|
|
97 (defvar whitespace-rescan-timer nil
|
|
98 "Timer object used to rescan the files in buffers that have been modified.")
|
25582
|
99
|
26245
|
100 ;; Tell Emacs about this new kind of minor mode
|
|
101 (defvar whitespace-mode nil
|
|
102 "Non-nil when Whitespace mode (a minor mode) is enabled.")
|
|
103 (make-variable-buffer-local 'whitespace-mode)
|
|
104 (put 'whitespace-mode 'permanent-local nil)
|
|
105
|
|
106 (defvar whitespace-mode-line nil
|
|
107 "String to display in the mode line for Whitespace mode.")
|
|
108 (make-variable-buffer-local 'whitespace-mode-line)
|
|
109 (put 'whitespace-mode-line 'permanent-local nil)
|
|
110
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
111 (defvar whitespace-check-buffer-leading nil
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
112 "Test leading whitespace for file in current buffer if t")
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
113 (make-variable-buffer-local 'whitespace-check-buffer-leading)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
114 (put 'whitespace-check-buffer-leading 'permanent-local nil)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
115
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
116 (defvar whitespace-check-buffer-trailing nil
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
117 "Test trailing whitespace for file in current buffer if t")
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
118 (make-variable-buffer-local 'whitespace-check-buffer-trailing)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
119 (put 'whitespace-check-buffer-trailing 'permanent-local nil)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
120
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
121 (defvar whitespace-check-buffer-indent nil
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
122 "Test indentation whitespace for file in current buffer if t")
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
123 (make-variable-buffer-local 'whitespace-check-buffer-indent)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
124 (put 'whitespace-check-buffer-indent 'permanent-local nil)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
125
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
126 (defvar whitespace-check-buffer-spacetab nil
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
127 "Test Space-followed-by-TABS whitespace for file in current buffer if t")
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
128 (make-variable-buffer-local 'whitespace-check-buffer-spacetab)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
129 (put 'whitespace-check-buffer-spacetab 'permanent-local nil)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
130
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
131 (defvar whitespace-check-buffer-ateol nil
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
132 "Test end-of-line whitespace for file in current buffer if t")
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
133 (make-variable-buffer-local 'whitespace-check-buffer-ateol)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
134 (put 'whitespace-check-buffer-ateol 'permanent-local nil)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
135
|
42013
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
136 (defvar whitespace-highlighted-space nil
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
137 "The variable to store the extent to highlight")
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
138 (make-variable-buffer-local 'whitespace-highlighted-space)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
139 (put 'whitespace-highlighted-space 'permanent-local nil)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
140
|
26253
|
141 ;; For flavors of Emacs which don't define `defgroup' and `defcustom'.
|
25625
|
142 (eval-when-compile
|
26253
|
143 (if (not (fboundp 'defgroup))
|
|
144 (defmacro defgroup (sym memb doc &rest args)
|
|
145 "Null macro for defgroup in all versions of Emacs that don't define
|
|
146 defgroup"
|
|
147 t))
|
|
148 (if (not (fboundp 'defcustom))
|
|
149 (defmacro defcustom (sym val doc &rest args)
|
|
150 "Macro to alias defcustom to defvar in all versions of Emacs that
|
|
151 don't define defcustom"
|
|
152 `(defvar ,sym ,val ,doc))))
|
25582
|
153
|
42013
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
154 (if (fboundp 'make-overlay)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
155 (progn
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
156 (defalias 'whitespace-make-overlay 'make-overlay)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
157 (defalias 'whitespace-overlay-put 'overlay-put)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
158 (defalias 'whitespace-delete-overlay 'delete-overlay)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
159 (defalias 'whitespace-overlay-start 'overlay-start)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
160 (defalias 'whitespace-overlay-end 'overlay-end)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
161 (defalias 'whitespace-mode-line-update 'force-mode-line-update))
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
162 (defalias 'whitespace-make-overlay 'make-extent)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
163 (defalias 'whitespace-overlay-put 'set-extent-property)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
164 (defalias 'whitespace-delete-overlay 'delete-extent)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
165 (defalias 'whitespace-overlay-start 'extent-start)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
166 (defalias 'whitespace-overlay-end 'extent-end)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
167 (defalias 'whitespace-mode-line-update 'redraw-modeline))
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
168
|
32501
|
169 (if (featurep 'xemacs)
|
25582
|
170 (defgroup whitespace nil
|
25625
|
171 "Check for and fix five different types of whitespaces in source code."
|
25582
|
172 ;; Since XEmacs doesn't have a 'convenience group, use the next best group
|
|
173 ;; which is 'editing?
|
51542
|
174 :link '(emacs-commentary-link "whitespace.el")
|
32501
|
175 :group 'editing)
|
|
176 (defgroup whitespace nil
|
|
177 "Check for and fix five different types of whitespaces in source code."
|
|
178 :version "21.1"
|
51542
|
179 :link '(emacs-commentary-link "whitespace.el")
|
32501
|
180 :group 'convenience))
|
25582
|
181
|
25724
|
182 (defcustom whitespace-check-leading-whitespace t
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
183 "Flag to check leading whitespace. This is the global for the system.
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
184 It can be overriden by setting a buffer local variable
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
185 `whitespace-check-buffer-leading'"
|
25724
|
186 :type 'boolean
|
|
187 :group 'whitespace)
|
|
188
|
|
189 (defcustom whitespace-check-trailing-whitespace t
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
190 "Flag to check trailing whitespace. This is the global for the system.
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
191 It can be overriden by setting a buffer local variable
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
192 `whitespace-check-buffer-trailing'"
|
25724
|
193 :type 'boolean
|
|
194 :group 'whitespace)
|
|
195
|
|
196 (defcustom whitespace-check-spacetab-whitespace t
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
197 "Flag to check space followed by a TAB. This is the global for the system.
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
198 It can be overriden by setting a buffer local variable
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
199 `whitespace-check-buffer-spacetab'"
|
25724
|
200 :type 'boolean
|
|
201 :group 'whitespace)
|
|
202
|
42013
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
203 (defcustom whitespace-spacetab-regexp "[ ]+\t"
|
25724
|
204 "Regexp to match a space followed by a TAB."
|
32501
|
205 :type 'regexp
|
25625
|
206 :group 'whitespace)
|
|
207
|
38882
|
208 (defcustom whitespace-check-indent-whitespace indent-tabs-mode
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
209 "Flag to check indentation whitespace. This is the global for the system.
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
210 It can be overriden by setting a buffer local variable
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
211 `whitespace-check-buffer-indent'"
|
25724
|
212 :type 'boolean
|
|
213 :group 'whitespace)
|
|
214
|
25625
|
215 (defcustom whitespace-indent-regexp (concat "^\\(\t*\\) " " ")
|
|
216 "Regexp to match (any TABS followed by) 8/more whitespaces at start of line."
|
32501
|
217 :type 'regexp
|
25625
|
218 :group 'whitespace)
|
|
219
|
25724
|
220 (defcustom whitespace-check-ateol-whitespace t
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
221 "Flag to check end-of-line whitespace. This is the global for the system.
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
222 It can be overriden by setting a buffer local variable
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
223 `whitespace-check-buffer-ateol'"
|
25724
|
224 :type 'boolean
|
|
225 :group 'whitespace)
|
|
226
|
42013
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
227 ;; (defcustom whitespace-ateol-regexp "[ \t]$"
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
228 (defcustom whitespace-ateol-regexp "[ \t]+$"
|
25625
|
229 "Regexp to match a TAB or a space at the EOL."
|
32501
|
230 :type 'regexp
|
25625
|
231 :group 'whitespace)
|
|
232
|
|
233 (defcustom whitespace-errbuf "*Whitespace Errors*"
|
32501
|
234 "The name of the buffer where whitespace related messages will be logged."
|
25625
|
235 :type 'string
|
|
236 :group 'whitespace)
|
|
237
|
52672
d4d213cfb340
whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
238 (defcustom whitespace-clean-msg "clean."
|
d4d213cfb340
whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
239 "If non-nil, this message will be displayed after a whitespace check
|
d4d213cfb340
whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
240 determines a file to be clean."
|
d4d213cfb340
whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
241 :type 'string
|
d4d213cfb340
whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
242 :group 'whitespace)
|
d4d213cfb340
whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
243
|
38882
|
244 (defcustom whitespace-abort-on-error nil
|
|
245 "While writing a file, abort if the file is unclean. If
|
|
246 `whitespace-auto-cleanup' is set, that takes precedence over this
|
|
247 variable."
|
|
248 :type 'boolean
|
|
249 :group 'whitespace)
|
|
250
|
25582
|
251 (defcustom whitespace-auto-cleanup nil
|
25625
|
252 "Cleanup a buffer automatically on finding it whitespace unclean."
|
25582
|
253 :type 'boolean
|
|
254 :group 'whitespace)
|
|
255
|
|
256 (defcustom whitespace-silent nil
|
25625
|
257 "All whitespace errors will be shown only in the modeline when t.
|
25582
|
258
|
|
259 Note that setting this may cause all whitespaces introduced in a file to go
|
|
260 unnoticed when the buffer is killed, unless the user visits the `*Whitespace
|
25625
|
261 Errors*' buffer before opening (or closing) another file."
|
25582
|
262 :type 'boolean
|
|
263 :group 'whitespace)
|
|
264
|
|
265 (defcustom whitespace-modes '(ada-mode asm-mode autoconf-mode awk-mode
|
25724
|
266 c-mode c++-mode cc-mode
|
|
267 change-log-mode cperl-mode
|
25582
|
268 electric-nroff-mode emacs-lisp-mode
|
|
269 f90-mode fortran-mode html-mode
|
|
270 html3-mode java-mode jde-mode
|
|
271 ksh-mode latex-mode LaTeX-mode
|
|
272 lisp-mode m4-mode makefile-mode
|
|
273 modula-2-mode nroff-mode objc-mode
|
|
274 pascal-mode perl-mode prolog-mode
|
|
275 python-mode scheme-mode sgml-mode
|
25724
|
276 sh-mode shell-script-mode simula-mode
|
|
277 tcl-mode tex-mode texinfo-mode
|
|
278 vrml-mode xml-mode)
|
25582
|
279
|
25625
|
280 "Major Modes in which we turn on whitespace checking.
|
25582
|
281
|
32501
|
282 These are mostly programming and documentation modes. But you may add other
|
25625
|
283 modes that you want whitespaces checked in by adding something like the
|
|
284 following to your `.emacs':
|
25582
|
285
|
25625
|
286 \(setq whitespace-modes (cons 'my-mode (cons 'my-other-mode
|
|
287 whitespace-modes))\)
|
|
288
|
|
289 Or, alternately, you can use the Emacs `customize' command to set this."
|
32501
|
290 :type '(repeat symbol)
|
25582
|
291 :group 'whitespace)
|
|
292
|
29333
|
293 (defcustom whitespace-rescan-timer-time 600
|
25625
|
294 "Period in seconds to rescan modified buffers for whitespace creep.
|
25582
|
295
|
25625
|
296 This is the period after which the timer will fire causing
|
|
297 `whitespace-rescan-files-in-buffers' to check for whitespace creep in
|
25724
|
298 modified buffers.
|
|
299
|
|
300 To disable timer scans, set this to zero."
|
25582
|
301 :type 'integer
|
|
302 :group 'whitespace)
|
|
303
|
26245
|
304 (defcustom whitespace-display-in-modeline t
|
|
305 "Display whitespace errors on the modeline."
|
|
306 :type 'boolean
|
|
307 :group 'whitespace)
|
25582
|
308
|
42013
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
309 (defcustom whitespace-display-spaces-in-color t
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
310 "Display the bogus whitespaces by coloring them with
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
311 `whitespace-highlight-face'."
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
312 :type 'boolean
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
313 :group 'whitespace)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
314
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
315 (defgroup whitespace-faces nil
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
316 "Faces used in whitespace."
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
317 :prefix "whitespace-"
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
318 :group 'whitespace
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
319 :group 'faces)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
320
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
321 (defface whitespace-highlight-face '((((class color) (background light))
|
48631
|
322 (:background "green"))
|
|
323 (((class color) (background dark))
|
|
324 (:background "sea green"))
|
|
325 (((class grayscale mono)
|
|
326 (background light))
|
|
327 (:background "black"))
|
|
328 (((class grayscale mono)
|
|
329 (background dark))
|
|
330 (:background "white")))
|
42013
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
331 "Face used for highlighting the bogus whitespaces that exist in the buffer."
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
332 :group 'whitespace-faces)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
333
|
25582
|
334 (if (not (assoc 'whitespace-mode minor-mode-alist))
|
|
335 (setq minor-mode-alist (cons '(whitespace-mode whitespace-mode-line)
|
|
336 minor-mode-alist)))
|
|
337
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
338 (set-default 'whitespace-check-buffer-leading
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
339 whitespace-check-leading-whitespace)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
340 (set-default 'whitespace-check-buffer-trailing
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
341 whitespace-check-trailing-whitespace)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
342 (set-default 'whitespace-check-buffer-indent
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
343 whitespace-check-indent-whitespace)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
344 (set-default 'whitespace-check-buffer-spacetab
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
345 whitespace-check-spacetab-whitespace)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
346 (set-default 'whitespace-check-buffer-ateol
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
347 whitespace-check-ateol-whitespace)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
348
|
25582
|
349 (defun whitespace-check-whitespace-mode (&optional arg)
|
25625
|
350 "Test and set the whitespace-mode in qualifying buffers."
|
25582
|
351 (if (null whitespace-mode)
|
|
352 (setq whitespace-mode
|
|
353 (if (or arg (member major-mode whitespace-modes))
|
|
354 t
|
|
355 nil))))
|
|
356
|
25625
|
357 ;;;###autoload
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
358 (defun whitespace-toggle-leading-check ()
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
359 "Toggle the check for leading space in the local buffer."
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
360 (interactive)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
361 (let ((current-val whitespace-check-buffer-leading))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
362 (setq whitespace-check-buffer-leading (not current-val))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
363 (message "Will%s check for leading space in buffer."
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
364 (if whitespace-check-buffer-leading "" " not"))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
365 (if whitespace-check-buffer-leading (whitespace-buffer-leading))))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
366
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
367 ;;;###autoload
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
368 (defun whitespace-toggle-trailing-check ()
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
369 "Toggle the check for trailing space in the local buffer."
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
370 (interactive)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
371 (let ((current-val whitespace-check-buffer-trailing))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
372 (setq whitespace-check-buffer-trailing (not current-val))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
373 (message "Will%s check for trailing space in buffer."
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
374 (if whitespace-check-buffer-trailing "" " not"))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
375 (if whitespace-check-buffer-trailing (whitespace-buffer-trailing))))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
376
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
377 ;;;###autoload
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
378 (defun whitespace-toggle-indent-check ()
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
379 "Toggle the check for indentation space in the local buffer."
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
380 (interactive)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
381 (let ((current-val whitespace-check-buffer-indent))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
382 (setq whitespace-check-buffer-indent (not current-val))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
383 (message "Will%s check for indentation space in buffer."
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
384 (if whitespace-check-buffer-indent "" " not"))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
385 (if whitespace-check-buffer-indent
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
386 (whitespace-buffer-search whitespace-indent-regexp))))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
387
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
388 ;;;###autoload
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
389 (defun whitespace-toggle-spacetab-check ()
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
390 "Toggle the check for space-followed-by-TABs in the local buffer."
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
391 (interactive)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
392 (let ((current-val whitespace-check-buffer-spacetab))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
393 (setq whitespace-check-buffer-spacetab (not current-val))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
394 (message "Will%s check for space-followed-by-TABs in buffer."
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
395 (if whitespace-check-buffer-spacetab "" " not"))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
396 (if whitespace-check-buffer-spacetab
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
397 (whitespace-buffer-search whitespace-spacetab-regexp))))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
398
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
399
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
400 ;;;###autoload
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
401 (defun whitespace-toggle-ateol-check ()
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
402 "Toggle the check for end-of-line space in the local buffer."
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
403 (interactive)
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
404 (let ((current-val whitespace-check-buffer-ateol))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
405 (setq whitespace-check-buffer-ateol (not current-val))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
406 (message "Will%s check for end-of-line space in buffer."
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
407 (if whitespace-check-buffer-ateol "" " not"))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
408 (if whitespace-check-buffer-ateol
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
409 (whitespace-buffer-search whitespace-ateol-regexp))))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
410
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
411
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
412 ;;;###autoload
|
25582
|
413 (defun whitespace-buffer (&optional quiet)
|
32501
|
414 "Find five different types of white spaces in buffer.
|
|
415 These are:
|
25582
|
416 1. Leading space \(empty lines at the top of a file\).
|
|
417 2. Trailing space \(empty lines at the end of a file\).
|
|
418 3. Indentation space \(8 or more spaces, that should be replaced with TABS\).
|
|
419 4. Spaces followed by a TAB. \(Almost always, we never want that\).
|
|
420 5. Spaces or TABS at the end of a line.
|
|
421
|
|
422 Check for whitespace only if this buffer really contains a non-empty file
|
|
423 and:
|
|
424 1. the major mode is one of the whitespace-modes, or
|
25625
|
425 2. `whitespace-buffer' was explicitly called with a prefix argument."
|
25582
|
426 (interactive)
|
26245
|
427 (let ((whitespace-error nil))
|
|
428 (whitespace-check-whitespace-mode current-prefix-arg)
|
|
429 (if (and buffer-file-name (> (buffer-size) 0) whitespace-mode)
|
|
430 (progn
|
|
431 (whitespace-check-buffer-list (buffer-name) buffer-file-name)
|
|
432 (whitespace-tickle-timer)
|
42013
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
433 (whitespace-unhighlight-the-space)
|
26245
|
434 (if whitespace-auto-cleanup
|
|
435 (if buffer-read-only
|
|
436 (if (not quiet)
|
|
437 (message "Can't cleanup: %s is read-only" (buffer-name)))
|
|
438 (whitespace-cleanup))
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
439 (let ((whitespace-leading (if whitespace-check-buffer-leading
|
26245
|
440 (whitespace-buffer-leading)
|
|
441 nil))
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
442 (whitespace-trailing (if whitespace-check-buffer-trailing
|
26245
|
443 (whitespace-buffer-trailing)
|
|
444 nil))
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
445 (whitespace-indent (if whitespace-check-buffer-indent
|
26245
|
446 (whitespace-buffer-search
|
|
447 whitespace-indent-regexp)
|
25724
|
448 nil))
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
449 (whitespace-spacetab (if whitespace-check-buffer-spacetab
|
26245
|
450 (whitespace-buffer-search
|
|
451 whitespace-spacetab-regexp)
|
|
452 nil))
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
453 (whitespace-ateol (if whitespace-check-buffer-ateol
|
26245
|
454 (whitespace-buffer-search
|
|
455 whitespace-ateol-regexp)
|
|
456 nil))
|
|
457 (whitespace-errmsg nil)
|
|
458 (whitespace-filename buffer-file-name)
|
|
459 (whitespace-this-modeline ""))
|
25582
|
460
|
26245
|
461 ;; Now let's complain if we found any of the above.
|
|
462 (setq whitespace-error (or whitespace-leading whitespace-indent
|
|
463 whitespace-spacetab whitespace-ateol
|
|
464 whitespace-trailing))
|
25582
|
465
|
26245
|
466 (if whitespace-error
|
25582
|
467 (progn
|
26245
|
468 (setq whitespace-errmsg
|
|
469 (concat whitespace-filename " contains:\n"
|
|
470 (if whitespace-leading
|
|
471 "Leading whitespace\n")
|
|
472 (if whitespace-indent
|
|
473 (concat "Indentation whitespace"
|
|
474 whitespace-indent "\n"))
|
|
475 (if whitespace-spacetab
|
|
476 (concat "Space followed by Tab"
|
|
477 whitespace-spacetab "\n"))
|
|
478 (if whitespace-ateol
|
|
479 (concat "End-of-line whitespace"
|
|
480 whitespace-ateol "\n"))
|
|
481 (if whitespace-trailing
|
|
482 "Trailing whitespace\n")
|
|
483 "\ntype `M-x whitespace-cleanup' to "
|
|
484 "cleanup the file."))
|
|
485 (setq whitespace-this-modeline
|
|
486 (concat (if whitespace-ateol "e")
|
|
487 (if whitespace-indent "i")
|
|
488 (if whitespace-leading "l")
|
|
489 (if whitespace-spacetab "s")
|
|
490 (if whitespace-trailing "t")))))
|
|
491 (whitespace-update-modeline whitespace-this-modeline)
|
|
492 (save-excursion
|
|
493 (get-buffer-create whitespace-errbuf)
|
|
494 (kill-buffer whitespace-errbuf)
|
|
495 (get-buffer-create whitespace-errbuf)
|
|
496 (set-buffer whitespace-errbuf)
|
|
497 (if whitespace-errmsg
|
|
498 (progn
|
|
499 (insert whitespace-errmsg)
|
|
500 (if (not (or quiet whitespace-silent))
|
|
501 (display-buffer whitespace-errbuf t))
|
|
502 (if (not quiet)
|
|
503 (message "Whitespaces: [%s%s] in %s"
|
|
504 whitespace-this-modeline
|
|
505 (let ((whitespace-unchecked
|
|
506 (whitespace-unchecked-whitespaces)))
|
|
507 (if whitespace-unchecked
|
|
508 (concat "!" whitespace-unchecked)
|
|
509 ""))
|
|
510 whitespace-filename)))
|
52672
d4d213cfb340
whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
511 (if (and (not quiet) (not (equal whitespace-clean-msg "")))
|
d4d213cfb340
whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
512 (message "%s %s" whitespace-filename
|
d4d213cfb340
whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
513 whitespace-clean-msg))))))))
|
26245
|
514 (if whitespace-error
|
|
515 t
|
|
516 nil)))
|
25582
|
517
|
25625
|
518 ;;;###autoload
|
25582
|
519 (defun whitespace-region (s e)
|
32501
|
520 "Check the region for whitespace errors."
|
25582
|
521 (interactive "r")
|
|
522 (save-excursion
|
|
523 (save-restriction
|
|
524 (narrow-to-region s e)
|
|
525 (whitespace-buffer))))
|
|
526
|
25625
|
527 ;;;###autoload
|
25582
|
528 (defun whitespace-cleanup ()
|
25625
|
529 "Cleanup the five different kinds of whitespace problems.
|
|
530
|
|
531 Use \\[describe-function] whitespace-describe to read a summary of the
|
|
532 whitespace problems."
|
25582
|
533 (interactive)
|
|
534 ;; If this buffer really contains a file, then run, else quit.
|
|
535 (whitespace-check-whitespace-mode current-prefix-arg)
|
|
536 (if (and buffer-file-name whitespace-mode)
|
|
537 (let ((whitespace-any nil)
|
|
538 (whitespace-tabwith 8)
|
|
539 (whitespace-tabwith-saved tab-width))
|
|
540
|
|
541 ;; since all printable TABS should be 8, irrespective of how
|
|
542 ;; they are displayed.
|
|
543 (setq tab-width whitespace-tabwith)
|
|
544
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
545 (if (and whitespace-check-buffer-leading
|
25724
|
546 (whitespace-buffer-leading))
|
25582
|
547 (progn
|
|
548 (whitespace-buffer-leading-cleanup)
|
|
549 (setq whitespace-any t)))
|
|
550
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
551 (if (and whitespace-check-buffer-trailing
|
25724
|
552 (whitespace-buffer-trailing))
|
25582
|
553 (progn
|
|
554 (whitespace-buffer-trailing-cleanup)
|
|
555 (setq whitespace-any t)))
|
|
556
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
557 (if (and whitespace-check-buffer-indent
|
25724
|
558 (whitespace-buffer-search whitespace-indent-regexp))
|
25582
|
559 (progn
|
|
560 (whitespace-indent-cleanup)
|
|
561 (setq whitespace-any t)))
|
|
562
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
563 (if (and whitespace-check-buffer-spacetab
|
25724
|
564 (whitespace-buffer-search whitespace-spacetab-regexp))
|
25582
|
565 (progn
|
|
566 (whitespace-buffer-cleanup whitespace-spacetab-regexp "\t")
|
|
567 (setq whitespace-any t)))
|
|
568
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
569 (if (and whitespace-check-buffer-ateol
|
25724
|
570 (whitespace-buffer-search whitespace-ateol-regexp))
|
25582
|
571 (progn
|
|
572 (whitespace-buffer-cleanup whitespace-ateol-regexp "")
|
|
573 (setq whitespace-any t)))
|
|
574
|
|
575 ;; Call this recursively till everything is taken care of
|
25724
|
576 (if whitespace-any
|
|
577 (whitespace-cleanup)
|
25582
|
578 (progn
|
51543
|
579 (if (not whitespace-silent)
|
|
580 (message "%s clean" buffer-file-name))
|
26245
|
581 (whitespace-update-modeline)))
|
25582
|
582 (setq tab-width whitespace-tabwith-saved))))
|
|
583
|
25625
|
584 ;;;###autoload
|
25582
|
585 (defun whitespace-cleanup-region (s e)
|
32501
|
586 "Whitespace cleanup on the region."
|
25582
|
587 (interactive "r")
|
|
588 (save-excursion
|
|
589 (save-restriction
|
|
590 (narrow-to-region s e)
|
|
591 (whitespace-cleanup))
|
|
592 (whitespace-buffer t)))
|
|
593
|
|
594 (defun whitespace-buffer-leading ()
|
|
595 "Check to see if there are any empty lines at the top of the file."
|
|
596 (save-excursion
|
|
597 (let ((pmin nil)
|
|
598 (pmax nil))
|
|
599 (goto-char (point-min))
|
|
600 (beginning-of-line)
|
|
601 (setq pmin (point))
|
|
602 (end-of-line)
|
|
603 (setq pmax (point))
|
|
604 (if (equal pmin pmax)
|
42013
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
605 (progn
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
606 (whitespace-highlight-the-space pmin pmax)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
607 t)
|
25582
|
608 nil))))
|
|
609
|
|
610 (defun whitespace-buffer-leading-cleanup ()
|
25625
|
611 "Remove any empty lines at the top of the file."
|
25582
|
612 (save-excursion
|
|
613 (let ((pmin nil)
|
|
614 (pmax nil))
|
|
615 (goto-char (point-min))
|
|
616 (beginning-of-line)
|
|
617 (setq pmin (point))
|
|
618 (end-of-line)
|
|
619 (setq pmax (point))
|
|
620 (if (equal pmin pmax)
|
|
621 (progn
|
|
622 (kill-line)
|
|
623 (whitespace-buffer-leading-cleanup))))))
|
|
624
|
|
625 (defun whitespace-buffer-trailing ()
|
|
626 "Check to see if are is more than one empty line at the bottom."
|
|
627 (save-excursion
|
|
628 (let ((pmin nil)
|
|
629 (pmax nil))
|
|
630 (goto-char (point-max))
|
|
631 (beginning-of-line)
|
|
632 (setq pmin (point))
|
|
633 (end-of-line)
|
|
634 (setq pmax (point))
|
|
635 (if (equal pmin pmax)
|
|
636 (progn
|
|
637 (goto-char (- (point) 1))
|
|
638 (beginning-of-line)
|
|
639 (setq pmin (point))
|
|
640 (end-of-line)
|
|
641 (setq pmax (point))
|
|
642 (if (equal pmin pmax)
|
42013
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
643 (progn
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
644 (whitespace-highlight-the-space pmin pmax)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
645 t)
|
25582
|
646 nil))
|
|
647 nil))))
|
|
648
|
|
649 (defun whitespace-buffer-trailing-cleanup ()
|
|
650 "Delete all the empty lines at the bottom."
|
|
651 (save-excursion
|
|
652 (let ((pmin nil)
|
|
653 (pmax nil))
|
|
654 (goto-char (point-max))
|
|
655 (beginning-of-line)
|
|
656 (setq pmin (point))
|
|
657 (end-of-line)
|
|
658 (setq pmax (point))
|
|
659 (if (equal pmin pmax)
|
|
660 (progn
|
|
661 (goto-char (1- pmin))
|
|
662 (beginning-of-line)
|
|
663 (setq pmin (point))
|
|
664 (end-of-line)
|
|
665 (setq pmax (point))
|
|
666 (if (equal pmin pmax)
|
|
667 (progn
|
|
668 (goto-char (1- (point-max)))
|
|
669 (beginning-of-line)
|
|
670 (kill-line)
|
|
671 (whitespace-buffer-trailing-cleanup))))))))
|
|
672
|
|
673 (defun whitespace-buffer-search (regexp)
|
|
674 "Search for any given whitespace REGEXP."
|
|
675 (let ((whitespace-retval ""))
|
|
676 (save-excursion
|
|
677 (goto-char (point-min))
|
|
678 (while (re-search-forward regexp nil t)
|
42013
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
679 (progn
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
680 (setq whitespace-retval (format "%s %s" whitespace-retval
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
681 (match-beginning 0)))
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
682 (whitespace-highlight-the-space (match-beginning 0) (match-end 0))))
|
25582
|
683 (if (equal "" whitespace-retval)
|
|
684 nil
|
|
685 whitespace-retval))))
|
|
686
|
|
687 (defun whitespace-buffer-cleanup (regexp newregexp)
|
|
688 "Search for any given whitespace REGEXP and replace it with the NEWREGEXP."
|
|
689 (save-excursion
|
|
690 (goto-char (point-min))
|
|
691 (while (re-search-forward regexp nil t)
|
|
692 (replace-match newregexp))))
|
|
693
|
|
694 (defun whitespace-indent-cleanup ()
|
25625
|
695 "Search for 8/more spaces at the start of a line and replace it with tabs."
|
25582
|
696 (save-excursion
|
|
697 (goto-char (point-min))
|
|
698 (while (re-search-forward whitespace-indent-regexp nil t)
|
|
699 (let ((column (current-column))
|
|
700 (indent-tabs-mode t))
|
|
701 (delete-region (match-beginning 0) (point))
|
|
702 (indent-to column)))))
|
|
703
|
26245
|
704 (defun whitespace-unchecked-whitespaces ()
|
|
705 "Return the list of whitespaces whose testing has been suppressed."
|
36944
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
706 (let ((unchecked-spaces
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
707 (concat (if (not whitespace-check-buffer-ateol) "e")
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
708 (if (not whitespace-check-buffer-indent) "i")
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
709 (if (not whitespace-check-buffer-leading) "l")
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
710 (if (not whitespace-check-buffer-spacetab) "s")
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
711 (if (not whitespace-check-buffer-trailing) "t"))))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
712 (if (not (equal unchecked-spaces ""))
|
4d294c5bb2ac
whitespace.el version 3.0 with buffer local toggle capability.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
713 unchecked-spaces
|
26245
|
714 nil)))
|
|
715
|
|
716 (defun whitespace-update-modeline (&optional whitespace-err)
|
32501
|
717 "Update modeline with whitespace errors.
|
|
718 Also with whitespaces whose testing has been turned off."
|
26245
|
719 (if whitespace-display-in-modeline
|
26259
|
720 (progn
|
|
721 (setq whitespace-mode-line nil)
|
|
722 ;; Whitespace errors
|
|
723 (if (and whitespace-err (not (equal whitespace-err "")))
|
|
724 (setq whitespace-mode-line whitespace-err))
|
|
725 ;; Whitespace suppressed errors
|
|
726 (let ((whitespace-unchecked (whitespace-unchecked-whitespaces)))
|
|
727 (if whitespace-unchecked
|
|
728 (setq whitespace-mode-line
|
|
729 (concat whitespace-mode-line "!" whitespace-unchecked))))
|
|
730 ;; Add the whitespace modeline prefix
|
|
731 (setq whitespace-mode-line (if whitespace-mode-line
|
|
732 (concat " W:" whitespace-mode-line)
|
|
733 nil))
|
42013
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
734 (whitespace-mode-line-update))))
|
25724
|
735
|
42013
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
736 (defun whitespace-highlight-the-space (b e)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
737 "Highlight the current line, unhighlighting a previously jumped to line."
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
738 (if whitespace-display-spaces-in-color
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
739 (progn
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
740 (whitespace-unhighlight-the-space)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
741 (add-to-list 'whitespace-highlighted-space
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
742 (whitespace-make-overlay b e))
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
743 (whitespace-overlay-put (whitespace-make-overlay b e) 'face
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
744 'whitespace-highlight-face))))
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
745 ;; (add-hook 'pre-command-hook 'whitespace-unhighlight-the-space))
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
746
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
747 (defun whitespace-unhighlight-the-space ()
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
748 "Unhighlight the currently highlight line."
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
749 (if (and whitespace-display-spaces-in-color whitespace-highlighted-space)
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
750 (let ((whitespace-this-space nil))
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
751 (while whitespace-highlighted-space
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
752 (setq whitespace-this-space (car whitespace-highlighted-space))
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
753 (setq whitespace-highlighted-space
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
754 (cdr whitespace-highlighted-space))
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
755 (whitespace-delete-overlay whitespace-this-space))
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
756 (setq whitespace-highlighted-space nil))
|
0ad4d3e3bfe6
Whitespace.el v3.2 for colorized display of bogus whitespaces.
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
757 (remove-hook 'pre-command-hook 'whitespace-unhighlight-the-space)))
|
25582
|
758
|
|
759 (defun whitespace-check-buffer-list (buf-name buf-file)
|
25625
|
760 "Add a buffer and its file to the whitespace monitor list.
|
|
761
|
|
762 The buffer named BUF-NAME and its associated file BUF-FILE are now monitored
|
|
763 periodically for whitespace."
|
25582
|
764 (if (and whitespace-mode (not (member (list buf-file buf-name)
|
|
765 whitespace-all-buffer-files)))
|
|
766 (add-to-list 'whitespace-all-buffer-files (list buf-file buf-name))))
|
|
767
|
|
768 (defun whitespace-tickle-timer ()
|
25625
|
769 "Tickle timer to periodically to scan qualifying files for whitespace creep.
|
|
770
|
|
771 If timer is not set, then set it to scan the files in
|
|
772 `whitespace-all-buffer-files' periodically (defined by
|
|
773 `whitespace-rescan-timer-time') for whitespace creep."
|
25724
|
774 (if (and whitespace-rescan-timer-time (not whitespace-rescan-timer))
|
25582
|
775 (setq whitespace-rescan-timer
|
32501
|
776 (add-timeout whitespace-rescan-timer-time
|
|
777 'whitespace-rescan-files-in-buffers nil
|
|
778 whitespace-rescan-timer-time))))
|
25582
|
779
|
|
780 (defun whitespace-rescan-files-in-buffers (&optional arg)
|
25625
|
781 "Check monitored files for whitespace creep since last scan."
|
25582
|
782 (let ((whitespace-all-my-files whitespace-all-buffer-files)
|
25625
|
783 buffile bufname thiselt buf)
|
25582
|
784 (if (not whitespace-all-my-files)
|
|
785 (progn
|
32501
|
786 (disable-timeout whitespace-rescan-timer)
|
25582
|
787 (setq whitespace-rescan-timer nil))
|
|
788 (while whitespace-all-my-files
|
|
789 (setq thiselt (car whitespace-all-my-files))
|
|
790 (setq whitespace-all-my-files (cdr whitespace-all-my-files))
|
|
791 (setq buffile (car thiselt))
|
|
792 (setq bufname (cadr thiselt))
|
|
793 (setq buf (get-buffer bufname))
|
|
794 (if (buffer-live-p buf)
|
|
795 (save-excursion
|
|
796 ;;(message "buffer %s live" bufname)
|
|
797 (set-buffer bufname)
|
|
798 (if whitespace-mode
|
|
799 (progn
|
|
800 ;;(message "checking for whitespace in %s" bufname)
|
|
801 (if whitespace-auto-cleanup
|
|
802 (progn
|
|
803 ;;(message "cleaning up whitespace in %s" bufname)
|
|
804 (whitespace-cleanup))
|
|
805 (progn
|
|
806 ;;(message "whitespace-buffer %s." (buffer-name))
|
|
807 (whitespace-buffer t))))
|
|
808 ;;(message "Removing %s from refresh list" bufname)
|
|
809 (whitespace-refresh-rescan-list buffile bufname)))
|
|
810 ;;(message "Removing %s from refresh list" bufname)
|
|
811 (whitespace-refresh-rescan-list buffile bufname))))))
|
|
812
|
|
813 (defun whitespace-refresh-rescan-list (buffile bufname)
|
25625
|
814 "Refresh the list of files to be rescaned for whitespace creep."
|
25582
|
815 (if whitespace-all-buffer-files
|
32501
|
816 (setq whitespace-all-buffer-files
|
|
817 (delete (list buffile bufname) whitespace-all-buffer-files))
|
|
818 (when whitespace-rescan-timer
|
|
819 (disable-timeout whitespace-rescan-timer)
|
|
820 (setq whitespace-rescan-timer nil))))
|
|
821
|
|
822 ;;;###autoload
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
823 (define-minor-mode whitespace-global-mode
|
32501
|
824 "Toggle using Whitespace mode in new buffers.
|
52672
d4d213cfb340
whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
diff
changeset
|
825 With ARG, turn the mode on iff ARG is positive.
|
32501
|
826
|
|
827 When this mode is active, `whitespace-buffer' is added to
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
828 `find-file-hook' and `kill-buffer-hook'."
|
50964
|
829 :global t
|
|
830 :group 'whitespace
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
831 (if whitespace-global-mode
|
25582
|
832 (progn
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
833 (add-hook 'find-file-hook 'whitespace-buffer)
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
834 (add-hook 'write-file-functions 'whitespace-write-file-hook nil t)
|
32501
|
835 (add-hook 'kill-buffer-hook 'whitespace-buffer))
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
836 (remove-hook 'find-file-hook 'whitespace-buffer)
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
837 (remove-hook 'write-file-functions 'whitespace-write-file-hook t)
|
32501
|
838 (remove-hook 'kill-buffer-hook 'whitespace-buffer)))
|
25582
|
839
|
25625
|
840 ;;;###autoload
|
38882
|
841 (defun whitespace-write-file-hook ()
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
842 "Hook function to be called on the buffer when whitespace check is enabled.
|
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
843 This is meant to be added buffer-locally to `write-file-functions'."
|
38882
|
844 (interactive)
|
|
845 (let ((werr nil))
|
|
846 (if whitespace-auto-cleanup
|
|
847 (whitespace-cleanup)
|
|
848 (setq werr (whitespace-buffer)))
|
|
849 (if (and whitespace-abort-on-error werr)
|
|
850 (error (concat "Abort write due to whitespaces in "
|
|
851 buffer-file-name))))
|
|
852 nil)
|
|
853
|
32501
|
854 (defun whitespace-unload-hook ()
|
47420
b7a8fec8113c
(whitespace-global-mode): Use define-minor-mode. Use the new file hook names.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
855 (remove-hook 'find-file-hook 'whitespace-buffer)
|
47454
cf95d79a66c4
(whitespace-unload-hook): Call `remove-hook' with three arguments, not four.
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
856 (remove-hook 'write-file-functions 'whitespace-write-file-hook t)
|
32501
|
857 (remove-hook 'kill-buffer-hook 'whitespace-buffer))
|
|
858
|
25582
|
859 (provide 'whitespace)
|
52401
|
860
|
|
861 ;;; arch-tag: 4ff44e87-b63c-402d-95a6-15e51e58bd0c
|
25582
|
862 ;;; whitespace.el ends here
|