Move Minor Modes node of Emacs manual next to the Major Modes node
and out of the Customizations chapter. * doc/emacs/modes.texi: Rename from major.texi. (Modes): New node. Make Major Modes and Minor Modes subsections of this. All callers changed. * doc/emacs/custom.texi (Minor Modes): Move to modes.texi.
This commit is contained in:
parent
6cfd0fa2de
commit
8875da1e92
8 changed files with 428 additions and 396 deletions
|
|
@ -1,3 +1,11 @@
|
|||
2011-07-10 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
||||
* modes.texi: Rename from major.texi.
|
||||
(Modes): New node. Make Major Modes and Minor Modes subsections
|
||||
of this. All callers changed.
|
||||
|
||||
* custom.texi (Minor Modes): Move to modes.texi.
|
||||
|
||||
2011-07-10 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
||||
* custom.texi (Syntax): Node deleted.
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ EMACSSOURCES= \
|
|||
${srcdir}/windows.texi \
|
||||
${srcdir}/frames.texi \
|
||||
${srcdir}/mule.texi \
|
||||
${srcdir}/major.texi \
|
||||
${srcdir}/modes.texi \
|
||||
${srcdir}/indent.texi \
|
||||
${srcdir}/text.texi \
|
||||
${srcdir}/programs.texi \
|
||||
|
|
|
|||
|
|
@ -23,8 +23,6 @@ Reference Manual}.
|
|||
@end ifnottex
|
||||
|
||||
@menu
|
||||
* Minor Modes:: Each minor mode is a feature you can turn on
|
||||
independently of any others.
|
||||
* Easy Customization:: Convenient way to browse and change settings.
|
||||
* Variables:: Many Emacs commands examine Emacs variables
|
||||
to decide what to do; by setting variables,
|
||||
|
|
@ -35,155 +33,6 @@ Reference Manual}.
|
|||
@file{.emacs} file.
|
||||
@end menu
|
||||
|
||||
@node Minor Modes
|
||||
@section Minor Modes
|
||||
@cindex minor modes
|
||||
@cindex mode, minor
|
||||
|
||||
Minor modes are optional features which you can turn on or off. For
|
||||
example, Auto Fill mode is a minor mode in which @key{SPC} breaks
|
||||
lines between words as you type. Minor modes are independent of one
|
||||
another and of the selected major mode. Most minor modes say in the
|
||||
mode line when they are enabled; for example, @samp{Fill} in the mode
|
||||
line means that Auto Fill mode is enabled.
|
||||
|
||||
Each minor mode is associated with a command, called the @dfn{mode
|
||||
command}, which turns it on or off. The name of this command consists
|
||||
of the name of the minor mode, followed by @samp{-mode}; for instance,
|
||||
the mode command for Auto Fill mode is @code{auto-fill-mode}. Calling
|
||||
the minor mode command with no prefix argument @dfn{toggles} the mode,
|
||||
turning it on if it was off, and off if it was on. A positive
|
||||
argument always turns the mode on, and a zero or negative argument
|
||||
always turns it off. Mode commands are usually invoked with
|
||||
@kbd{M-x}, but you can bind keys to them if you wish (@pxref{Key
|
||||
Bindings}).
|
||||
|
||||
Most minor modes also have a @dfn{mode variable}, with the same name
|
||||
as the mode command. Its value is non-@code{nil} if the mode is
|
||||
enabled, and @code{nil} if it is disabled. In some minor modes---but
|
||||
not all---the value of the variable alone determines whether the mode
|
||||
is active: the mode command works simply by setting the variable, and
|
||||
changing the value of the variable has the same effect as calling the
|
||||
mode command. Because not all minor modes work this way, we recommend
|
||||
that you avoid changing the mode variables directly; use the mode
|
||||
commands instead.
|
||||
|
||||
Some minor modes are @dfn{buffer-local}: they apply only to the
|
||||
current buffer, so you can enable the mode in certain buffers and not
|
||||
others. Other minor modes are @dfn{global}: while enabled, they
|
||||
affect everything you do in the Emacs session, in all buffers. Some
|
||||
global minor modes are enabled by default.
|
||||
|
||||
The following is a list of some buffer-local minor modes:
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Abbrev mode automatically expands text based on pre-defined
|
||||
abbreviation definitions. @xref{Abbrevs}.
|
||||
|
||||
@item
|
||||
Auto Fill mode inserts newlines as you type to prevent lines from
|
||||
becoming too long. @xref{Filling}.
|
||||
|
||||
@item
|
||||
Auto Save mode saves the buffer contents periodically to reduce the
|
||||
amount of work you can lose in case of a crash. @xref{Auto Save}.
|
||||
|
||||
@item
|
||||
Enriched mode enables editing and saving of formatted text.
|
||||
@xref{Formatted Text}.
|
||||
|
||||
@item
|
||||
Flyspell mode automatically highlights misspelled words.
|
||||
@xref{Spelling}.
|
||||
|
||||
@item
|
||||
Font-Lock mode automatically highlights certain textual units found in
|
||||
programs. It is enabled globally by default, but you can disable it
|
||||
in individual buffers. @xref{Faces}.
|
||||
|
||||
@findex linum-mode
|
||||
@cindex Linum mode
|
||||
@item
|
||||
Linum mode displays each line's line number in the window's left
|
||||
margin. Its mode command is @code{linum-mode}.
|
||||
|
||||
@item
|
||||
Outline minor mode provides similar facilities to the major mode
|
||||
called Outline mode. @xref{Outline Mode}.
|
||||
|
||||
@cindex Overwrite mode
|
||||
@cindex mode, Overwrite
|
||||
@findex overwrite-mode
|
||||
@kindex INSERT
|
||||
@item
|
||||
Overwrite mode causes ordinary printing characters to replace existing
|
||||
text instead of shoving it to the right. For example, if point is in
|
||||
front of the @samp{B} in @samp{FOOBAR}, then in Overwrite mode typing
|
||||
a @kbd{G} changes it to @samp{FOOGAR}, instead of producing
|
||||
@samp{FOOGBAR} as usual. In Overwrite mode, the command @kbd{C-q}
|
||||
inserts the next character whatever it may be, even if it is a
|
||||
digit---this gives you a way to insert a character instead of
|
||||
replacing an existing character. The mode command,
|
||||
@code{overwrite-mode}, is bound to the @key{Insert} key.
|
||||
|
||||
@findex binary-overwrite-mode
|
||||
@item
|
||||
Binary Overwrite mode is a variant of Overwrite mode for editing
|
||||
binary files; it treats newlines and tabs like other characters, so
|
||||
that they overwrite other characters and can be overwritten by them.
|
||||
In Binary Overwrite mode, digits after @kbd{C-q} specify an octal
|
||||
character code, as usual.
|
||||
|
||||
@item
|
||||
Visual Line mode performs ``word wrapping'', causing long lines to be
|
||||
wrapped at word boundaries. @xref{Visual Line Mode}.
|
||||
@end itemize
|
||||
|
||||
Here are some useful global minor modes. Since Line Number mode and
|
||||
Transient Mark mode can be enabled or disabled just by setting the
|
||||
value of the minor mode variable, you @emph{can} set them differently
|
||||
for particular buffers, by explicitly making the corresponding
|
||||
variable local in those buffers. @xref{Locals}.
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Column Number mode enables display of the current column number in the
|
||||
mode line. @xref{Mode Line}.
|
||||
|
||||
@item
|
||||
Delete Selection mode causes text insertion to first delete the text
|
||||
in the region, if the region is active. @xref{Using Region}.
|
||||
|
||||
@item
|
||||
Icomplete mode displays an indication of available completions when
|
||||
you are in the minibuffer and completion is active. @xref{Completion
|
||||
Options}.
|
||||
|
||||
@item
|
||||
Line Number mode enables display of the current line number in the
|
||||
mode line. It is enabled by default. @xref{Mode Line}.
|
||||
|
||||
@item
|
||||
Menu Bar mode gives each frame a menu bar. It is enabled by default.
|
||||
@xref{Menu Bars}.
|
||||
|
||||
@item
|
||||
Scroll Bar mode gives each window a scroll bar. It is enabled by
|
||||
default, but the scroll bar is only displayed on graphical terminals.
|
||||
@xref{Scroll Bars}.
|
||||
|
||||
@item
|
||||
Tool Bar mode gives each frame a tool bar. It is enabled by default,
|
||||
but the tool bar is only displayed on graphical terminals. @xref{Tool
|
||||
Bars}.
|
||||
|
||||
@item
|
||||
Transient Mark mode highlights the region, and makes many Emacs
|
||||
commands operate on the region when the mark is active. It is enabled
|
||||
by default. @xref{Mark}.
|
||||
@end itemize
|
||||
|
||||
@node Easy Customization
|
||||
@section Easy Customization Interface
|
||||
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ Major Structures of Emacs
|
|||
* International:: Using non-@acronym{ASCII} character sets.
|
||||
|
||||
Advanced Features
|
||||
* Major Modes:: Text mode vs. Lisp mode vs. C mode...
|
||||
* Modes:: Major and minor modes alter Emacs' basic behavior.
|
||||
* Indentation:: Editing the white space at the beginnings of lines.
|
||||
* Text:: Commands and modes for editing English.
|
||||
* Programs:: Commands and modes for editing programs.
|
||||
|
|
@ -549,9 +549,12 @@ International Character Set Support
|
|||
to use without multibyte characters.
|
||||
* Charsets:: How Emacs groups its internal character codes.
|
||||
|
||||
Major Modes
|
||||
Modes
|
||||
|
||||
* Choosing Modes:: How major modes are specified or chosen.
|
||||
* Major Modes:: Text mode vs. Lisp mode vs. C mode...
|
||||
* Minor Modes:: Each minor mode is a feature you can turn on
|
||||
independently of any others.
|
||||
* Choosing Modes:: How modes are chosen when visiting files.
|
||||
|
||||
Indentation
|
||||
|
||||
|
|
@ -1058,8 +1061,6 @@ Hyperlinking and Navigation Features
|
|||
|
||||
Customization
|
||||
|
||||
* Minor Modes:: Each minor mode is a feature you can turn on
|
||||
independently of any others.
|
||||
* Easy Customization:: Convenient way to browse and change settings.
|
||||
* Variables:: Many Emacs commands examine Emacs variables
|
||||
to decide what to do; by setting variables,
|
||||
|
|
@ -1485,7 +1486,7 @@ Lisp programming.
|
|||
@include windows.texi
|
||||
@include frames.texi
|
||||
@include mule.texi
|
||||
@include major.texi
|
||||
@include modes.texi
|
||||
@include indent.texi
|
||||
@include text.texi
|
||||
@c Includes fortran-xtra.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2011
|
||||
@c Free Software Foundation, Inc.
|
||||
@c See file emacs.texi for copying conditions.
|
||||
@node Indentation, Text, Major Modes, Top
|
||||
@node Indentation, Text, Modes, Top
|
||||
@chapter Indentation
|
||||
@cindex indentation
|
||||
@cindex tabs
|
||||
|
|
|
|||
|
|
@ -1,236 +0,0 @@
|
|||
@c This is part of the Emacs manual.
|
||||
@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2011
|
||||
@c 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
|
||||
user option variable 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.
|
||||
|
||||
The major modes fall into three major groups. The first group
|
||||
contains modes for normal text, either plain or with mark-up. It
|
||||
includes Text mode, HTML mode, SGML mode, @TeX{} mode and Outline
|
||||
mode. The second group contains modes for specific programming
|
||||
languages. These include Lisp mode (which has several variants), C
|
||||
mode, Fortran mode, and others. 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}), Message 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
|
||||
(@pxref{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.
|
||||
|
||||
To explicitly select a new major, you use an @kbd{M-x} command.
|
||||
Take the name of a major mode and add @code{-mode} to get the name of
|
||||
the 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
|
||||
automatically. Normally, it makes the choice based on the file
|
||||
name---for example, files whose names end in @samp{.c} are normally
|
||||
edited in C mode---but sometimes it chooses the major mode based on
|
||||
the contents of the file. Here is the exact procedure:
|
||||
|
||||
First, Emacs checks whether the file contains a file-local variable
|
||||
that specifies the major mode. If so, it uses that major mode,
|
||||
ignoring all other criteria. @xref{File Variables}. There are
|
||||
several methods to specify a major mode using a file-local variable;
|
||||
the simplest is to put the mode name in the first nonblank line,
|
||||
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. Note how the semicolon is used to make
|
||||
Lisp treat this line as a comment. Alternatively, you could write
|
||||
|
||||
@example
|
||||
; -*- mode: Lisp;-*-
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
The latter format allows you to specify local variables as well, like
|
||||
this:
|
||||
|
||||
@example
|
||||
; -*- mode: Lisp; tab-width: 4; -*-
|
||||
@end example
|
||||
|
||||
@vindex interpreter-mode-alist
|
||||
Second, Emacs checks whether the file's contents begin with
|
||||
@samp{#!}. If so, that indicates that the file 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). Therefore, Emacs tries to use the interpreter name to
|
||||
choose a mode. For instance, a file that begins with
|
||||
@samp{#!/usr/bin/perl} is opened in Perl mode. The variable
|
||||
@code{interpreter-mode-alist} specifies the correspondence between
|
||||
interpreter program names and major modes.
|
||||
|
||||
When the first line starts with @samp{#!}, you usually cannot 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. The
|
||||
same is true for man pages which start with the magic string
|
||||
@samp{'\"} to specify a list of troff preprocessors.
|
||||
|
||||
@vindex magic-mode-alist
|
||||
Third, Emacs tries to determine the major mode by looking at the
|
||||
text at the start of the buffer, based on the variable
|
||||
@code{magic-mode-alist}. By default, this variable is @code{nil} (an
|
||||
empty list), so Emacs skips this step; however, you can customize it
|
||||
in your init file (@pxref{Init File}). The value should be a list of
|
||||
elements of the form
|
||||
|
||||
@example
|
||||
(@var{regexp} . @var{mode-function})
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
where @var{regexp} is a regular expression (@pxref{Regexps}), and
|
||||
@var{mode-function} is a Lisp function that toggles a major mode. If
|
||||
the text at the beginning of the file matches @var{regexp}, Emacs
|
||||
chooses the major mode specified by @var{mode-function}.
|
||||
|
||||
Alternatively, an element of @code{magic-mode-alist} may have the form
|
||||
|
||||
@example
|
||||
(@var{match-function} . @var{mode-function})
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
where @var{match-function} is a Lisp function that is called at the
|
||||
beginning of the buffer; if the function returns non-@code{nil}, Emacs
|
||||
set the major mode wit @var{mode-function}.
|
||||
|
||||
Fourth---if Emacs still hasn't found a suitable major mode---it
|
||||
looks at the file's name. 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 must
|
||||
be used 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{mode-function}, Emacs discards the suffix that matched
|
||||
@var{regexp} and searches the list again for another match.
|
||||
|
||||
@vindex auto-mode-case-fold
|
||||
On systems with case-insensitive file names, such as Microsoft
|
||||
Windows, Emacs performs a single case-insensitive search through
|
||||
@code{auto-mode-alist}. On other systems, Emacs normally performs a
|
||||
single case-sensitive search through the alist. However, if you
|
||||
change the variable @code{auto-mode-case-fold} to @code{t}, Emacs
|
||||
performs a second case-insensitive search if the first search fails.
|
||||
|
||||
@vindex magic-fallback-mode-alist
|
||||
Finally, if Emacs @emph{still} hasn't found a major mode to use, it
|
||||
compares the text at the start of the buffer to the variable
|
||||
@code{magic-fallback-mode-alist}. This variable works like
|
||||
@code{magic-mode-alist}, described above, except that is consulted
|
||||
only after @code{auto-mode-alist}. By default,
|
||||
@code{magic-fallback-mode-alist} contains forms that check for image
|
||||
files, HTML/XML/SGML files, and Postscript files.
|
||||
|
||||
@vindex major-mode
|
||||
Once a major mode is chosen, Emacs sets the value of the variable
|
||||
@code{major-mode} to the symbol for that major mode (e.g.,
|
||||
@code{text-mode} for Text mode). This is a per-buffer variable
|
||||
(@pxref{Locals}); its buffer-local value is set automatically, and you
|
||||
should not change it yourself.
|
||||
|
||||
The default value of @code{major-mode} determines the major mode to
|
||||
use for files that do not specify a major mode, and for new buffers
|
||||
created with @kbd{C-x b}. Normally, this default value is the symbol
|
||||
@code{fundamental-mode}, which specifies Fundamental mode. You can
|
||||
change it via the Customization interface (@pxref{Easy
|
||||
Customization}), or by adding a line like this to your init file
|
||||
(@pxref{Init File}):
|
||||
|
||||
@smallexample
|
||||
(setq-default major-mode 'text-mode)
|
||||
@end smallexample
|
||||
|
||||
@noindent
|
||||
If the default value of @code{major-mode} is @code{nil}, the major
|
||||
mode is taken from the previously current buffer.
|
||||
|
||||
@findex normal-mode
|
||||
If you have changed the major mode of a buffer, you can return to
|
||||
the major mode Emacs would have chosen automatically, by typing
|
||||
@kbd{M-x normal-mode}. This is the same function that
|
||||
@code{find-file} calls to choose the major mode. It also processes
|
||||
the file's @samp{-*-} line or local variables list (if any).
|
||||
@xref{File Variables}.
|
||||
|
||||
@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}).
|
||||
(@kbd{C-x C-s} does this too, if the buffer wasn't visiting a file.)
|
||||
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}.
|
||||
410
doc/emacs/modes.texi
Normal file
410
doc/emacs/modes.texi
Normal file
|
|
@ -0,0 +1,410 @@
|
|||
@c This is part of the Emacs manual.
|
||||
@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2011
|
||||
@c Free Software Foundation, Inc.
|
||||
@c See file emacs.texi for copying conditions.
|
||||
@node Modes, Indentation, International, Top
|
||||
@chapter Editing Modes
|
||||
|
||||
Emacs contains many @dfn{editing modes}, each of which alters its
|
||||
basic behavior in useful ways. These are divided into @dfn{major
|
||||
modes} and @dfn{minor modes}.
|
||||
|
||||
Major modes provide specialized facilities for working on a
|
||||
particular file type, such as a C source file (@pxref{Programs}), or a
|
||||
particular type of non-file buffer, such as a shell buffer
|
||||
(@pxref{Shell}). Major modes are mutually exclusive; each buffer has
|
||||
one and only one major mode at any time.
|
||||
|
||||
Minor modes are optional features which you can turn on or off, not
|
||||
necessarily specific to a type of file or buffer. For example, Auto
|
||||
Fill mode is a minor mode in which @key{SPC} breaks lines between
|
||||
words as you type (@pxref{Auto Fill}). Minor modes are independent of
|
||||
one another, and of the selected major mode.
|
||||
|
||||
@menu
|
||||
* Major Modes:: Text mode vs. Lisp mode vs. C mode...
|
||||
* Minor Modes:: Each minor mode is a feature you can turn on
|
||||
independently of any others.
|
||||
* Choosing Modes:: How modes are chosen when visiting files.
|
||||
@end menu
|
||||
|
||||
@node Major Modes
|
||||
@section 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)}
|
||||
|
||||
Every buffer possesses a major mode, which determines the editing
|
||||
behavior of Emacs while that buffer is current. The mode line
|
||||
normally shows the name of the current major mode, in parentheses.
|
||||
@xref{Mode Line}.
|
||||
|
||||
Usually, the major mode is automatically set by Emacs, when you
|
||||
first visit a file or create a buffer. @xref{Choosing Modes}. You
|
||||
can explicitly select a new major mode by using an @kbd{M-x} command.
|
||||
Take the name of the mode and add @code{-mode} to get the name of the
|
||||
command to select that mode. Thus, you can enter Lisp mode with
|
||||
@kbd{M-x lisp-mode}.
|
||||
|
||||
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
|
||||
user option variable is in its default state.
|
||||
|
||||
For editing text of a specific type that Emacs knows about, such as
|
||||
Lisp code or English text, you typically use a more specialized major
|
||||
mode, such as Lisp mode or Text mode. Such major modes change the
|
||||
meanings of some keys to become more specifically adapted to the
|
||||
language being edited. The ones that are commonly changed 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.
|
||||
|
||||
The major modes fall into three major groups. The first group
|
||||
contains modes for normal text, either plain or with mark-up. It
|
||||
includes Text mode, HTML mode, SGML mode, @TeX{} mode and Outline
|
||||
mode. The second group contains modes for specific programming
|
||||
languages. These include Lisp mode (which has several variants), C
|
||||
mode, Fortran mode, and others. 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}), Message 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
|
||||
(@pxref{Indentation}).
|
||||
|
||||
@node Minor Modes
|
||||
@section Minor Modes
|
||||
@cindex minor modes
|
||||
@cindex mode, minor
|
||||
|
||||
A minor mode is an optional editing modes that alters the behavior
|
||||
of Emacs in some well-defined way. Unlike major modes, any number of
|
||||
minor modes can be in effect at any time. Some minor modes are
|
||||
@dfn{buffer-local}: they apply only to the current buffer, so you can
|
||||
enable the mode in certain buffers and not others. Other minor modes
|
||||
are @dfn{global}: while enabled, they affect everything you do in the
|
||||
Emacs session, in all buffers. Some global minor modes are enabled by
|
||||
default.
|
||||
|
||||
Most minor modes say in the mode line when they are enabled, just
|
||||
after the major mode indicator. For example, @samp{Fill} in the mode
|
||||
line means that Auto Fill mode is enabled. @xref{Mode Line}.
|
||||
|
||||
Each minor mode is associated with a command, called the @dfn{mode
|
||||
command}, which turns it on or off. The name of this command consists
|
||||
of the name of the minor mode, followed by @samp{-mode}; for instance,
|
||||
the mode command for Auto Fill mode is @code{auto-fill-mode}. Calling
|
||||
the minor mode command with no prefix argument @dfn{toggles} the mode,
|
||||
turning it on if it was off, and off if it was on. A positive
|
||||
argument always turns the mode on, and a zero or negative argument
|
||||
always turns it off. Mode commands are usually invoked with
|
||||
@kbd{M-x}, but you can bind keys to them if you wish (@pxref{Key
|
||||
Bindings}).
|
||||
|
||||
Most minor modes also have a @dfn{mode variable}, with the same name
|
||||
as the mode command. Its value is non-@code{nil} if the mode is
|
||||
enabled, and @code{nil} if it is disabled. In some minor modes---but
|
||||
not all---the value of the variable alone determines whether the mode
|
||||
is active: the mode command works simply by setting the variable, and
|
||||
changing the value of the variable has the same effect as calling the
|
||||
mode command. Because not all minor modes work this way, we recommend
|
||||
that you avoid changing the mode variables directly; use the mode
|
||||
commands instead.
|
||||
|
||||
The following is a list of some buffer-local minor modes:
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Abbrev mode automatically expands text based on pre-defined
|
||||
abbreviation definitions. @xref{Abbrevs}.
|
||||
|
||||
@item
|
||||
Auto Fill mode inserts newlines as you type to prevent lines from
|
||||
becoming too long. @xref{Filling}.
|
||||
|
||||
@item
|
||||
Auto Save mode saves the buffer contents periodically to reduce the
|
||||
amount of work you can lose in case of a crash. @xref{Auto Save}.
|
||||
|
||||
@item
|
||||
Enriched mode enables editing and saving of formatted text.
|
||||
@xref{Formatted Text}.
|
||||
|
||||
@item
|
||||
Flyspell mode automatically highlights misspelled words.
|
||||
@xref{Spelling}.
|
||||
|
||||
@item
|
||||
Font-Lock mode automatically highlights certain textual units found in
|
||||
programs. It is enabled globally by default, but you can disable it
|
||||
in individual buffers. @xref{Faces}.
|
||||
|
||||
@findex linum-mode
|
||||
@cindex Linum mode
|
||||
@item
|
||||
Linum mode displays each line's line number in the window's left
|
||||
margin. Its mode command is @code{linum-mode}.
|
||||
|
||||
@item
|
||||
Outline minor mode provides similar facilities to the major mode
|
||||
called Outline mode. @xref{Outline Mode}.
|
||||
|
||||
@cindex Overwrite mode
|
||||
@cindex mode, Overwrite
|
||||
@findex overwrite-mode
|
||||
@kindex INSERT
|
||||
@item
|
||||
Overwrite mode causes ordinary printing characters to replace existing
|
||||
text instead of shoving it to the right. For example, if point is in
|
||||
front of the @samp{B} in @samp{FOOBAR}, then in Overwrite mode typing
|
||||
a @kbd{G} changes it to @samp{FOOGAR}, instead of producing
|
||||
@samp{FOOGBAR} as usual. In Overwrite mode, the command @kbd{C-q}
|
||||
inserts the next character whatever it may be, even if it is a
|
||||
digit---this gives you a way to insert a character instead of
|
||||
replacing an existing character. The mode command,
|
||||
@code{overwrite-mode}, is bound to the @key{Insert} key.
|
||||
|
||||
@findex binary-overwrite-mode
|
||||
@item
|
||||
Binary Overwrite mode is a variant of Overwrite mode for editing
|
||||
binary files; it treats newlines and tabs like other characters, so
|
||||
that they overwrite other characters and can be overwritten by them.
|
||||
In Binary Overwrite mode, digits after @kbd{C-q} specify an octal
|
||||
character code, as usual.
|
||||
|
||||
@item
|
||||
Visual Line mode performs ``word wrapping'', causing long lines to be
|
||||
wrapped at word boundaries. @xref{Visual Line Mode}.
|
||||
@end itemize
|
||||
|
||||
Here are some useful global minor modes. Since Line Number mode and
|
||||
Transient Mark mode can be enabled or disabled just by setting the
|
||||
value of the minor mode variable, you @emph{can} set them differently
|
||||
for particular buffers, by explicitly making the corresponding
|
||||
variable local in those buffers. @xref{Locals}.
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Column Number mode enables display of the current column number in the
|
||||
mode line. @xref{Mode Line}.
|
||||
|
||||
@item
|
||||
Delete Selection mode causes text insertion to first delete the text
|
||||
in the region, if the region is active. @xref{Using Region}.
|
||||
|
||||
@item
|
||||
Icomplete mode displays an indication of available completions when
|
||||
you are in the minibuffer and completion is active. @xref{Completion
|
||||
Options}.
|
||||
|
||||
@item
|
||||
Line Number mode enables display of the current line number in the
|
||||
mode line. It is enabled by default. @xref{Mode Line}.
|
||||
|
||||
@item
|
||||
Menu Bar mode gives each frame a menu bar. It is enabled by default.
|
||||
@xref{Menu Bars}.
|
||||
|
||||
@item
|
||||
Scroll Bar mode gives each window a scroll bar. It is enabled by
|
||||
default, but the scroll bar is only displayed on graphical terminals.
|
||||
@xref{Scroll Bars}.
|
||||
|
||||
@item
|
||||
Tool Bar mode gives each frame a tool bar. It is enabled by default,
|
||||
but the tool bar is only displayed on graphical terminals. @xref{Tool
|
||||
Bars}.
|
||||
|
||||
@item
|
||||
Transient Mark mode highlights the region, and makes many Emacs
|
||||
commands operate on the region when the mark is active. It is enabled
|
||||
by default. @xref{Mark}.
|
||||
@end itemize
|
||||
|
||||
@node Choosing Modes
|
||||
@section Choosing File Modes
|
||||
|
||||
@cindex choosing a major mode
|
||||
@cindex choosing a minor mode
|
||||
@vindex auto-mode-alist
|
||||
When you visit a file, Emacs chooses a major mode automatically.
|
||||
Normally, it makes the choice based on the file name---for example,
|
||||
files whose names end in @samp{.c} are normally edited in C mode---but
|
||||
sometimes it chooses the major mode based on special text in the file.
|
||||
This special text can also be used to enable buffer-local minor modes.
|
||||
|
||||
Here is the exact procedure:
|
||||
|
||||
First, Emacs checks whether the file contains file-local mode
|
||||
variables. @xref{File Variables}. If there is a file-local variable
|
||||
that specifies a major mode, then Emacs uses that major mode, ignoring
|
||||
all other criteria. There are several methods to specify a major mode
|
||||
using a file-local variable; the simplest is to put the mode name in
|
||||
the first nonblank line, 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. Note how the semicolon is used to make
|
||||
Lisp treat this line as a comment. Alternatively, you could write
|
||||
|
||||
@example
|
||||
; -*- mode: Lisp;-*-
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
The latter format allows you to specify local variables as well, like
|
||||
this:
|
||||
|
||||
@example
|
||||
; -*- mode: Lisp; tab-width: 4; -*-
|
||||
@end example
|
||||
|
||||
If a file variable specifies a buffer-local minor mode, Emacs
|
||||
enables that minor mode in the buffer.
|
||||
|
||||
@vindex interpreter-mode-alist
|
||||
Second, if there is no file variable specifying a major mode, Emacs
|
||||
checks whether the file's contents begin with @samp{#!}. If so, that
|
||||
indicates that the file 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).
|
||||
Therefore, Emacs tries to use the interpreter name to choose a mode.
|
||||
For instance, a file that begins with @samp{#!/usr/bin/perl} is opened
|
||||
in Perl mode. The variable @code{interpreter-mode-alist} specifies
|
||||
the correspondence between interpreter program names and major modes.
|
||||
|
||||
When the first line starts with @samp{#!}, you usually cannot 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. The
|
||||
same is true for man pages which start with the magic string
|
||||
@samp{'\"} to specify a list of troff preprocessors.
|
||||
|
||||
@vindex magic-mode-alist
|
||||
Third, Emacs tries to determine the major mode by looking at the
|
||||
text at the start of the buffer, based on the variable
|
||||
@code{magic-mode-alist}. By default, this variable is @code{nil} (an
|
||||
empty list), so Emacs skips this step; however, you can customize it
|
||||
in your init file (@pxref{Init File}). The value should be a list of
|
||||
elements of the form
|
||||
|
||||
@example
|
||||
(@var{regexp} . @var{mode-function})
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
where @var{regexp} is a regular expression (@pxref{Regexps}), and
|
||||
@var{mode-function} is a Lisp function that toggles a major mode. If
|
||||
the text at the beginning of the file matches @var{regexp}, Emacs
|
||||
chooses the major mode specified by @var{mode-function}.
|
||||
|
||||
Alternatively, an element of @code{magic-mode-alist} may have the form
|
||||
|
||||
@example
|
||||
(@var{match-function} . @var{mode-function})
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
where @var{match-function} is a Lisp function that is called at the
|
||||
beginning of the buffer; if the function returns non-@code{nil}, Emacs
|
||||
set the major mode wit @var{mode-function}.
|
||||
|
||||
Fourth---if Emacs still hasn't found a suitable major mode---it
|
||||
looks at the file's name. 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 must
|
||||
be used 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{mode-function}, Emacs discards the suffix that matched
|
||||
@var{regexp} and searches the list again for another match.
|
||||
|
||||
@vindex auto-mode-case-fold
|
||||
On systems with case-insensitive file names, such as Microsoft
|
||||
Windows, Emacs performs a single case-insensitive search through
|
||||
@code{auto-mode-alist}. On other systems, Emacs normally performs a
|
||||
single case-sensitive search through the alist. However, if you
|
||||
change the variable @code{auto-mode-case-fold} to @code{t}, Emacs
|
||||
performs a second case-insensitive search if the first search fails.
|
||||
|
||||
@vindex magic-fallback-mode-alist
|
||||
Finally, if Emacs @emph{still} hasn't found a major mode to use, it
|
||||
compares the text at the start of the buffer to the variable
|
||||
@code{magic-fallback-mode-alist}. This variable works like
|
||||
@code{magic-mode-alist}, described above, except that is consulted
|
||||
only after @code{auto-mode-alist}. By default,
|
||||
@code{magic-fallback-mode-alist} contains forms that check for image
|
||||
files, HTML/XML/SGML files, and Postscript files.
|
||||
|
||||
@vindex major-mode
|
||||
Once a major mode is chosen, Emacs sets the value of the variable
|
||||
@code{major-mode} to the symbol for that major mode (e.g.,
|
||||
@code{text-mode} for Text mode). This is a per-buffer variable
|
||||
(@pxref{Locals}); its buffer-local value is set automatically, and you
|
||||
should not change it yourself.
|
||||
|
||||
The default value of @code{major-mode} determines the major mode to
|
||||
use for files that do not specify a major mode, and for new buffers
|
||||
created with @kbd{C-x b}. Normally, this default value is the symbol
|
||||
@code{fundamental-mode}, which specifies Fundamental mode. You can
|
||||
change it via the Customization interface (@pxref{Easy
|
||||
Customization}), or by adding a line like this to your init file
|
||||
(@pxref{Init File}):
|
||||
|
||||
@smallexample
|
||||
(setq-default major-mode 'text-mode)
|
||||
@end smallexample
|
||||
|
||||
@noindent
|
||||
If the default value of @code{major-mode} is @code{nil}, the major
|
||||
mode is taken from the previously current buffer.
|
||||
|
||||
@findex normal-mode
|
||||
If you have changed the major mode of a buffer, you can return to
|
||||
the major mode Emacs would have chosen automatically, by typing
|
||||
@kbd{M-x normal-mode}. This is the same function that
|
||||
@code{find-file} calls to choose the major mode. It also processes
|
||||
the file's @samp{-*-} line or local variables list (if any).
|
||||
@xref{File Variables}.
|
||||
|
||||
@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}).
|
||||
(@kbd{C-x C-s} does this too, if the buffer wasn't visiting a file.)
|
||||
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}.
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
@c This is part of the Emacs manual.
|
||||
@c Copyright (C) 1997, 1999-2011 Free Software Foundation, Inc.
|
||||
@c See file emacs.texi for copying conditions.
|
||||
@node International, Major Modes, Frames, Top
|
||||
@node International, Modes, Frames, Top
|
||||
@chapter International Character Set Support
|
||||
@c This node is referenced in the tutorial. When renaming or deleting
|
||||
@c it, the tutorial needs to be adjusted. (TUTORIAL.de)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue