From 3e1da21463d582c0f3c9f989c435b5021d09741f Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Wed, 31 Oct 2007 18:45:14 +0000 Subject: [PATCH] (whitespace-unload-function): New-style unload function. When run, unintern `whitespace-unload-hook' and call `unload-feature' recursively to stop the old hook from messing with the unloading. --- lisp/ChangeLog | 5 +++-- lisp/whitespace.el | 21 ++++++++++++--------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e1720346d26..c6326fed8c3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -6,8 +6,9 @@ 2007-10-31 Juanma Barranquero * whitespace.el (whitespace-write-file-hook): Remove interactive spec. - (whitespace-unload-function): New-style unload function. - If run, stop old style `-hook' function from running. + (whitespace-unload-function): New-style unload function. When run, + unintern `whitespace-unload-hook' and call `unload-feature' recursively + to stop the old hook from messing with the unloading. * strokes.el (strokes-alphabetic-lessp): Doc fix. diff --git a/lisp/whitespace.el b/lisp/whitespace.el index 0251618f099..9c3a6cc18d8 100644 --- a/lisp/whitespace.el +++ b/lisp/whitespace.el @@ -793,15 +793,18 @@ This is meant to be added buffer-locally to `write-file-functions'." (defun whitespace-unload-function () "Unload the whitespace library." - (whitespace-global-mode -1) - (save-current-buffer - (dolist (buf (buffer-list)) - (set-buffer buf) - (remove-hook 'write-file-functions 'whitespace-write-file-hook t))) - ;; new-style unloading, stop old style from running - (with-no-warnings (setq whitespace-unload-hook nil)) - ;; continue standard unloading - nil) + (if (unintern "whitespace-unload-hook") + ;; if whitespace-unload-hook is defined, let's get rid of it + ;; and recursively call `unload-feature' + (progn (unload-feature 'whitespace) t) + ;; this only happens in the recursive call + (whitespace-global-mode -1) + (save-current-buffer + (dolist (buf (buffer-list)) + (set-buffer buf) + (remove-hook 'write-file-functions 'whitespace-write-file-hook t))) + ;; continue standard unloading + nil)) (defun whitespace-unload-hook () (remove-hook 'find-file-hook 'whitespace-buffer) -- 2.39.2