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. ...@@ -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. *** 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 * 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> 2010-03-12 Dan Nicolaescu <dann@ics.uci.edu>
Add support for shelving snapshots and for showing shelves. Add support for shelving snapshots and for showing shelves.
......
...@@ -1287,7 +1287,9 @@ a diff with \\[diff-reverse-direction]. ...@@ -1287,7 +1287,9 @@ a diff with \\[diff-reverse-direction].
(set (make-local-variable 'add-log-current-defun-function) (set (make-local-variable 'add-log-current-defun-function)
'diff-current-defun) 'diff-current-defun)
(set (make-local-variable 'add-log-buffer-file-name-function) (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 ;;;###autoload
(define-minor-mode diff-minor-mode (define-minor-mode diff-minor-mode
......
...@@ -3112,14 +3112,17 @@ is specified, returning t if it is specified." ...@@ -3112,14 +3112,17 @@ is specified, returning t if it is specified."
;; Otherwise, set the variables. ;; Otherwise, set the variables.
(enable-local-variables (enable-local-variables
(hack-local-variables-filter result nil) (hack-local-variables-filter result nil)
(when file-local-variables-alist (hack-local-variables-apply)))))
;; Any 'evals must run in the Right sequence.
(setq file-local-variables-alist (defun hack-local-variables-apply ()
(nreverse file-local-variables-alist)) (when file-local-variables-alist
(run-hooks 'before-hack-local-variables-hook) ;; Any 'evals must run in the Right sequence.
(dolist (elt file-local-variables-alist) (setq file-local-variables-alist
(hack-one-local-variable (car elt) (cdr elt)))) (nreverse file-local-variables-alist))
(run-hooks 'hack-local-variables-hook))))) (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) (defun safe-local-variable-p (sym val)
"Non-nil if SYM is safe as a file-local variable with value 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." ...@@ -3413,15 +3416,14 @@ is found. Returns the new class name."
Store the directory-local variables in `dir-local-variables-alist' Store the directory-local variables in `dir-local-variables-alist'
and `file-local-variables-alist', without applying them." and `file-local-variables-alist', without applying them."
(when (and enable-local-variables (when (and enable-local-variables
(buffer-file-name) (not (file-remote-p (or (buffer-file-name) default-directory))))
(not (file-remote-p (buffer-file-name))))
;; Find the variables file. ;; 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) (class nil)
(dir-name nil)) (dir-name nil))
(cond (cond
((stringp variables-file) ((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))) (setq class (dir-locals-read-from-file variables-file)))
((consp variables-file) ((consp variables-file)
(setq dir-name (nth 0 variables-file)) (setq dir-name (nth 0 variables-file))
...@@ -3438,6 +3440,10 @@ and `file-local-variables-alist', without applying them." ...@@ -3438,6 +3440,10 @@ and `file-local-variables-alist', without applying them."
(push elt dir-local-variables-alist)) (push elt dir-local-variables-alist))
(hack-local-variables-filter variables dir-name))))))) (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 (defcustom change-major-mode-with-file-name t
"Non-nil means \\[write-file] should set the major mode from the file name. "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). ...@@ -368,7 +368,8 @@ commands (under C-x v for VC, for example).
\\{log-edit-mode-map}" \\{log-edit-mode-map}"
(set (make-local-variable 'font-lock-defaults) (set (make-local-variable 'font-lock-defaults)
'(log-edit-font-lock-keywords t)) '(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) (defun log-edit-hide-buf (&optional buf where)
(when (setq buf (get-buffer (or buf log-edit-files-buf))) (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.") ...@@ -255,7 +255,8 @@ The match group number 1 should match the revision number itself.")
'log-view-beginning-of-defun) 'log-view-beginning-of-defun)
(set (make-local-variable 'end-of-defun-function) (set (make-local-variable 'end-of-defun-function)
'log-view-end-of-defun) '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 ;;;; Navigation
......
...@@ -162,7 +162,8 @@ menu items." ...@@ -162,7 +162,8 @@ menu items."
(remove-from-invisibility-spec 'foo) (remove-from-invisibility-spec 'foo)
(set (make-local-variable 'truncate-lines) t) (set (make-local-variable 'truncate-lines) t)
(set (make-local-variable 'font-lock-defaults) (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 () (defun vc-annotate-toggle-annotation-visibility ()
"Toggle whether or not the annotation is visible." "Toggle whether or not the annotation is visible."
......
...@@ -938,6 +938,7 @@ the *vc-dir* buffer. ...@@ -938,6 +938,7 @@ the *vc-dir* buffer.
;; Make sure that if the directory buffer is killed, the update ;; Make sure that if the directory buffer is killed, the update
;; process running in the background is also killed. ;; process running in the background is also killed.
(add-hook 'kill-buffer-query-functions 'vc-dir-kill-query nil t) (add-hook 'kill-buffer-query-functions 'vc-dir-kill-query nil t)
(hack-dir-local-variables-non-file-buffer)
(vc-dir-refresh))) (vc-dir-refresh)))
(defun vc-dir-headers (backend dir) (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