]> git.eshelyaron.com Git - emacs.git/commitdiff
(add-hook): Implement `permanent-local-hook' property.
authorRichard M. Stallman <rms@gnu.org>
Fri, 25 Jan 2008 22:51:18 +0000 (22:51 +0000)
committerRichard M. Stallman <rms@gnu.org>
Fri, 25 Jan 2008 22:51:18 +0000 (22:51 +0000)
lisp/subr.el

index ca479de2687e1546a7e42c1a05cddd8c5f6cced1..5a7f88f76dd1a576ff3b7cefa0781f5b5040e338 100644 (file)
@@ -1103,7 +1103,17 @@ function, it is changed to a list of functions."
                (append hook-value (list function))
              (cons function hook-value))))
     ;; Set the actual variable
-    (if local (set hook hook-value) (set-default hook hook-value))))
+    (if local
+       (progn
+         ;; If HOOK isn't a permanent local,
+         ;; but FUNCTION wants to survive a change of modes,
+         ;; mark HOOK as partially permanent.
+         (and (symbolp function)
+              (get function 'permanent-local-hook)
+              (not (get hook 'permanent-local))
+              (put hook 'permanent-local 'permanent-local-hook))
+         (set hook hook-value))
+      (set-default hook hook-value))))
 
 (defun remove-hook (hook function &optional local)
   "Remove from the value of HOOK the function FUNCTION.