4.5 Minor Modes
CC Mode contains several minor-mode-like features that you might
find useful while writing new code or editing old code:
- electric mode
- When this is enabled, certain visible characters cause reformatting as
they are typed. This is normally helpful, but can be a nuisance when
editing chaotically formatted code. It can also be disconcerting,
especially for users who are new to CC Mode.
- auto-newline mode
- This automatically inserts newlines where you'd probably want to type
them yourself, e.g., after typing ‘}’s. Its action is suppressed
when electric mode is disabled.
- hungry-delete mode
- This lets you delete a contiguous block of whitespace with a single
key: for example, the newline and indentation just inserted by
auto-newline when you want to back up and write a comment after the
- subword mode
- This mode makes basic word movement commands like M-f
forward-word) and M-b (
backward-word) treat the
parts of sillycapsed symbols as different words.
E.g., ‘NSGraphicsContext’ is treated as three words ‘NS’,
‘Graphics’, and ‘Context’.
- syntactic-indentation mode
- When this is enabled (which it normally is), indentation commands such
as C-j indent lines of code according to their syntactic
structure. Otherwise, a line is simply indented to the same level as
the previous one and <TAB> adjusts the indentation in steps
Full details on how these minor modes work are at Electric Keys,
Auto-newlines, Hungry WS Deletion, Subword Movement,
and Indentation Engine Basics.
You can toggle each of these minor modes on and off, and you can
configure CC Mode so that it starts up with your favorite
combination of them (see Sample Init File). By default, when
you initialize a buffer, electric mode and syntactic-indentation mode
are enabled but the other three modes are disabled.
CC Mode displays the current state of the first four of these minor
modes on the modeline by appending letters to the major mode's name,
one letter for each enabled minor mode: ‘l’ for electric mode,
‘a’ for auto-newline mode, ‘h’ for hungry delete mode, and
‘w’ for subword mode. If all these modes were enabled, you'd see
Here are the commands to toggle these modes:
- C-c C-l (
- Toggle electric minor mode. When the command turns the mode off, it
also suppresses auto-newline mode.
- C-c C-a (
- Toggle auto-newline minor mode. When the command turns the mode on,
it also enables electric minor mode.
- M-x c-toggle-hungry-state2
- Toggle hungry-delete minor mode.
- M-x c-toggle-auto-hungry-state3
- Toggle both auto-newline and hungry delete minor modes.
- C-c C-w (
- Toggle subword mode.
- M-x c-toggle-syntactic-indentation
- Toggle syntactic-indentation mode.
Common to all the toggle functions above is that if they are called
programmatically, they take an optional numerical argument. A
positive value will turn on the minor mode (or both of them in the
c-toggle-auto-hungry-state) and a negative value will
turn it (or them) off.