emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r110842: * lisp/files.el (hack-one-lo


From: Stefan Monnier
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r110842: * lisp/files.el (hack-one-local-variable--obsolete): New function.
Date: Thu, 08 Nov 2012 14:50:08 -0500
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 110842
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Thu 2012-11-08 14:50:08 -0500
message:
  * lisp/files.el (hack-one-local-variable--obsolete): New function.
  (hack-one-local-variable): Use it for obsolete settings.
modified:
  lisp/ChangeLog
  lisp/files.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2012-11-08 19:45:58 +0000
+++ b/lisp/ChangeLog    2012-11-08 19:50:08 +0000
@@ -1,5 +1,8 @@
 2012-11-08  Stefan Monnier  <address@hidden>
 
+       * files.el (hack-one-local-variable--obsolete): New function.
+       (hack-one-local-variable): Use it for obsolete settings.
+
        * subr.el (locate-user-emacs-file): If both old and new name exist, use
        the new name.
 

=== modified file 'lisp/files.el'
--- a/lisp/files.el     2012-10-29 13:28:41 +0000
+++ b/lisp/files.el     2012-11-08 19:50:08 +0000
@@ -3387,30 +3387,39 @@
                                (setq ok t)))
                          ok))))))))
 
+(defun hack-one-local-variable--obsolete (var)
+  (let ((o (get var 'byte-obsolete-variable)))
+    (when o
+      (let ((instead (nth 0 o))
+            (since (nth 2 o)))
+        (message "%s is obsolete%s; %s"
+                 var (if since (format " (since %s)" since))
+                 (if (stringp instead) instead
+                   (format "use `%s' instead" instead)))))))
+
 (defun hack-one-local-variable (var val)
   "Set local variable VAR with value VAL.
 If VAR is `mode', call `VAL-mode' as a function unless it's
 already the major mode."
-  (cond ((eq var 'mode)
-        (let ((mode (intern (concat (downcase (symbol-name val))
-                                    "-mode"))))
-          (unless (eq (indirect-function mode)
-                      (indirect-function major-mode))
-            (if (memq mode minor-mode-list)
-                ;; A minor mode must be passed an argument.
-                ;; Otherwise, if the user enables the minor mode in a
-                ;; major mode hook, this would toggle it off.
-                (funcall mode 1)
-              (funcall mode)))))
-       ((eq var 'eval)
-        (save-excursion (eval val)))
-       (t
-         ;; Make sure the string has no text properties.
-         ;; Some text properties can get evaluated in various ways,
-         ;; so it is risky to put them on with a local variable list.
-         (if (stringp val)
-             (set-text-properties 0 (length val) nil val))
-         (set (make-local-variable var) val))))
+  (pcase var
+    (`mode
+     (let ((mode (intern (concat (downcase (symbol-name val))
+                                 "-mode"))))
+       (unless (eq (indirect-function mode)
+                   (indirect-function major-mode))
+         (funcall mode))))
+    (`eval
+     (pcase val
+       (`(add-hook ',hook . ,_) (hack-one-local-variable--obsolete hook)))
+     (save-excursion (eval val)))
+    (_
+     (hack-one-local-variable--obsolete var)
+     ;; Make sure the string has no text properties.
+     ;; Some text properties can get evaluated in various ways,
+     ;; so it is risky to put them on with a local variable list.
+     (if (stringp val)
+         (set-text-properties 0 (length val) nil val))
+     (set (make-local-variable var) val))))
 
 ;;; Handling directory-local variables, aka project settings.
 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]