From b8f82dc15fc7370329930323082d9faf2a5fc7ad Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 9 May 2011 19:31:42 -0700 Subject: [PATCH] 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:". --- doc/emacs/ChangeLog | 5 +++++ doc/emacs/custom.texi | 14 +++++++------- etc/NEWS | 4 ++++ lisp/ChangeLog | 6 ++++++ lisp/doc-view.el | 2 +- lisp/files.el | 34 +++++++++++++++++++--------------- lisp/net/soap-client.el | 2 +- 7 files changed, 43 insertions(+), 24 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index b417e806245..d3521dcd524 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,8 @@ +2011-05-10 Glenn Morris + + * custom.texi (Specifying File Variables): + Deprecate using mode: for minor modes. + 2011-05-07 Glenn Morris * cal-xtra.texi (Sexp Diary Entries): Mention diary-hebrew-birthday. diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi index 7a696df319b..d7a99d49d60 100644 --- a/doc/emacs/custom.texi +++ b/doc/emacs/custom.texi @@ -1085,9 +1085,8 @@ first line: You can specify any number of variable/value pairs in this way, each pair with a colon and semicolon as shown above. The special variable/value pair @code{mode: @var{modename};}, if present, -specifies a major or minor mode; if you use this to specify a major -mode, it should come first in the line. The @var{value}s are used -literally, and not evaluated. +specifies a major mode, and should come first in the line. The +@var{value}s are used literally, and not evaluated. @findex add-file-local-variable-prop-line @findex delete-file-local-variable-prop-line @@ -1186,7 +1185,7 @@ list: @itemize @item -@code{mode} enables the specified major or minor mode. +@code{mode} enables the specified major mode. @item @code{eval} evaluates the specified Lisp expression (the value @@ -1213,10 +1212,11 @@ variables as part of their initialization. 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 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. -Most minor modes, like Auto Fill mode, represent individual user + Often, however, it is a mistake to enable minor modes in file local +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 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 diff --git a/etc/NEWS b/etc/NEWS index 9e9778c6ac1..7da456dfc3d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -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 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 replaced with Lisp commands `doc-file-to-man' and `doc-file-to-info'. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cbb03baa3bf..50c3022ba0a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2011-05-10 Glenn Morris + Stefan Monnier + + * files.el (hack-one-local-variable-eval-safep): + Consider "eval: (foo-mode)" to be safe. (Bug#8613) + 2011-05-10 Glenn Morris * calendar/diary-lib.el (diary-list-entries-hook) diff --git a/lisp/doc-view.el b/lisp/doc-view.el index ab0d6bf837b..7bd1a55011e 100644 --- a/lisp/doc-view.el +++ b/lisp/doc-view.el @@ -1549,7 +1549,7 @@ See the command `doc-view-mode' for more information on this mode." (provide 'doc-view) ;; Local Variables: -;; mode: outline-minor +;; eval: (outline-minor-mode) ;; End: ;;; doc-view.el ends here diff --git a/lisp/files.el b/lisp/files.el index 72cfc89ef8c..336a0a436f9 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -3327,21 +3327,25 @@ It is dangerous if either of these conditions are met: ;; Certain functions can be allowed with safe arguments ;; or can specify verification functions to try. (and (symbolp (car exp)) - (let ((prop (get (car exp) 'safe-local-eval-function))) - (cond ((eq prop t) - (let ((ok t)) - (dolist (arg (cdr exp)) - (unless (hack-one-local-variable-constantp arg) - (setq ok nil))) - ok)) - ((functionp prop) - (funcall prop exp)) - ((listp prop) - (let ((ok nil)) - (dolist (function prop) - (if (funcall function exp) - (setq ok t))) - ok))))))) + ;; Allow (minor)-modes calls with no arguments. + ;; This obsoletes the use of "mode:" for such things. (Bug#8613) + (or (and (null (cdr exp)) + (string-match "-mode\\'" (symbol-name (car exp)))) + (let ((prop (get (car exp) 'safe-local-eval-function))) + (cond ((eq prop t) + (let ((ok t)) + (dolist (arg (cdr exp)) + (unless (hack-one-local-variable-constantp arg) + (setq ok nil))) + ok)) + ((functionp prop) + (funcall prop exp)) + ((listp prop) + (let ((ok nil)) + (dolist (function prop) + (if (funcall function exp) + (setq ok t))) + ok)))))))) (defun hack-one-local-variable (var val) "Set local variable VAR with value VAL. diff --git a/lisp/net/soap-client.el b/lisp/net/soap-client.el index b5453733d1d..9862332bf3f 100644 --- a/lisp/net/soap-client.el +++ b/lisp/net/soap-client.el @@ -1745,7 +1745,7 @@ operations in a WSDL document." ;;; Local Variables: -;;; mode: outline-minor +;;; eval: (outline-minor-mode) ;;; outline-regexp: ";;;;+" ;;; End: -- 2.39.5