summaryrefslogtreecommitdiff
path: root/share/misc
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>2007-09-24 15:38:11 +0000
committerchristos <christos@NetBSD.org>2007-09-24 15:38:11 +0000
commite179d264f01746c4c2cd72cefcf5cdeebdd71ed5 (patch)
tree5a1030181b7cfc22d7cc9e0e366d7ae0c0d8918e /share/misc
parentd418c3a3f739474d0809910378d217065e74b51a (diff)
Add code to support whitespace checking/cleanup. This disabled by
default. To enable it, set netbsd-knf-whitespace-check to 't'. See the help message for this variable for related knobs and issues. This was tested on emacs 21.4 and 22.1. (From Anon Ymous)
Diffstat (limited to 'share/misc')
-rw-r--r--share/misc/NetBSD.el57
1 files changed, 47 insertions, 10 deletions
diff --git a/share/misc/NetBSD.el b/share/misc/NetBSD.el
index 0937cc55198..71a50c6562b 100644
--- a/share/misc/NetBSD.el
+++ b/share/misc/NetBSD.el
@@ -1,4 +1,4 @@
-;; $NetBSD: NetBSD.el,v 1.4 2007/09/22 16:17:52 christos Exp $
+;; $NetBSD: NetBSD.el,v 1.5 2007/09/24 15:38:11 christos Exp $
(defconst netbsd-knf-style
'(
@@ -57,14 +57,52 @@
)
"NetBSD KNF Style")
-(defun knf-write-contents-hook ()
+(eval-when-compile (require 'whitespace nil t))
+
+(defcustom netbsd-knf-whitespace-check nil
+ "Enable NetBSD KNF whitespace cleanup when saving the buffer.
+See also:
+ `whitespace-auto-cleanup',
+ `whitespace-abort-on-error',
+ `whitespace-check-leading-whitespace',
+ `whitespace-check-trailing-whitespace',
+ `whitespace-check-spacetab-whitespace',
+ `whitespace-check-indent-whitespace',
+ `whitespace-check-ateol-whitespace'.
+NOTES:
+1) `whitespace-check-spacetab-whitespace' will replace any RE-match of
+ \" +\\t\" with single '\\t' and hence may break tabbing.
+2) Both `whitespace-check-spacetab-whitespace' and
+ `whitespace-check-indent-whitespace' may alter strings."
+ :type 'boolean
+ :group 'netbsd-knf)
+
+(defun netbsd-knf-whitespace-cleanup ()
+ ;; XXX - emacs 21.4 whitespace.el was badly behaved on blank
+ ;; buffers. This was fixed in 22.1. I don't know about other
+ ;; versions, so these conditions may need to be more restrictive.
+ (cond ((> emacs-major-version 21)
+ (whitespace-cleanup-internal))
+ (t ;; default
+ (if (save-excursion
+ (goto-char (point-min))
+ (re-search-forward "[^ \t\n]" nil t))
+ (whitespace-cleanup)
+ (delete-region (point-min) (point-max))))))
+
+(defun netbsd-knf-write-contents-hook ()
(if (and (string-equal c-indentation-style "netbsd knf")
(require 'whitespace nil t))
- (whitespace-cleanup))
- nil ;; XXX - make sure we return nil or the file will not be written.
-)
+ (if netbsd-knf-whitespace-check
+ (if whitespace-auto-cleanup
+ (netbsd-knf-whitespace-cleanup)
+ (if (and (whitespace-buffer) whitespace-abort-on-error)
+ (error (concat "Abort write due to whitespaces in "
+ buffer-file-name)))))
+ (remove-hook 'write-contents-hook 'netbsd-knf-write-contents-hook))
+ nil)
-(defun knf-c-mode-hook ()
+(defun netbsd-knf-c-mode-hook ()
;; Add style and set it for current buffer
(c-add-style "NetBSD KNF" netbsd-knf-style t)
;; useful, but not necessary for the mode
@@ -76,8 +114,7 @@
(setq c-toggle-hungry-state 1)
;; auto-indent new lines
(define-key c-mode-base-map "\C-m" 'newline-and-indent)
- ;; cleanup whitespace when saving
- (add-hook 'write-contents-hooks 'knf-write-contents-hook)
-)
+ ;; check/cleanup whitespace when saving
+ (add-hook 'write-contents-hooks 'netbsd-knf-write-contents-hook))
-(add-hook 'c-mode-hook 'knf-c-mode-hook)
+(add-hook 'c-mode-hook 'netbsd-knf-c-mode-hook)