Based on information in the file name or in the file itself, Emacs automatically selects a major mode for the new buffer when a file is visited. It also processes local variables specified in the file text.
fundamental-mode
function does not
run any hooks; you're not supposed to customize it. (If you want Emacs
to behave differently in Fundamental mode, change the global
state of Emacs.)
set-auto-mode
,
then it runs hack-local-variables
to parse, and bind or
evaluate as appropriate, the file's local variables.
If the find-file argument to normal-mode
is non-nil
,
normal-mode
assumes that the find-file
function is calling
it. In this case, it may process a local variables list at the end of
the file and in the `-*-' line. The variable
enable-local-variables
controls whether to do so. See section `Local Variables in Files' in The GNU Emacs Manual, for
the syntax of the local variables section of a file.
If you run normal-mode
interactively, the argument
find-file is normally nil
. In this case,
normal-mode
unconditionally processes any local variables list.
normal-mode
uses condition-case
around the call to the
major mode function, so errors are caught and reported as a `File
mode specification error', followed by the original error message.
t
means process the local variables
lists unconditionally; nil
means ignore them; anything else means
ask the user what to do for each file. The default value is t
.
In addition to this list, any variable whose name has a non-nil
risky-local-variable
property is also ignored.
t
means process them
unconditionally; nil
means ignore them; anything else means ask
the user what to do for each file. The default value is maybe
.
auto-mode-alist
), on the
`#!' line (using interpreter-mode-alist
), or on the
file's local variables list. However, this function does not look for
the `mode:' local variable near the end of a file; the
hack-local-variables
function does that. See section `How Major Modes are Chosen' in The GNU Emacs Manual.
fundamental-mode
.
If the value of default-major-mode
is nil
, Emacs uses
the (previously) current buffer's major mode for the major mode of a new
buffer. However, if that major mode symbol has a mode-class
property with value special
, then it is not used for new buffers;
Fundamental mode is used instead. The modes that have this property are
those such as Dired and Rmail that are useful only with text that has
been specially prepared.
default-major-mode
. If that variable is nil
, it uses
the current buffer's major mode (if that is suitable).
The low-level primitives for creating buffers do not use this function,
but medium-level commands such as switch-to-buffer
and
find-file-noselect
use it whenever they create buffers.
lisp-interaction-mode
.
(regexp .
mode-function)
.
For example,
(("\\`/tmp/fol/" . text-mode) ("\\.texinfo\\'" . texinfo-mode) ("\\.texi\\'" . texinfo-mode) ("\\.el\\'" . emacs-lisp-mode) ("\\.c\\'" . c-mode) ("\\.h\\'" . c-mode) ...)
When you visit a file whose expanded file name (see section Functions that Expand Filenames) matches a regexp, set-auto-mode
calls the
corresponding mode-function. This feature enables Emacs to select
the proper major mode for most files.
If an element of auto-mode-alist
has the form (regexp
function t)
, then after calling function, Emacs searches
auto-mode-alist
again for a match against the portion of the file
name that did not match before. This feature is useful for
uncompression packages: an entry of the form ("\\.gz\\'"
function t)
can uncompress the file and then put the uncompressed
file in the proper mode according to the name sans `.gz'.
Here is an example of how to prepend several pattern pairs to
auto-mode-alist
. (You might use this sort of expression in your
`.emacs' file.)
(setq auto-mode-alist (append ;; File name (within directory) starts with a dot. '(("/\\.[^/]*\\'" . fundamental-mode) ;; File name has no dot. ("[^\\./]*\\'" . fundamental-mode) ;; File name ends in `.C'. ("\\.C\\'" . c++-mode)) auto-mode-alist))
(interpreter . mode)
; for
example, ("perl" . perl-mode)
is one element present by default.
The element says to use mode mode if the file specifies
an interpreter which matches interpreter. The value of
interpreter is actually a regular expression.
This variable is applicable only when the auto-mode-alist
does
not indicate which major mode to use.
The handling of enable-local-variables
documented for
normal-mode
actually takes place here. The argument force
usually comes from the argument find-file given to
normal-mode
.
Go to the first, previous, next, last section, table of contents.