Next: , Previous: Filling and Breaking, Up: Commands

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 last statement.
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 of c-basic-offset.

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 ‘C/lahw1.

Here are the commands to toggle these modes:

C-c C-l (c-toggle-electric-state)
Toggle electric minor mode. When the command turns the mode off, it also suppresses auto-newline mode.
C-c C-a (c-toggle-auto-newline)
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 (M-x subword-mode)
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 case of c-toggle-auto-hungry-state) and a negative value will turn it (or them) off.


[1] The ‘C’ would be replaced with the name of the language in question for the other languages CC Mode supports.

[2] Prior to CC Mode 5.31, this command was bound to C-c C-d.

[3] Prior to CC Mode 5.31, this command was bound to C-c C-t.