428
|
1
|
|
2 @node Major Modes, Indentation, Mule, Top
|
|
3 @chapter Major Modes
|
|
4 @cindex major modes
|
|
5 @kindex TAB
|
|
6 @kindex DEL
|
|
7 @kindex LFD
|
|
8
|
|
9 Emacs has many different @dfn{major modes}, each of which customizes
|
|
10 Emacs for editing text of a particular sort. The major modes are mutually
|
|
11 exclusive; at any time, each buffer has one major mode. The mode line
|
|
12 normally contains the name of the current major mode in parentheses.
|
|
13 @xref{Mode Line}.
|
|
14
|
|
15 The least specialized major mode is called @dfn{Fundamental mode}. This
|
|
16 mode has no mode-specific redefinitions or variable settings. Each
|
|
17 Emacs command behaves in its most general manner, and each option is in its
|
|
18 default state. For editing any specific type of text, such as Lisp code or
|
|
19 English text, you should switch to the appropriate major mode, such as Lisp
|
|
20 mode or Text mode.
|
|
21
|
|
22 Selecting a major mode changes the meanings of a few keys to become
|
|
23 more specifically adapted to the language being edited. @key{TAB},
|
|
24 @key{DEL}, and @key{LFD} are changed frequently. In addition, commands
|
|
25 which handle comments use the mode to determine how to delimit comments.
|
|
26 Many major modes redefine the syntactical properties of characters
|
|
27 appearing in the buffer. @xref{Syntax}.
|
|
28
|
2522
|
29 The major modes fall into three major groups. Programming modes
|
|
30 (@pxref{Programs}) are for specific programming languages. Text modes
|
|
31 (like Nroff mode, @TeX{} mode, Outline mode, XML mode, etc.@:) are for
|
|
32 editing human readable text. The remaining major modes are not intended
|
|
33 for direct use in editing user files; they are used in buffers created
|
|
34 by Emacs for specific purposes. Examples of such modes include Dired
|
|
35 mode which is used for buffers made by Dired (@pxref{Dired}), Mail mode
|
|
36 for buffers made by @kbd{C-x m} (@pxref{Sending Mail}), and Shell mode
|
|
37 for buffers used for communicating with an inferior shell process
|
428
|
38 (@pxref{Interactive Shell}).
|
|
39
|
|
40 Most programming language major modes specify that only blank lines
|
|
41 separate paragraphs. This is so that the paragraph commands remain useful.
|
|
42 @xref{Paragraphs}. They also cause Auto Fill mode to use the definition of
|
|
43 @key{TAB} to indent the new lines it creates. This is because most lines
|
|
44 in a program are usually indented. @xref{Indentation}.
|
|
45
|
|
46 @menu
|
|
47 * Choosing Modes:: How major modes are specified or chosen.
|
2522
|
48 * Mode Hooks:: Customizing a major mode
|
428
|
49 @end menu
|
|
50
|
2522
|
51 @node Choosing Modes, Mode Hooks, Major Modes, Major Modes
|
428
|
52 @section Choosing Major Modes
|
|
53
|
|
54 You can select a major mode explicitly for the current buffer, but
|
|
55 most of the time Emacs determines which mode to use based on the file
|
|
56 name or some text in the file.
|
|
57
|
|
58 Use a @kbd{M-x} command to explicitly select a new major mode. Add
|
|
59 @code{-mode} to the name of a major mode to get the name of a command to
|
|
60 select that mode. For example, to enter Lisp mode, execute @kbd{M-x
|
|
61 lisp-mode}.
|
|
62
|
|
63 @vindex auto-mode-alist
|
|
64 When you visit a file, Emacs usually chooses the right major mode
|
|
65 based on the file's name. For example, files whose names end in
|
|
66 @code{.c} are edited in C mode. The variable @code{auto-mode-alist}
|
|
67 controls the correspondence between file names and major mode. Its value
|
|
68 is a list in which each element has the form:
|
|
69
|
|
70 @example
|
|
71 (@var{regexp} . @var{mode-function})
|
|
72 @end example
|
|
73
|
|
74 @noindent
|
|
75 For example, one element normally found in the list has the form
|
|
76 @code{(@t{"\\.c$"} . c-mode)}. It is responsible for selecting C mode
|
|
77 for files whose names end in @file{.c}. (Note that @samp{\\} is needed in
|
|
78 Lisp syntax to include a @samp{\} in the string, which is needed to
|
|
79 suppress the special meaning of @samp{.} in regexps.) The only practical
|
|
80 way to change this variable is with Lisp code.
|
|
81
|
|
82 You can specify which major mode should be used for editing a certain
|
|
83 file by a special sort of text in the first non-blank line of the file.
|
|
84 The mode name should appear in this line both preceded and followed by
|
|
85 @samp{-*-}. Other text may appear on the line as well. For example,
|
|
86
|
|
87 @example
|
|
88 ;-*-Lisp-*-
|
|
89 @end example
|
|
90
|
|
91 @noindent
|
|
92 tells Emacs to use Lisp mode. Note how the semicolon is used to make Lisp
|
|
93 treat this line as a comment. Such an explicit specification overrides any
|
|
94 default mode based on the file name.
|
|
95
|
|
96 Another format of mode specification is:
|
|
97
|
|
98 @example
|
|
99 -*-Mode: @var{modename};-*-
|
|
100 @end example
|
|
101
|
|
102 @noindent
|
|
103 which allows other things besides the major mode name to be specified.
|
|
104 However, Emacs does not look for anything except the mode name.
|
|
105
|
|
106 The major mode can also be specified in a local variables list.
|
|
107 @xref{File Variables}.
|
|
108
|
|
109 @vindex default-major-mode
|
|
110 When you visit a file that does not specify a major mode to use, or
|
|
111 when you create a new buffer with @kbd{C-x b}, Emacs uses the major mode
|
|
112 specified by the variable @code{default-major-mode}. Normally this
|
|
113 value is the symbol @code{fundamental-mode}, which specifies Fundamental
|
|
114 mode. If @code{default-major-mode} is @code{nil}, the major mode is
|
|
115 taken from the previously selected buffer.
|
2522
|
116
|
|
117 @node Mode Hooks, , Choosing Modes, Major Modes
|
|
118 @section Mode Hook Variables
|
|
119
|
|
120 @cindex Hook variables
|
|
121 @cindex mode hook
|
|
122 @findex add-hook
|
|
123 @findex remove-hook
|
|
124 @vindex lisp-mode-hook
|
|
125 @vindex emacs-lisp-mode-hook
|
|
126 @vindex lisp-interaction-mode-hook
|
|
127 @vindex scheme-mode-hook
|
|
128
|
|
129 The last step taken by a major mode, by convention, is to invoke a
|
|
130 list of user supplied functions that are stored in a ``hook'' variable.
|
|
131 This allows a user to further customize the major mode, and is
|
|
132 particularly convenient for setting up buffer local variables
|
|
133 (@pxref{Locals}).
|
|
134
|
|
135 The name of the hook variable is created by appending the string
|
|
136 @code{-hook} to the name of the major mode. For example, the hook
|
|
137 variable used by @code{text-mode} would be named @code{text-mode-hook}.
|
|
138 By convention the mode hook function receives no arguments. If a hook
|
|
139 variable does not exist, or it has the value @code{nil}, the major mode
|
|
140 simply ignores it.
|
|
141
|
|
142 The recommended way to add functions to a hook variable is with the
|
|
143 @code{add-hook} function. For example, to automatically turn on the
|
|
144 Auto Fill mode when Text mode is invoked the following code can be used in
|
|
145 the initialization file (@pxref{Init File})
|
|
146
|
|
147 @example
|
|
148 (add-hook 'text-mode-hook 'turn-on-auto-fill)
|
|
149 @end example
|
|
150
|
|
151 The @code{add-hook} function will check that the function is not already
|
|
152 listed in the hook variable before adding it. It will also create a hook
|
|
153 variable with the value @code{nil} if one does not exist before adding
|
|
154 the function. @code{add-hook} adds functions to the front of the hook
|
|
155 variable list. This means that the last hook added is run first by the
|
|
156 major mode. It is considered very poor style to write hook functions
|
|
157 that depend on the order that hooks are executed.
|
|
158
|
|
159 Hooks can be removed from hook variables with @code{remove-hook}.
|
|
160
|
|
161
|