Mercurial > emacs
annotate man/major.texi @ 83977:ad6c5a2913a8
Move to ../doc/lispref
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Thu, 06 Sep 2007 04:09:31 +0000 |
parents | 3d45362f1d38 |
children | 02b9a9aa5b0c 95d0cdf160ea |
rev | line source |
---|---|
25829 | 1 @c This is part of the Emacs manual. |
64890
3723093a21fd
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
62366
diff
changeset
|
2 @c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, |
75348 | 3 @c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. |
25829 | 4 @c See file emacs.texi for copying conditions. |
5 @node Major Modes, Indentation, International, Top | |
6 @chapter Major Modes | |
7 @cindex major modes | |
8 @cindex mode, major | |
9 @kindex TAB @r{(and major modes)} | |
10 @kindex DEL @r{(and major modes)} | |
11 @kindex C-j @r{(and major modes)} | |
12 | |
13 Emacs provides many alternative @dfn{major modes}, each of which | |
14 customizes Emacs for editing text of a particular sort. The major modes | |
15 are mutually exclusive, and each buffer has one major mode at any time. | |
16 The mode line normally shows the name of the current major mode, in | |
17 parentheses (@pxref{Mode Line}). | |
18 | |
19 The least specialized major mode is called @dfn{Fundamental mode}. | |
20 This mode has no mode-specific redefinitions or variable settings, so | |
21 that each Emacs command behaves in its most general manner, and each | |
59798
0816b427495a
Don't say just "option" when talking about variables.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
22 user option variable is in its default state. For editing text of a |
0816b427495a
Don't say just "option" when talking about variables.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
23 specific type that Emacs knows about, such as Lisp code or English |
0816b427495a
Don't say just "option" when talking about variables.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
24 text, you should switch to the appropriate major mode, such as Lisp |
0816b427495a
Don't say just "option" when talking about variables.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
25 mode or Text mode. |
25829 | 26 |
27 Selecting a major mode changes the meanings of a few keys to become | |
28 more specifically adapted to the language being edited. The ones that | |
29 are changed frequently are @key{TAB}, @key{DEL}, and @kbd{C-j}. The | |
30 prefix key @kbd{C-c} normally contains mode-specific commands. In | |
31 addition, the commands which handle comments use the mode to determine | |
32 how comments are to be delimited. Many major modes redefine the | |
33 syntactical properties of characters appearing in the buffer. | |
34 @xref{Syntax}. | |
35 | |
38461
23f63206a867
Proofreading fixes from Chris Green <chris_e_green@yahoo.com>.
Eli Zaretskii <eliz@gnu.org>
parents:
37986
diff
changeset
|
36 The major modes fall into three major groups. The first group |
38745 | 37 contains modes for normal text, either plain or with mark-up. It |
38 includes Text mode, HTML mode, SGML mode, @TeX{} mode and Outline | |
39 mode. The second group contains modes for specific programming | |
40 languages. These include Lisp mode (which has several variants), C | |
41 mode, Fortran mode, and others. The remaining major modes are not | |
42 intended for use on users' files; they are used in buffers created for | |
43 specific purposes by Emacs, such as Dired mode for buffers made by | |
44 Dired (@pxref{Dired}), Mail mode for buffers made by @kbd{C-x m} | |
45 (@pxref{Sending Mail}), and Shell mode for buffers used for | |
46 communicating with an inferior shell process (@pxref{Interactive | |
47 Shell}). | |
25829 | 48 |
49 Most programming-language major modes specify that only blank lines | |
50 separate paragraphs. This is to make the paragraph commands useful. | |
51 (@xref{Paragraphs}.) They also cause Auto Fill mode to use the | |
52 definition of @key{TAB} to indent the new lines it creates. This is | |
28550 | 53 because most lines in a program are usually indented |
54 (@pxref{Indentation}). | |
25829 | 55 |
56 @menu | |
57 * Choosing Modes:: How major modes are specified or chosen. | |
58 @end menu | |
59 | |
60 @node Choosing Modes,,Major Modes,Major Modes | |
61 @section How Major Modes are Chosen | |
62 | |
63 @cindex choosing a major mode | |
64 You can select a major mode explicitly for the current buffer, but | |
65 most of the time Emacs determines which mode to use based on the file | |
66 name or on special text in the file. | |
67 | |
68547 | 68 To explicitly select a new major, you use an @kbd{M-x} command. |
69 Take the name of a major mode and add @code{-mode} to get the name of | |
70 the command to select that mode. Thus, you can enter Lisp mode by | |
71 executing @kbd{M-x lisp-mode}. | |
25829 | 72 |
73 @vindex auto-mode-alist | |
74 When you visit a file, Emacs usually chooses the right major mode based | |
75 on the file's name. For example, files whose names end in @samp{.c} are | |
76 edited in C mode. The correspondence between file names and major modes is | |
77 controlled by the variable @code{auto-mode-alist}. Its value is a list in | |
78 which each element has this form, | |
79 | |
80 @example | |
81 (@var{regexp} . @var{mode-function}) | |
82 @end example | |
83 | |
84 @noindent | |
85 or this form, | |
86 | |
87 @example | |
88 (@var{regexp} @var{mode-function} @var{flag}) | |
89 @end example | |
90 | |
91 @noindent | |
92 For example, one element normally found in the list has the form | |
93 @code{(@t{"\\.c\\'"} . c-mode)}, and it is responsible for selecting C | |
94 mode for files whose names end in @file{.c}. (Note that @samp{\\} is | |
38461
23f63206a867
Proofreading fixes from Chris Green <chris_e_green@yahoo.com>.
Eli Zaretskii <eliz@gnu.org>
parents:
37986
diff
changeset
|
95 needed in Lisp syntax to include a @samp{\} in the string, which must |
60109
b38fabf04e70
(Choosing Modes): Clarify.
Richard M. Stallman <rms@gnu.org>
parents:
59798
diff
changeset
|
96 be used to suppress the special meaning of @samp{.} in regexps.) If |
b38fabf04e70
(Choosing Modes): Clarify.
Richard M. Stallman <rms@gnu.org>
parents:
59798
diff
changeset
|
97 the element has the form @code{(@var{regexp} @var{mode-function} |
25829 | 98 @var{flag})} and @var{flag} is non-@code{nil}, then after calling |
60109
b38fabf04e70
(Choosing Modes): Clarify.
Richard M. Stallman <rms@gnu.org>
parents:
59798
diff
changeset
|
99 @var{mode-function}, Emacs discards the suffix that matched |
b38fabf04e70
(Choosing Modes): Clarify.
Richard M. Stallman <rms@gnu.org>
parents:
59798
diff
changeset
|
100 @var{regexp} and searches the list again for another match. |
25829 | 101 |
61465
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
102 @vindex magic-mode-alist |
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
103 Sometimes the major mode is determined from the way the file's text |
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
104 begins. The variable @code{magic-mode-alist} controls this. Its value |
74741
53b637f954f2
(Choosing Modes): Describe match-function elements for
Kim F. Storm <storm@cua.dk>
parents:
68639
diff
changeset
|
105 is a list of elements of these forms: |
61465
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
106 |
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
107 @example |
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
108 (@var{regexp} . @var{mode-function}) |
74741
53b637f954f2
(Choosing Modes): Describe match-function elements for
Kim F. Storm <storm@cua.dk>
parents:
68639
diff
changeset
|
109 (@var{match-function} . @var{mode-function}) |
61465
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
110 @end example |
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
111 |
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
112 @noindent |
74741
53b637f954f2
(Choosing Modes): Describe match-function elements for
Kim F. Storm <storm@cua.dk>
parents:
68639
diff
changeset
|
113 The first form looks like an element of @code{auto-mode-alist}, but it |
53b637f954f2
(Choosing Modes): Describe match-function elements for
Kim F. Storm <storm@cua.dk>
parents:
68639
diff
changeset
|
114 doesn't work the same: this @var{regexp} is matched against the text |
53b637f954f2
(Choosing Modes): Describe match-function elements for
Kim F. Storm <storm@cua.dk>
parents:
68639
diff
changeset
|
115 at the start of the buffer, not against the file name. Likewise, the |
53b637f954f2
(Choosing Modes): Describe match-function elements for
Kim F. Storm <storm@cua.dk>
parents:
68639
diff
changeset
|
116 second form calls @var{match-function} at the beginning of the buffer, |
53b637f954f2
(Choosing Modes): Describe match-function elements for
Kim F. Storm <storm@cua.dk>
parents:
68639
diff
changeset
|
117 and if the function returns non-@code{nil}, the @var{mode-function} is |
53b637f954f2
(Choosing Modes): Describe match-function elements for
Kim F. Storm <storm@cua.dk>
parents:
68639
diff
changeset
|
118 called. @code{magic-mode-alist} takes priority over |
53b637f954f2
(Choosing Modes): Describe match-function elements for
Kim F. Storm <storm@cua.dk>
parents:
68639
diff
changeset
|
119 @code{auto-mode-alist}. |
61465
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
120 |
60109
b38fabf04e70
(Choosing Modes): Clarify.
Richard M. Stallman <rms@gnu.org>
parents:
59798
diff
changeset
|
121 You can specify the major mode to use for editing a certain file by |
b38fabf04e70
(Choosing Modes): Clarify.
Richard M. Stallman <rms@gnu.org>
parents:
59798
diff
changeset
|
122 special text in the first nonblank line of the file. The |
25829 | 123 mode name should appear in this line both preceded and followed by |
124 @samp{-*-}. Other text may appear on the line as well. For example, | |
125 | |
126 @example | |
127 ;-*-Lisp-*- | |
128 @end example | |
129 | |
130 @noindent | |
131 tells Emacs to use Lisp mode. Such an explicit specification overrides | |
38461
23f63206a867
Proofreading fixes from Chris Green <chris_e_green@yahoo.com>.
Eli Zaretskii <eliz@gnu.org>
parents:
37986
diff
changeset
|
132 any defaults based on the file name. Note how the semicolon is used |
25829 | 133 to make Lisp treat this line as a comment. |
134 | |
135 Another format of mode specification is | |
136 | |
137 @example | |
138 -*- mode: @var{modename};-*- | |
139 @end example | |
140 | |
141 @noindent | |
142 which allows you to specify local variables as well, like this: | |
143 | |
144 @example | |
145 -*- mode: @var{modename}; @var{var}: @var{value}; @dots{} -*- | |
146 @end example | |
147 | |
148 @noindent | |
149 @xref{File Variables}, for more information about this. | |
150 | |
75005
eda5cae57c32
(Choosing Modes): Document auto-mode-case-fond.
Kim F. Storm <storm@cua.dk>
parents:
74741
diff
changeset
|
151 @vindex auto-mode-case-fold |
eda5cae57c32
(Choosing Modes): Document auto-mode-case-fond.
Kim F. Storm <storm@cua.dk>
parents:
74741
diff
changeset
|
152 On systems with case-insensitive file names, only a single |
eda5cae57c32
(Choosing Modes): Document auto-mode-case-fond.
Kim F. Storm <storm@cua.dk>
parents:
74741
diff
changeset
|
153 case-insensitive search through the @code{auto-mode-alist} is made. |
eda5cae57c32
(Choosing Modes): Document auto-mode-case-fond.
Kim F. Storm <storm@cua.dk>
parents:
74741
diff
changeset
|
154 On other systems, Emacs normally performs a single case-sensitive |
eda5cae57c32
(Choosing Modes): Document auto-mode-case-fond.
Kim F. Storm <storm@cua.dk>
parents:
74741
diff
changeset
|
155 search through the alist, but if you set this variable to a |
eda5cae57c32
(Choosing Modes): Document auto-mode-case-fond.
Kim F. Storm <storm@cua.dk>
parents:
74741
diff
changeset
|
156 non-@code{nil} value, Emacs will perform a second case-insensitive |
eda5cae57c32
(Choosing Modes): Document auto-mode-case-fond.
Kim F. Storm <storm@cua.dk>
parents:
74741
diff
changeset
|
157 search if the first search fails. |
eda5cae57c32
(Choosing Modes): Document auto-mode-case-fond.
Kim F. Storm <storm@cua.dk>
parents:
74741
diff
changeset
|
158 |
25829 | 159 @vindex interpreter-mode-alist |
160 When a file's contents begin with @samp{#!}, it can serve as an | |
161 executable shell command, which works by running an interpreter named on | |
162 the file's first line. The rest of the file is used as input to the | |
163 interpreter. | |
164 | |
165 When you visit such a file in Emacs, if the file's name does not | |
166 specify a major mode, Emacs uses the interpreter name on the first line | |
167 to choose a mode. If the first line is the name of a recognized | |
168 interpreter program, such as @samp{perl} or @samp{tcl}, Emacs uses a | |
169 mode appropriate for programs for that interpreter. The variable | |
170 @code{interpreter-mode-alist} specifies the correspondence between | |
171 interpreter program names and major modes. | |
172 | |
173 When the first line starts with @samp{#!}, you cannot (on many | |
174 systems) use the @samp{-*-} feature on the first line, because the | |
175 system would get confused when running the interpreter. So Emacs looks | |
176 for @samp{-*-} on the second line in such files as well as on the | |
177 first line. | |
178 | |
179 @vindex default-major-mode | |
180 When you visit a file that does not specify a major mode to use, or | |
181 when you create a new buffer with @kbd{C-x b}, the variable | |
182 @code{default-major-mode} specifies which major mode to use. Normally | |
183 its value is the symbol @code{fundamental-mode}, which specifies | |
184 Fundamental mode. If @code{default-major-mode} is @code{nil}, the major | |
37986
e11682cc1516
selected buffer => current buffer.
Richard M. Stallman <rms@gnu.org>
parents:
37421
diff
changeset
|
185 mode is taken from the previously current buffer. |
25829 | 186 |
187 @findex normal-mode | |
188 If you change the major mode of a buffer, you can go back to the major | |
189 mode Emacs would choose automatically: use the command @kbd{M-x | |
190 normal-mode} to do this. This is the same function that | |
191 @code{find-file} calls to choose the major mode. It also processes | |
62366
1cac74a672b0
(Choosing Modes): normal-mode processes the -*- line. Add xref.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61465
diff
changeset
|
192 the file's @samp{-*-} line or local variables list (if any). |
1cac74a672b0
(Choosing Modes): normal-mode processes the -*- line. Add xref.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61465
diff
changeset
|
193 @xref{File Variables}. |
25829 | 194 |
195 @vindex change-major-mode-with-file-name | |
196 The commands @kbd{C-x C-w} and @code{set-visited-file-name} change to | |
197 a new major mode if the new file name implies a mode (@pxref{Saving}). | |
60109
b38fabf04e70
(Choosing Modes): Clarify.
Richard M. Stallman <rms@gnu.org>
parents:
59798
diff
changeset
|
198 (@kbd{C-x C-s} does this too, if the buffer wasn't visiting a file.) |
25829 | 199 However, this does not happen if the buffer contents specify a major |
200 mode, and certain ``special'' major modes do not allow the mode to | |
201 change. You can turn off this mode-changing feature by setting | |
202 @code{change-major-mode-with-file-name} to @code{nil}. | |
52401 | 203 |
204 @ignore | |
205 arch-tag: f2558800-cf32-4839-8acb-7d3b4df2a155 | |
206 @end ignore |