elisp: Documentation Basics

 
 23.1 Documentation Basics
 =========================
 
 A documentation string is written using the Lisp syntax for strings,
 with double-quote characters surrounding the text.  It is, in fact, an
 actual Lisp string.  When the string appears in the proper place in a
 function or variable definition, it serves as the function’s or
 variable’s documentation.
 
    In a function definition (a ‘lambda’ or ‘defun’ form), the
 documentation string is specified after the argument list, and is
 normally stored directly in the function object.  SeeFunction
 Documentation.  You can also put function documentation in the
 ‘function-documentation’ property of a function name (SeeAccessing
 Documentation).
 
    In a variable definition (a ‘defvar’ form), the documentation string
 is specified after the initial value.  SeeDefining Variables.  The
 string is stored in the variable’s ‘variable-documentation’ property.
 
    Sometimes, Emacs does not keep documentation strings in memory.
 There are two such circumstances.  Firstly, to save memory, the
 documentation for preloaded functions and variables (including
 primitives) is kept in a file named ‘DOC’, in the directory specified by
 ‘doc-directory’ (SeeAccessing Documentation).  Secondly, when a
 function or variable is loaded from a byte-compiled file, Emacs avoids
 loading its documentation string (SeeDocs and Compilation).  In
 both cases, Emacs looks up the documentation string from the file only
 when needed, such as when the user calls ‘C-h f’ (‘describe-function’)
 for a function.
 
    Documentation strings can contain special “key substitution
 sequences”, referring to key bindings which are looked up only when the
 user views the documentation.  This allows the help commands to display
 the correct keys even if a user rearranges the default key bindings.
 SeeKeys in Documentation.
 
    In the documentation string of an autoloaded command (See
 Autoload), these key-substitution sequences have an additional special
 effect: they cause ‘C-h f’ on the command to trigger autoloading.  (This
 is needed for correctly setting up the hyperlinks in the ‘*Help*’
 buffer.)