Commit b8f82dc1 authored by Glenn Morris's avatar Glenn Morris
Browse files

Deprecate using "mode:" to enable minor modes (bug#8613)

* lisp/files.el (hack-one-local-variable-eval-safep):
Consider "eval: (foo-mode)" to be safe.

* doc/emacs/custom.texi (Specifying File Variables):
Deprecate using mode: for minor modes.

* etc/NEWS: Mention this.

* lisp/doc-view.el, lisp/net/soap-client.el:
Change "mode:" minor-mode file local variables to use "eval:".
parent 4f99f44b
2011-05-10 Glenn Morris <rgm@gnu.org>
* custom.texi (Specifying File Variables):
Deprecate using mode: for minor modes.
2011-05-07 Glenn Morris <rgm@gnu.org> 2011-05-07 Glenn Morris <rgm@gnu.org>
* cal-xtra.texi (Sexp Diary Entries): Mention diary-hebrew-birthday. * cal-xtra.texi (Sexp Diary Entries): Mention diary-hebrew-birthday.
......
...@@ -1085,9 +1085,8 @@ first line: ...@@ -1085,9 +1085,8 @@ first line:
You can specify any number of variable/value pairs in this way, each You can specify any number of variable/value pairs in this way, each
pair with a colon and semicolon as shown above. The special pair with a colon and semicolon as shown above. The special
variable/value pair @code{mode: @var{modename};}, if present, variable/value pair @code{mode: @var{modename};}, if present,
specifies a major or minor mode; if you use this to specify a major specifies a major mode, and should come first in the line. The
mode, it should come first in the line. The @var{value}s are used @var{value}s are used literally, and not evaluated.
literally, and not evaluated.
@findex add-file-local-variable-prop-line @findex add-file-local-variable-prop-line
@findex delete-file-local-variable-prop-line @findex delete-file-local-variable-prop-line
...@@ -1186,7 +1185,7 @@ list: ...@@ -1186,7 +1185,7 @@ list:
@itemize @itemize
@item @item
@code{mode} enables the specified major or minor mode. @code{mode} enables the specified major mode.
@item @item
@code{eval} evaluates the specified Lisp expression (the value @code{eval} evaluates the specified Lisp expression (the value
...@@ -1213,10 +1212,11 @@ variables as part of their initialization. ...@@ -1213,10 +1212,11 @@ variables as part of their initialization.
You can use the @code{mode} ``variable'' to enable minor modes as You can use the @code{mode} ``variable'' to enable minor modes as
well as the major modes; in fact, you can use it more than once, first well as the major modes; in fact, you can use it more than once, first
to set the major mode and then to enable minor modes which are to set the major mode and then to enable minor modes which are
specific to particular buffers. specific to particular buffers. Using @code{mode} for minor modes
is deprecated, though---instead, use @code{eval: (minor-mode)}.
Often, however, it is a mistake to enable minor modes this way. Often, however, it is a mistake to enable minor modes in file local
Most minor modes, like Auto Fill mode, represent individual user variables. Most minor modes, like Auto Fill mode, represent individual user
preferences. If you want to use a minor mode, it is better to set up preferences. If you want to use a minor mode, it is better to set up
major mode hooks with your init file to turn that minor mode on for major mode hooks with your init file to turn that minor mode on for
yourself alone (@pxref{Init File}), instead of using a local variable yourself alone (@pxref{Init File}), instead of using a local variable
......
...@@ -267,6 +267,10 @@ default, all themes included in Emacs are treated as safe. ...@@ -267,6 +267,10 @@ default, all themes included in Emacs are treated as safe.
** The user option `remote-file-name-inhibit-cache' controls whether ** The user option `remote-file-name-inhibit-cache' controls whether
the remote file-name cache is used for read access. the remote file-name cache is used for read access.
+++
** The use of a "mode: minor" specification in a file local variables section
to enable a minor-mode is deprecated. Instead, use "eval: (minor-mode)".
** The standalone programs lib-src/digest-doc and sorted-doc have been ** The standalone programs lib-src/digest-doc and sorted-doc have been
replaced with Lisp commands `doc-file-to-man' and `doc-file-to-info'. replaced with Lisp commands `doc-file-to-man' and `doc-file-to-info'.
......
2011-05-10 Glenn Morris <rgm@gnu.org>
Stefan Monnier <monnier@iro.umontreal.ca>
* files.el (hack-one-local-variable-eval-safep):
Consider "eval: (foo-mode)" to be safe. (Bug#8613)
2011-05-10 Glenn Morris <rgm@gnu.org> 2011-05-10 Glenn Morris <rgm@gnu.org>
* calendar/diary-lib.el (diary-list-entries-hook) * calendar/diary-lib.el (diary-list-entries-hook)
......
...@@ -1549,7 +1549,7 @@ See the command `doc-view-mode' for more information on this mode." ...@@ -1549,7 +1549,7 @@ See the command `doc-view-mode' for more information on this mode."
(provide 'doc-view) (provide 'doc-view)
;; Local Variables: ;; Local Variables:
;; mode: outline-minor ;; eval: (outline-minor-mode)
;; End: ;; End:
;;; doc-view.el ends here ;;; doc-view.el ends here
...@@ -3327,21 +3327,25 @@ It is dangerous if either of these conditions are met: ...@@ -3327,21 +3327,25 @@ It is dangerous if either of these conditions are met:
;; Certain functions can be allowed with safe arguments ;; Certain functions can be allowed with safe arguments
;; or can specify verification functions to try. ;; or can specify verification functions to try.
(and (symbolp (car exp)) (and (symbolp (car exp))
(let ((prop (get (car exp) 'safe-local-eval-function))) ;; Allow (minor)-modes calls with no arguments.
(cond ((eq prop t) ;; This obsoletes the use of "mode:" for such things. (Bug#8613)
(let ((ok t)) (or (and (null (cdr exp))
(dolist (arg (cdr exp)) (string-match "-mode\\'" (symbol-name (car exp))))
(unless (hack-one-local-variable-constantp arg) (let ((prop (get (car exp) 'safe-local-eval-function)))
(setq ok nil))) (cond ((eq prop t)
ok)) (let ((ok t))
((functionp prop) (dolist (arg (cdr exp))
(funcall prop exp)) (unless (hack-one-local-variable-constantp arg)
((listp prop) (setq ok nil)))
(let ((ok nil)) ok))
(dolist (function prop) ((functionp prop)
(if (funcall function exp) (funcall prop exp))
(setq ok t))) ((listp prop)
ok))))))) (let ((ok nil))
(dolist (function prop)
(if (funcall function exp)
(setq ok t)))
ok))))))))
(defun hack-one-local-variable (var val) (defun hack-one-local-variable (var val)
"Set local variable VAR with value VAL. "Set local variable VAR with value VAL.
......
...@@ -1745,7 +1745,7 @@ operations in a WSDL document." ...@@ -1745,7 +1745,7 @@ operations in a WSDL document."
;;; Local Variables: ;;; Local Variables:
;;; mode: outline-minor ;;; eval: (outline-minor-mode)
;;; outline-regexp: ";;;;+" ;;; outline-regexp: ";;;;+"
;;; End: ;;; End:
......
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