This commit was manufactured by cvs2svn to create branch 'chise-r21-4-18'.
[chise/xemacs-chise.git-] / man / xemacs / major.texi
diff --git a/man/xemacs/major.texi b/man/xemacs/major.texi
new file mode 100644 (file)
index 0000000..af69380
--- /dev/null
@@ -0,0 +1,161 @@
+
+@node Major Modes, Indentation, Mule, Top
+@chapter Major Modes
+@cindex major modes
+@kindex TAB
+@kindex DEL
+@kindex LFD
+
+  Emacs has many different @dfn{major modes}, each of which customizes
+Emacs for editing text of a particular sort.  The major modes are mutually
+exclusive;  at any time, each buffer has one major mode.  The mode line
+normally contains the name of the current major mode in parentheses.
+@xref{Mode Line}.
+
+  The least specialized major mode is called @dfn{Fundamental mode}.  This
+mode has no mode-specific redefinitions or variable settings.  Each
+Emacs command behaves in its most general manner, and each option is in its
+default state.  For editing any specific type of text, 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.  @key{TAB},
+@key{DEL}, and @key{LFD} are changed frequently.  In addition, commands
+which handle comments use the mode to determine how to delimit comments.
+Many major modes redefine the syntactical properties of characters
+appearing in the buffer.  @xref{Syntax}.
+
+  The major modes fall into three major groups.  Programming modes
+(@pxref{Programs}) are for specific programming languages.  Text modes
+(like Nroff mode, @TeX{} mode, Outline mode, XML mode, etc.@:) are for
+editing human readable text.  The remaining major modes are not intended
+for direct use in editing user files; they are used in buffers created
+by Emacs for specific purposes. Examples of such modes include Dired
+mode which is used 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 so that the paragraph commands remain 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.
+* Mode Hooks::         Customizing a major mode
+@end menu
+
+@node Choosing Modes, Mode Hooks, Major Modes, Major Modes
+@section Choosing Major Modes
+
+  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 some text in the file.
+
+  Use a @kbd{M-x} command to explicitly select a new major mode.  Add
+@code{-mode} to the name of a major mode to get the name of a command to
+select that mode.  For example, to enter Lisp mode, execute @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
+@code{.c} are edited in C mode.  The variable @code{auto-mode-alist}
+controls the correspondence between file names and major mode.  Its value
+is a list in which each element has the form:
+
+@example
+(@var{regexp} . @var{mode-function})
+@end example
+
+@noindent
+For example, one element normally found in the list has the form
+@code{(@t{"\\.c$"} . c-mode)}. 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.)  The only practical
+way to change this variable is with Lisp code.
+
+  You can specify which major mode should be used for editing a certain
+file by a special sort of text in the first non-blank 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.  Note how the semicolon is used to make Lisp
+treat this line as a comment.  Such an explicit specification overrides any
+default mode based on the file name.
+
+  Another format of mode specification is:
+
+@example
+-*-Mode: @var{modename};-*-
+@end example
+
+@noindent
+which allows other things besides the major mode name to be specified.
+However, Emacs does not look for anything except the mode name.
+
+The major mode can also be specified in a local variables list.
+@xref{File Variables}.
+
+@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}, Emacs uses the major mode
+specified by the variable @code{default-major-mode}.  Normally this
+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.
+
+@node Mode Hooks,  , Choosing Modes, Major Modes
+@section Mode Hook Variables
+
+@cindex Hook variables
+@cindex mode hook
+@findex add-hook
+@findex remove-hook
+@vindex lisp-mode-hook
+@vindex emacs-lisp-mode-hook
+@vindex lisp-interaction-mode-hook
+@vindex scheme-mode-hook
+
+  The last step taken by a major mode, by convention, is to invoke a
+list of user supplied functions that are stored in a ``hook'' variable.
+This allows a user to further customize the major mode, and is
+particularly convenient for setting up buffer local variables
+(@pxref{Locals}).
+
+  The name of the hook variable is created by appending the string
+@code{-hook} to the name of the major mode.  For example, the hook
+variable used by @code{text-mode} would be named @code{text-mode-hook}.
+By convention the mode hook function receives no arguments. If a hook
+variable does not exist, or it has the value @code{nil}, the major mode
+simply ignores it.
+
+  The recommended way to add functions to a hook variable is with the
+@code{add-hook} function.  For example, to automatically turn on the
+Auto Fill mode when Text mode is invoked the following code can be used in
+the initialization file (@pxref{Init File})
+
+@example
+(add-hook 'text-mode-hook 'turn-on-auto-fill)
+@end example
+
+The @code{add-hook} function will check that the function is not already
+listed in the hook variable before adding it. It will also create a hook
+variable with the value @code{nil} if one does not exist before adding
+the function. @code{add-hook} adds functions to the front of the hook
+variable list. This means that the last hook added is run first by the
+major mode. It is considered very poor style to write hook functions
+that depend on the order that hooks are executed.
+
+Hooks can be removed from hook variables with @code{remove-hook}.
+
+