emacs: Font Lock

 
 14.12 Font Lock mode
 ====================
 
 Font Lock mode is a minor mode, always local to a particular buffer,
 which assigns faces to (or “fontifies”) the text in the buffer.  Each
 buffer’s major mode tells Font Lock mode which text to fontify; for
 instance, programming language modes fontify syntactically relevant
 constructs like comments, strings, and function names.
 
    Font Lock mode is enabled by default.  To toggle it in the current
 buffer, type ‘M-x font-lock-mode’.  A positive numeric argument
 unconditionally enables Font Lock mode, and a negative or zero argument
 disables it.
 
    Type ‘M-x global-font-lock-mode’ to toggle Font Lock mode in all
 buffers.  To impose this setting for future Emacs sessions, customize
 the variable ‘global-font-lock-mode’ (SeeEasy Customization), or
 add the following line to your init file:
 
      (global-font-lock-mode 0)
 
 If you have disabled Global Font Lock mode, you can still enable Font
 Lock for specific major modes by adding the function ‘font-lock-mode’ to
 the mode hooks (SeeHooks).  For example, to enable Font Lock mode
 for editing C files, you can do this:
 
      (add-hook 'c-mode-hook 'font-lock-mode)
 
    Font Lock mode uses several specifically named faces to do its job,
 including ‘font-lock-string-face’, ‘font-lock-comment-face’, and others.
 The easiest way to find them all is to use ‘M-x customize-group <RET>
 font-lock-faces <RET>’.  You can then use that customization buffer to
 customize the appearance of these faces.  SeeFace Customization.
 
    You can customize the variable ‘font-lock-maximum-decoration’ to
 alter the amount of fontification applied by Font Lock mode, for major
 modes that support this feature.  The value should be a number (with 1
 representing a minimal amount of fontification; some modes support
 levels as high as 3); or ‘t’, meaning “as high as possible” (the
 default).  To be effective for a given file buffer, the customization of
 ‘font-lock-maximum-decoration’ should be done _before_ the file is
 visited; if you already have the file visited in a buffer when you
 customize this variable, kill the buffer and visit the file again after
 the customization.
 
    You can also specify different numbers for particular major modes;
 for example, to use level 1 for C/C++ modes, and the default level
 otherwise, use the value
 
      '((c-mode . 1) (c++-mode . 1)))
 
    Comment and string fontification (or “syntactic” fontification)
 relies on analysis of the syntactic structure of the buffer text.  For
 the sake of speed, some modes, including Lisp mode, rely on a special
 convention: an open-parenthesis or open-brace in the leftmost column
 always defines the beginning of a defun, and is thus always outside any
 string or comment.  Therefore, you should avoid placing an
 open-parenthesis or open-brace in the leftmost column, if it is inside a
 string or comment.  SeeLeft Margin Paren, for details.
 
    Font Lock highlighting patterns already exist for most modes, but you
 may want to fontify additional patterns.  You can use the function
 ‘font-lock-add-keywords’, to add your own highlighting patterns for a
 particular mode.  For example, to highlight ‘FIXME:’ words in C
 comments, use this:
 
      (add-hook 'c-mode-hook
                (lambda ()
                 (font-lock-add-keywords nil
                  '(("\\<\\(FIXME\\):" 1
                     font-lock-warning-face t)))))
 
 To remove keywords from the font-lock highlighting patterns, use the
 function ‘font-lock-remove-keywords’.  See(elisp)Search-based
 Fontification.
 
    Fontifying large buffers can take a long time.  To avoid large delays
 when a file is visited, Emacs initially fontifies only the visible
 portion of a buffer.  As you scroll through the buffer, each portion
 that becomes visible is fontified as soon as it is displayed; this type
 of Font Lock is called “Just-In-Time” (or “JIT”) Lock.  You can control
 how JIT Lock behaves, including telling it to perform fontification
 while idle, by customizing variables in the customization group
 ‘jit-lock’.  SeeSpecific Customization.