aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChong Yidong <[email protected]>2009-07-19 01:05:17 +0000
committerChong Yidong <[email protected]>2009-07-19 01:05:17 +0000
commit89bf83cdc3abaf5f31fcc17f1ec3b649f0526af1 (patch)
tree0b4bce953fc7b55aeda8aeeaef61a1c4dd3303d2
parentd9e8a01896a4306b5d6e65d5f3008a4cc152712e (diff)
* files.el (hack-local-variables-filter): Rewrite.
-rw-r--r--lisp/ChangeLog4
-rw-r--r--lisp/files.el90
2 files changed, 45 insertions, 49 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 04a93dfe59..2d5465a3d4 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,7 @@
+2009-07-19 Chong Yidong <[email protected]>
+
+ * files.el (hack-local-variables-filter): Rewrite.
+
2009-07-19 Glenn Morris <[email protected]>
* progmodes/verilog-mode.el (verilog-error-regexp-add-xemacs):
diff --git a/lisp/files.el b/lisp/files.el
index 7568bd0492..5425626f82 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -2931,55 +2931,47 @@ VARIABLES is the alist of variable-value settings. This alist is
`file-local-variables-alist', without applying them.
DIR-NAME is a directory name if these settings come from
directory-local variables, or nil otherwise."
- ;; Strip any variables that are in `ignored-local-variables'.
- (dolist (ignored ignored-local-variables)
- (setq variables (assq-delete-all ignored variables)))
- ;; If `enable-local-eval' is nil, strip eval "variables".
- (if (null enable-local-eval)
- (setq variables (assq-delete-all 'eval variables)))
- (setq variables (nreverse variables))
- (when variables
- ;; Find those variables that we may want to save to
- ;; `safe-local-variable-values'.
- (let (risky-vars unsafe-vars)
- (dolist (elt variables)
- (let ((var (car elt))
- (val (cdr elt)))
- ;; Don't query about the fake variables.
- (or (memq var '(mode unibyte coding))
- (and (eq var 'eval)
- (or (eq enable-local-eval t)
- (hack-one-local-variable-eval-safep
- (eval (quote val)))))
- (safe-local-variable-p var val)
- (and (risky-local-variable-p var val)
- (push elt risky-vars))
- (push elt unsafe-vars))))
- (if (eq enable-local-variables :safe)
- ;; If caller wants only safe variables, store only these.
- (dolist (elt variables)
- (unless (or (member elt unsafe-vars)
- (member elt risky-vars))
- (let ((var (car elt)))
- (unless (eq var 'eval)
- (setq file-local-variables-alist
- (assq-delete-all var file-local-variables-alist)))
- (push elt file-local-variables-alist))))
- ;; Query, unless all are known safe or the user wants no
- ;; querying.
- (if (or (and (eq enable-local-variables t)
- (null unsafe-vars)
- (null risky-vars))
- (eq enable-local-variables :all)
- (hack-local-variables-confirm
- variables unsafe-vars risky-vars dir-name))
- (dolist (elt variables)
- (let ((var (car elt)))
- (unless (eq var 'eval)
- (setq file-local-variables-alist
- (assq-delete-all var file-local-variables-alist)))
- (push elt file-local-variables-alist))))))))
-
+ ;; Find those variables that we may want to save to
+ ;; `safe-local-variable-values'.
+ (let (all-vars risky-vars unsafe-vars)
+ (dolist (elt variables)
+ (let ((var (car elt))
+ (val (cdr elt)))
+ (cond ((memq var ignored-local-variables)
+ ;; Ignore any variable in `ignored-local-variables'.
+ nil)
+ ;; Obey `enable-local-eval'.
+ ((eq var 'eval)
+ (when enable-local-eval
+ (push elt all-vars)
+ (or (eq enable-local-eval t)
+ (hack-one-local-variable-eval-safep (eval (quote val)))
+ (push elt unsafe-vars))))
+ ;; Ignore duplicates in the present list.
+ ((assq var all-vars) nil)
+ ;; Accept known-safe variables.
+ ((or (memq var '(mode unibyte coding))
+ (safe-local-variable-p var val))
+ (push elt all-vars))
+ ;; The variable is either risky or unsafe:
+ ((not (eq enable-local-variables :safe))
+ (push elt all-vars)
+ (if (risky-local-variable-p var val)
+ (push elt risky-vars)
+ (push elt unsafe-vars))))))
+ (and all-vars
+ ;; Query, unless all vars are safe or user wants no querying.
+ (or (and (eq enable-local-variables t)
+ (null unsafe-vars)
+ (null risky-vars))
+ (eq enable-local-variables :all)
+ (hack-local-variables-confirm all-vars unsafe-vars
+ risky-vars dir-name))
+ (dolist (elt all-vars)
+ (unless (eq (car elt) 'eval)
+ (setq file-local-variables-alist
+ (assq-delete-all (car elt) file-local-variables-alist)))
+ (push elt file-local-variables-alist)))))
(defun hack-local-variables (&optional mode-only)
"Parse and put into effect this buffer's local variables spec.