Mercurial > emacs
annotate lisp/whitespace.el @ 25923:dcafaf809fac
Require dired when compiling.
(ange-ftp-normal-login): Allow EFS-style port specification.
author | Dave Love <fx@gnu.org> |
---|---|
date | Fri, 08 Oct 1999 11:44:38 +0000 |
parents | 5e14fd494b83 |
children | 2dbd5efce8ee |
rev | line source |
---|---|
25582 | 1 ;;; whitespace.el --- Warn about and clean bogus whitespaces in the file. |
2 | |
3 ;; Copyright (C) 1999 Free Software Foundation, Inc. | |
4 | |
5 ;; Author: Rajesh Vaidheeswarran <rv@dsmit.com> | |
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: | |
26 | |
27 ;; Whitespace.el URL: http://www.dsmit.com/lisp/ | |
28 | |
29 ;; Exported functions: | |
30 | |
31 ;; `whitespace-buffer' - To check the current buffer for whitespace problems. | |
32 ;; `whitespace-cleanup' - To cleanup all whitespaces in the current buffer. | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
33 ;; `whitespace-region' - To check between point and mark for whitespace |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
34 ;; problems. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
35 ;; `whitespace-cleanup-region' - To cleanup all whitespaces between point |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
36 ;; and mark in the current buffer. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
37 ;; `whitespace-describe' - A simple introduction to the library. |
25582 | 38 |
39 ;;; Code: | |
40 | |
41 ;; add a hook to find-file-hooks and kill-buffer-hook | |
42 (add-hook 'find-file-hooks 'whitespace-buffer) | |
43 (add-hook 'kill-buffer-hook 'whitespace-buffer) | |
44 | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
45 (defvar whitespace-version "2.3" "Version of the whitespace library.") |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
46 ;; Find out what type of Emacs we are running in. |
25582 | 47 (defvar whitespace-running-emacs (if (string-match "XEmacs\\|Lucid" |
48 emacs-version) nil t) | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
49 "If this is Emacs, not XEmacs, this is t.") |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
50 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
51 (if whitespace-running-emacs (require 'timer)) |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
52 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
53 (defvar whitespace-all-buffer-files nil |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
54 "An associated list of buffers and files checked for whitespace cleanliness. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
55 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
56 This is to enable periodic checking of whitespace cleanliness in the files |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
57 visited by the buffers.") |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
58 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
59 (defvar whitespace-rescan-timer nil |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
60 "Timer object used to rescan the files in buffers that have been modified.") |
25582 | 61 |
62 ;; For users of Emacs 19.x, defgroup and defcustom are not defined. | |
63 | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
64 (eval-when-compile |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
65 (if (< (string-to-int emacs-version) 20) |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
66 (progn |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
67 (defmacro defgroup (sym memb doc &rest args) |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
68 "Null macro for defgroup in all versions of Emacs < 20.x" |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
69 t) |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
70 (defmacro defcustom (sym val doc &rest args) |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
71 "Macro to alias defcustom to defvar in all versions of Emacs < 20.x" |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
72 `(defvar ,sym ,val ,doc))))) |
25582 | 73 |
74 (defgroup whitespace nil | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
75 "Check for and fix five different types of whitespaces in source code." |
25582 | 76 ;; Since XEmacs doesn't have a 'convenience group, use the next best group |
77 ;; which is 'editing? | |
78 :group (if whitespace-running-emacs 'convenience 'editing)) | |
79 | |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
80 (defcustom whitespace-check-leading-whitespace t |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
81 "Flag to check leading whitespace." |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
82 :type 'boolean |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
83 :group 'whitespace) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
84 |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
85 (defcustom whitespace-check-trailing-whitespace t |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
86 "Flag to check trailing whitespace." |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
87 :type 'boolean |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
88 :group 'whitespace) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
89 |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
90 (defcustom whitespace-check-spacetab-whitespace t |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
91 "Flag to check space followed by a TAB." |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
92 :type 'boolean |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
93 :group 'whitespace) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
94 |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
95 (defcustom whitespace-spacetab-regexp " \t" |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
96 "Regexp to match a space followed by a TAB." |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
97 :type 'string |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
98 :group 'whitespace) |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
99 |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
100 (defcustom whitespace-check-indent-whitespace t |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
101 "Flag to check indentation whitespace." |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
102 :type 'boolean |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
103 :group 'whitespace) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
104 |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
105 (defcustom whitespace-indent-regexp (concat "^\\(\t*\\) " " ") |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
106 "Regexp to match (any TABS followed by) 8/more whitespaces at start of line." |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
107 :type 'string |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
108 :group 'whitespace) |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
109 |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
110 (defcustom whitespace-check-ateol-whitespace t |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
111 "Flag to check end-of-line whitespace." |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
112 :type 'boolean |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
113 :group 'whitespace) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
114 |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
115 (defcustom whitespace-ateol-regexp "[ \t]$" |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
116 "Regexp to match a TAB or a space at the EOL." |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
117 :type 'string |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
118 :group 'whitespace) |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
119 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
120 (defcustom whitespace-errbuf "*Whitespace Errors*" |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
121 "The buffer where whitespace related messages will be logged." |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
122 :type 'string |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
123 :group 'whitespace) |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
124 |
25582 | 125 (defcustom whitespace-auto-cleanup nil |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
126 "Cleanup a buffer automatically on finding it whitespace unclean." |
25582 | 127 :type 'boolean |
128 :group 'whitespace) | |
129 | |
130 (defcustom whitespace-silent nil | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
131 "All whitespace errors will be shown only in the modeline when t. |
25582 | 132 |
133 Note that setting this may cause all whitespaces introduced in a file to go | |
134 unnoticed when the buffer is killed, unless the user visits the `*Whitespace | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
135 Errors*' buffer before opening (or closing) another file." |
25582 | 136 :type 'boolean |
137 :group 'whitespace) | |
138 | |
139 (defcustom whitespace-modes '(ada-mode asm-mode autoconf-mode awk-mode | |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
140 c-mode c++-mode cc-mode |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
141 change-log-mode cperl-mode |
25582 | 142 electric-nroff-mode emacs-lisp-mode |
143 f90-mode fortran-mode html-mode | |
144 html3-mode java-mode jde-mode | |
145 ksh-mode latex-mode LaTeX-mode | |
146 lisp-mode m4-mode makefile-mode | |
147 modula-2-mode nroff-mode objc-mode | |
148 pascal-mode perl-mode prolog-mode | |
149 python-mode scheme-mode sgml-mode | |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
150 sh-mode shell-script-mode simula-mode |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
151 tcl-mode tex-mode texinfo-mode |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
152 vrml-mode xml-mode) |
25582 | 153 |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
154 "Major Modes in which we turn on whitespace checking. |
25582 | 155 |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
156 These are mostly programming and documentation modes. But you may add other |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
157 modes that you want whitespaces checked in by adding something like the |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
158 following to your `.emacs': |
25582 | 159 |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
160 \(setq whitespace-modes (cons 'my-mode (cons 'my-other-mode |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
161 whitespace-modes))\) |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
162 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
163 Or, alternately, you can use the Emacs `customize' command to set this." |
25582 | 164 :group 'whitespace) |
165 | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
166 (defcustom whitespace-rescan-timer-time 60 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
167 "Period in seconds to rescan modified buffers for whitespace creep. |
25582 | 168 |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
169 This is the period after which the timer will fire causing |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
170 `whitespace-rescan-files-in-buffers' to check for whitespace creep in |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
171 modified buffers. |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
172 |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
173 To disable timer scans, set this to zero." |
25582 | 174 :type 'integer |
175 :group 'whitespace) | |
176 | |
177 ;; Tell Emacs about this new kind of minor mode | |
25732
5e14fd494b83
(whitespace-mode, whitespace-mode-line): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
25724
diff
changeset
|
178 (defvar whitespace-mode nil |
5e14fd494b83
(whitespace-mode, whitespace-mode-line): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
25724
diff
changeset
|
179 "Non-nil when Whitespace mode (a minor mode) is enabled.") |
25582 | 180 (make-variable-buffer-local 'whitespace-mode) |
181 (put 'whitespace-mode 'permanent-local nil) | |
182 | |
25732
5e14fd494b83
(whitespace-mode, whitespace-mode-line): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
25724
diff
changeset
|
183 (defvar whitespace-mode-line nil |
5e14fd494b83
(whitespace-mode, whitespace-mode-line): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
25724
diff
changeset
|
184 "String to display in the mode line for Whitespace mode.") |
25582 | 185 (make-variable-buffer-local 'whitespace-mode-line) |
186 (put 'whitespace-mode-line 'permanent-local nil) | |
187 | |
188 (if (not (assoc 'whitespace-mode minor-mode-alist)) | |
189 (setq minor-mode-alist (cons '(whitespace-mode whitespace-mode-line) | |
190 minor-mode-alist))) | |
191 | |
192 (defun whitespace-check-whitespace-mode (&optional arg) | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
193 "Test and set the whitespace-mode in qualifying buffers." |
25582 | 194 (if (null whitespace-mode) |
195 (setq whitespace-mode | |
196 (if (or arg (member major-mode whitespace-modes)) | |
197 t | |
198 nil)))) | |
199 | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
200 ;;;###autoload |
25582 | 201 (defun whitespace-buffer (&optional quiet) |
202 "Find five different types of white spaces in buffer: | |
203 | |
204 1. Leading space \(empty lines at the top of a file\). | |
205 2. Trailing space \(empty lines at the end of a file\). | |
206 3. Indentation space \(8 or more spaces, that should be replaced with TABS\). | |
207 4. Spaces followed by a TAB. \(Almost always, we never want that\). | |
208 5. Spaces or TABS at the end of a line. | |
209 | |
210 Check for whitespace only if this buffer really contains a non-empty file | |
211 and: | |
212 1. the major mode is one of the whitespace-modes, or | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
213 2. `whitespace-buffer' was explicitly called with a prefix argument." |
25582 | 214 (interactive) |
215 (whitespace-check-whitespace-mode current-prefix-arg) | |
216 (if (and buffer-file-name (> (buffer-size) 0) whitespace-mode) | |
217 (progn | |
218 (whitespace-check-buffer-list (buffer-name) buffer-file-name) | |
219 (whitespace-tickle-timer) | |
220 (if whitespace-auto-cleanup | |
221 (if (and (not quiet) buffer-read-only) | |
222 (message "Can't Cleanup: %s is read-only." (buffer-name)) | |
223 (whitespace-cleanup)) | |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
224 (let ((whitespace-leading (if whitespace-check-leading-whitespace |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
225 (whitespace-buffer-leading) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
226 nil)) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
227 (whitespace-trailing (if whitespace-check-trailing-whitespace |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
228 (whitespace-buffer-trailing) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
229 nil)) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
230 (whitespace-indent (if whitespace-check-indent-whitespace |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
231 (whitespace-buffer-search |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
232 whitespace-indent-regexp) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
233 nil)) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
234 (whitespace-spacetab (if whitespace-check-spacetab-whitespace |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
235 (whitespace-buffer-search |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
236 whitespace-spacetab-regexp) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
237 nil)) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
238 (whitespace-ateol (if whitespace-check-ateol-whitespace |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
239 (whitespace-buffer-search |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
240 whitespace-ateol-regexp) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
241 nil)) |
25582 | 242 (whitespace-errmsg nil) |
243 (whitespace-error nil) | |
244 (whitespace-filename buffer-file-name) | |
245 (whitespace-this-modeline "")) | |
246 | |
247 ;; Now let's complain if we found any of the above. | |
248 (setq whitespace-error (or whitespace-leading whitespace-indent | |
249 whitespace-spacetab whitespace-ateol | |
250 whitespace-trailing)) | |
251 | |
252 (if whitespace-error | |
253 (progn | |
254 (setq whitespace-errmsg | |
255 (concat whitespace-filename " contains:\n" | |
256 (if whitespace-leading "Leading whitespace\n") | |
257 (if whitespace-indent | |
258 (concat "Indentation whitespace" | |
259 whitespace-indent "\n")) | |
260 (if whitespace-spacetab | |
261 (concat "Space followed by Tab" | |
262 whitespace-spacetab "\n")) | |
263 (if whitespace-ateol | |
264 (concat "End-of-line whitespace" | |
265 whitespace-ateol "\n")) | |
266 (if whitespace-trailing | |
267 "Trailing whitespace.\n") | |
268 "\ntype " | |
269 "`whitespace-cleanup' to cleanup the file.")) | |
270 (setq whitespace-this-modeline | |
271 (concat (if whitespace-ateol "e") | |
272 (if whitespace-indent "i") | |
273 (if whitespace-leading "l") | |
274 (if whitespace-spacetab "s") | |
275 (if whitespace-trailing "t"))) | |
276 (setq whitespace-mode-line | |
277 (concat " W:" whitespace-this-modeline)) | |
278 (whitespace-force-mode-line-update))) | |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
279 |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
280 ;; Now test and set the whitespaces that are not checked. |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
281 (whitespace-display-unchecked-whitespaces |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
282 (if whitespace-error |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
283 (concat " W:" whitespace-this-modeline))) |
25582 | 284 (save-excursion |
285 (get-buffer-create whitespace-errbuf) | |
286 (kill-buffer whitespace-errbuf) | |
287 (get-buffer-create whitespace-errbuf) | |
288 (set-buffer whitespace-errbuf) | |
289 (if whitespace-errmsg | |
290 (progn | |
291 (insert whitespace-errmsg) | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
292 (if (not (or quiet whitespace-silent)) |
25582 | 293 (display-buffer whitespace-errbuf t)) |
294 (if (not quiet) | |
295 (message "Whitespaces: [%s] in %s" | |
296 whitespace-this-modeline | |
297 whitespace-filename))) | |
298 (if (not quiet) | |
299 (message "%s clean" whitespace-filename))))))))) | |
300 | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
301 ;;;###autoload |
25582 | 302 (defun whitespace-region (s e) |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
303 "Check a region specified by point and mark for whitespace errors." |
25582 | 304 (interactive "r") |
305 (save-excursion | |
306 (save-restriction | |
307 (narrow-to-region s e) | |
308 (whitespace-buffer)))) | |
309 | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
310 ;;;###autoload |
25582 | 311 (defun whitespace-cleanup () |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
312 "Cleanup the five different kinds of whitespace problems. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
313 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
314 Use \\[describe-function] whitespace-describe to read a summary of the |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
315 whitespace problems." |
25582 | 316 (interactive) |
317 ;; If this buffer really contains a file, then run, else quit. | |
318 (whitespace-check-whitespace-mode current-prefix-arg) | |
319 (if (and buffer-file-name whitespace-mode) | |
320 (let ((whitespace-any nil) | |
321 (whitespace-tabwith 8) | |
322 (whitespace-tabwith-saved tab-width)) | |
323 | |
324 ;; since all printable TABS should be 8, irrespective of how | |
325 ;; they are displayed. | |
326 (setq tab-width whitespace-tabwith) | |
327 | |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
328 (if (and whitespace-check-leading-whitespace |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
329 (whitespace-buffer-leading)) |
25582 | 330 (progn |
331 (whitespace-buffer-leading-cleanup) | |
332 (setq whitespace-any t))) | |
333 | |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
334 (if (and whitespace-check-trailing-whitespace |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
335 (whitespace-buffer-trailing)) |
25582 | 336 (progn |
337 (whitespace-buffer-trailing-cleanup) | |
338 (setq whitespace-any t))) | |
339 | |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
340 (if (and whitespace-check-indent-whitespace |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
341 (whitespace-buffer-search whitespace-indent-regexp)) |
25582 | 342 (progn |
343 (whitespace-indent-cleanup) | |
344 (setq whitespace-any t))) | |
345 | |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
346 (if (and whitespace-check-spacetab-whitespace |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
347 (whitespace-buffer-search whitespace-spacetab-regexp)) |
25582 | 348 (progn |
349 (whitespace-buffer-cleanup whitespace-spacetab-regexp "\t") | |
350 (setq whitespace-any t))) | |
351 | |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
352 (if (and whitespace-check-ateol-whitespace |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
353 (whitespace-buffer-search whitespace-ateol-regexp)) |
25582 | 354 (progn |
355 (whitespace-buffer-cleanup whitespace-ateol-regexp "") | |
356 (setq whitespace-any t))) | |
357 | |
358 ;; Call this recursively till everything is taken care of | |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
359 (if whitespace-any |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
360 (whitespace-cleanup) |
25582 | 361 (progn |
362 (message "%s clean" buffer-file-name) | |
363 (setq whitespace-mode-line nil) | |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
364 (whitespace-force-mode-line-update) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
365 (whitespace-display-unchecked-whitespaces))) |
25582 | 366 (setq tab-width whitespace-tabwith-saved)))) |
367 | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
368 ;;;###autoload |
25582 | 369 (defun whitespace-cleanup-region (s e) |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
370 "Whitespace cleanup on a region specified by point and mark." |
25582 | 371 (interactive "r") |
372 (save-excursion | |
373 (save-restriction | |
374 (narrow-to-region s e) | |
375 (whitespace-cleanup)) | |
376 (whitespace-buffer t))) | |
377 | |
378 (defun whitespace-buffer-leading () | |
379 "Check to see if there are any empty lines at the top of the file." | |
380 (save-excursion | |
381 (let ((pmin nil) | |
382 (pmax nil)) | |
383 (goto-char (point-min)) | |
384 (beginning-of-line) | |
385 (setq pmin (point)) | |
386 (end-of-line) | |
387 (setq pmax (point)) | |
388 (if (equal pmin pmax) | |
389 t | |
390 nil)))) | |
391 | |
392 (defun whitespace-buffer-leading-cleanup () | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
393 "Remove any empty lines at the top of the file." |
25582 | 394 (save-excursion |
395 (let ((pmin nil) | |
396 (pmax nil)) | |
397 (goto-char (point-min)) | |
398 (beginning-of-line) | |
399 (setq pmin (point)) | |
400 (end-of-line) | |
401 (setq pmax (point)) | |
402 (if (equal pmin pmax) | |
403 (progn | |
404 (kill-line) | |
405 (whitespace-buffer-leading-cleanup)))))) | |
406 | |
407 (defun whitespace-buffer-trailing () | |
408 "Check to see if are is more than one empty line at the bottom." | |
409 (save-excursion | |
410 (let ((pmin nil) | |
411 (pmax nil)) | |
412 (goto-char (point-max)) | |
413 (beginning-of-line) | |
414 (setq pmin (point)) | |
415 (end-of-line) | |
416 (setq pmax (point)) | |
417 (if (equal pmin pmax) | |
418 (progn | |
419 (goto-char (- (point) 1)) | |
420 (beginning-of-line) | |
421 (setq pmin (point)) | |
422 (end-of-line) | |
423 (setq pmax (point)) | |
424 (if (equal pmin pmax) | |
425 t | |
426 nil)) | |
427 nil)))) | |
428 | |
429 (defun whitespace-buffer-trailing-cleanup () | |
430 "Delete all the empty lines at the bottom." | |
431 (save-excursion | |
432 (let ((pmin nil) | |
433 (pmax nil)) | |
434 (goto-char (point-max)) | |
435 (beginning-of-line) | |
436 (setq pmin (point)) | |
437 (end-of-line) | |
438 (setq pmax (point)) | |
439 (if (equal pmin pmax) | |
440 (progn | |
441 (goto-char (1- pmin)) | |
442 (beginning-of-line) | |
443 (setq pmin (point)) | |
444 (end-of-line) | |
445 (setq pmax (point)) | |
446 (if (equal pmin pmax) | |
447 (progn | |
448 (goto-char (1- (point-max))) | |
449 (beginning-of-line) | |
450 (kill-line) | |
451 (whitespace-buffer-trailing-cleanup)))))))) | |
452 | |
453 (defun whitespace-buffer-search (regexp) | |
454 "Search for any given whitespace REGEXP." | |
455 (let ((whitespace-retval "")) | |
456 (save-excursion | |
457 (goto-char (point-min)) | |
458 (while (re-search-forward regexp nil t) | |
459 (setq whitespace-retval (format "%s %s " whitespace-retval | |
460 (match-beginning 0)))) | |
461 (if (equal "" whitespace-retval) | |
462 nil | |
463 whitespace-retval)))) | |
464 | |
465 (defun whitespace-buffer-cleanup (regexp newregexp) | |
466 "Search for any given whitespace REGEXP and replace it with the NEWREGEXP." | |
467 (save-excursion | |
468 (goto-char (point-min)) | |
469 (while (re-search-forward regexp nil t) | |
470 (replace-match newregexp)))) | |
471 | |
472 (defun whitespace-indent-cleanup () | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
473 "Search for 8/more spaces at the start of a line and replace it with tabs." |
25582 | 474 (save-excursion |
475 (goto-char (point-min)) | |
476 (while (re-search-forward whitespace-indent-regexp nil t) | |
477 (let ((column (current-column)) | |
478 (indent-tabs-mode t)) | |
479 (delete-region (match-beginning 0) (point)) | |
480 (indent-to column))))) | |
481 | |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
482 (defun whitespace-display-unchecked-whitespaces (&optional whitespace-str) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
483 "Update modeline with whitespaces whose testing has been turned off." |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
484 (let ((whitespace-this-modeline |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
485 (concat (if (not whitespace-check-ateol-whitespace) "e") |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
486 (if (not whitespace-check-indent-whitespace) "i") |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
487 (if (not whitespace-check-leading-whitespace) "l") |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
488 (if (not whitespace-check-spacetab-whitespace) "s") |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
489 (if (not whitespace-check-trailing-whitespace) "t")))) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
490 (setq whitespace-mode-line whitespace-str) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
491 (if (not (equal whitespace-this-modeline "")) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
492 (setq whitespace-mode-line |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
493 (concat whitespace-str " Woff:" whitespace-this-modeline))) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
494 (whitespace-force-mode-line-update))) |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
495 |
25582 | 496 ;; Force mode line updation for different Emacs versions |
497 (defun whitespace-force-mode-line-update () | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
498 "Force the mode line update for different flavors of Emacs." |
25582 | 499 (if whitespace-running-emacs |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
500 (force-mode-line-update) ; Emacs |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
501 (redraw-modeline))) ; XEmacs |
25582 | 502 |
503 (defun whitespace-check-buffer-list (buf-name buf-file) | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
504 "Add a buffer and its file to the whitespace monitor list. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
505 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
506 The buffer named BUF-NAME and its associated file BUF-FILE are now monitored |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
507 periodically for whitespace." |
25582 | 508 (if (and whitespace-mode (not (member (list buf-file buf-name) |
509 whitespace-all-buffer-files))) | |
510 (add-to-list 'whitespace-all-buffer-files (list buf-file buf-name)))) | |
511 | |
512 (defun whitespace-tickle-timer () | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
513 "Tickle timer to periodically to scan qualifying files for whitespace creep. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
514 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
515 If timer is not set, then set it to scan the files in |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
516 `whitespace-all-buffer-files' periodically (defined by |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
517 `whitespace-rescan-timer-time') for whitespace creep." |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
518 (if (and whitespace-rescan-timer-time (not whitespace-rescan-timer)) |
25582 | 519 (setq whitespace-rescan-timer |
520 (if whitespace-running-emacs | |
521 (run-at-time nil whitespace-rescan-timer-time | |
522 'whitespace-rescan-files-in-buffers) | |
523 (add-timeout whitespace-rescan-timer-time | |
524 'whitespace-rescan-files-in-buffers nil | |
525 whitespace-rescan-timer-time))))) | |
526 | |
527 (defun whitespace-rescan-files-in-buffers (&optional arg) | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
528 "Check monitored files for whitespace creep since last scan." |
25582 | 529 (let ((whitespace-all-my-files whitespace-all-buffer-files) |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
530 buffile bufname thiselt buf) |
25582 | 531 (if (not whitespace-all-my-files) |
532 (progn | |
533 (if whitespace-running-emacs | |
534 (cancel-timer whitespace-rescan-timer) | |
535 (disable-timeout whitespace-rescan-timer)) | |
536 (setq whitespace-rescan-timer nil)) | |
537 (while whitespace-all-my-files | |
538 (setq thiselt (car whitespace-all-my-files)) | |
539 (setq whitespace-all-my-files (cdr whitespace-all-my-files)) | |
540 (setq buffile (car thiselt)) | |
541 (setq bufname (cadr thiselt)) | |
542 (setq buf (get-buffer bufname)) | |
543 (if (buffer-live-p buf) | |
544 (save-excursion | |
545 ;;(message "buffer %s live" bufname) | |
546 (set-buffer bufname) | |
547 (if whitespace-mode | |
548 (progn | |
549 ;;(message "checking for whitespace in %s" bufname) | |
550 (if whitespace-auto-cleanup | |
551 (progn | |
552 ;;(message "cleaning up whitespace in %s" bufname) | |
553 (whitespace-cleanup)) | |
554 (progn | |
555 ;;(message "whitespace-buffer %s." (buffer-name)) | |
556 (whitespace-buffer t)))) | |
557 ;;(message "Removing %s from refresh list" bufname) | |
558 (whitespace-refresh-rescan-list buffile bufname))) | |
559 ;;(message "Removing %s from refresh list" bufname) | |
560 (whitespace-refresh-rescan-list buffile bufname)))))) | |
561 | |
562 (defun whitespace-refresh-rescan-list (buffile bufname) | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
563 "Refresh the list of files to be rescaned for whitespace creep." |
25582 | 564 (if whitespace-all-buffer-files |
565 (progn | |
566 (setq whitespace-all-buffer-files | |
567 (delete (list buffile bufname) whitespace-all-buffer-files))) | |
568 (progn | |
569 (if (and whitespace-running-emacs (timerp whitespace-rescan-timer)) | |
570 (cancel-timer whitespace-rescan-timer)) | |
571 (if (and (not whitespace-running-emacs) whitespace-rescan-timer) | |
572 (disable-timeout whitespace-rescan-timer)) | |
573 (if whitespace-rescan-timer | |
574 (setq whitespace-rescan-timer nil))))) | |
575 | |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
576 ;;;###autoload |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
577 (defun whitespace-describe () |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
578 "A summary of whitespaces and what this library can do about them. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
579 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
580 The whitespace library is intended to find and help fix five different types |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
581 of whitespace problems that commonly exist in source code. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
582 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
583 1. Leading space (empty lines at the top of a file). |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
584 2. Trailing space (empty lines at the end of a file). |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
585 3. Indentation space (8 or more spaces at beginning of line, that should be |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
586 replaced with TABS). |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
587 4. Spaces followed by a TAB. (Almost always, we never want that). |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
588 5. Spaces or TABS at the end of a line. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
589 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
590 Whitespace errors are reported in a buffer, and on the modeline. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
591 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
592 Modeline will show a W:<x> to denote a particular type of whitespace, where |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
593 `x' can be one (or more) of: |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
594 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
595 e - End-of-Line whitespace. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
596 i - Indentation whitespace. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
597 l - Leading whitespace. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
598 s - Space followed by Tab. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
599 t - Trailing whitespace. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
600 |
25724
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
601 If any of the whitespace checks is turned off, the modeline will display a |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
602 Woff:<x>, where `x' can be one (or more) of the above. |
6664d8f25ea5
(whitespace-version): Update version to 2.4
Richard M. Stallman <rms@gnu.org>
parents:
25625
diff
changeset
|
603 |
25625
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
604 (since (3) is the most controversial one, here is the rationale: Most |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
605 terminal drivers and printer drivers have TAB configured or even |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
606 hardcoded to be 8 spaces. (Some of them allow configuration, but almost |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
607 always they default to 8.) |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
608 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
609 Changing tab-width to other than 8 and editing will cause your code to |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
610 look different from within Emacs, and say, if you cat it or more it, or |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
611 even print it. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
612 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
613 Almost all the popular programming modes let you define an offset (like |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
614 c-basic-offset or perl-indent-level) to configure the offset, so you |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
615 should never have to set your tab-width to be other than 8 in all these |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
616 modes. In fact, with an indent level of say, 4, 2 TABS will cause Emacs |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
617 to replace your 8 spaces with one \t (try it). If vi users in your |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
618 office complain, tell them to use vim, which distinguishes between |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
619 tabstop and shiftwidth (vi equivalent of our offsets), and also ask them |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
620 to set smarttab.) |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
621 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
622 All the above have caused (and will cause) unwanted codeline integration and |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
623 merge problems. |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
624 |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
625 whitespace.el will complain if it detects whitespaces on opening a file, and |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
626 warn you on closing a file also. (if in case you had inserted any |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
627 whitespaces during the process of your editing.)" |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
628 (interactive) |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
629 (message "Use C-h f whitespace-describe to read about whitespace.el v%s." |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
630 whitespace-version)) |
c0e27d3ce645
Finish making it fit Emacs conventions. Add autoloads.
Richard M. Stallman <rms@gnu.org>
parents:
25582
diff
changeset
|
631 |
25582 | 632 (provide 'whitespace) |
633 | |
634 ;;; whitespace.el ends here |