]> code.delx.au - gnu-emacs/commitdiff
Add .dir-locals.el support for file-less buffers.
authorDan Nicolaescu <dann@ics.uci.edu>
Fri, 12 Mar 2010 08:04:54 +0000 (00:04 -0800)
committerDan Nicolaescu <dann@ics.uci.edu>
Fri, 12 Mar 2010 08:04:54 +0000 (00:04 -0800)
* files.el (hack-local-variables): Split out code to apply local
variable settings ...
(hack-local-variables-apply): ... here.  New function.
(hack-dir-local-variables): Use the default directory for when the
buffer does not have an associated file.
(hack-dir-local-variables-non-file-buffer): New function.
* diff-mode.el (diff-mode):
* vc-annotate.el (vc-annotate-mode):
* vc-dir.el (vc-dir-mode):
* log-edit.el (log-edit-mode):
* log-view.el (log-view-mode): Call hack-dir-local-variables-non-file-buffer.

etc/NEWS
lisp/ChangeLog
lisp/diff-mode.el
lisp/files.el
lisp/log-edit.el
lisp/log-view.el
lisp/vc-annotate.el
lisp/vc-dir.el

index 82c63f4449bb409206503bc26e03fc6d5b48b87f..fcc08e7b6e5c46a69bc3a68bf457c4e90ea414fb 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -40,6 +40,11 @@ so we will look at it and add it to the manual.
 
 *** vc-dir for Bzr supports viewing shelve contents and shelving snapshots.
 
+** Directory local variables can apply to file-less buffers.
+For example, adding "(diff-mode . ((mode . whitespace)))" to your
+.dir-locals.el file, will turn on `whitespace-mode' for *vc-diff*
+buffers.
+
 \f
 * New Modes and Packages in Emacs 24.1
 
index e7f4f17d549e1d67f26f7957427d7bb4cf7571c2..1e54ed03a90d0a6685f3a4028208d43ef79a8b73 100644 (file)
@@ -1,3 +1,21 @@
+2010-03-12    <dann@ics.uci.edu>
+
+
+2010-03-12  Dan Nicolaescu  <dann@ics.uci.edu>
+
+       Add .dir-locals.el support for file-less buffers.
+       * files.el (hack-local-variables): Split out code to apply local
+       variable settings ...
+       (hack-local-variables-apply): ... here.  New function.
+       (hack-dir-local-variables): Use the default directory for when the
+       buffer does not have an associated file.
+       (hack-dir-local-variables-non-file-buffer): New function.
+       * diff-mode.el (diff-mode):
+       * vc-annotate.el (vc-annotate-mode):
+       * vc-dir.el (vc-dir-mode):
+       * log-edit.el (log-edit-mode):
+       * log-view.el (log-view-mode): Call hack-dir-local-variables-non-file-buffer.
+
 2010-03-12  Dan Nicolaescu  <dann@ics.uci.edu>
 
        Add support for shelving snapshots and for showing shelves.
index 27f8318f91c6e81d6fb1f1b2acfb0489d21efad6..75ea98ba911794b4c785122cb977305650e9a870 100644 (file)
@@ -1287,7 +1287,9 @@ a diff with \\[diff-reverse-direction].
   (set (make-local-variable 'add-log-current-defun-function)
        'diff-current-defun)
   (set (make-local-variable 'add-log-buffer-file-name-function)
-       (lambda () (diff-find-file-name nil 'noprompt))))
+       (lambda () (diff-find-file-name nil 'noprompt)))
+  (unless (buffer-file-name)
+    (hack-dir-local-variables-non-file-buffer)))
 
 ;;;###autoload
 (define-minor-mode diff-minor-mode
index 99fa7ddf1b573acd256bde273b083854ebc4bbbb..07442d4ba14338eafb172e11111d852ff6462661 100644 (file)
@@ -3112,14 +3112,17 @@ is specified, returning t if it is specified."
          ;; Otherwise, set the variables.
          (enable-local-variables
           (hack-local-variables-filter result nil)
-          (when file-local-variables-alist
-            ;; Any 'evals must run in the Right sequence.
-            (setq file-local-variables-alist
-                  (nreverse file-local-variables-alist))
-            (run-hooks 'before-hack-local-variables-hook)
-            (dolist (elt file-local-variables-alist)
-              (hack-one-local-variable (car elt) (cdr elt))))
-          (run-hooks 'hack-local-variables-hook)))))
+          (hack-local-variables-apply)))))
+
+(defun hack-local-variables-apply ()
+  (when file-local-variables-alist
+    ;; Any 'evals must run in the Right sequence.
+    (setq file-local-variables-alist
+         (nreverse file-local-variables-alist))
+    (run-hooks 'before-hack-local-variables-hook)
+    (dolist (elt file-local-variables-alist)
+      (hack-one-local-variable (car elt) (cdr elt))))
+  (run-hooks 'hack-local-variables-hook))
 
 (defun safe-local-variable-p (sym val)
   "Non-nil if SYM is safe as a file-local variable with value VAL.
@@ -3413,15 +3416,14 @@ is found.  Returns the new class name."
 Store the directory-local variables in `dir-local-variables-alist'
 and `file-local-variables-alist', without applying them."
   (when (and enable-local-variables
-            (buffer-file-name)
-            (not (file-remote-p (buffer-file-name))))
+            (not (file-remote-p (or (buffer-file-name) default-directory))))
     ;; Find the variables file.
-    (let ((variables-file (dir-locals-find-file (buffer-file-name)))
+    (let ((variables-file (dir-locals-find-file (or (buffer-file-name) default-directory)))
          (class nil)
          (dir-name nil))
       (cond
        ((stringp variables-file)
-       (setq dir-name (file-name-directory (buffer-file-name)))
+       (setq dir-name (if (buffer-file-name) (file-name-directory (buffer-file-name)) default-directory))
        (setq class (dir-locals-read-from-file variables-file)))
        ((consp variables-file)
        (setq dir-name (nth 0 variables-file))
@@ -3438,6 +3440,10 @@ and `file-local-variables-alist', without applying them."
              (push elt dir-local-variables-alist))
            (hack-local-variables-filter variables dir-name)))))))
 
+(defun hack-dir-local-variables-non-file-buffer ()
+  (hack-dir-local-variables)
+  (hack-local-variables-apply))
+
 \f
 (defcustom change-major-mode-with-file-name t
   "Non-nil means \\[write-file] should set the major mode from the file name.
index 10c6d480d238be04d4385e76fc76844344ca84cc..e26521642da48c7b61a58da621d997e2b50bec7e 100644 (file)
@@ -368,7 +368,8 @@ commands (under C-x v for VC, for example).
 \\{log-edit-mode-map}"
   (set (make-local-variable 'font-lock-defaults)
        '(log-edit-font-lock-keywords t))
-  (make-local-variable 'log-edit-comment-ring-index))
+  (make-local-variable 'log-edit-comment-ring-index)
+  (hack-dir-local-variables-non-file-buffer))
 
 (defun log-edit-hide-buf (&optional buf where)
   (when (setq buf (get-buffer (or buf log-edit-files-buf)))
index 6fbe84296719e14a5233338422f5d985f704811f..5c454ead5fc010f22e80145130fd2172dd16c99d 100644 (file)
@@ -255,7 +255,8 @@ The match group number 1 should match the revision number itself.")
        'log-view-beginning-of-defun)
   (set (make-local-variable 'end-of-defun-function)
        'log-view-end-of-defun)
-  (set (make-local-variable 'cvs-minor-wrap-function) 'log-view-minor-wrap))
+  (set (make-local-variable 'cvs-minor-wrap-function) 'log-view-minor-wrap)
+  (hack-dir-local-variables-non-file-buffer))
 
 ;;;;
 ;;;; Navigation
index 71839443553ce1b7a9bff2054847a639ac998f91..1878fe8740f595438bd180374cd5ba2c4db11cec 100644 (file)
@@ -162,7 +162,8 @@ menu items."
   (remove-from-invisibility-spec 'foo)
   (set (make-local-variable 'truncate-lines) t)
   (set (make-local-variable 'font-lock-defaults)
-       '(vc-annotate-font-lock-keywords t)))
+       '(vc-annotate-font-lock-keywords t))
+  (hack-dir-local-variables-non-file-buffer))
 
 (defun vc-annotate-toggle-annotation-visibility ()
   "Toggle whether or not the annotation is visible."
index 2f661e8becf27b6aa21717fbf3d20f5d7da0f3e5..a0350eb3013193172b83b74e81cbc8d0c0f05c1a 100644 (file)
@@ -938,6 +938,7 @@ the *vc-dir* buffer.
     ;; Make sure that if the directory buffer is killed, the update
     ;; process running in the background is also killed.
     (add-hook 'kill-buffer-query-functions 'vc-dir-kill-query nil t)
+    (hack-dir-local-variables-non-file-buffer)
     (vc-dir-refresh)))
 
 (defun vc-dir-headers (backend dir)