ccmode: Electric Keys

 
 4.6 Electric Keys and Keywords
 ==============================
 
 Most punctuation keys provide “electric” behavior: as well as inserting
 themselves they perform some other action, such as reindenting the line.
 This reindentation saves you from having to reindent a line manually
 after typing, say, a ‘}’.  A few keywords, such as ‘else’, also trigger
 electric action.
 
    You can inhibit the electric behavior described here by disabling
 electric minor mode (SeeMinor Modes).
 
    Common to all these keys is that they only behave electrically when
 used in normal code (as contrasted with getting typed in a string
 literal or comment).  Those which cause re-indentation do so only when
 ‘c-syntactic-indentation’ has a non-‘nil’ value (which it does by
 default).
 
    These keys and keywords are:
 
 ‘#’
      Pound (bound to ‘c-electric-pound’) is electric when typed as the
      first non-whitespace character on a line and not within a macro
      definition.  In this case, the variable ‘c-electric-pound-behavior’
      is consulted for the electric behavior.  This variable takes a list
      value, although the only element currently defined is ‘alignleft’,
      which tells this command to force the ‘#’ character into column
      zero.  This is useful for entering preprocessor macro definitions.
 
      Pound is not electric in AWK buffers, where ‘#’ starts a comment,
      and is bound to ‘self-insert-command’ like any typical printable
      character.
 
 ‘*’
 ‘/’
      A star (bound to ‘c-electric-star’) or a slash (‘c-electric-slash’)
      causes reindentation when you type it as the second component of a
      C style block comment opener (‘/*’) or a C++ line comment opener
      (‘//’) respectively, but only if the comment opener is the first
      thing on the line (i.e., there’s only whitespace before it).
 
      Additionally, you can configure CC Mode so that typing a slash at
      the start of a line within a block comment will terminate the
      comment.  You don’t need to have electric minor mode enabled to get
      this behavior.  SeeClean-ups.
 
      In AWK mode, ‘*’ and ‘/’ do not delimit comments and are not
      electric.
 
 ‘<’
 ‘>’
      A less-than or greater-than sign (bound to ‘c-electric-lt-gt’) is
      electric in two circumstances: when it is an angle bracket in a C++
      ‘template’ declaration (and similar constructs in other languages)
      and when it is the second of two ‘<’ or ‘>’ characters in a C++
      style stream operator.  In either case, the line is reindented.
      Angle brackets in C ‘#include’ directives are not electric.
 
 ‘(’
 ‘)’
      The normal parenthesis characters ‘(’ and ‘)’ (bound to
      ‘c-electric-paren’) reindent the current line.  This is useful for
      getting the closing parenthesis of an argument list aligned
      automatically.
 
      You can also configure CC Mode to insert a space automatically
      between a function name and the ‘(’ you’ve just typed, and to
      remove it automatically after typing ‘)’, should the argument list
      be empty.  You don’t need to have electric minor mode enabled to
      get these actions.  SeeClean-ups.
 
 ‘{’
 ‘}’
      Typing a brace (bound to ‘c-electric-brace’) reindents the current
      line.  Also, one or more newlines might be inserted if auto-newline
      minor mode is enabled.  SeeAuto-newlines.  Additionally, you
      can configure CC Mode to compact excess whitespace inserted by
      auto-newline mode in certain circumstances.  SeeClean-ups.
 
 ‘:’
      Typing a colon (bound to ‘c-electric-colon’) reindents the current
      line.  Additionally, one or more newlines might be inserted if
      auto-newline minor mode is enabled.  SeeAuto-newlines.  If you
      type a second colon immediately after such an auto-newline, by
      default the whitespace between the two colons is removed, leaving a
      C++ scope operator.  SeeClean-ups.
 
      If you prefer, you can insert ‘::’ in a single operation, avoiding
      all these spurious reindentations, newlines, and clean-ups.  See
      Other Commands.
 
 ‘;’
 ‘,’
      Typing a semicolon or comma (bound to ‘c-electric-semi&comma’)
      reindents the current line.  Also, a newline might be inserted if
      auto-newline minor mode is enabled.  SeeAuto-newlines.
      Additionally, you can configure CC Mode so that when auto-newline
      has inserted whitespace after a ‘}’, it will be removed again when
      you type a semicolon or comma just after it.  SeeClean-ups.
 
  -- Command: c-electric-continued-statement
 
      Certain keywords are electric, causing reindentation when they are
      preceded only by whitespace on the line.  The keywords are those
      that continue an earlier statement instead of starting a new one:
      ‘else’, ‘while’, ‘catch’ (only in C++ and Java) and ‘finally’ (only
      in Java).
 
      An example:
 
           for (i = 0; i < 17; i++)
             if (a[i])
               res += a[i]->offset;
           else
 
      Here, the ‘else’ should be indented like the preceding ‘if’, since
      it continues that statement.  CC Mode will automatically reindent
      it after the ‘else’ has been typed in full, since only then is it
      possible to decide whether it’s a new statement or a continuation
      of the preceding ‘if’.
 
      CC Mode uses Abbrev mode (See(emacs)Abbrevs) to accomplish
      this.  It’s therefore turned on by default in all language modes
      except IDL mode, since CORBA IDL doesn’t have any statements.