ccmode: Minor Modes
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’.
DONTPRINTYET Full details on how these minor modes work are at Electric
Keys, Auto-newlines, Hungry WS Deletion, *noteSubword
DONTPRINTYET 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 (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/lahw’(1).
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-state’(2)
Toggle hungry-delete minor mode.
‘M-x c-toggle-auto-hungry-state’(3)
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.
---------- Footnotes ----------
(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’.