summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Nicolaescu <dann@ics.uci.edu>2010-03-12 00:04:54 -0800
committerDan Nicolaescu <dann@ics.uci.edu>2010-03-12 00:04:54 -0800
commit8117868f0ce67b6db33081f77b6715a6c10e45b8 (patch)
treeaa88ce85bb40558a9d726141b2bf9a3cebccba5e
parent49a62e8aad8eee350511104415062f6b82f51973 (diff)
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.
-rw-r--r--etc/NEWS5
-rw-r--r--lisp/ChangeLog18
-rw-r--r--lisp/diff-mode.el4
-rw-r--r--lisp/files.el30
-rw-r--r--lisp/log-edit.el3
-rw-r--r--lisp/log-view.el3
-rw-r--r--lisp/vc-annotate.el3
-rw-r--r--lisp/vc-dir.el1
8 files changed, 51 insertions, 16 deletions
diff --git a/etc/NEWS b/etc/NEWS
index 82c63f4449..fcc08e7b6e 100644
--- 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.
+
* New Modes and Packages in Emacs 24.1
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index e7f4f17d54..1e54ed03a9 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -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.
diff --git a/lisp/diff-mode.el b/lisp/diff-mode.el
index 27f8318f91..75ea98ba91 100644
--- a/lisp/diff-mode.el
+++ b/lisp/diff-mode.el
@@ -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
diff --git a/lisp/files.el b/lisp/files.el
index 99fa7ddf1b..07442d4ba1 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -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))
+
(defcustom change-major-mode-with-file-name t
"Non-nil means \\[write-file] should set the major mode from the file name.
diff --git a/lisp/log-edit.el b/lisp/log-edit.el
index 10c6d480d2..e26521642d 100644
--- a/lisp/log-edit.el
+++ b/lisp/log-edit.el
@@ -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)))
diff --git a/lisp/log-view.el b/lisp/log-view.el
index 6fbe842967..5c454ead5f 100644
--- a/lisp/log-view.el
+++ b/lisp/log-view.el
@@ -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
diff --git a/lisp/vc-annotate.el b/lisp/vc-annotate.el
index 7183944355..1878fe8740 100644
--- a/lisp/vc-annotate.el
+++ b/lisp/vc-annotate.el
@@ -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."
diff --git a/lisp/vc-dir.el b/lisp/vc-dir.el
index 2f661e8bec..a0350eb301 100644
--- a/lisp/vc-dir.el
+++ b/lisp/vc-dir.el
@@ -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)