Commit 8117868f authored by Dan Nicolaescu's avatar Dan Nicolaescu

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.
parent 49a62e8a
......@@ -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
......
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.
......
......@@ -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
......
......@@ -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.
......
......@@ -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)))
......
......@@ -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
......
......@@ -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."
......
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment