Mercurial > emacs
diff man/major.texi @ 25829:ac7e9e5e2ccb
#
author | Dave Love <fx@gnu.org> |
---|---|
date | Wed, 29 Sep 1999 15:17:24 +0000 |
parents | |
children | ea0fd9729fa7 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/major.texi Wed Sep 29 15:17:24 1999 +0000 @@ -0,0 +1,169 @@ +@c This is part of the Emacs manual. +@c Copyright (C) 1985, 86, 87, 93, 94, 95, 1997 Free Software Foundation, Inc. +@c See file emacs.texi for copying conditions. +@node Major Modes, Indentation, International, Top +@chapter Major Modes +@cindex major modes +@cindex mode, major +@kindex TAB @r{(and major modes)} +@kindex DEL @r{(and major modes)} +@kindex C-j @r{(and major modes)} + + Emacs provides many alternative @dfn{major modes}, each of which +customizes Emacs for editing text of a particular sort. The major modes +are mutually exclusive, and each buffer has one major mode at any time. +The mode line normally shows the name of the current major mode, in +parentheses (@pxref{Mode Line}). + + The least specialized major mode is called @dfn{Fundamental mode}. +This mode has no mode-specific redefinitions or variable settings, so +that each Emacs command behaves in its most general manner, and each +option is in its default state. For editing text of a specific type +that Emacs knows about, such as Lisp code or English text, you should +switch to the appropriate major mode, such as Lisp mode or Text mode. + + Selecting a major mode changes the meanings of a few keys to become +more specifically adapted to the language being edited. The ones that +are changed frequently are @key{TAB}, @key{DEL}, and @kbd{C-j}. The +prefix key @kbd{C-c} normally contains mode-specific commands. In +addition, the commands which handle comments use the mode to determine +how comments are to be delimited. Many major modes redefine the +syntactical properties of characters appearing in the buffer. +@xref{Syntax}. + + The major modes fall into three major groups. Lisp mode (which has +several variants), C mode, Fortran mode and others are for specific +programming languages. Text mode, Nroff mode, @TeX{} mode and Outline +mode are for editing English text. The remaining major modes are not +intended for use on users' files; they are used in buffers created for +specific purposes by Emacs, such as Dired mode for buffers made by Dired +(@pxref{Dired}), Mail mode for buffers made by @kbd{C-x m} +(@pxref{Sending Mail}), and Shell mode for buffers used for +communicating with an inferior shell process (@pxref{Interactive +Shell}). + + Most programming-language major modes specify that only blank lines +separate paragraphs. This is to make the paragraph commands useful. +(@xref{Paragraphs}.) They also cause Auto Fill mode to use the +definition of @key{TAB} to indent the new lines it creates. This is +because most lines in a program are usually indented. +(@xref{Indentation}.) + +@menu +* Choosing Modes:: How major modes are specified or chosen. +@end menu + +@node Choosing Modes,,Major Modes,Major Modes +@section How Major Modes are Chosen + +@cindex choosing a major mode + You can select a major mode explicitly for the current buffer, but +most of the time Emacs determines which mode to use based on the file +name or on special text in the file. + + Explicit selection of a new major mode is done with a @kbd{M-x} command. +From the name of a major mode, add @code{-mode} to get the name of a +command to select that mode. Thus, you can enter Lisp mode by executing +@kbd{M-x lisp-mode}. + +@vindex auto-mode-alist + When you visit a file, Emacs usually chooses the right major mode based +on the file's name. For example, files whose names end in @samp{.c} are +edited in C mode. The correspondence between file names and major modes is +controlled by the variable @code{auto-mode-alist}. Its value is a list in +which each element has this form, + +@example +(@var{regexp} . @var{mode-function}) +@end example + +@noindent +or this form, + +@example +(@var{regexp} @var{mode-function} @var{flag}) +@end example + +@noindent +For example, one element normally found in the list has the form +@code{(@t{"\\.c\\'"} . c-mode)}, and it is responsible for selecting C +mode for files whose names end in @file{.c}. (Note that @samp{\\} is +needed in Lisp syntax to include a @samp{\} in the string, which is +needed to suppress the special meaning of @samp{.} in regexps.) If the +element has the form @code{(@var{regexp} @var{mode-function} +@var{flag})} and @var{flag} is non-@code{nil}, then after calling +@var{function}, the suffix that matched @var{regexp} is discarded and +the list is searched again for another match. + + You can specify which major mode should be used for editing a certain +file by a special sort of text in the first nonblank line of the file. The +mode name should appear in this line both preceded and followed by +@samp{-*-}. Other text may appear on the line as well. For example, + +@example +;-*-Lisp-*- +@end example + +@noindent +tells Emacs to use Lisp mode. Such an explicit specification overrides +any defaulting based on the file name. Note how the semicolon is used +to make Lisp treat this line as a comment. + + Another format of mode specification is + +@example +-*- mode: @var{modename};-*- +@end example + +@noindent +which allows you to specify local variables as well, like this: + +@example +-*- mode: @var{modename}; @var{var}: @var{value}; @dots{} -*- +@end example + +@noindent +@xref{File Variables}, for more information about this. + +@vindex interpreter-mode-alist + When a file's contents begin with @samp{#!}, it can serve as an +executable shell command, which works by running an interpreter named on +the file's first line. The rest of the file is used as input to the +interpreter. + + When you visit such a file in Emacs, if the file's name does not +specify a major mode, Emacs uses the interpreter name on the first line +to choose a mode. If the first line is the name of a recognized +interpreter program, such as @samp{perl} or @samp{tcl}, Emacs uses a +mode appropriate for programs for that interpreter. The variable +@code{interpreter-mode-alist} specifies the correspondence between +interpreter program names and major modes. + + When the first line starts with @samp{#!}, you cannot (on many +systems) use the @samp{-*-} feature on the first line, because the +system would get confused when running the interpreter. So Emacs looks +for @samp{-*-} on the second line in such files as well as on the +first line. + +@vindex default-major-mode + When you visit a file that does not specify a major mode to use, or +when you create a new buffer with @kbd{C-x b}, the variable +@code{default-major-mode} specifies which major mode to use. Normally +its value is the symbol @code{fundamental-mode}, which specifies +Fundamental mode. If @code{default-major-mode} is @code{nil}, the major +mode is taken from the previously selected buffer. + +@findex normal-mode + If you change the major mode of a buffer, you can go back to the major +mode Emacs would choose automatically: use the command @kbd{M-x +normal-mode} to do this. This is the same function that +@code{find-file} calls to choose the major mode. It also processes +the file's local variables list if any. + +@vindex change-major-mode-with-file-name + The commands @kbd{C-x C-w} and @code{set-visited-file-name} change to +a new major mode if the new file name implies a mode (@pxref{Saving}). +However, this does not happen if the buffer contents specify a major +mode, and certain ``special'' major modes do not allow the mode to +change. You can turn off this mode-changing feature by setting +@code{change-major-mode-with-file-name} to @code{nil}.