Prevent hack-local-variables being called from the fundamental-mode mode call
early in normal-mode. This fixes bug #23460 and bug #23463.
* lisp/files.el (normal-mode) Replace call to fundamental-mode with calls to
the things it calls, with the exception of hack-local-variables.
* etc/NEWS: Add an entry to note the calling of hack-local-variables at each
major mode initialization.
probability of data corruption due to techniques Emacs uses to recover
in these situations.
probability of data corruption due to techniques Emacs uses to recover
in these situations.
++++
+** File local and directory local variables are now initialized each
+time the major mode is set, not just when the file is first visited.
+These local variables will thus not vanish on setting a major mode.
+
+++
** A second dir-local file (.dir-locals-2.el) is now accepted.
See the variable 'dir-locals-file-2' for more information.
+++
** A second dir-local file (.dir-locals-2.el) is now accepted.
See the variable 'dir-locals-file-2' for more information.
or from Lisp without specifying the optional argument FIND-FILE;
in that case, this function acts as if `enable-local-variables' were t."
(interactive)
or from Lisp without specifying the optional argument FIND-FILE;
in that case, this function acts as if `enable-local-variables' were t."
(interactive)
+ (kill-all-local-variables)
+ (unless delay-mode-hooks
+ (run-hooks 'change-major-mode-after-body-hook
+ 'after-change-major-mode-hook))
(let ((enable-local-variables (or (not find-file) enable-local-variables)))
;; FIXME this is less efficient than it could be, since both
;; s-a-m and h-l-v may parse the same regions, looking for "mode:".
(let ((enable-local-variables (or (not find-file) enable-local-variables)))
;; FIXME this is less efficient than it could be, since both
;; s-a-m and h-l-v may parse the same regions, looking for "mode:".