emacs: Major Modes

 
 23.1 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 (SeeMode
 Line).
 
    The least specialized major mode is called “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.  Most 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 third group consists
 of major modes that are not associated directly with files; they are
 used in buffers created for specific purposes by Emacs, such as Dired
 mode for buffers made by Dired (SeeDired), Message mode for buffers
 made by ‘C-x m’ (SeeSending Mail), and Shell mode for buffers used
 to communicate with an inferior shell process (SeeInteractive
 Shell).
 
    Usually, the major mode is automatically set by Emacs, when you first
 visit a file or create a buffer (SeeChoosing Modes).  You can
 explicitly select a new major mode by using an ‘M-x’ command.  Take the
 name of the mode and add ‘-mode’ to get the name of the command to
 select that mode (e.g., ‘M-x lisp-mode’ enters Lisp mode).  Since every
 buffer has exactly one major mode, there is no way to “turn off” a major
 mode; instead you must switch to a different one.
 
    The value of the buffer-local variable ‘major-mode’ is a symbol with
 the same name as the major mode command (e.g., ‘lisp-mode’).  This
 variable is set automatically; you should not change it yourself.
 
    The default value of ‘major-mode’ determines the major mode to use
 for files that do not specify a major mode, and for new buffers created
 with ‘C-x b’.  Normally, this default value is the symbol
 ‘fundamental-mode’, which specifies Fundamental mode.  You can change
DONTPRINTYET  this default value via the Customization interface (SeeEasy
 Customization), or by adding a line like this to your init file (*note Init File::):
 
      (setq-default major-mode 'text-mode)
 
 If the default value of ‘major-mode’ is ‘nil’, the major mode is taken
 from the previously current buffer.
 
    Specialized major modes often change the meanings of certain keys to
 do something more suitable for the mode.  For instance, programming
 language modes bind <TAB> to indent the current line according to the
 rules of the language (SeeIndentation).  The keys that are commonly
 changed are <TAB>, <DEL>, and ‘C-j’.  Many modes also define special
 commands of their own, usually bound in the prefix key ‘C-c’.  Major
 modes can also alter user options and variables; for instance,
 programming language modes typically set a buffer-local value for the
 variable ‘comment-start’, which determines how source code comments are
 delimited (SeeComments).
 
    To view the documentation for the current major mode, including a
 list of its key bindings, type ‘C-h m’ (‘describe-mode’).
 
    Every major mode, apart from Fundamental mode, defines a “mode hook”,
 a customizable list of Lisp functions to run each time the mode is
 enabled in a buffer.  SeeHooks, for more information about hooks.
 Each mode hook is named after its major mode, e.g., Fortran mode has
 ‘fortran-mode-hook’.  Furthermore, all text-based major modes run
 ‘text-mode-hook’, and many programming language modes (1) (including all
 those distributed with Emacs) run ‘prog-mode-hook’, prior to running
 their own mode hooks.  Hook functions can look at the value of the
 variable ‘major-mode’ to see which mode is actually being entered.
 
    Mode hooks are commonly used to enable minor modes (SeeMinor
 Modes).  For example, you can put the following lines in your init
 file to enable Flyspell minor mode in all text-based major modes (See
 Spelling), and Eldoc minor mode in Emacs Lisp mode (SeeLisp Doc):
 
      (add-hook 'text-mode-hook 'flyspell-mode)
      (add-hook 'emacs-lisp-mode-hook 'eldoc-mode)
 
    ---------- Footnotes ----------
 
    (1) More specifically, the modes which are ”derived” from ‘prog-mode’
 (See(elisp)Derived Modes).