Mercurial > emacs
annotate lisp/whitespace.el @ 26059:2a7f35e0072b
(Fminibuffer_complete_and_exit): Supply value for new
ESCAPE_FROM_EDGE parameter to Ffield_beginning.
(Fminibuffer_complete_word): Use
Ffield_beginning to find the prompt end.
(Fminibuffer_complete_and_exit): Test for an empty
input string by seeing where the field begins, instead of
looking at text-properties.
(read_minibuf): Don't save minibuffer prompt length on
minibuf_save_list.
Don't initialize minibuffer prompt length.
Wrap prompt text-properties around the entire prompt.
Add 'prompt text-property to prompt.
Get final value with Ffield_string instead of make_buffer_string.
(read_minibuf_unwind): Don't restore minibuffer prompt length from
minibuf_save_list.
(do_completion): Get minibuffer input with Ffield_string
instead of Fbuffer_string.
Erase minibuffer input with Ferase_field instead of erase_buffer.
(Fminibuffer_complete_and_exit): Likewise.
Test whether buffer is empty by looking for the 'prompt text
property at the end.
Set prompt length by looking for the end of the prompt text property,
and save prompt length for later use (since there is no longer a
buffer variable to get it from).
(Fminibuffer_prompt_width, Fminibuffer_prompt_end): Functions removed.
(syms_of_minibuf): Remove initializations of
Sminibuffer_prompt_width and Sminibuffer_prompt_end.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Sun, 17 Oct 1999 12:55:49 +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 |