26.3.5 Customizing C Indentation
C mode and related modes use a flexible mechanism for customizing indentation. C mode indents a source line in two steps: first it classifies the line syntactically according to its contents and context; second, it determines the indentation offset associated by your selected style with the syntactic construct and adds this onto the indentation of the anchor statement.
C-c . style RET
Select a predefined style style ( c-set-style
).
A style is a named collection of customizations that can be
used in C mode and the related modes. Styles in The CC
Mode Manual, for a complete description. Emacs comes with several
predefined styles, including gnu
, k&r
, bsd
,
stroustrup
, linux
, python
, java
,
whitesmith
, ellemtel
, and awk
. Some of these
styles are primarily intended for one language, but any of them can be
used with any of the languages supported by these modes. To find out
what a style looks like, select it and reindent some code, e.g., by
typing C-M-q
at the start of a function definition.
To choose a style for the current buffer, use the command C-c .
. Specify a style name as an argument (case is not significant).
This command affects the current buffer only, and it affects only
future invocations of the indentation commands; it does not reindent
the code already in the buffer. To reindent the whole buffer in the
new style, you can type C-x h C-M-\
.
You can also set the variable c-default-style
to specify the
default style for various major modes. Its value should be either the
style’s name (a string) or an alist, in which each element specifies
one major mode and which indentation style to use for it. For
example,
(setq c-default-style
'((java-mode . "java")
(awk-mode . "awk")
(other . "gnu")))
specifies explicit choices for Java and AWK modes, and the default
‘ gnu
’ style for the other C-like modes. (These settings are
actually the defaults.) This variable takes effect when you select
one of the C-like major modes; thus, if you specify a new default
style for Java mode, you can make it take effect in an existing Java
mode buffer by typing M-x java-mode
there.
The gnu
style specifies the formatting recommended by the GNU
Project for C; it is the default, so as to encourage use of our
recommended style.
See Indentation Engine Basics in the CC Mode Manual, and Customizing Indentation in the CC Mode Manual, for more information on customizing indentation for C and related modes, including how to override parts of an existing style and how to define your own styles.
As an alternative to specifying a style, you can tell Emacs to guess
a style by typing M-x c-guess
in a sample code buffer. You can
then apply the guessed style to other buffers with M-x c-guess-install
. See Guessing the Style in the CC Mode
Manual, for details.