GNU Info

Info Node: (emacs)Left Margin Paren

(emacs)Left Margin Paren


Next: Moving by Defuns Up: Defuns
Enter node , (file) or (file)node

Left Margin Convention
----------------------

   In most major modes, Emacs assumes that any opening delimiter found
at the left margin is the start of a top-level definition, or defun.
Therefore, *never put an opening delimiter at the left margin unless it
should have that significance.*  For instance, never put an
open-parenthesis at the left margin in a Lisp file unless it is the
start of a top-level list.  Never put an open-brace or other opening
delimiter at the beginning of a line of C code unless it is at top
level.

   If you don't follow this convention, not only will you have trouble
when you explicitly use the commands for motion by defuns; other
features that use them will also give you trouble.  This includes the
indentation commands (Note: Program Indent) and Font Lock mode (Note:
Font Lock).

   The most likely problem case is when you want an opening delimiter
at the start of a line inside a string.  To avoid trouble, put an
escape character (`\', in C and Emacs Lisp, `/' in some other Lisp
dialects) before the opening delimiter.  This will not affect the
contents of the string, but will prevent that opening delimiter from
starting a defun.  Here's an example:

       (insert "Foo:
     \(bar)
     ")

   In the earliest days, the original Emacs found defuns by moving
upward a level of parentheses or braces until there were no more levels
to go up.  This always required scanning all the way back to the
beginning of the buffer, even for a small function.  To speed up the
operation, we changed Emacs to assume that any opening delimiter at the
left margin is the start of a defun.  This heuristic is nearly always
right, and avoids the need to scan back to the beginning of the buffer.
However, it mandates following the convention described above.


automatically generated by info2www version 1.2.2.9