Mercurial > emacs
annotate man/major.texi @ 71710:dbbc0b93cfeb
(Forcing Redisplay, Displaying Messages, Temporary Displays, Font Selection,
Auto Faces, Font Lookup, Fringe Indicators, Display Margins, Image Descriptors,
Showing Images, Image Cache, Button Types, Making Buttons, Manipulating
Buttons, Button Buffer Commands, Display Table Format, Glyphs): Remove
@tindex.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Sat, 08 Jul 2006 18:11:49 +0000 |
parents | dc2d5a6655a3 |
children | 53b637f954f2 c5406394f567 |
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, |
68639
dc2d5a6655a3
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
68547
diff
changeset
|
3 @c 2002, 2003, 2004, 2005, 2006 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 |
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
105 is a list of elements of this form: |
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}) |
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
109 @end example |
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
110 |
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
111 @noindent |
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
112 This looks like an element of @code{auto-mode-alist}, but it doesn't work |
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
113 the same: this @var{regexp} is matched against the text at the start |
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
114 of the buffer, not against the file name. @code{magic-mode-alist} |
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
115 takes priority over @code{auto-mode-alist}. |
9cc4be7413fb
(Choosing Modes): Document magic-mode-alist.
Richard M. Stallman <rms@gnu.org>
parents:
60109
diff
changeset
|
116 |
60109
b38fabf04e70
(Choosing Modes): Clarify.
Richard M. Stallman <rms@gnu.org>
parents:
59798
diff
changeset
|
117 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
|
118 special text in the first nonblank line of the file. The |
25829 | 119 mode name should appear in this line both preceded and followed by |
120 @samp{-*-}. Other text may appear on the line as well. For example, | |
121 | |
122 @example | |
123 ;-*-Lisp-*- | |
124 @end example | |
125 | |
126 @noindent | |
127 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
|
128 any defaults based on the file name. Note how the semicolon is used |
25829 | 129 to make Lisp treat this line as a comment. |
130 | |
131 Another format of mode specification is | |
132 | |
133 @example | |
134 -*- mode: @var{modename};-*- | |
135 @end example | |
136 | |
137 @noindent | |
138 which allows you to specify local variables as well, like this: | |
139 | |
140 @example | |
141 -*- mode: @var{modename}; @var{var}: @var{value}; @dots{} -*- | |
142 @end example | |
143 | |
144 @noindent | |
145 @xref{File Variables}, for more information about this. | |
146 | |
147 @vindex interpreter-mode-alist | |
148 When a file's contents begin with @samp{#!}, it can serve as an | |
149 executable shell command, which works by running an interpreter named on | |
150 the file's first line. The rest of the file is used as input to the | |
151 interpreter. | |
152 | |
153 When you visit such a file in Emacs, if the file's name does not | |
154 specify a major mode, Emacs uses the interpreter name on the first line | |
155 to choose a mode. If the first line is the name of a recognized | |
156 interpreter program, such as @samp{perl} or @samp{tcl}, Emacs uses a | |
157 mode appropriate for programs for that interpreter. The variable | |
158 @code{interpreter-mode-alist} specifies the correspondence between | |
159 interpreter program names and major modes. | |
160 | |
161 When the first line starts with @samp{#!}, you cannot (on many | |
162 systems) use the @samp{-*-} feature on the first line, because the | |
163 system would get confused when running the interpreter. So Emacs looks | |
164 for @samp{-*-} on the second line in such files as well as on the | |
165 first line. | |
166 | |
167 @vindex default-major-mode | |
168 When you visit a file that does not specify a major mode to use, or | |
169 when you create a new buffer with @kbd{C-x b}, the variable | |
170 @code{default-major-mode} specifies which major mode to use. Normally | |
171 its value is the symbol @code{fundamental-mode}, which specifies | |
172 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
|
173 mode is taken from the previously current buffer. |
25829 | 174 |
175 @findex normal-mode | |
176 If you change the major mode of a buffer, you can go back to the major | |
177 mode Emacs would choose automatically: use the command @kbd{M-x | |
178 normal-mode} to do this. This is the same function that | |
179 @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
|
180 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
|
181 @xref{File Variables}. |
25829 | 182 |
183 @vindex change-major-mode-with-file-name | |
184 The commands @kbd{C-x C-w} and @code{set-visited-file-name} change to | |
185 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
|
186 (@kbd{C-x C-s} does this too, if the buffer wasn't visiting a file.) |
25829 | 187 However, this does not happen if the buffer contents specify a major |
188 mode, and certain ``special'' major modes do not allow the mode to | |
189 change. You can turn off this mode-changing feature by setting | |
190 @code{change-major-mode-with-file-name} to @code{nil}. | |
52401 | 191 |
192 @ignore | |
193 arch-tag: f2558800-cf32-4839-8acb-7d3b4df2a155 | |
194 @end ignore |