aboutsummaryrefslogtreecommitdiffstats
path: root/man
diff options
context:
space:
mode:
authorAlan Mackenzie2005-12-02 12:51:05 +0000
committerAlan Mackenzie2005-12-02 12:51:05 +0000
commit116e44a12d452fa9b8ea0c5fe7bfecf86a1d30d1 (patch)
tree259f58dc1838d7246fdc6eac162138ead400c5be /man
parent0386b551af726187e2eb674fa2ffdb1cfedaabe8 (diff)
downloademacs-116e44a12d452fa9b8ea0c5fe7bfecf86a1d30d1.tar.gz
emacs-116e44a12d452fa9b8ea0c5fe7bfecf86a1d30d1.zip
Update for CC Mode 5.31.
Diffstat (limited to 'man')
-rw-r--r--man/cc-mode.texi7264
1 files changed, 4238 insertions, 3026 deletions
diff --git a/man/cc-mode.texi b/man/cc-mode.texi
index a59c0226257..92d4ac20aa0 100644
--- a/man/cc-mode.texi
+++ b/man/cc-mode.texi
@@ -1,5 +1,4 @@
1\input texinfo 1\input texinfo
2
3@c Notes to self regarding line handling: 2@c Notes to self regarding line handling:
4@c 3@c
5@c Empty lines are often significant before @end directives; avoid them. 4@c Empty lines are often significant before @end directives; avoid them.
@@ -27,6 +26,58 @@
27@comment %**start of header (This is for running Texinfo on a region) 26@comment %**start of header (This is for running Texinfo on a region)
28@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 27@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
29 28
29
30@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
31@comment How to make the various output formats:
32@comment (Thanks to Robert Chassell for supplying this information.)
33@comment Note that Texinfo 4.7 (or later) is needed.
34@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
35@ignore
36In each of the following pairs of commands, the first generates a
37version with cross references pointing to the GNU Emacs manuals,
38the second with them pointing to the XEmacs manuals.
39 ## Info output
40 makeinfo cc-mode.texi
41 makeinfo -DXEMACS cc-mode.texi
42
43 ## DVI output
44 ## You may need to set up the environment variable TEXINPUTS so
45 ## that tex can find the file texinfo.tex - See the tex
46 ## manpage.
47 texi2dvi cc-mode.texi
48 texi2dvi -t "@set XEMACS " cc-mode.texi
49
50 ## HTML output. (The --no-split parameter is optional)
51 makeinfo --html --no-split cc-mode.texi
52 makeinfo --html --no-split -DXEMACS cc-mode.texi
53
54 ## Plain text output
55 makeinfo --fill-column=70 --no-split --paragraph-indent=0 \
56 --no-headers --output=cc-mode.txt cc-mode.texi
57 makeinfo --fill-column=70 --no-split --paragraph-indent=0 \
58 --no-headers --output=cc-mode.txt -DXEMACS cc-mode.texi
59
60 ## DocBook output
61 makeinfo --docbook --no-split --paragraph-indent=0 \
62 cc-mode.texi
63 makeinfo --docbook --no-split --paragraph-indent=0 \
64 -DXEMACS cc-mode.texi
65
66 ## XML output
67 makeinfo --xml --no-split --paragraph-indent=0 \
68 cc-mode.texi
69 makeinfo --xml --no-split --paragraph-indent=0 \
70 -DXEMACS cc-mode.texi
71
72 #### (You must be in the same directory as the viewed file.)
73
74 ## View DVI output
75 xdvi cc-mode.dvi &
76
77 ## View HTML output
78 mozilla cc-mode.html
79@end ignore
80
30@comment No overfull hbox marks in the dvi file. 81@comment No overfull hbox marks in the dvi file.
31@finalout 82@finalout
32 83
@@ -34,6 +85,46 @@
34@settitle CC Mode Manual 85@settitle CC Mode Manual
35@footnotestyle end 86@footnotestyle end
36 87
88@c The following four macros generate the filenames and titles of the
89@c main (X)Emacs manual and the Elisp/Lispref manual. Leave the
90@c Texinfo variable `XEMACS' unset to generate a GNU Emacs version, set it
91@c to generate an XEmacs version, e.g. with
92@c "makeinfo -DXEMACS cc-mode.texi".
93@ifset XEMACS
94@macro emacsman
95xemacs
96@end macro
97@macro emacsmantitle
98XEmacs User's Manual
99@end macro
100@macro lispref
101lispref
102@end macro
103@macro lispreftitle
104XEmacs Lisp Reference Manual
105@end macro
106@end ifset
107
108@ifclear XEMACS
109@macro emacsman
110emacs
111@end macro
112@macro emacsmantitle
113GNU Emacs Manual
114@end macro
115@macro lispref
116elisp
117@end macro
118@macro lispreftitle
119GNU Emacs Lisp Reference Manual
120@end macro
121@end ifclear
122
123
124@macro ccmode
125CC Mode
126@end macro
127
37@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 128@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
38@comment @setchapternewpage odd !! we don't want blank pages !! 129@comment @setchapternewpage odd !! we don't want blank pages !!
39@comment %**end of header (This is for running Texinfo on a region) 130@comment %**end of header (This is for running Texinfo on a region)
@@ -49,13 +140,15 @@
49@comment Authors: 140@comment Authors:
50@comment Barry A. Warsaw 141@comment Barry A. Warsaw
51@comment Martin Stjernholm 142@comment Martin Stjernholm
143@comment Alan Mackenzie
52@comment 144@comment
53@comment Maintained by Martin Stjernholm <bug-cc-mode@gnu.org> 145@comment Maintained by Martin Stjernholm and Alan Mackenzie <bug-cc-mode@gnu.org>
54@comment 146@comment
55@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 147@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
56 148
57@comment Define an index for syntactic symbols. 149@comment Define an index for syntactic symbols.
58@ifnottex 150@ifnottex @c In texi2dvi, the @defindex would create an empty cc-mode.ss
151 @c For Info, unlike tex, @syncodeindex needs a matching @defindex.
59@defindex ss 152@defindex ss
60@end ifnottex 153@end ifnottex
61 154
@@ -105,15 +198,19 @@ license to the document, as described in section 6 of the license.
105@titlepage 198@titlepage
106@sp 10 199@sp 10
107 200
108@center @titlefont{CC Mode 5.30} 201@center @titlefont{CC Mode 5.31}
109@sp 2 202@sp 2
110@center @subtitlefont{A GNU Emacs mode for editing C and C-like languages} 203@center @subtitlefont{A GNU Emacs mode for editing C and C-like languages}
111@sp 2 204@sp 2
112@center Barry A. Warsaw, Martin Stjernholm, Alan Mackenzie (AWK support) 205@center Barry A. Warsaw, Martin Stjernholm, Alan Mackenzie
113 206
114@page 207@page
115@vskip 0pt plus 1filll 208@vskip 0pt plus 1filll
116@insertcopying 209@insertcopying
210
211This manual was generated from $Revision: 5.241 $ of $RCSfile: cc-mode.texi,v $, which can be
212downloaded from
213@url{http://cvs.sf.net/viewcvs.py/cc-mode/cc-mode/cc-mode.texi}.
117@end titlepage 214@end titlepage
118 215
119@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 216@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -124,139 +221,161 @@ license to the document, as described in section 6 of the license.
124@node Top, Introduction, (dir), (dir) 221@node Top, Introduction, (dir), (dir)
125@comment node-name, next, previous, up 222@comment node-name, next, previous, up
126 223
127@macro ccmode
128CC Mode
129@end macro
130
131@ifinfo 224@ifinfo
132@top @ccmode{} 225@top @ccmode{}
133 226
134@ccmode{} is a GNU Emacs mode for editing files containing C, C++, 227@ccmode{} is a GNU Emacs mode for editing files containing C, C++,
135Objective-C, Java, CORBA IDL (and the variants PSDL and CIDL), Pike 228Objective-C, Java, CORBA IDL (and the variants PSDL and CIDL), Pike
136code and to a certain extent, AWK code @xref{AWK Mode}. It provides 229and AWK code. It provides syntax-based indentation, font locking, and
137syntax-based indentation, font locking, and has several handy commands 230has several handy commands and some minor modes to make the editing
138and some minor modes to make the editing easier. It does not provide 231easier. It does not provide tools to look up and navigate between
139tools to look up and navigate between functions, classes etc - there are 232functions, classes etc - there are other packages for that.
140other packages for that.
141@end ifinfo 233@end ifinfo
142 234
143@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 235@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
144@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 236@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
145 237
146@menu 238@menu
147* Introduction:: 239* Introduction::
148* Getting Connected:: 240* Overview::
149* Indentation Engine:: 241* Getting Started::
150* Minor Modes:: 242* Commands::
151* Text Filling and Line Breaking:: 243* Font Locking::
152* Macro Handling:: 244* Config Basics::
153* Font Locking:: 245* Custom Filling and Breaking::
154* Commands:: 246* Custom Auto-newlines::
155* Customizing Indentation:: 247* Clean-ups::
156* Syntactic Symbols:: 248* Indentation Engine Basics::
157* Indentation Functions:: 249* Customizing Indentation::
158* AWK Mode:: 250* Custom Macros::
159* Odds and Ends:: 251* Odds and Ends::
160* Performance Issues:: 252* Sample .emacs File::
161* Limitations and Known Bugs:: 253* Performance Issues::
162* Frequently Asked Questions:: 254* Limitations and Known Bugs::
163* Getting the Latest CC Mode Release:: 255* FAQ::
164* Mailing Lists and Submitting Bug Reports:: 256* Updating CC Mode::
165* Sample .emacs File:: 257* Mailing Lists and Bug Reports::
166 258* Command and Function Index::
167 --- Indices --- 259* Variable Index::
168 260* Concept and Key Index::
169* Command and Function Index::
170* Variable Index::
171* Concept Index::
172 261
173@detailmenu 262@detailmenu
174 --- The Detailed Node Listing --- 263 --- The Detailed Node Listing ---
175 264
176Indentation Engine 265Commands
177 266
178* Syntactic Analysis:: 267* Indentation Commands::
179* Indentation Calculation:: 268* Comment Commands::
269* Movement Commands::
270* Filling and Breaking::
271* Minor Modes::
272* Electric Keys::
273* Auto-newlines::
274* Hungry WS Deletion::
275* Subword Movement::
276* Other Commands::
180 277
181Minor Modes 278Font Locking
182 279
183* Auto-newline Insertion:: 280* Font Locking Preliminaries::
184* Hungry-deletion of Whitespace:: 281* Faces::
282* Doc Comments::
283* AWK Mode Font Locking::
185 284
186Font Locking 285Configuration Basics
187 286
188* Font Locking Preliminaries:: 287* CC Hooks::
189* Faces:: 288* Style Variables::
190* Documentation Comments:: 289* Styles::
191 290
192Auto-newline Insertion 291Styles
193 292
194* Hanging Braces:: 293* Built-in Styles::
195* Hanging Colons:: 294* Choosing a Style::
196* Hanging Semicolons and Commas:: 295* Adding Styles::
197* Other Electric Commands:: 296* File Styles::
198* Clean-ups::
199 297
200Commands 298Customizing Auto-newlines
201 299
202* Indentation Commands:: 300* Hanging Braces::
203* Movement Commands:: 301* Hanging Colons::
204* Other Commands:: 302* Hanging Semicolons and Commas::
205 303
206Customizing Indentation 304Hanging Braces
207 305
208* Interactive Customization:: 306* Custom Braces::
209* Permanent Customization::
210* Hooks::
211* Styles::
212* Advanced Customizations::
213 307
214Styles 308Indentation Engine Basics
215 309
216* Built-in Styles:: 310* Syntactic Analysis::
217* Choosing a Style:: 311* Syntactic Symbols::
218* Adding Styles:: 312* Indentation Calculation::
219* File Styles::
220 313
221Advanced Customizations 314Syntactic Symbols
222 315
223* Custom Indentation Functions:: 316* Function Symbols::
224* Custom Brace and Colon Hanging:: 317* Class Symbols::
225* Customizing Semicolons and Commas:: 318* Conditional Construct Symbols::
226* Other Special Indentations:: 319* Switch Statement Symbols::
320* Brace List Symbols::
321* External Scope Symbols::
322* Paren List Symbols::
323* Literal Symbols::
324* Multiline Macro Symbols::
325* Objective-C Method Symbols::
326* Anonymous Class Symbol::
327* Statement Block Symbols::
328* K&R Symbols::
227 329
228AWK Mode 330Customizing Indentation
331
332* c-offsets-alist::
333* Interactive Customization::
334* Line-Up Functions::
335* Custom Line-Up::
336* Other Indentation::
337
338Line-Up Functions
339
340* Brace/Paren Line-Up::
341* List Line-Up::
342* Operator Line-Up::
343* Comment Line-Up::
344* Misc Line-Up::
229 345
230* Initialising AWK Mode::
231* AWK Mode Font Locking::
232* AWK Mode Defuns::
233@end detailmenu 346@end detailmenu
234@end menu 347@end menu
235 348
236
237@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 349@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
238@node Introduction, Getting Connected, Top, Top 350@node Introduction, Overview, Top, Top
239@comment node-name, next, previous, up 351@comment node-name, next, previous, up
240@chapter Introduction 352@chapter Introduction
241@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 353@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
242 354
243@cindex BOCM 355@cindex BOCM
356@cindex history
357@cindex awk-mode.el
358@cindex c-mode.el
359@cindex c++-mode.el
244 360
245Welcome to @ccmode{}, a GNU Emacs mode for editing files containing C, 361Welcome to @ccmode{}, a GNU Emacs mode for editing files containing C,
246C++, Objective-C, Java, CORBA IDL (and the variants CORBA PSDL and 362C++, Objective-C, Java, CORBA IDL (and the variants CORBA PSDL and
247CIDL), Pike and to a certain extent, AWK code (@pxref{AWK Mode}). This 363CIDL), Pike and AWK code. This incarnation of the mode is descended
248incarnation of the mode is descended from @file{c-mode.el} (also called 364from @file{c-mode.el} (also called ``Boring Old C Mode'' or BOCM
249``Boring Old C Mode'' or BOCM @t{:-)}, and @file{c++-mode.el} version 2, 365@t{:-)}, @file{c++-mode.el} version 2, which Barry Warsaw had been
250which Barry has been maintaining since 1992. Late in 1997, Martin 366maintaining since 1992, and @file{awk-mode.el}, a long neglected mode
251joined the @ccmode{} Maintainers Team, and implemented the Pike support. 367in the (X)Emacs base.
252As of 2000 Martin has taken over as the sole maintainer. @ccmode{} did 368
253not originally contain the font lock support for its languages --- that 369Late in 1997, Martin Stjernholm joined Barry on the @ccmode{}
254was added in version 5.30. AWK support was also added in 5.30 by Alan 370Maintainers Team, and implemented the Pike support. In 2000 Martin
255Mackenzie. 371took over as the sole maintainer. In 2001 Alan Mackenzie joined the
372team, implementing AWK support in version 5.30. @ccmode{} did not
373originally contain the font lock support for its languages --- that
374was added in version 5.30.
256 375
257This manual describes @ccmode{} 376This manual describes @ccmode{}
258@comment The following line must appear on its own, so that the automated 377@comment The following line must appear on its own, so that the
259version 5.30. 378version 5.31.
260@comment Release.py script can update the version number automatically 379@comment Release.py script can update the version number automatically
261 380
262@ccmode{} supports the editing of K&R and ANSI C, C++, Objective-C, 381@ccmode{} supports the editing of K&R and ANSI C, C++, Objective-C,
@@ -274,7 +393,7 @@ uniformly integrated as the other languages.
274@findex idl-mode 393@findex idl-mode
275@findex pike-mode 394@findex pike-mode
276@findex awk-mode 395@findex awk-mode
277Note that the name of this package is ``@ccmode{},'' but there is no top 396Note that the name of this package is ``@ccmode{}'', but there is no top
278level @code{cc-mode} entry point. All of the variables, commands, and 397level @code{cc-mode} entry point. All of the variables, commands, and
279functions in @ccmode{} are prefixed with @code{c-@var{thing}}, and 398functions in @ccmode{} are prefixed with @code{c-@var{thing}}, and
280@code{c-mode}, @code{c++-mode}, @code{objc-mode}, @code{java-mode}, 399@code{c-mode}, @code{c++-mode}, @code{objc-mode}, @code{java-mode},
@@ -282,578 +401,841 @@ functions in @ccmode{} are prefixed with @code{c-@var{thing}}, and
282provided. This package is intended to be a replacement for 401provided. This package is intended to be a replacement for
283@file{c-mode.el}, @file{c++-mode.el} and @file{awk-mode.el}. 402@file{c-mode.el}, @file{c++-mode.el} and @file{awk-mode.el}.
284 403
285@c @cindex @file{cc-compat.el} file
286@c This distribution also contains a file
287@c called @file{cc-compat.el} which should ease your transition from BOCM
288@c to @ccmode{}. If you have a BOCM configuration you are really happy
289@c with, and want to postpone learning how to configure @ccmode{}, take a
290@c look at that file. It maps BOCM configuration variables to @ccmode{}'s
291@c indentation model. It is not actively supported so for the long run,
292@c you should learn how to customize @ccmode{} to support your coding
293@c style.
294
295A special word of thanks goes to Krishna Padmasola for his work in 404A special word of thanks goes to Krishna Padmasola for his work in
296converting the original @file{README} file to Texinfo format. I'd also 405converting the original @file{README} file to Texinfo format. I'd
297like to thank all the @ccmode{} victims who help enormously during the 406also like to thank all the @ccmode{} victims who help enormously
298early beta stages of @ccmode{}'s development. 407during the early beta stages of @ccmode{}'s development.
299 408
409@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
410@node Overview, Getting Started, Introduction, Top
411@comment node-name, next, previous, up@cindex organization of the manual
412@chapter Overview of the Manual
413@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
300 414
301@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 415@noindent
302@node Getting Connected, Indentation Engine, Introduction, Top 416The manual starts with several introductory chapters (including this
303@comment node-name, next, previous, up 417one).
304@chapter Getting Connected
305@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
306
307If you got this version of @ccmode{} with Emacs or XEmacs, it should
308work just fine right out of the box. Note however that you may not have
309the latest @ccmode{} release and may want to upgrade your copy.
310 418
311If you are upgrading an existing @ccmode{} installation, please see the 419@noindent
312@file{README} file for installation details. @ccmode{} may not work 420The next chunk of the manual describes the day to day @emph{use} of
313with older versions of Emacs or XEmacs. See the @ccmode{} release notes 421@ccmode{} (as contrasted with how to customize it).
314at @uref{http://cc-mode.sourceforge.net} for the latest information on
315Emacs version and package compatibility (@pxref{Getting the Latest CC
316Mode Release}).
317 422
318@deffn Command c-version 423@itemize @bullet
319@findex version (c-) 424@item
320You can find out what version of @ccmode{} you are using by visiting a C 425The chapter ``Commands'' describes in detail how to use (nearly) all
321file and entering @kbd{M-x c-version RET}. You should see this message in 426of @ccmode{}'s features. There are extensive cross-references from
322the echo area: 427here to the corresponding sections later in the manual which tell you
428how to customize these features.
323 429
324@example 430@item
325Using CC Mode version 5.XX 431``Font Locking'' describes how ``syntax highlighting'' is applied to
326@end example 432your buffers. It is mainly background information and can be skipped
433over at a first reading.
434@end itemize
327 435
328@noindent 436@noindent
329where @samp{XX} is the minor release number. 437The next chunk of the manual describes how to @emph{customize}
330@end deffn 438@ccmode{}. Typically, an overview of a topic is given at the chapter
439level, then the sections and subsections describe the material in
440increasing detail.
331 441
442@itemize @bullet
443@item
444The chapter ``Configuration Basics'' tells you @emph{how} to write
445customizations - whether in hooks, in styles, in both, or in neither,
446depending on your needs. It describes the @ccmode{} style system and
447lists the standard styles that @ccmode{} supplies.
332 448
333@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 449@item
334@node Indentation Engine, Minor Modes, Getting Connected, Top 450The next few chapters, describe in detail how to customize the various
335@comment node-name, next, previous, up 451features of @ccmode{}.
336@chapter Indentation Engine
337@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
338 452
339@ccmode{} has an indentation engine that provides a flexible and general 453@item
340mechanism for customizing indentation. It separates indentation 454Finally, there is a sample @file{.emacs} fragment, which might help you
341calculation into two steps: first, @ccmode{} analyzes the line of code 455in creating your own customization.
342being indented to determine the kind of language construct it's looking 456@end itemize
343at, then it applies user defined offsets to the current line based on
344this analysis.
345 457
346This section will briefly cover how indentation is calculated in 458@noindent
347@ccmode{}. It is important to understand the indentation model being 459The manual ends with ``this and that'', things that don't fit cleanly
348used so that you will know how to customize @ccmode{} for your personal 460into any of the previous chunks.
349coding style. All the details are in @ref{Customizing Indentation}, and
350later chapters.
351 461
352@defopt c-syntactic-indentation 462@itemize @bullet
353@vindex syntactic-indentation (c-) 463@item
354Syntactic analysis for indentation is done when this is non-@code{nil} 464Two chapters discuss the performance of @ccmode{} and known
355(which is the default). When it's @code{nil} every line is just 465bugs/limitations.
356indented to the same level as the previous one, and @kbd{TAB}
357(@code{c-indent-command}) adjusts the indentation in steps of
358@code{c-basic-offset}. The indentation style has no effect, nor any of
359the indentation associated variables, e.g., @code{c-special-indent-hook}.
360@end defopt
361 466
362@menu 467@item
363* Syntactic Analysis:: 468The FAQ contains a list of common problems and questions.
364* Indentation Calculation::
365@end menu
366 469
470@item
471The next two chapters tell you how to get in touch with the @ccmode{}
472project - whether for updating @ccmode{} or submitting bug reports.
473@end itemize
474
475@noindent
476Finally, there are the customary indices.
367 477
368@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 478@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
369@node Syntactic Analysis, Indentation Calculation, , Indentation Engine 479@node Getting Started, Commands, Overview, Top
370@comment node-name, next, previous, up 480@comment node-name, next, previous, up
371@section Syntactic Analysis 481@chapter Getting Started
372@cindex syntactic analysis
373@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 482@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
374 483
375@cindex relative buffer position 484If you got this version of @ccmode{} with Emacs or XEmacs, it should
376@cindex syntactic symbols 485work just fine right out of the box. Note however that you might not
377@cindex syntactic component 486have the latest @ccmode{} release and might want to upgrade your copy
378@cindex syntactic component list 487(see below).
379The first thing @ccmode{} does when indenting a line of code, is to
380analyze the line, determining the @dfn{syntactic component list} of the
381construct on that line. A syntactic component consists of a pair of
382elements (in lisp parlance, a @emph{cons cell}), the first being
383a @dfn{syntactic symbol}, the second being a @dfn{relative
384buffer position}. Syntactic symbols describe elements of C code
385@footnote{Unless otherwise noted, the term ``C code'' refers to all
386the C-like languages.}, e.g., @code{statement}, @code{substatement},
387@code{class-open}, @code{class-close}, etc. @xref{Syntactic Symbols},
388for a complete list of currently recognized syntactic symbols and their
389semantics. The style variable @code{c-offsets-alist} also contains the
390list of currently supported syntactic symbols.
391 488
392Conceptually, a line of C code is always indented relative to the 489You should probably start by reading the entire chapter
393indentation of some line higher up in the buffer. This is represented 490@ref{Commands} to get an overview of @ccmode{}'s capabilities.
394by the relative buffer position in the syntactic component.
395 491
396Here is an example. Suppose we had the following code as the only thing 492After trying out some commands, you may dislike some aspects of
397in a C++ buffer @footnote{The line numbers in this and future examples 493@ccmode{}'s default configuration. Here is an outline of how to
398don't actually appear in the buffer, of course!}: 494change some of the settings that newcomers to @ccmode{} most often
495want to change:
496
497@table @asis
498@item c-basic-offset
499This Lisp variable holds an integer, the number of columns @ccmode{}
500indents nested code. To set this value to 6, customize
501@code{c-basic-offset} or put this into your @file{.emacs}:
399 502
400@example 503@example
401 1: void swap( int& a, int& b ) 504(setq c-basic-offset 6)
402 2: @{
403 3: int tmp = a;
404 4: a = b;
405 5: b = tmp;
406 6: @}
407@end example 505@end example
408 506
409@kindex C-c C-s 507@item The (indentation) style
410@findex c-show-syntactic-information 508The basic ``shape'' of indentation created by @ccmode{}---by default,
411@findex show-syntactic-information (c-) 509this is @code{gnu} style (except for Java and AWK buffers). A list of
412We can use the command @kbd{C-c C-s} (bound to 510the availables styles and their descriptions can be found in
413@code{c-show-syntactic-information}) to simply report what the 511@ref{Built-in Styles}. A complete specification of the @ccmode{}
414syntactic analysis is for the current line. Running this command on 512style system, including how to create your own style, can be found in
415line 4 of this example, we'd see in the echo area@footnote{With a 513the chapter @ref{Styles}. To set your style to @code{linux}, either
416universal argument (i.e., @kbd{C-u C-c C-s}) the analysis is inserted 514customize @code{c-default-style} or put this into your @file{.emacs}:
417into the buffer as a comment on the current line.}:
418 515
419@example 516@example
420((statement 35)) 517(setq c-default-style '((java-mode . "java")
518 (awk-mode . "awk")
519 (other . "linux")))
421@end example 520@end example
422 521
423This tells us that the line is a statement and it is indented relative 522@item Electric Indentation
424to buffer position 35, which happens to be the @samp{i} in @code{int} on 523Normally, when you type ``punctuation'' characters such as @samp{;} or
425line 3. If you were to move point to line 3 and hit @kbd{C-c C-s}, you 524@samp{@{}, @ccmode{} instantly reindents the current line. This can
426would see: 525be disconcerting until you get used to it. To disable @dfn{electric
526indentation} in the current buffer, type @kbd{C-c C-l}. Type the same
527thing to enable it again. To have electric indentation disabled by
528default, put the following into your @file{.emacs} mode@footnote{There
529is no ``easy customization'' facility for making this change.}:
427 530
428@example 531@example
429((defun-block-intro 29)) 532(setq-default c-electric-flag nil)
430@end example 533@end example
431 534
432This indicates that the @samp{int} line is the first statement in a top 535@noindent
433level function block, and is indented relative to buffer position 29, 536Details of of this and other similar ``Minor Modes'' appear in the
434which is the brace just after the function header. 537section @ref{Minor Modes}.
435 538
436Here's another example: 539@item Making the @key{RET} key indent the new line
540The standard Emacs binding for @key{RET} just adds a new line. If you
541want it to reindent the new line as well, rebind the key. Note that
542the action of rebinding will fail if the pertinent keymap doesn't yet
543exist---we thus need to delay the action until after @ccmode{} has
544been loaded. Put the following code into your @file{.emacs}:
437 545
438@example 546@example
439 1: int add( int val, int incr, int doit ) 547(defun my-make-CR-do-indent ()
440 2: @{ 548 (define-key c-mode-base-map "\C-m" 'c-context-line-break))
441 3: if( doit ) 549(add-hook 'c-initialization-hook 'my-make-CR-do-indent)
442 4: @{
443 5: return( val + incr );
444 6: @}
445 7: return( val );
446 8: @}
447@end example 550@end example
448 551
449@noindent 552@noindent
450Hitting @kbd{C-c C-s} on line 4 gives us: 553This example demonstrates the use of a very powerful @ccmode{} (and
554Emacs) facility, the hook. The use of @ccmode{}'s hooks is described
555in @ref{CC Hooks}.
556@end table
451 557
452@example 558All these settings should occur in your @file{.emacs} @emph{before}
453((substatement-open 46)) 559any @ccmode{} buffers get loaded---in particular, before any call of
454@end example 560@code{desktop-read}.
455 561
456@cindex substatement 562As you get to know the mode better, you may want to make more
457@cindex substatement block 563ambitious changes to your configuration. For this, you should start
458@noindent 564reading the chapter @ref{Config Basics}.
459which tells us that this is a brace that @emph{opens} a substatement
460block. @footnote{A @dfn{substatement} is the line after a
461conditional statement, such as @code{if}, @code{else}, @code{while},
462@code{do}, @code{switch}, etc. A @dfn{substatement
463block} is a brace block following one of these conditional statements.}
464 565
465@cindex comment-only line 566If you are upgrading an existing @ccmode{} installation, please see
466Syntactic component lists can contain more than one component, and 567the @file{README} file for installation details. In particular, if
467individual syntactic components need not have relative buffer positions. 568you are going to be editing AWK files, @file{README} describes how to
468The most common example of this is a line that contains a @dfn{comment 569configure your (X)Emacs so that @ccmode{} will supersede the obsolete
469only line}. 570@code{awk-mode.el} which might have been supplied with your (X)Emacs.
571@ccmode{} might not work with older versions of Emacs or XEmacs. See
572the @ccmode{} release notes at @uref{http://cc-mode.sourceforge.net}
573for the latest information on Emacs version and package compatibility
574(@pxref{Updating CC Mode}).
575
576@deffn Command c-version
577@findex version (c-)
578You can find out what version of @ccmode{} you are using by visiting a C
579file and entering @kbd{M-x c-version RET}. You should see this message in
580the echo area:
470 581
471@example 582@example
472 1: void draw_list( List<Drawables>& drawables ) 583Using CC Mode version 5.XX
473 2: @{
474 3: // call the virtual draw() method on each element in list
475 4: for( int i=0; i < drawables.count(), ++i )
476 5: @{
477 6: drawables[i].draw();
478 7: @}
479 8: @}
480@end example 584@end example
481 585
482@noindent 586@noindent
483Hitting @kbd{C-c C-s} on line 3 of this example gives: 587where @samp{XX} is the minor release number.
588@end deffn
484 589
485@example 590@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
486((comment-intro) (defun-block-intro 46)) 591@node Commands, Font Locking, Getting Started, Top
487@end example 592@comment node-name, next, previous, up
593@chapter Commands
594@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
488 595
489@noindent 596This chapter specifies all of CC Mode's commands, and thus contains
490and you can see that the syntactic component list contains two syntactic 597nearly everything you need to know to @emph{use} @ccmode{} (as
491components. Also notice that the first component, 598contrasted with configuring it). @dfn{Commands} here means both
492@samp{(comment-intro)} has no relative buffer position. 599control key sequences and @dfn{electric keys}, these being characters
600such as @samp{;} which, as well as inserting themselves into the
601buffer, also do other things.
493 602
603You might well want to review
604@ifset XEMACS
605@ref{Lists,,,@emacsman{}, @emacsmantitle{}},
606@end ifset
607@ifclear XEMACS
608@ref{Moving by Parens,,,@emacsman{}, @emacsmantitle{}},
609@end ifclear
610which describes commands for moving around brace and parenthesis
611structures.
612
613
614@menu
615* Indentation Commands::
616* Comment Commands::
617* Movement Commands::
618* Filling and Breaking::
619* Minor Modes::
620* Electric Keys::
621* Auto-newlines::
622* Hungry WS Deletion::
623* Subword Movement::
624* Other Commands::
625@end menu
494 626
495@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 627@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
496@node Indentation Calculation, , Syntactic Analysis, Indentation Engine 628@node Indentation Commands, Comment Commands, Commands, Commands
497@comment node-name, next, previous, up 629@comment node-name, next, previous,up
498@section Indentation Calculation 630@section Indentation Commands
499@cindex indentation 631@cindex indentation
500@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 632@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
501 633
502Indentation for a line is calculated using the syntactic 634The following commands reindent C constructs. Note that when you
503component list derived in step 1 above (@pxref{Syntactic Analysis}). 635change your coding style, either interactively or through some other
504Each component contributes to the final total indentation of the line in 636means, your file does @emph{not} automatically get reindented. You
505two ways. 637will need to execute one of the following commands to see the effects
638of your changes.
506 639
507First, the syntactic symbols are looked up in the @code{c-offsets-alist} 640@cindex GNU indent program
508style variable, which is an association list of syntactic symbols and 641Also, variables like @code{c-hanging-*} and @code{c-cleanup-list}
509the offsets to apply for those symbols. These offsets are added to a 642(@pxref{Custom Auto-newlines}) only affect how on-the-fly code is
510running total. 643formatted. Changing the ``hanginess'' of a brace and then
644reindenting, will not move the brace to a different line. For this,
645you're better off getting an external program like GNU @code{indent},
646which will rearrange brace location, amongst other things.
511 647
512Second, if the component has a relative buffer position, @ccmode{} 648Preprocessor directives are handled as syntactic whitespace from other
513adds the column number of that position to the running total. By adding 649code, i.e. they can be interspersed anywhere without affecting the
514up the offsets and columns for every syntactic component on the list, 650indentation of the surrounding code, just like comments.
515the final total indentation for the current line is computed.
516 651
517Let's use our two code examples above to see how this works. Here is 652The code inside macro definitions is, by default, still analyzed
518our first example again: 653syntactically so that you get relative indentation there just as you'd
654get if the same code was outside a macro. However, since there is no
655hint about the syntactic context, i.e. whether the macro expands to an
656expression, to some statements, or perhaps to whole functions, the
657syntactic recognition can be wrong. @ccmode{} manages to figure it
658out correctly most of the time, though.
519 659
520@example 660Reindenting large sections of code can take a long time. When
521 1: void swap( int& a, int& b ) 661@ccmode{} reindents a region of code, it is essentially equivalent to
522 2: @{ 662hitting @key{TAB} on every line of the region.
523 3: int tmp = a;
524 4: a = b;
525 5: b = tmp;
526 6: @}
527@end example
528 663
529Let's say point is on line 3 and we hit the @kbd{TAB} key to reindent 664These commands indent code:
530the line. Remember that the syntactic component list for that
531line is:
532 665
533@example 666@table @asis
534((defun-block-intro 29)) 667@item @kbd{@key{TAB}} (@code{c-indent-command})
535@end example 668@kindex TAB
669@findex c-indent-command
670@findex indent-command (c-)
671This command indents the current line. That is all you need to know
672about it for normal use.
536 673
537@noindent 674@code{c-indent-command} does different things, depending on the
538@ccmode{} looks up @code{defun-block-intro} in the 675settting of @code{c-syntactic-indentation} (@pxref{Indentation Engine
539@code{c-offsets-alist} style variable. Let's say it finds the value 676Basics}):
540@samp{4}; it adds this to the running total (initialized to zero),
541yielding a running total indentation of 4 spaces.
542 677
543Next @ccmode{} goes to buffer position 29 and asks for the current 678@itemize @bullet
544column. This brace is in column zero, so @ccmode{} 679@item
545adds @samp{0} to the running total. Since there is only one syntactic 680When it's non-@code{nil} (which it normally is), the command indents
546component on the list for this line, indentation calculation is 681the line according to its syntactic context. With a prefix argument
547complete, and the total indentation for the line 682(@kbd{C-u @key{TAB}}), it will re-indent the entire
548is 4 spaces. 683expression@footnote{this is only useful for a line starting with a
684comment opener or an opening brace, parenthesis, or string quote.}
685that begins at the line's left margin.
549 686
550Here's another example: 687@item
688When it's @code{nil}, the command indents the line by an extra
689@code{c-basic-offset} columns. A prefix argument acts as a
690multiplier. A bare prefix (@kbd{C-u @key{TAB}} is equivalent to -1,
691removing @code{c-basic-offset} columns from the indentation.
692@end itemize
551 693
552@example 694The precise behavior is modified by several variables: With
553 1: int add( int val, int incr, int doit ) 695@code{c-tab-always-indent}, you can make @key{TAB} insert whitespace
554 2: @{ 696in some circumstances---@code{c-insert-tab-function} then defines
555 3: if( doit ) 697precisely what sort of ``whitespace'' this will be. Set the standard
556 4: @{ 698Emacs variable @code{indent-tabs-mode} to @code{t} if you want real
557 5: return( val + incr ); 699@samp{tab} characters to be used in the indentation, to @code{nil} if
558 6: @} 700you want only spaces. @xref{Just Spaces,,, @emacsman{},
559 7: return( val ); 701@emacsmantitle{}}.
560 8: @}
561@end example
562 702
563If we were to hit @kbd{TAB} on line 4 in the above example, the same 703@defopt c-tab-always-indent
564basic process is performed, despite the differences in the syntactic 704@vindex tab-always-indent (c-)
565component list. Remember that the list for this line is: 705@cindex literal
706This variable modifies how @key{TAB} operates.
707@itemize @bullet
708@item
709When it is @code{t} (the default), @key{TAB} simply indents the
710current line.
711@item
712When it is @code{nil}, @key{TAB} (re)indents the line only if point is
713to the left of the first non-whitespace character on the line.
714Otherwise it inserts some whitespace (a tab or an equivalent number of
715spaces - see below) at point.
716@item
717With some other value, the line is reindented. Additionally, if point
718is within a string or comment, some whitespace is inserted.
719@end itemize
720@end defopt
566 721
567@example 722@defopt c-insert-tab-function
568((substatement-open 46)) 723@vindex insert-tab-function (c-)
569@end example 724@findex tab-to-tab-stop
725When ``some whitespace'' is inserted as described above, what actually
726happens is that the function stored in @code{c-insert-tab-function} is
727called. Normally, this is @code{insert-tab}, which inserts a real tab
728character or the equivalent number of spaces (depending on
729@code{indent-tabs-mode}). Some people, however, set
730@code{c-insert-tab-function} to @code{tab-to-tab-stop} so as to get
731hard tab stops when indenting.
732@end defopt
733@end table
570 734
571Here, @ccmode{} first looks up the @code{substatement-open} symbol 735@noindent
572in @code{c-offsets-alist}. Let's say it finds the value @samp{4}. This 736The kind of indentation the next five commands do depends on the
573yields a running total of 4. @ccmode{} then goes to 737setting of @code{c-syntactic-indentation} (@pxref{Indentation Engine
574buffer position 46, which is the @samp{i} in @code{if} on line 3. This 738Basics}):
575character is in the fourth column on that line so adding this to the 739@itemize @bullet
576running total yields an indentation for the line of 8 spaces. 740@item
741when it is non-@code{nil} (the default), the commands indent lines
742according to their syntactic context;
743@item
744when it is @code{nil}, they just indent each line the same amount as
745the previous non-blank line. The commands that indent a region aren't
746very useful in this case.
747@end itemize
577 748
578Simple, huh? 749@table @asis
750@item @kbd{C-j} (@code{newline-and-indent})
751@kindex C-j
752@findex newline-and-indent
753Inserts a linefeed and indents the new blank line, ready to start
754typing. This is a standard (X)Emacs command.
579 755
580Actually, the mode usually just does The Right Thing without you having 756@item @kbd{C-M-q} (@code{c-indent-exp})
581to think about it in this much detail. But when customizing 757@kindex C-M-q
582indentation, it's helpful to understand the general indentation model 758@findex c-indent-exp
583being used. 759@findex indent-exp (c-)
760Indents an entire balanced brace or parenthesis expression. Note that
761point must be on the opening brace or parenthesis of the expression
762you want to indent.
584 763
585As you configure @ccmode{}, you might want to set the variable 764@item @kbd{C-c C-q} (@code{c-indent-defun})
586@code{c-echo-syntactic-information-p} to non-@code{nil} so that the 765@kindex C-c C-q
587syntactic component list and calculated offset will always be echoed in 766@findex c-indent-defun
588the minibuffer when you hit @kbd{TAB}. 767@findex indent-defun (c-)
768Indents the entire top-level function, class or macro definition
769encompassing point. It leaves point unchanged. This function can't be
770used to reindent a nested brace construct, such as a nested class or
771function, or a Java method. The top-level construct being reindented
772must be complete, i.e. it must have both a beginning brace and an ending
773brace.
774
775@item @kbd{C-M-\} (@code{indent-region})
776@kindex C-M-\
777@findex indent-region
778Indents an arbitrary region of code. This is a standard Emacs command,
779tailored for C code in a @ccmode{} buffer. Note, of course, that point
780and mark must delineate the region you want to indent.
781
782@item @kbd{C-M-h} (@code{c-mark-function})
783@kindex C-M-h
784@findex c-mark-function
785@findex mark-function (c-)
786While not strictly an indentation command, this is useful for marking
787the current top-level function or class definition as the current
788region. As with @code{c-indent-defun}, this command operates on
789top-level constructs, and can't be used to mark say, a Java method.
790@end table
589 791
792These variables are also useful when indenting code:
793
794@defopt indent-tabs-mode
795This is a standard Emacs variable that controls how line indentation
796is composed. When it's non-@code{nil}, tabs can be used in a line's
797indentation, otherwise only spaces are used.
798@end defopt
799
800@defopt c-progress-interval
801@vindex progress-interval (c-)
802When indenting large regions of code, this variable controls how often a
803progress message is displayed. Set this variable to @code{nil} to
804inhibit the progress messages, or set it to an integer which is how
805often (in seconds) progress messages are to be displayed.
806@end defopt
590 807
591@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 808@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
592@node Minor Modes, Text Filling and Line Breaking, Indentation Engine, Top 809@node Comment Commands, Movement Commands, Indentation Commands, Commands
593@comment node-name, next, previous, up 810@comment node-name, next, previous, up
594@chapter Minor Modes 811@section Comment Commands
812@cindex comments (insertion of)
595@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 813@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
596 814
597@ccmode{} contains two minor-mode-like features that you should 815@table @asis
598find useful while entering new C code. The first is called 816@item @kbd{C-c C-c} (@code{comment-region})
599@dfn{auto-newline} mode, and the second is called @dfn{hungry-delete} 817@kindex C-c C-c
600mode. These minor modes can be toggled on and off independently, and 818@findex comment-region
601@ccmode{} can be configured so that it starts up with any 819This command comments out the lines that start in the region. With a
602combination of these minor modes. By default, both of these minor modes 820negative argument, it does the opposite - it deletes the comment
603are turned off. 821delimiters from these lines. @xref{Multi-Line Comments,,, emacs, GNU
604 822Emacs Manual}, for fuller details. @code{comment-region} isn't
605The state of the minor modes is always reflected in the minor mode list 823actually part of @ccmode{} - it is given a @ccmode{} binding for
606on the modeline of the @ccmode{} buffer. When auto-newline mode is 824convenience.
607enabled, you will see @samp{C/a} on the mode line@footnote{The @samp{C} 825
608would be replaced with the name of the language in question for the 826@item @kbd{M-;} (@code{comment-dwim} or @code{indent-for-comment} @footnote{The name of this command varies between (X)Emacs versions.})
609other languages @ccmode{} supports.}. When hungry delete mode is 827@kindex M-;
610enabled you will see @samp{C/h} and if both modes were enabled, you'd 828@findex comment-dwim
611see @samp{C/ah}. 829@findex indent-for-comment
830Insert a comment at the end of the current line, if none is there
831already. Then reindent the comment according to @code{comment-column}
832@ifclear XEMACS
833(@pxref{Options for Comments,,, emacs, GNU Emacs Manual})
834@end ifclear
835@ifset XEMACS
836(@pxref{Comments,,, xemacs, XEmacs User's Manual})
837@end ifset
838and the variables below. Finally, position the point after the
839comment starter. This is a standard Emacs command, but @ccmode{}
840enhances it a bit with two variables:
612 841
613@kindex C-c C-a 842@defopt c-indent-comment-alist
614@kindex C-c C-d 843@vindex indent-comment-alist (c-)
615@kindex C-c C-t 844@vindex comment-column
616@findex c-toggle-hungry-state 845This style variable allows you to vary the column that @kbd{M-;} puts
617@findex c-toggle-auto-state 846the comment at, depending on what sort of code is on the line, and
618@findex c-toggle-auto-hungry-state 847possibly the indentation of any similar comment on the preceding line.
619@findex toggle-hungry-state (c-) 848It is an association list that maps different types of lines to
620@findex toggle-auto-state (c-) 849actions describing how they should be handled. If a certain line type
621@findex toggle-auto-hungry-state (c-) 850isn't present on the list then the line is indented to the column
622@ccmode{} provides key bindings which allow you to toggle the minor 851specified by @code{comment-column}.
623modes on the fly while editing code. To toggle just the auto-newline
624state, hit @kbd{C-c C-a} (bound to @code{c-toggle-auto-state}). When
625you do this, you should see the @samp{a} indicator either appear or
626disappear on the modeline. Similarly, to toggle just the
627hungry-delete state, use @kbd{C-c C-d} (@code{c-toggle-hungry-state}),
628and to toggle both states, use @kbd{C-c C-t}
629(@code{c-toggle-auto-hungry-state}).
630
631To set up the auto-newline and hungry-delete states to your preferred
632values, you would need to add some lisp to your @file{.emacs} file that
633called one of the @code{c-toggle-*-state} functions directly. When
634called programmatically, each function takes a numeric value, where
635a positive number enables the minor mode, a negative number disables the
636mode, and zero toggles the current state of the mode.
637
638So for example, if you wanted to enable both auto-newline and
639hungry-delete for all your C file editing, you could add the following
640to your @file{.emacs} file:
641 852
642@example 853See the documentation string for for a full description of this
643(add-hook 'c-mode-common-hook 854variable (use @kbd{C-h v c-indent-comment-alist}).
644 (lambda () (c-toggle-auto-hungry-state 1))) 855@end defopt
645@end example
646 856
647@menu 857@defopt c-indent-comments-syntactically-p
648* Auto-newline Insertion:: 858@vindex indent-comments-syntactically-p (c-)
649* Hungry-deletion of Whitespace:: 859Normally, when this style variable is @code{nil}, @kbd{M-;} will
650@end menu 860indent comment-only lines according to @code{c-indent-comment-alist},
861just as it does with lines where other code precede the comments.
862However, if you want it to act just like @key{TAB} for comment-only
863lines you can get that by setting
864@code{c-indent-comments-syntactically-p} to non-@code{nil}.
651 865
866If @code{c-indent-comments-syntactically-p} is non-@code{nil} then
867@code{c-indent-comment-alist} won't be consulted at all for comment-only
868lines.
869@end defopt
870@end table
652 871
653@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 872@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
654@node Auto-newline Insertion, Hungry-deletion of Whitespace, , Minor Modes 873@node Movement Commands, Filling and Breaking, Comment Commands, Commands
655@comment node-name, next, previous, up 874@comment node-name, next, previous, up
656@section Auto-newline Insertion 875@section Movement Commands
657@cindex auto-newline 876@cindex movement
658@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 877@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
659 878
660@cindex electric characters 879@ccmode{} contains some useful commands for moving around in C code.
661Auto-newline minor mode works by enabling certain @dfn{electric
662characters}. Special characters such as the left and right braces,
663colons, semicolons, etc., have been made electric to perform some
664magic formatting in addition to inserting the typed character. As a
665general rule, electric characters are only electric when the following
666conditions apply:
667 880
668@itemize @bullet 881@table @asis
669@item 882@item @kbd{M-x c-beginning-of-defun}
670Auto-newline minor mode is enabled, as evidenced by a @samp{C/a} or 883@itemx @kbd{M-x c-end-of-defun}
671@samp{C/ah} indicator on the modeline. 884@findex c-beginning-of-defun
885@findex c-end-of-defun
886@findex beginning-of-defun (c-)
887@findex end-of-defun (c-)
888@findex beginning-of-defun
889@findex end-of-defun
890Move to the start or end of the current top-level definition, this
891being the outermost brace pair which encloses point. These functions
892are analogous to the Emacs built-in commands @code{beginning-of-defun}
893and @code{end-of-defun}, except they eliminate the constraint that the
894top-level opening brace of the defun must be in column zero. See
895@ref{Defuns,,,@emacsman{}, @emacsmantitle{}}, for more information.
896
897Depending on the coding style you're using, you might prefer these two
898commands to the standard Emacs ones. If so, consider binding them to
899@kbd{C-M-a} and @kbd{C-M-e}. @xref{Sample .emacs File}. This
900customization won't affect the special bindings for these key
901sequences in force in AWK Mode. For backwards compatibility reasons,
902the default bindings for @kbd{C-M-a} and @kbd{C-M-e} remain in effect.
903
904@item @kbd{C-M-a} (AWK Mode) (@code{c-awk-beginning-of-defun})
905@itemx @kbd{C-M-e} (AWK Mode) (@code{c-awk-end-of-defun})
906@kindex C-M-a (AWK Mode)
907@kindex C-M-e (AWK Mode)
908@findex c-awk-beginning-of-defun
909@findex awk-beginning-of-defun (c-)
910@findex c-awk-end-of-defun
911@findex awk-end-of-defun (c-)
912Move back to the beginning or forward to the end of the current AWK
913defun. These functions are bound to @kbd{C-M-a} and @kbd{C-M-e} by
914default in AWK Mode. They can take prefix-arguments, their
915functionality being entirely equivalent to @code{beginning-of-defun}
916and @code{end-of-defun}.
672 917
673@item 918AWK Mode @dfn{defuns} are either pattern/action pairs (either of which
674@cindex literal 919might be implicit) or user defined functions. Having the @samp{@{} and
675@cindex syntactic whitespace 920@samp{@}} (if there are any) in column zero, as is suggested for some
676The character was not typed inside of a literal @footnote{A 921modes, is neither necessary nor helpful in AWK mode.
677@dfn{literal} is defined as any comment, string, or preprocessor macro
678definition. These constructs are also known as @dfn{syntactic
679whitespace} since they are usually ignored when scanning C code.}.
680 922
681@item 923@item @kbd{M-a} (@code{c-beginning-of-statement})
682No numeric argument was supplied to the command (i.e., it was typed as 924@itemx @kbd{M-e} (@code{c-end-of-statement})
683normal, with no @kbd{C-u} prefix). 925@kindex M-a
684@end itemize 926@kindex M-e
927@findex c-beginning-of-statement
928@findex c-end-of-statement
929@findex beginning-of-statement (c-)
930@findex end-of-statement (c-)
931Move to the beginning or end of the innermost C statement. If point
932is already there, move to the next beginning or end of a statement,
933even if that means moving into a block. (Use @kbd{C-M-b} or
934@kbd{C-M-f} to move over a balanced block.) A prefix argument @var{n}
935means move over @var{n} statements.
685 936
686@menu 937If point is within or next to a comment or a string which spans more
687* Hanging Braces:: 938than one line, these commands move by sentences instead of statements.
688* Hanging Colons::
689* Hanging Semicolons and Commas::
690* Other Electric Commands::
691* Clean-ups::
692@end menu
693 939
940When called from a program, these functions take three optional
941arguments: the repetition count, a buffer position limit which is the
942farthest back to search for the syntactic context, and a flag saying
943whether to do sentence motion in or near comments and multiline
944strings.
694 945
695@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 946@item @kbd{C-c C-u} (@code{c-up-conditional})
696@node Hanging Braces, Hanging Colons, , Auto-newline Insertion 947@kindex C-c C-u
697@comment node-name, next, previous, up 948@findex c-up-conditional
698@subsection Hanging Braces 949@findex up-conditional (c-)
699@cindex hanging braces 950Move back to the containing preprocessor conditional, leaving the mark
700@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 951behind. A prefix argument acts as a repeat count. With a negative
952argument, move forward to the end of the containing preprocessor
953conditional.
701 954
702@findex c-electric-brace 955@samp{#elif} is treated like @samp{#else} followed by @samp{#if}, so the
703@findex electric-brace (c-) 956function stops at them when going backward, but not when going
704@kindex @{ 957forward.
705@kindex @}
706 958
707When you type either an open or close brace (i.e., @kbd{@{} or @kbd{@}}), 959This key sequence is not bound in AWK Mode, which doesn't have
708the electric command @code{c-electric-brace} gets run. This command has 960preprocessor statements.
709two electric formatting behaviors. First, it will perform some
710reindentation of the line the brace was typed on, and second, it will
711add various newlines before and/or after the typed brace.
712Reindentation occurs automatically whenever the electric behavior is
713enabled. If the brace ends up on a line other than the one it was typed
714on, then that line is also reindented.
715 961
716The default in auto-newline mode is to insert newlines both before and 962@item @kbd{M-x c-up-conditional-with-else}
717after a brace, but that can be controlled by the 963@findex c-up-conditional-with-else
718@code{c-hanging-braces-alist} style variable. 964@findex up-conditional-with-else (c-)
965A variety of @code{c-up-conditional} that also stops at @samp{#else}
966lines. Normally those lines are ignored.
719 967
720@defopt c-hanging-braces-alist 968@item @kbd{M-x c-down-conditional}
721@vindex hanging-braces-alist (c-) 969@findex c-down-conditional
970@findex down-conditional (c-)
971Move forward into the next nested preprocessor conditional, leaving
972the mark behind. A prefix argument acts as a repeat count. With a
973negative argument, move backward into the previous nested preprocessor
974conditional.
722 975
723This variable contains a mapping between syntactic symbols related to 976@samp{#elif} is treated like @samp{#else} followed by @samp{#if}, so the
724braces, and a list of places to insert a newline. The syntactic symbols 977function stops at them when going forward, but not when going backward.
725that are useful for this list are @code{brace-list-intro},
726@code{statement-cont}, @code{inexpr-class-open},
727@code{inexpr-class-close}, and all the @code{*-open} and @code{*-close}
728symbols. @xref{Syntactic Symbols}, for a more detailed description of
729these syntactic symbols, except for @code{inexpr-class-open} and
730@code{inexpr-class-close}, which aren't actual syntactic symbols.
731 978
732The braces of anonymous inner classes in Java are given the special 979@item @kbd{M-x c-down-conditional-with-else}
733symbols @code{inexpr-class-open} and @code{inexpr-class-close}, so that 980@findex c-down-conditional-with-else
734they can be distinguished from the braces of normal classes@footnote{The 981@findex down-conditional-with-else (c-)
735braces of anonymous classes produce a combination of 982A variety of @code{c-down-conditional} that also stops at @samp{#else}
736@code{inexpr-class}, and @code{class-open} or @code{class-close} in 983lines. Normally those lines are ignored.
737normal indentation analysis.}.
738 984
739Note that the aggregate constructs in Pike mode, @samp{(@{}, @samp{@})}, 985@item @kbd{C-c C-p} (@code{c-backward-conditional})
740@samp{([}, @samp{])}, and @samp{(<}, @samp{>)}, do not count as brace 986@itemx @kbd{C-c C-n} (@code{c-forward-conditional})
741lists in this regard, even though they do for normal indentation 987@kindex C-c C-p
742purposes. It's currently not possible to set automatic newlines on 988@kindex C-c C-n
743these constructs. 989@findex c-backward-conditional
990@findex c-forward-conditional
991@findex backward-conditional (c-)
992@findex forward-conditional (c-)
993Move backward or forward across a preprocessor conditional, leaving
994the mark behind. A prefix argument acts as a repeat count. With a
995negative argument, move in the opposite direction.
744 996
745The value associated with each syntactic symbol in this association list 997These key sequences are not bound in AWK Mode, which doesn't have
746is called an @var{action}, which can be either a function or a list. 998preprocessor statements.
747@xref{Custom Brace and Colon Hanging}, for a more detailed discussion of
748using a function as a brace hanging @var{action}.
749 999
750When the @var{action} is a list, it can contain any combination of the 1000@item @kbd{M-x c-backward-into-nomenclature}
751symbols @code{before} and @code{after}, directing @ccmode{} where to 1001@itemx @kbd{M-x c-forward-into-nomenclature}
752put newlines in relationship to the brace being inserted. Thus, if the 1002@findex c-backward-into-nomenclature
753list contains only the symbol @code{after}, then the brace is said to 1003@findex c-forward-into-nomenclature
754@dfn{hang} on the right side of the line, as in: 1004@findex backward-into-nomenclature (c-)
1005@findex forward-into-nomenclature (c-)
1006A popular programming style, especially for object-oriented languages
1007such as C++ is to write symbols in a mixed case format, where the
1008first letter of each word is capitalized, and not separated by
1009underscores. E.g. @samp{SymbolsWithMixedCaseAndNoUnderlines}.
755 1010
756@example 1011These commands move backward or forward to the beginning of the next
757// here, open braces always `hang' 1012capitalized word. With prefix argument @var{n}, move @var{n} times.
758void spam( int i ) @{ 1013If @var{n} is negative, move in the opposite direction.
759 if( i == 7 ) @{
760 dosomething(i);
761 @}
762@}
763@end example
764 1014
765When the list contains both @code{after} and @code{before}, the braces 1015Note that these two commands have been superseded by
766will appear on a line by themselves, as shown by the close braces in the 1016@code{c-subword-mode}, which you should use instead. @xref{Subword
767above example. The list can also be empty, in which case no newlines 1017Movement}. They might be removed from a future release of @ccmode{}.
768are added either before or after the brace. 1018@end table
769 1019
770If a syntactic symbol is missing entirely from 1020@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
771@code{c-hanging-braces-alist}, it's treated in the same way as an 1021@node Filling and Breaking, Minor Modes, Movement Commands, Commands
772@var{action} with a list containing @code{before} and @code{after}, so 1022@comment node-name, next, previous, up
773that braces by default end up on their own line. 1023@section Filling and Line Breaking Commands
1024@cindex text filling
1025@cindex line breaking
1026@cindex comment handling
1027@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
774 1028
775For example, the default value of @code{c-hanging-braces-alist} is: 1029Since there's a lot of normal text in comments and string literals,
1030@ccmode{} provides features to edit these like in text mode. The goal
1031is to do it seamlessly, i.e. you can use auto fill mode, sentence and
1032paragraph movement, paragraph filling, adaptive filling etc. wherever
1033there's a piece of normal text without having to think much about it.
1034@ccmode{} keeps the indentation, fixes suitable comment line prefixes,
1035and so on.
776 1036
777@example 1037You can configure the exact way comments get filled and broken, and
778((brace-list-open) 1038where Emacs does auto-filling (see @pxref{Custom Filling and
779 (brace-entry-open) 1039Breaking}). Typically, the style system (@pxref{Styles}) will have
780 (statement-cont) 1040set this up for you, so you probably won't have to bother.
781 (substatement-open after)
782 (block-close . c-snug-do-while)
783 (extern-lang-open after)
784 (inexpr-class-open after)
785 (inexpr-class-close before))
786@end example
787 1041
788@noindent which says that @code{brace-list-open}, 1042@findex auto-fill-mode
789@code{brace-entry-open} and @code{statement-cont}@footnote{Brace lists 1043@cindex Auto Fill mode
790inside statements, such as initializers for static array variables 1044@cindex paragraph filling
791inside functions in C, are recognized as @code{statement-cont}. All 1045Line breaks are by default handled (almost) the same regardless of
792normal substatement blocks are recognized with other symbols.} braces 1046whether they are made by auto fill mode (@pxref{Auto Fill,,,
793should both hang on the right side and allow subsequent text to follow 1047@emacsman{}, @emacsmantitle{}}), by paragraph filling (e.g. with
794on the same line as the brace. Also, @code{substatement-open}, 1048@kbd{M-q}), or explicitly with @kbd{M-j} or similar methods. In
795@code{extern-lang-open}, and @code{inexpr-class-open} braces should hang 1049string literals, the new line gets the same indentation as the
796on the right side, but subsequent text should follow on the next line. 1050previous nonempty line.@footnote{You can change this default by
797The opposite holds for @code{inexpr-class-close} braces; they won't 1051setting the @code{string} syntactic symbol (@pxref{Syntactic Symbols}
798hang, but the following text continues on the same line. Here, in the 1052and @pxref{Customizing Indentation})}.
799@code{block-close} entry, you also see an example of using a function as
800an @var{action}. In all other cases, braces are put on a line by
801themselves.
802@end defopt
803 1053
1054@table @asis
1055@item @kbd{M-q} (@code{c-fill-paragraph})
1056@kindex M-q
1057@findex c-fill-paragraph
1058@findex fill-paragraph (c-)
1059@cindex Javadoc markup
1060@cindex Pike autodoc markup
1061This command fills multiline string literals and both block
1062and line style comments. In Java buffers, the Javadoc markup words
1063are recognized as paragraph starters. The line oriented Pike autodoc
1064markup words are recognized in the same way in Pike mode.
804 1065
805@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1066The formatting of the starters (@code{/*}) and enders (@code{*/}) of
806@node Hanging Colons, Hanging Semicolons and Commas, Hanging Braces, Auto-newline Insertion 1067block comments are kept as they were before the filling. I.e., if
807@comment node-name, next, previous, up 1068either the starter or ender were on a line of its own, then it stays
808@subsection Hanging Colons 1069on its own line; conversely, if the delimiter has comment text on its
809@cindex hanging colons 1070line, it keeps at least one word of that text with it on the line.
810@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
811 1071
812Using a mechanism similar to brace hanging (@pxref{Hanging Braces}), 1072This command is the replacement for @code{fill-paragraph} in @ccmode{}
813colons can also be made to hang using the style variable 1073buffers.
814@code{c-hanging-colons-alist}.
815 1074
816@defopt c-hanging-colons-alist 1075@item @kbd{M-j} (@code{c-indent-new-comment-line})
817@vindex hanging-colons-alist (c-) 1076@kindex M-j
1077@findex c-indent-new-comment-line
1078@findex indent-new-comment-line (c-)
1079This breaks the current line at point and indents the new line. If
1080point was in a comment, the new line gets the proper comment line
1081prefix. If point was inside a macro, a backslash is inserted before
1082the line break. It is the replacement for
1083@code{indent-new-comment-line}.
818 1084
819The syntactic symbols appropriate for this association list are: 1085@item @kbd{M-x c-context-line-break}
820@code{case-label}, @code{label}, @code{access-label}, 1086@findex c-context-line-break
821@code{member-init-intro}, and @code{inher-intro}. Note however that for 1087@findex context-line-break (c-)
822@code{c-hanging-colons-alist}, @var{action}s as functions are not 1088Insert a line break suitable to the context: If the point is inside a
823supported. See also @ref{Custom Brace and Colon Hanging} for details. 1089comment, the new line gets the suitable indentation and comment line
1090prefix like @code{c-indent-new-comment-line}. In normal code it's
1091indented like @code{newline-and-indent} would do. In macros it acts
1092like @code{newline-and-indent} but additionally inserts and optionally
1093aligns the line ending backslash so that the macro remains unbroken.
1094@xref{Custom Macros}, for details about the backslash alignment.
1095
1096This function is not bound to a key by default, but it's intended to be
1097used on the @kbd{RET} key. If you like the behavior of
1098@code{newline-and-indent} on @kbd{RET}, you should consider switching to
1099this function. @xref{Sample .emacs File}.
824 1100
825In C++, double-colons are used as a scope operator but because these 1101@item @kbd{M-x c-context-open-line}
826colons always appear right next to each other, newlines before and after 1102@findex c-context-open-line
827them are controlled by a different mechanism, called @dfn{clean-ups} in 1103@findex context-open-line (c-)
828@ccmode{}. @xref{Clean-ups}, for details. 1104This is to @kbd{C-o} (@kbd{M-x open-line}) as
829@end defopt 1105@code{c-context-line-break} is to @kbd{RET}. I.e. it works just like
1106@code{c-context-line-break} but leaves the point before the inserted
1107line break.
1108@end table
830 1109
831 1110
832@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1111@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
833@node Hanging Semicolons and Commas, Other Electric Commands, Hanging Colons, Auto-newline Insertion 1112@node Minor Modes, Electric Keys, Filling and Breaking, Commands
834@comment node-name, next, previous, up 1113@comment node-name, next, previous, up
835@subsection Hanging Semicolons and Commas 1114@section Minor Modes
836@cindex hanging semicolons 1115@cindex Minor Modes
837@cindex hanging commas
838@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1116@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
839 1117
840Semicolons and commas are also electric in @ccmode{}, but since 1118@ccmode{} contains several minor-mode-like features that you might
841these characters do not correspond directly to syntactic symbols, a 1119find useful while writing new code or editing old code:
842different mechanism is used to determine whether newlines should be 1120
843automatically inserted after these characters. @xref{Customizing 1121@table @asis
844Semicolons and Commas}, for details. 1122@item electric mode
1123When this is enabled, certain visible characters cause reformatting as
1124they are typed. This is normally helpful, but can be a nuisance when
1125editing chaotically formatted code. It can also be disconcerting,
1126especially for users who are new to @ccmode{}.
1127@item auto-newline mode
1128This automatically inserts newlines where you'd probably want to type
1129them yourself, e.g. after typing @samp{@}}s. Its action is suppressed
1130when electric mode is disabled.
1131@item hungry-delete mode
1132This lets you delete a contiguous block of whitespace with a single
1133key - for example, the newline and indentation just inserted by
1134auto-newline when you want to back up and write a comment after the
1135last statement.
1136@item subword mode
1137This mode makes basic word movement commands like @kbd{M-f}
1138(@code{forward-word}) and @kbd{M-b} (@code{backward-word}) treat the
1139parts of sillycapsed symbols as different words.
1140E.g. @samp{NSGraphicsContext} is treated as three words @samp{NS},
1141@samp{Graphics}, and @samp{Context}.
1142@item syntactic-indentation mode
1143When this is enabled (which it normally is), indentation commands such
1144as @kbd{C-j} indent lines of code according to their syntactic
1145structure. Otherwise, a line is simply indented to the same level as
1146the previous one and @kbd{@key{TAB}} adjusts the indentation in steps
1147of `c-basic-offset'.
1148@end table
1149
1150Full details on how these minor modes work are at @ref{Electric Keys},
1151@ref{Auto-newlines}, @ref{Hungry WS Deletion}, @ref{Subword Movement},
1152and @ref{Indentation Engine Basics}.
1153
1154You can toggle each of these minor modes on and off, and you can
1155configure @ccmode{} so that it starts up with your favourite
1156combination of them (@pxref{Sample .emacs File}). By default, when
1157you initialize a buffer, electric mode and syntactic-indentation mode
1158are enabled but the other two modes are disabled.
1159
1160@ccmode{} displays the current state of the first four of these minor
1161modes on the modeline by appending letters to the major mode's name,
1162one letter for each enabled minor mode - @samp{l} for electric mode,
1163@samp{a} for auto-newline mode, @samp{h} for hungry delete mode, and
1164@samp{w} for subword mode. If all these modes were enabled, you'd see
1165@samp{C/lahw}@footnote{The @samp{C} would be replaced with the name of
1166the language in question for the other languages @ccmode{} supports.}.
1167
1168Here are the commands to toggle these modes:
1169
1170@table @asis
1171@item @kbd{C-c C-l} (@code{c-toggle-electric-state})
1172@kindex C-c C-l
1173@findex c-toggle-electric-state
1174@findex toggle-electric-state (c-)
1175Toggle electric minor mode. When the command turns the mode off, it
1176also suppresses auto-newline mode.
1177
1178@item @kbd{C-c C-a} (@code{c-toggle-auto-newline})
1179@kindex C-c C-a
1180@findex c-toggle-auto-newline
1181@findex toggle-auto-newline (c-)
1182Toggle auto-newline minor mode. When the command turns the mode on,
1183it also enables electric minor mode.
1184
1185@item @kbd{M-x c-toggle-hungry-state}@footnote{Prior to @ccmode{} 5.31, this command was bound to @kbd{C-c C-d}.}
1186@findex c-toggle-hungry-state
1187@findex toggle-hungry-state (c-)
1188Toggle hungry-delete minor mode.
1189
1190@item @kbd{M-x c-toggle-auto-hungry-state}@footnote{Prior to @ccmode{} 5.31, this command was bound to @kbd{C-c C-t}.}
1191@findex c-toggle-auto-hungry-state
1192@findex toggle-auto-hungry-state (c-)
1193Toggle both auto-newline and hungry delete minor modes.
1194
1195@item @kbd{C-c C-w} (@code{M-x c-subword-mode})
1196@kindex C-c C-w
1197@findex c-subword-mode
1198@findex subword-mode (c-)
1199Toggle subword mode.
1200
1201@item @kbd{M-x c-toggle-syntactic-indentation}
1202@findex c-toggle-syntactic-indentation
1203@findex toggle-syntactic-indentation (c-)
1204Toggle syntactic-indentation mode.
1205@end table
1206
1207Common to all the toggle functions above is that if they are called
1208programmatically, they take an optional numerical argument. A
1209positive value will turn on the minor mode (or both of them in the
1210case of @code{c-toggle-auto-hungry-state}) and a negative value will
1211turn it (or them) off.
845 1212
846 1213
847@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1214@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
848@node Other Electric Commands, Clean-ups, Hanging Semicolons and Commas, Auto-newline Insertion 1215@node Electric Keys, Auto-newlines, Minor Modes, Commands
849@comment node-name, next, previous, up 1216@comment node-name, next, previous, up
850@subsection Other Electric Commands 1217@section Electric Keys and Keywords
1218@cindex electric characters
851@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1219@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
852 1220
853A few other keys also provide electric behavior, often only to reindent 1221Most punctuation keys provide @dfn{electric} behavior - as well as
854the line. Common to all of them is that they only reindent if used in 1222inserting themselves they perform some other action, such as
855normal code (as opposed to in a string literal or comment), and 1223reindenting the line. A few keywords, such as @code{else}, also
856@code{c-syntactic-indentation} isn't @code{nil}. They are: 1224trigger electric action.
1225
1226You can inhibit the electric behaviour described here by disabling
1227electric minor mode (@pxref{Minor Modes}.)
1228
1229Common to all of them is that they only behave electrically when used
1230in normal code (as contrasted with getting typed in a string literal
1231or comment). Those which cause re-indentation do so only when
1232@code{c-syntactic-indentation} has a non-@code{nil} value (which it
1233does by default).
1234
1235These keys and keywords are:
1236@c ACM, 2004/8/24: c-electric-pound doesn't check c-s-i: this is more
1237@c like a bug in the code than a bug in this document. It'll get
1238@c fixed in the code sometime.
857 1239
858@table @kbd 1240@table @kbd
859@item # 1241@item #
@@ -873,6 +1255,8 @@ zero. This is useful for entering preprocessor macro definitions.
873Pound is not electric in AWK buffers, where @samp{#} starts a comment, 1255Pound is not electric in AWK buffers, where @samp{#} starts a comment,
874and is bound to @code{self-insert-command} like any typical printable 1256and is bound to @code{self-insert-command} like any typical printable
875character. 1257character.
1258@c ACM, 2004/8/24: Change this (and the code) to do AWK comment
1259@c reindentation.
876 1260
877@item * 1261@item *
878@kindex * 1262@kindex *
@@ -882,32 +1266,20 @@ character.
882@findex electric-star (c-) 1266@findex electric-star (c-)
883@findex c-electric-slash 1267@findex c-electric-slash
884@findex electric-slash (c-) 1268@findex electric-slash (c-)
885Stars and slashes (bound to @code{c-electric-star} and 1269A star (bound to @code{c-electric-star}) or a slash
886@code{c-electric-slash} respectively) are also electric under certain 1270(@code{c-electric-slash}) causes reindentation when you type it as the
887circumstances. If a @samp{*} is inserted as the second character of a C 1271second component of a C style block comment opener (@samp{/*}) or a
888style block comment on a comment-only line, then the comment delimiter 1272C++ line comment opener (@samp{//}) respectively, but only if the
889is indented as defined by @code{c-offsets-alist}. A comment-only line 1273comment opener is the first thing on the line (i.e. there's only
890is defined as a line which contains only a comment, as in: 1274whitespace before it).
891 1275
892@example 1276Additionally, you can configure @ccmode{} so that typing a slash at
893@group 1277the start of a line within a block comment will terminate the
894void spam( int i ) 1278comment. You don't need to have electric minor mode enabled to get
895@{ 1279this behaviour. @xref{Clean-ups}.
896 // this is a comment-only line...
897 if( i == 7 ) // but this is not
898 @{
899 dosomething(i);
900 @}
901@}
902@end group
903@end example
904 1280
905Likewise, if a @samp{/} is inserted as the second slash in a C++ style 1281In AWK mode, @samp{*} and @samp{/} do not delimit comments and are not
906line comment (also only on a comment-only line), then the line is 1282electric.
907indented as defined by @code{c-offsets-alist}.
908
909In AWK mode, @samp{*} and @samp{/} do not delimit comments and are
910bound to @code{self-insert-command}.
911 1283
912@item < 1284@item <
913@kindex < 1285@kindex <
@@ -915,9 +1287,13 @@ bound to @code{self-insert-command}.
915@kindex > 1287@kindex >
916@findex c-electric-lt-gt 1288@findex c-electric-lt-gt
917@findex electric-lt-gt (c-) 1289@findex electric-lt-gt (c-)
918Less-than and greater-than signs (bound to @code{c-electric-lt-gt}) are 1290A less-than or greater-than sign (bound to @code{c-electric-lt-gt}) is
919electric, but only in C++ mode. Hitting the second of two @kbd{<} or 1291electric in two circumstances: when it is an angle bracket in a C++
920@kbd{>} keys reindents the line if it is a C++ style stream operator. 1292@samp{template} declaration (and similar constructs in other
1293languages) and when it is the second of two @kbd{<} or @kbd{>}
1294characters in a C++ style stream operator. In either case, the line
1295is reindented. Angle brackets in C @samp{#include} directives are not
1296electric.
921 1297
922@item ( 1298@item (
923@kindex ( 1299@kindex (
@@ -925,19 +1301,68 @@ electric, but only in C++ mode. Hitting the second of two @kbd{<} or
925@kindex ) 1301@kindex )
926@findex c-electric-paren 1302@findex c-electric-paren
927@findex electric-paren (c-) 1303@findex electric-paren (c-)
928The normal parenthesis characters @samp{(} and @samp{)} reindent the 1304The normal parenthesis characters @samp{(} and @samp{)} (bound to
929current line. This is useful for getting the closing parenthesis of an 1305@code{c-electric-paren}) reindent the current line. This is useful
930argument list aligned automatically. 1306for getting the closing parenthesis of an argument list aligned
1307automatically.
1308
1309You can also configure @ccmode{} to insert a space automatically
1310between a function name and the @samp{(} you've just typed, and to
1311remove it automatically after typing @samp{)}, should the argument
1312list be empty. You don't need to have electric minor mode enabled to
1313get these actions. @xref{Clean-ups}.
1314
1315@item @{
1316@kindex @{
1317@itemx @}
1318@kindex @}
1319@findex c-electric-brace
1320@findex electric-brace (c-)
1321Typing a brace (bound to @code{c-electric-brace}) reindents the
1322current line. Also, one or more newlines might be inserted if
1323auto-newline minor mode is enabled. @xref{Auto-newlines}.
1324Additionally, you can configure @ccmode{} to compact excess whitespace
1325inserted by auto-newline mode in certain circumstances.
1326@xref{Clean-ups}.
1327
1328@item :
1329@kindex :
1330@findex c-electric-colon
1331@findex electric-colon (c-)
1332Typing a colon (bound to @code{c-electric-colon}) reindents the
1333current line. Additionally, one or more newlines might be inserted if
1334auto-newline minor mode is enabled. @xref{Auto-newlines}. If you
1335type a second colon immediately after such an auto-newline, by default
1336the whitespace between the two colons is removed, leaving a C++ scope
1337operator. @xref{Clean-ups}.
1338
1339If you prefer, you can insert @samp{::} in a single operation,
1340avoiding all these spurious reindentations, newlines, and clean-ups.
1341@xref{Other Commands}.
1342
1343@item ;
1344@kindex ;
1345@itemx ,
1346@kindex ,
1347@findex c-electric-semi&comma
1348@findex electric-semi&comma (c-)
1349Typing a semicolon or comma (bound to @code{c-electric-semi&comma})
1350reindents the current line. Also, a newline might be inserted if
1351auto-newline minor mode is enabled. @xref{Auto-newlines}.
1352Additionally, you can configure @ccmode{} so that when auto-newline
1353has inserted whitespace after a @samp{@}}, it will be removed again
1354when you type a semicolon or comma just after it. @xref{Clean-ups}.
1355
931@end table 1356@end table
932 1357
933@deffn Command c-electric-continued-statement 1358@deffn Command c-electric-continued-statement
934@findex electric-continued-statement (c-) 1359@findex electric-continued-statement (c-)
935 1360
936Certain keywords, depending on language, are electric to cause 1361Certain keywords are electric, causing reindentation when they are
937reindentation when they are preceded only by whitespace on the line. 1362preceded only by whitespace on the line. The keywords are those that
938The keywords are those that continue an earlier statement instead of 1363continue an earlier statement instead of starting a new one:
939starting a new one: @code{else}, @code{while}, @code{catch} (only in C++ 1364@code{else}, @code{while}, @code{catch} (only in C++ and Java) and
940and Java) and @code{finally} (only in Java). 1365@code{finally} (only in Java).
941 1366
942An example: 1367An example:
943 1368
@@ -951,280 +1376,197 @@ else
951@end example 1376@end example
952 1377
953Here, the @code{else} should be indented like the preceding @code{if}, 1378Here, the @code{else} should be indented like the preceding @code{if},
954since it continues that statement. @ccmode{} will automatically reindent 1379since it continues that statement. @ccmode{} will automatically
955it after the @code{else} has been typed in full, since it's not until 1380reindent it after the @code{else} has been typed in full, since only
956then it's possible to decide whether it's a new statement or a 1381then is it possible to decide whether it's a new statement or a
957continuation of the preceding @code{if}. 1382continuation of the preceding @code{if}.
958 1383
959@vindex abbrev-mode 1384@vindex abbrev-mode
960@findex abbrev-mode 1385@findex abbrev-mode
961@cindex Abbrev mode 1386@cindex Abbrev mode
962@ccmode{} uses Abbrev mode (@pxref{Abbrevs,,, emacs, The Emacs Editor}) 1387@ccmode{} uses Abbrev mode (@pxref{Abbrevs,,, @emacsman{}, @emacsmantitle{}})
963to accomplish this. It's therefore turned on by default in all language 1388to accomplish this. It's therefore turned on by default in all language
964modes except IDL mode, since CORBA IDL doesn't have any statements. 1389modes except IDL mode, since CORBA IDL doesn't have any statements.
965@end deffn 1390@end deffn
966 1391
967 1392
968@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1393@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
969@node Clean-ups, , Other Electric Commands, Auto-newline Insertion 1394@node Auto-newlines, Hungry WS Deletion, Electric Keys, Commands
970@comment node-name, next, previous, up 1395@comment node-name, next, previous, up
971@subsection Clean-ups 1396@section Auto-newline Insertion
972@cindex clean-ups 1397@cindex auto-newline
973@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1398@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
974 1399
975@dfn{Clean-ups} are mechanisms complementary to colon and brace hanging. 1400When you have @dfn{Auto-newline minor mode} enabled (@pxref{Minor
976On the surface, it would seem that clean-ups overlap the functionality 1401Modes}), @ccmode{} inserts newlines for you automatically (in certain
977provided by the @code{c-hanging-*-alist} variables. Clean-ups are 1402syntactic contexts) when you type a left or right brace, a colon, a
978however used to adjust code ``after-the-fact,'' i.e., to adjust the 1403semicolon, or a comma. Sometimes a newline appears before the
979whitespace in constructs after they are typed. 1404character you type, sometimes after it, sometimes both.
980
981Most of the clean-ups are only applicable to counteract automatically
982inserted newlines, and will therefore only have any effect if the
983auto-newline minor mode is turned on. Others will work all the time.
984
985@defopt c-cleanup-list
986@vindex cleanup-list (c-)
987@cindex literal
988
989You can configure @ccmode{}'s clean-ups by setting the style variable
990@code{c-cleanup-list}, which is a list of clean-up symbols. By default,
991@ccmode{} cleans up only the @code{scope-operator} construct, which is
992necessary for proper C++ support. Note that clean-ups are only
993performed when the construct does not occur within a literal
994(@pxref{Auto-newline Insertion}), and when there is nothing but
995whitespace appearing between the individual components of the construct.
996@end defopt
997
998These are the clean-ups that are only active in the auto-newline minor
999mode:
1000
1001@c TBD: Would like to use some sort of @deffoo here; @table indents a
1002@c bit too much in dvi output.
1003@table @code
1004@item brace-else-brace
1005Clean up @samp{@} else @{} constructs by placing the entire construct on
1006a single line. Clean-up occurs when the open brace after the
1007@samp{else} is typed. So for example, this:
1008
1009@example
1010@group
1011void spam(int i)
1012@{
1013 if( i==7 ) @{
1014 dosomething();
1015 @}
1016 else
1017 @{
1018@end group
1019@end example
1020
1021@noindent
1022appears like this after the last open brace is typed:
1023
1024@example
1025@group
1026void spam(int i)
1027@{
1028 if( i==7 ) @{
1029 dosomething();
1030 @} else @{
1031@end group
1032@end example
1033
1034@item brace-elseif-brace
1035Similar to the @code{brace-else-brace} clean-up, but this cleans up
1036@samp{@} else if (...) @{} constructs. For example:
1037
1038@example
1039@group
1040void spam(int i)
1041@{
1042 if( i==7 ) @{
1043 dosomething();
1044 @}
1045 else if( i==3 )
1046 @{
1047@end group
1048@end example
1049
1050@noindent
1051appears like this after the last open parenthesis is typed:
1052 1405
1053@example 1406Auto-newline only triggers when the following conditions hold:
1054@group
1055void spam(int i)
1056@{
1057 if( i==7 ) @{
1058 dosomething();
1059 @} else if( i==3 )
1060 @{
1061@end group
1062@end example
1063
1064@noindent
1065and like this after the last open brace is typed:
1066 1407
1067@example 1408@itemize @bullet
1068@group 1409@item
1069void spam(int i) 1410Auto-newline minor mode is enabled, as evidenced by the indicator
1070@{ 1411@samp{a} after the mode name on the modeline (e.g. @samp{C/a} or
1071 if( i==7 ) @{ 1412@samp{C/la}).
1072 dosomething();
1073 @} else if( i==3 ) @{
1074@end group
1075@end example
1076
1077@item brace-catch-brace
1078Analogous to @code{brace-elseif-brace}, but cleans up @samp{@} catch
1079(...) @{} in C++ and Java mode.
1080
1081@item empty-defun-braces
1082Clean up braces following a top-level function or class definition that
1083contains no body. Clean up occurs when the closing brace is typed.
1084Thus the following:
1085
1086@example
1087@group
1088class Spam
1089@{
1090@}
1091@end group
1092@end example
1093
1094@noindent
1095is transformed into this when the close brace is typed:
1096
1097@example
1098@group
1099class Spam
1100@{@}
1101@end group
1102@end example
1103
1104@item defun-close-semi
1105Clean up the terminating semicolon on top-level function or class
1106definitions when they follow a close brace. Clean up occurs when the
1107semicolon is typed. So for example, the following:
1108
1109@example
1110@group
1111class Spam
1112@{
1113@}
1114;
1115@end group
1116@end example
1117
1118@noindent
1119is transformed into this when the semicolon is typed:
1120 1413
1121@example 1414@item
1122@group 1415The character was typed at the end of a line, or with only whitespace
1123class Spam 1416after it, and possibly a @samp{\} escaping the newline.
1124@{
1125@};
1126@end group
1127@end example
1128 1417
1129@item list-close-comma 1418@item
1130Clean up commas following braces in array and aggregate initializers. 1419The character is not on its own line already. (This applies only to
1131Clean up occurs when the comma is typed. 1420insertion of a newline @emph{before} the character.)
1132 1421
1133@item scope-operator 1422@item
1134Clean up double colons which may designate a C++ scope operator split 1423@cindex literal
1135across multiple lines@footnote{Certain C++ constructs introduce 1424@cindex syntactic whitespace
1136ambiguous situations, so @code{scope-operator} clean-ups may not always 1425The character was not typed inside of a literal @footnote{A
1137be correct. This usually only occurs when scoped identifiers appear in 1426@dfn{literal} is defined as any comment, string, or preprocessor macro
1138switch label tags.}. Clean up occurs when the second colon is typed. 1427definition. These constructs are also known as @dfn{syntactic
1139You will always want @code{scope-operator} in the @code{c-cleanup-list} 1428whitespace} since they are usually ignored when scanning C code.}.
1140when you are editing C++ code.
1141@end table
1142 1429
1143The following clean-ups are always active when they occur on 1430@item
1144@code{c-cleanup-list}, and are thus not affected by the auto-newline 1431No numeric argument was supplied to the command (i.e. it was typed as
1145minor mode: 1432normal, with no @kbd{C-u} prefix).
1433@end itemize
1146 1434
1147@table @code 1435You can configure the precise circumstances in which newlines get
1148@item space-before-funcall 1436inserted (see @pxref{Custom Auto-newlines}). Typically, the style
1149Insert a space between the function name and the opening parenthesis of 1437system (@pxref{Styles}) will have set this up for you, so you probably
1150a function call. This produces function calls in the style mandated by 1438won't have to bother.
1151the GNU coding standards, e.g., @samp{signal (SIGINT, SIG_IGN)} and
1152@samp{abort ()}. Clean up occurs when the opening parenthesis is typed.
1153 1439
1154@item compact-empty-funcall 1440Sometimes @ccmode{} inserts an auto-newline where you don't want one,
1155Clean up any space between the function name and the opening parenthesis 1441such as after a @samp{@}} when you're about to type a @samp{;}.
1156of a function call that has no arguments. This is typically used 1442Hungry deletion can help here (@pxref{Hungry WS Deletion}), or you can
1157together with @code{space-before-funcall} if you prefer the GNU function 1443activate an appropriate @dfn{clean-up}, which will remove the excess
1158call style for functions with arguments but think it looks ugly when 1444whitespace after you've typed the @samp{;}. See @ref{Clean-ups} for a
1159it's only an empty parenthesis pair. I.e., you will get @samp{signal 1445full description. See also @ref{Electric Keys} for a summary of
1160(SIGINT, SIG_IGN)}, but @samp{abort()}. Clean up occurs when the 1446clean-ups listed by key.
1161closing parenthesis is typed.
1162@end table
1163 1447
1164 1448
1165@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1449@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1166@node Hungry-deletion of Whitespace, , Auto-newline Insertion, Minor Modes 1450@node Hungry WS Deletion, Subword Movement, Auto-newlines, Commands
1167@comment node-name, next, previous, up 1451@comment node-name, next, previous, up
1168@section Hungry-deletion of Whitespace 1452@section Hungry Deletion of Whitespace
1169@cindex hungry-deletion 1453@cindex hungry-deletion
1170@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1454@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1171 1455
1172Hungry deletion of whitespace, or as it more commonly called,
1173@dfn{hungry-delete mode}, is a simple feature that some people find
1174extremely useful. In fact, you might find yourself wanting
1175hungry-delete in @strong{all} your editing modes!
1176
1177@kindex DEL
1178@kindex C-d 1456@kindex C-d
1179 1457
1180In a nutshell, when hungry-delete mode is enabled, hitting the @kbd{DEL} 1458If you want to delete an entire block of whitespace at point, you can
1181or @kbd{C-d} keys will consume all preceding or following whitespace, 1459use @dfn{hungry deletion}. This deletes all the contiguous whitespace
1182including newlines and tabs. This can really cut down on the number of 1460either before point or after point in a single operation.
1183times you have to hit these keys if, for example, you made a mistake on 1461``Whitespace'' here includes tabs and newlines, but not comments or
1184the preceding line. 1462preprocessor commands. Hungry deletion can markedly cut down on the
1463number of times you have to hit deletion keys when, for example,
1464you've made a mistake on the preceding line and have already pressed
1465@kbd{C-j}.
1185 1466
1186@deffn Command c-electric-backspace 1467Hungry deletion is a simple feature that some people find extremely
1187@findex electric-backspace (c-) 1468useful. In fact, you might find yourself wanting it in @strong{all}
1188This command is run by default when you hit the @kbd{DEL} key. It 1469your editing modes!
1189deletes any amount of whitespace in the backwards direction if 1470
1190hungry-delete mode is enabled. When it's disabled, or when used with 1471There are two different ways you can use hungry deletion:
1191a prefix argument or in a literal (@pxref{Auto-newline Insertion}),
1192the function contained in the @code{c-backspace-function} variable is
1193called with the prefix argument.
1194@end deffn
1195 1472
1196@defvar c-backspace-function 1473@table @asis
1474@item Using @dfn{Hungry Delete Mode} with @kbd{@key{DEL}} and @kbd{C-d}
1475Here you toggle Hungry Delete minor mode with @kbd{M-x
1476c-toggle-hungry-state}@footnote{Prior to @ccmode{} 5.31, this command
1477was bound to @kbd{C-c C-d}. @kbd{C-c C-d} is now the default binding
1478for @code{c-hungry-delete-forward}.} (@pxref{Minor Modes}.) This
1479makes @kbd{@key{DEL}} and @kbd{C-d} do forward and backwards hungry
1480deletion.
1481
1482@table @asis
1483@item @kbd{@key{DEL}} (@code{c-electric-backspace})
1484@kindex DEL
1485@findex c-electric-backspace
1486@findex electric-backspace (c-)
1487This command is run by default when you hit the @kbd{DEL} key. When
1488hungry delete mode is enabled, it deletes any amount of whitespace in
1489the backwards direction. Otherwise, or when used with a prefix
1490argument or in a literal (@pxref{Auto-newlines}), the command just
1491deletes backwards in the usual way. (More precisely, it calls the
1492function contained in the variable @code{c-backspace-function},
1493passing it the prefix argument, if any.)
1494
1495@item @code{c-backspace-function}
1496@vindex c-backspace-function
1197@vindex backspace-function (c-) 1497@vindex backspace-function (c-)
1198@findex backward-delete-char-untabify 1498@findex backward-delete-char-untabify
1199Hook that gets called by @code{c-electric-backspace} when it doesn't 1499Hook that gets called by @code{c-electric-backspace} when it doesn't
1200do an ``electric'' deletion of the preceding whitespace. The default 1500do an ``electric'' deletion of the preceding whitespace. The default
1201value is @code{backward-delete-char-untabify}. 1501value is @code{backward-delete-char-untabify}
1202@end defvar 1502(@pxref{Deletion,,,@lispref{}, @lispreftitle{}}, the function which
1503deletes a single character.
1203 1504
1204@deffn Command c-electric-delete-forward 1505@item @kbd{C-d} (@code{c-electric-delete-forward})
1506@kindex C-d
1507@findex c-electric-delete-forward
1205@findex electric-delete-forward (c-) 1508@findex electric-delete-forward (c-)
1206This function, which is bound to @kbd{C-d} by default, works just like 1509This function, which is bound to @kbd{C-d} by default, works just like
1207@code{c-electric-backspace} but in the forward direction. When it 1510@code{c-electric-backspace} but in the forward direction. When it
1208doesn't do an ``electric'' deletion of the following whitespace, it 1511doesn't do an ``electric'' deletion of the following whitespace, it
1209calls the function in @code{c-delete-function} with its prefix 1512just does @code{delete-char}, more or less. (Strictly speaking, it
1210argument. 1513calls the function in @code{c-delete-function} with the prefix
1211@end deffn 1514argument.)
1212 1515
1213@defvar c-delete-function 1516@item @code{c-delete-function}
1517@vindex c-delete-function
1214@vindex delete-function (c-) 1518@vindex delete-function (c-)
1215@findex delete-char 1519@findex delete-char
1216Hook that gets called by @code{c-electric-delete-forward} when it 1520Hook that gets called by @code{c-electric-delete-forward} when it
1217doesn't do an ``electric'' deletion of the following whitespace. The 1521doesn't do an ``electric'' deletion of the following whitespace. The
1218default value is @code{delete-char}. 1522default value is @code{delete-char}.
1219@end defvar 1523@end table
1220 1524
1221Above we have only talked about the @kbd{DEL} and @kbd{C-d} key events, 1525@item Using Distinct Bindings
1222without connecting them to the physical keys commonly known as 1526The other (newer and recommended) way to use hungry deletion is to
1223@key{Backspace} and @key{Delete}. The default behavior of those two 1527perform @code{c-hungry-backspace} and @code{c-hungry-delete-forward}
1224depends on the flavor of (X)Emacs you are using. 1528directly through their key sequences rather than using the minor mode
1529toggling.
1530
1531@table @asis
1532@item @kbd{C-c C-@key{Backspace}}, @kbd{C-c DEL}, or @kbd{C-c @key{Backspace}} (@code{c-hungry-backspace})
1533@kindex C-c C-<backspace>
1534@kindex C-c DEL
1535@kindex C-c <backspace>
1536@findex c-hungry-backspace
1537@findex hungry-backspace (c-)
1538Delete any amount of whitespace in the backwards direction (regardless
1539whether hungry-delete mode is enabled or not). This command is bound
1540to both @kbd{C-c C-@key{Backspace}} and @kbd{C-c @key{Backspace}},
1541since the more natural one, @kbd{C-c C-@key{Backspace}}, is sometimes
1542difficult to type at a character terminal.
1543
1544@item @kbd{C-c C-@key{Delete}}, @kbd{C-c C-d}, or @kbd{C-c @key{Delete}} (@code{c-hungry-delete-forward})
1545@kindex C-c C-<delete>
1546@kindex C-c C-d
1547@kindex C-c <delete>
1548@findex c-hungry-delete-forward
1549@findex hungry-delete-forward (c-)
1550Delete any amount of whitespace in the forward direction (regardless
1551whether hungry-delete mode is enabled or not). This command is bound
1552to both @kbd{C-c C-@key{Delete}} and @kbd{C-c @key{Delete}} for the
1553same reason as for @key{Backspace} above.
1554@end table
1555@end table
1556
1557@kindex <delete>
1558@kindex <backspace>
1559
1560When we talk about @kbd{DEL}, @kbd{C-d}, @key{Backspace} and
1561@key{Delete} above, we actually do so without connecting them to the
1562physical keys commonly known as @key{Backspace} and @key{Delete}. The
1563default bindings to those two keys depends on the flavor of (X)Emacs
1564you are using.
1225 1565
1226@findex c-electric-delete 1566@findex c-electric-delete
1227@findex electric-delete (c-) 1567@findex electric-delete (c-)
1568@findex c-hungry-delete
1569@findex hungry-delete (c-)
1228@vindex delete-key-deletes-forward 1570@vindex delete-key-deletes-forward
1229 1571
1230In XEmacs 20.3 and beyond, the @key{Backspace} key is bound to 1572In XEmacs 20.3 and beyond, the @key{Backspace} key is bound to
@@ -1234,361 +1576,132 @@ setting the variable @code{delete-key-deletes-forward}, a standard
1234XEmacs variable. When this variable is non-@code{nil}, 1576XEmacs variable. When this variable is non-@code{nil},
1235@code{c-electric-delete} will do forward deletion with 1577@code{c-electric-delete} will do forward deletion with
1236@code{c-electric-delete-forward}, otherwise it does backward deletion 1578@code{c-electric-delete-forward}, otherwise it does backward deletion
1237with @code{c-electric-backspace}. 1579with @code{c-electric-backspace}. Similarly, @kbd{C-c @key{Delete}}
1238 1580and @kbd{C-c C-@key{Delete}} are bound to @code{c-hungry-delete} which
1239In other Emacs versions, @ccmode{} doesn't bind either @key{Backspace} 1581is controlled in the same way by @code{delete-key-deletes-forward}.
1240or @key{Delete}. In XEmacs 19 and Emacs prior to 21 that means that
1241it's up to you to fix them. Emacs 21 automatically binds them as
1242appropriate to @kbd{DEL} and @kbd{C-d}.
1243 1582
1244Another way to use hungry deletion is to bind 1583@findex normal-erase-is-backspace-mode
1245@code{c-hungry-backspace} and @code{c-hungry-delete-forward} directly
1246to keys, and not use the mode toggling. For example @kbd{C-c C-d} and
1247@kbd{C-c DEL} to match plain @kbd{C-d} and @kbd{DEL},
1248 1584
1249@example 1585Emacs 21 and later automatically binds @key{Backspace} and
1250(add-hook 1586@key{Delete} to @kbd{DEL} and @kbd{C-d} according to your environment,
1251 'c-mode-common-hook 1587and @ccmode{} extends those bindings to @kbd{C-c C-@key{Backspace}}
1252 (lambda () 1588etc. If you need to change the bindings through
1253 (define-key c-mode-base-map 1589@code{normal-erase-is-backspace-mode} then @ccmode{} will also adapt
1254 [?\C-c ?\d] 'c-hungry-backspace) 1590its extended bindings accordingly.
1255 (define-key c-mode-base-map
1256 [?\C-c ?\C-d] 'c-hungry-delete-forward)))
1257@end example
1258 1591
1259@deffn Command c-hungry-backspace 1592In earlier (X)Emacs versions, @ccmode{} doesn't bind either
1260@findex hungry-backspace (c-) 1593@key{Backspace} or @key{Delete} directly. Only the key codes
1261Delete any amount of whitespace in the backwards direction (regardless 1594@kbd{DEL} and @kbd{C-d} are bound, and it's up to the default bindings
1262whether hungry-delete mode is enabled or not). 1595to map the physical keys to them. You might need to modify this
1263@end deffn 1596yourself if the defaults are unsuitable.
1264 1597
1265@deffn Command c-hungry-delete-forward 1598Getting your @key{Backspace} and @key{Delete} keys properly set up can
1266@findex hungry-delete-forward (c-) 1599sometimes be tricky. The information in @ref{DEL Does Not
1267Delete any amount of whitespace in the forward direction (regardless 1600Delete,,,emacs, GNU Emacs Manual}, might be helpful if you're having
1268whether hungry-delete mode is enabled or not). 1601trouble with this in GNU Emacs.
1269@end deffn
1270 1602
1271 1603
1272@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1604@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1273@node Text Filling and Line Breaking, Macro Handling, Minor Modes, Top 1605@node Subword Movement, Other Commands, Hungry WS Deletion, Commands
1274@comment node-name, next, previous, up 1606@comment node-name, next, previous, up
1275@chapter Text Filling and Line Breaking 1607@section Subword Movement and Editing
1276@cindex text filling
1277@cindex line breaking
1278@cindex comment handling
1279@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1608@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1280 1609
1281Since there's a lot of normal text in comments and string literals, 1610@cindex nomenclature
1282@ccmode{} provides features to edit these like in text mode. The goal 1611@cindex subword
1283is to do it as seamlessly as possible, i.e., you can use auto fill mode, 1612In spite of the GNU Coding Standards, it is popular to name a symbol
1284sentence and paragraph movement, paragraph filling, adaptive filling etc 1613by mixing uppercase and lowercase letters, e.g. @samp{GtkWidget},
1285wherever there's a piece of normal text without having to think much 1614@samp{EmacsFrameClass}, or @samp{NSGraphicsContext}. Here we call
1286about it. @ccmode{} should keep the indentation, fix the comment line 1615these mixed case symbols @dfn{nomenclatures}. Also, each capitalized
1287decorations, and so on, for you. It does that by hooking in on the 1616(or completely uppercase) part of a nomenclature is called a
1288different line breaking functions and tuning relevant variables as 1617@dfn{subword}. Here are some examples:
1289necessary. 1618
1290 1619@multitable {@samp{NSGraphicsContext}} {@samp{NS}, @samp{Graphics}, and @samp{Context}}
1291@vindex c-comment-prefix-regexp 1620@headitem Nomenclature
1292@vindex comment-prefix-regexp (c-) 1621 @tab Subwords
1293@cindex comment line prefix 1622@item @samp{GtkWindow}
1294@vindex comment-start 1623 @tab @samp{Gtk} and @samp{Window}
1295@vindex comment-end 1624@item @samp{EmacsFrameClass}
1296@vindex comment-start-skip 1625 @tab @samp{Emacs}, @samp{Frame}, and @samp{Class}
1297@vindex paragraph-start 1626@item @samp{NSGraphicsContext}
1298@vindex paragraph-separate 1627 @tab @samp{NS}, @samp{Graphics}, and @samp{Context}
1299@vindex paragraph-ignore-fill-prefix 1628@end multitable
1300@vindex adaptive-fill-mode 1629
1301@vindex adaptive-fill-regexp 1630The subword minor mode replaces the basic word oriented movement and
1302@vindex adaptive-fill-first-line-regexp 1631editing commands with variants that recognize subwords in a
1303To make Emacs recognize comments and treat text in them as normal 1632nomenclature and treat them as separate words:
1304paragraphs, @ccmode{} makes several standard 1633
1305variables@footnote{@code{comment-start}, @code{comment-end}, 1634@findex c-forward-subword
1306@code{comment-start-skip}, @code{paragraph-start}, 1635@findex forward-subword (c-)
1307@code{paragraph-separate}, @code{paragraph-ignore-fill-prefix}, 1636@findex c-backward-subword
1308@code{adaptive-fill-mode}, @code{adaptive-fill-regexp}, and 1637@findex backward-subword (c-)
1309@code{adaptive-fill-first-line-regexp}.} buffer local and modifies them 1638@findex c-mark-subword
1310according to the language syntax and the comment line prefix. 1639@findex mark-subword (c-)
1311 1640@findex c-kill-subword
1312@defopt c-comment-prefix-regexp 1641@findex kill-subword (c-)
1313@vindex comment-prefix-regexp (c-) 1642@findex c-backward-kill-subword
1314This style variable contains the regexp used to recognize the 1643@findex backward-kill-subword (c-)
1315@dfn{comment line prefix}, which is the line decoration that starts 1644@findex c-transpose-subwords
1316every line in a comment. The default is @samp{//+\\|\\**}, which 1645@findex transpose-subwords (c-)
1317matches C++ style line comments like 1646@findex c-capitalize-subword
1318 1647@findex capitalize-subword (c-)
1319@example 1648@findex c-upcase-subword
1320// blah blah 1649@findex upcase-subword (c-)
1321@end example 1650@findex c-downcase-subword
1322 1651@findex downcase-subword (c-)
1323@noindent 1652@multitable @columnfractions .20 .40 .40
1324with two or more slashes in front of them, and C style block comments 1653@headitem Key @tab Word oriented command @tab Subword oriented command
1325like 1654@item @kbd{M-f} @tab @code{forward-word} @tab @code{c-forward-subword}
1326 1655@item @kbd{M-b} @tab @code{backward-word} @tab @code{c-backward-subword}
1327@example 1656@item @kbd{M-@@} @tab @code{mark-word} @tab @code{c-mark-subword}
1328@group 1657@item @kbd{M-d} @tab @code{kill-word} @tab @code{c-kill-subword}
1329/* 1658@item @kbd{M-DEL} @tab @code{backward-kill-word} @tab @code{c-backward-kill-subword}
1330 * blah blah 1659@item @kbd{M-t} @tab @code{transpose-words} @tab @code{c-transpose-subwords}
1331 */ 1660@item @kbd{M-c} @tab @code{capitalize-word} @tab @code{c-capitalize-subword}
1332@end group 1661@item @kbd{M-u} @tab @code{upcase-word} @tab @code{c-upcase-subword}
1333@end example 1662@item @kbd{M-l} @tab @code{downcase-word} @tab @code{c-downcase-subword}
1334 1663@end multitable
1335@noindent 1664
1336with zero or more stars at the beginning of every line. If you change 1665Note that if you have changed the key bindings for the word oriented
1337this variable, please make sure it still matches the comment starter 1666commands in your @file{.emacs} or a similar place, the keys you have
1338(i.e., @code{//}) of line comments @emph{and} the line prefix inside 1667configured are also used for the corresponding subword oriented
1339block comments. 1668commands.
1340 1669
1341@findex c-setup-paragraph-variables 1670Type @kbd{C-c C-w} to toggle subword mode on and off. To make the
1342@findex setup-paragraph-variables (c-) 1671mode turn on automatically, put the following code in your
1343Also note that since @ccmode{} uses the value of 1672@file{.emacs}:
1344@code{c-comment-prefix-regexp} to set up several other variables at mode
1345initialization, there won't be any effect if you just change it inside a
1346@ccmode{} buffer. You need to call the command
1347@code{c-setup-paragraph-variables} too, to update those other variables with
1348the new value. That's also the case if you modify this variable in a
1349mode hook, since @ccmode{} sets up all variables before calling them.
1350@end defopt
1351
1352@findex auto-fill-mode
1353@cindex Auto Fill mode
1354@cindex paragraph filling
1355Line breaks are by default handled (almost) the same regardless whether
1356they are made by auto fill mode (@pxref{Auto Fill,,, emacs, The Emacs
1357Editor}), paragraph filling (e.g., with @kbd{M-q}), or explicitly with
1358@kbd{M-j} or similar methods. In string literals, the new line gets the
1359same indentation as the previous nonempty line (may be changed with the
1360@code{string} syntactic symbol). In comments, @ccmode{} uses
1361@code{c-comment-prefix-regexp} to adapt the line prefix from the other
1362lines in the comment.
1363
1364@vindex adaptive-fill-mode
1365@cindex Adaptive Fill mode
1366@ccmode{} uses adaptive fill mode (@pxref{Adaptive Fill,,, emacs, The
1367Emacs Editor}) to make Emacs correctly keep the line prefix when filling
1368paragraphs. That also makes Emacs preserve the text indentation
1369@emph{inside} the comment line prefix. e.g., in the following comment,
1370both paragraphs will be filled with the left margins of the texts kept
1371intact:
1372
1373@example
1374@group
1375/* Make a balanced b-tree of the nodes in the incoming
1376 * stream. But, to quote the famous words of Donald E.
1377 * Knuth,
1378 *
1379 * Beware of bugs in the above code; I have only
1380 * proved it correct, not tried it.
1381 */
1382@end group
1383@end example
1384
1385@findex c-setup-filladapt
1386@findex setup-filladapt (c-)
1387@findex filladapt-mode
1388@vindex filladapt-mode
1389@cindex Filladapt mode
1390It's also possible to use other adaptive filling packages, notably Kyle
1391E. Jones' Filladapt package@footnote{It's available from
1392@uref{http://www.wonderworks.com/}. As of version 2.12, it does however
1393lack a feature that makes it work suboptimally when
1394@code{c-comment-prefix-regexp} matches the empty string (which it does
1395by default). A patch for that is available from
1396@uref{http://cc-mode.sourceforge.net/,, the CC Mode web site}.},
1397which handles things like bulleted lists nicely. There's a convenience
1398function @code{c-setup-filladapt} that tunes the relevant variables in
1399Filladapt for use in @ccmode{}. Call it from a mode hook, e.g., with
1400something like this in your @file{.emacs}:
1401
1402@example
1403(defun my-c-mode-common-hook ()
1404 (c-setup-filladapt)
1405 (filladapt-mode 1))
1406(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
1407@end example
1408
1409@defopt c-block-comment-prefix
1410@vindex block-comment-prefix (c-)
1411@vindex c-comment-continuation-stars
1412@vindex comment-continuation-stars (c-)
1413Normally the comment line prefix inserted for a new line inside a
1414comment is deduced from other lines in it. However there's one
1415situation when there's no hint about what the prefix should look like,
1416namely when a block comment is broken for the first time. This style
1417variable@footnote{In versions before 5.26, this variable was called
1418@code{c-comment-continuation-stars}. As a compatibility measure,
1419@ccmode{} still uses the value on that variable if it's set.} is used
1420then as the comment prefix. It defaults to @samp{*
1421}@footnote{Actually, this default setting of
1422@code{c-block-comment-prefix} typically gets overriden by the default
1423style @code{gnu}, which sets it to blank. You can see the line
1424splitting effect described here by setting a different style,
1425e.g. @code{k&r} @xref{Choosing a Style}.}, which makes a comment
1426
1427@example
1428/* Got O(n^2) here, which is a Bad Thing. */
1429@end example
1430
1431@noindent
1432break into
1433 1673
1434@example 1674@example
1435@group 1675(add-hook 'c-mode-common-hook
1436/* Got O(n^2) here, 1676 (lambda () (c-subword-mode 1)))
1437 * which is a Bad Thing. */
1438@end group
1439@end example 1677@end example
1440 1678
1441Note that it won't work to adjust the indentation by putting leading 1679As a bonus, you can also use @code{c-subword-mode} in non-@ccmode{}
1442spaces in @code{c-block-comment-prefix}, since @ccmode{} still uses the 1680buffers by typing @kbd{M-x c-subword-mode}.
1443normal indentation engine to indent the line. Thus, the right way to
1444fix the indentation is by customizing the @code{c} syntactic symbol. It
1445defaults to @code{c-lineup-C-comments}, which handles the indentation of
1446most common comment styles, see @ref{Indentation Functions}.
1447@end defopt
1448
1449@defopt c-ignore-auto-fill
1450@vindex ignore-auto-fill (c-)
1451When auto fill mode is enabled, @ccmode{} can selectively ignore it
1452depending on the context the line break would occur in, e.g., to never
1453break a line automatically inside a string literal. This variable
1454takes a list of symbols for the different contexts where auto-filling
1455never should occur:
1456
1457@table @code
1458@item string
1459Inside a string or character literal.
1460@item c
1461Inside a C style block comment.
1462@item c++
1463Inside a C++ style line comment.
1464@item cpp
1465Inside a preprocessor directive.
1466@item code
1467Anywhere else, i.e., in normal code.
1468@end table
1469
1470By default, @code{c-ignore-auto-fill} is set to @code{'(string cpp
1471code)}, which means that auto-filling only occurs in comments when
1472auto-fill mode is activated. In literals, it's often desirable to have
1473explicit control over newlines. In preprocessor directives, the
1474necessary @samp{\} escape character before the newline is not
1475automatically inserted, so an automatic line break would produce invalid
1476code. In normal code, line breaks are normally dictated by some logical
1477structure in the code rather than the last whitespace character, so
1478automatic line breaks there will produce poor results in the current
1479implementation.
1480@end defopt
1481
1482The commands that do the actual work follow.
1483
1484@table @asis
1485@item @kbd{M-q} (@code{c-fill-paragraph})
1486@kindex M-q
1487@findex c-fill-paragraph
1488@findex fill-paragraph (c-)
1489@cindex Javadoc markup
1490@cindex Pike autodoc markup
1491This is the replacement for @code{fill-paragraph} in @ccmode{}
1492buffers. It's used to fill multiline string literals and both block and
1493line style comments. In Java buffers, the Javadoc markup words are
1494recognized as paragraph starters. The line oriented Pike autodoc markup
1495words are recognized in the same way in Pike mode.
1496
1497The function keeps the comment starters and enders of block comments as
1498they were before the filling. This means that a comment ender on the
1499same line as the paragraph being filled will be filled with the
1500paragraph, and one on a line by itself will stay as it is. The comment
1501starter is handled similarly@footnote{This means that the variables
1502@code{c-hanging-comment-starter-p} and @code{c-hanging-comment-ender-p},
1503which controlled this behavior in earlier versions of @ccmode{}, are now
1504obsolete.}.
1505
1506@item @kbd{M-j} (@code{c-indent-new-comment-line})
1507@kindex M-j
1508@findex c-indent-new-comment-line
1509@findex indent-new-comment-line (c-)
1510This is the replacement for @code{indent-new-comment-line}. It breaks
1511the line at point and indents the new line like the current one.
1512
1513@vindex comment-multi-line
1514If inside a comment and @code{comment-multi-line} is non-@code{nil}, the
1515indentation and line prefix are preserved. If inside a comment and
1516@code{comment-multi-line} is @code{nil}, a new comment of the same type
1517is started on the next line and indented as appropriate for comments.
1518
1519Note that @ccmode{} sets @code{comment-multi-line} to @code{t} at
1520startup. The reason is that @kbd{M-j} could otherwise produce sequences
1521of single line block comments for texts that should logically be treated
1522as one comment, and the rest of the paragraph handling code
1523(e.g., @kbd{M-q} and @kbd{M-a}) can't cope with that, which would lead to
1524inconsistent behavior.
1525
1526@item @kbd{M-x c-context-line-break}
1527@findex c-context-line-break
1528@findex context-line-break (c-)
1529This is a function that works like @code{indent-new-comment-line} in
1530comments and @code{newline-and-indent} elsewhere, thus combining those
1531two in a way that uses each one in the context it's best suited for.
1532I.e., in comments the comment line prefix and indentation is kept for
1533the new line, and in normal code it's indented according to context by
1534the indentation engine.
1535
1536In macros it acts like @code{newline-and-indent} but additionally
1537inserts and optionally aligns the line ending backslash so that the
1538macro remains unbroken. @xref{Macro Handling}, for details about the
1539backslash alignment.
1540
1541It's not bound to a key by default, but it's intended to be used on the
1542@kbd{RET} key. If you like the behavior of @code{newline-and-indent} on
1543@kbd{RET}, you should consider switching to this function.
1544
1545@item @kbd{M-x c-context-open-line}
1546@findex c-context-open-line
1547@findex context-open-line (c-)
1548This is to @kbd{C-o} (@kbd{M-x open-line}) as
1549@code{c-context-line-break} is to @kbd{RET}. I.e., it works just like
1550@code{c-context-line-break} but leaves the point before the inserted
1551line break.
1552@end table
1553
1554 1681
1555@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1682@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1556@node Macro Handling, Font Locking, Text Filling and Line Breaking, Top 1683@node Other Commands, , Subword Movement, Commands
1557@comment node-name, next, previous, up 1684@comment node-name, next, previous, up
1558@chapter Macro Handling 1685@section Other Commands
1559@cindex macros
1560@cindex preprocessor directives
1561@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1686@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1562 1687
1563Preprocessor directives are handled as syntactic whitespace from other 1688Here are the various other commands that didn't fit anywhere else:
1564code, i.e., they can be interspersed anywhere without affecting the
1565syntactic analysis, just like comments.
1566
1567The code inside macro definitions is still analyzed syntactically so
1568that you get relative indentation there just as you'd get if the same
1569code was outside a macro. However, since there is no hint about the
1570syntactic context, i.e., whether the macro expands to an expression, to some
1571statements, or perhaps to whole functions, the syntactic recognition can be
1572wrong. @ccmode{} manages to figure it out correctly most of the time,
1573though. @xref{Syntactic Symbols}, for details about the indentation.
1574
1575@defopt c-syntactic-indentation-in-macros
1576@vindex syntactic-indentation-in-macros (c-)
1577Enable syntactic analysis inside macros, which is the default. If this
1578is @code{nil}, all lines inside macro definitions are analyzed as
1579@code{cpp-macro-cont}.
1580@end defopt
1581
1582@ccmode{} provides some tools to help keep the line continuation
1583backslashes in macros neat and tidy:
1584 1689
1585@table @asis 1690@table @asis
1691@item @kbd{C-c :} (@code{c-scope-operator})
1692@kindex C-c :
1693@findex c-scope-operator
1694@findex scope-operator (c-)
1695In C++, it is also sometimes desirable to insert the double-colon scope
1696operator without performing the electric behavior of colon insertion.
1697@kbd{C-c :} does just this.
1698
1586@item @kbd{C-c C-\} (@code{c-backslash-region}) 1699@item @kbd{C-c C-\} (@code{c-backslash-region})
1587@kindex C-c C-\ 1700@kindex C-c C-\
1588@findex c-backslash-region 1701@findex c-backslash-region
1589@findex backslash-region (c-) 1702@findex backslash-region (c-)
1590This function inserts and aligns or deletes the end-of-line backslashes 1703This function inserts and aligns or deletes end-of-line backslashes in
1591in the current region. 1704the current region. These are typically used in multi-line macros.
1592 1705
1593With no prefix argument, it inserts any missing backslashes and aligns 1706With no prefix argument, it inserts any missing backslashes and aligns
1594them according to the @code{c-backslash-column} and 1707them according to the @code{c-backslash-column} and
@@ -1598,75 +1711,72 @@ deletes any backslashes.
1598The function does not modify blank lines at the start of the region. If 1711The function does not modify blank lines at the start of the region. If
1599the region ends at the start of a line, it always deletes the backslash 1712the region ends at the start of a line, it always deletes the backslash
1600(if any) at the end of the previous line. 1713(if any) at the end of the previous line.
1601@end table
1602
1603@defopt c-backslash-column
1604@vindex backslash-column (c-)
1605@defoptx c-backslash-max-column
1606@vindex backslash-max-column (c-)
1607These variables control the alignment columns for line continuation
1608backslashes in multiline macros. They are used by the functions that
1609automatically insert or align such backslashes,
1610e.g., @code{c-backslash-region} and @code{c-context-line-break}.
1611
1612@code{c-backslash-column} specifies the minimum column for the
1613backslashes. If any line in the macro exceeds it then the next tab
1614stop from that line is used as the alignment column for all the
1615backslashes, so that they remain in a single column. However, if some
1616lines exceed @code{c-backslash-max-column} then the backslashes in the
1617rest of the macro will be kept at that column, so that the
1618lines which are too long ``stick out'' instead.
1619@end defopt
1620 1714
1621@defopt c-auto-align-backslashes 1715To customize the precise workings of this command, @ref{Custom Macros}.
1622@vindex auto-align-backslashes (c-) 1716@end table
1623Align automatically inserted line continuation backslashes if
1624non-@code{nil}. When line continuation backslashes are inserted
1625automatically for line breaks in multiline macros, e.g., by
1626@code{c-context-line-break}, they are aligned with the other backslashes
1627in the same macro if this flag is set. Otherwise the inserted
1628backslashes are preceded by a single space.
1629@end defopt
1630 1717
1718@noindent
1631The recommended line breaking function, @code{c-context-line-break} 1719The recommended line breaking function, @code{c-context-line-break}
1632(@pxref{Text Filling and Line Breaking}), is especially nice if you edit 1720(@pxref{Filling and Breaking}), is especially nice if you edit
1633multiline macros frequently. When used inside a macro, it automatically 1721multiline macros frequently. When used inside a macro, it
1634inserts and adjusts the mandatory backslash at the end of the line to 1722automatically inserts and adjusts the mandatory backslash at the end
1635keep the macro together, and it leaves the point at the right 1723of the line to keep the macro together, and it leaves the point at the
1636indentation column for the code. Thus you can write code inside macros 1724right indentation column for the code. Thus you can write code inside
1637almost exactly as you can elsewhere, without having to bother with the 1725macros almost exactly as you can elsewhere, without having to bother
1638trailing backslashes. 1726with the trailing backslashes.
1639 1727
1728@table @asis
1729@item @kbd{C-c C-e} (@code{c-macro-expand})
1730@kindex C-c C-e
1731@findex c-macro-expand
1732@findex macro-expand (c-)
1733This command expands C, C++, Objective C or Pike macros in the region,
1734using an appropriate external preprocessor program. Normally it
1735displays its output in a temporary buffer, but if you give it a prefix
1736arg (with @kbd{C-u C-c C-e}) it will overwrite the original region
1737with the expansion.
1738
1739The command does not work in any of the other modes, and the key
1740sequence is not bound in these other modes.
1741
1742@code{c-macro-expand} isn't actually part of @ccmode{}, even though it
1743is bound to a @ccmode{} key sequence. If you need help setting it up
1744or have other problems with it, you can either read its source code or
1745ask for help in the standard (X)Emacs forums.
1746@end table
1640 1747
1641@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1748@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1642@node Font Locking, Commands, Macro Handling, Top 1749@node Font Locking, Config Basics, Commands, Top
1643@comment node-name, next, previous, up 1750@comment node-name, next, previous, up
1644@chapter Font Locking 1751@chapter Font Locking
1645@cindex font locking 1752@cindex font locking
1646@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1753@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1647 1754
1648@strong{Please note:} The font locking in AWK mode is currently not integrated
1649with the rest of @ccmode{}, so this section does not apply there.
1650@xref{AWK Mode Font Locking}, instead.
1651
1652@cindex Font Lock mode 1755@cindex Font Lock mode
1653 1756
1654@ccmode{} provides font locking for its supported languages by supplying 1757@ccmode{} provides font locking for its supported languages by
1655patterns for use with Font Lock mode. This means that you get distinct 1758supplying patterns for use with Font Lock mode. This means that you
1656faces on the various syntactic parts such as comments, strings, keywords 1759get distinct faces on the various syntactic parts such as comments,
1657and types, which is very helpful in telling them apart at a glance and 1760strings, keywords and types, which is very helpful in telling them
1658discovering syntactic errors. @xref{Font Lock,,, emacs, The Emacs 1761apart at a glance and discovering syntactic errors. @xref{Font
1659Editor}, for ways to enable font locking in @ccmode{} buffers. 1762Lock,,, emacs, GNU Emacs Manual}, for ways to enable font locking in
1763@ccmode{} buffers.
1764
1765@strong{Please note:} The font locking in AWK mode is currently not
1766integrated with the rest of @ccmode{}. Only the last section of this
1767chapter, @ref{AWK Mode Font Locking}, applies to AWK. The other
1768sections apply to the other languages.
1660 1769
1661@menu 1770@menu
1662* Font Locking Preliminaries:: 1771* Font Locking Preliminaries::
1663* Faces:: 1772* Faces::
1664* Documentation Comments:: 1773* Doc Comments::
1774* AWK Mode Font Locking::
1665@end menu 1775@end menu
1666 1776
1667 1777
1668@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1778@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1669@node Font Locking Preliminaries, Faces, , Font Locking 1779@node Font Locking Preliminaries, Faces, Font Locking, Font Locking
1670@comment node-name, next, previous, up 1780@comment node-name, next, previous, up
1671@section Font Locking Preliminaries 1781@section Font Locking Preliminaries
1672@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1782@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -1676,19 +1786,20 @@ directly by the Font Lock package prior to version 5.30 of @ccmode{}.
1676In the transition to @ccmode{} the patterns have been reworked 1786In the transition to @ccmode{} the patterns have been reworked
1677completely and are applied uniformly across all the languages except AWK 1787completely and are applied uniformly across all the languages except AWK
1678mode, just like the indentation rules (although each language still has 1788mode, just like the indentation rules (although each language still has
1679some pecularities of its own, of course). Since the languages 1789some peculiarities of its own, of course). Since the languages
1680previously had completely separate font locking patterns, this means 1790previously had completely separate font locking patterns, this means
1681that it's a bit different in most languages now. 1791that it's a bit different in most languages now.
1682 1792
1683The main goal for the font locking in @ccmode{} is accuracy, to provide 1793The main goal for the font locking in @ccmode{} is accuracy, to provide
1684a dependable aid in recognizing the various constructs. Some, like 1794a dependable aid in recognizing the various constructs. Some, like
1685strings and comments, are easy to recognize while others like 1795strings and comments, are easy to recognize while others, like
1686declarations and types can be very tricky. @ccmode{} can go to great 1796declarations and types, can be very tricky. @ccmode{} can go to great
1687lengths to recognize declarations and casts correctly, especially when 1797lengths to recognize declarations and casts correctly, especially when
1688the types aren't recognized by standard patterns. This is a fairly 1798the types aren't recognized by standard patterns. This is a fairly
1689demanding analysis which can be slow on older hardware, and it can 1799demanding analysis which can be slow on older hardware, and it can
1690therefore be disabled by choosing a lower decoration level with the 1800therefore be disabled by choosing a lower decoration level with the
1691variable @code{font-lock-maximum-decoration}. 1801variable @code{font-lock-maximum-decoration} (@pxref{Font Lock,,,
1802emacs, GNU Emacs Manual}).
1692 1803
1693@vindex font-lock-maximum-decoration 1804@vindex font-lock-maximum-decoration
1694 1805
@@ -1702,20 +1813,20 @@ directives (in the languages that use cpp).
1702 1813
1703@comment 2 1814@comment 2
1704@item 1815@item
1705Fast normal font locking: In addition to level 1, fontify keywords, 1816Fast font locking: In addition to level 1, fontify keywords, simple
1706simple types and declarations that are easy to recognize. The variables 1817types and declarations that are easy to recognize. The variables
1707@code{*-font-lock-extra-types} (where @samp{*} is the name of the 1818@code{*-font-lock-extra-types} (where @samp{*} is the name of the
1708language) are used to recognize types (see below). Documentation 1819language) are used to recognize types (see below). Documentation
1709comments like Javadoc are fontified according to 1820comments like Javadoc are fontified according to
1710@code{c-doc-comment-style} (@pxref{Documentation Comments}). 1821@code{c-doc-comment-style} (@pxref{Doc Comments}).
1711 1822
1712Use this if you think the font locking is too slow. It's the closest 1823Use this if you think the font locking is too slow. It's the closest
1713corresponding level to level 3 in the old font lock patterns. 1824corresponding level to level 3 in the old font lock patterns.
1714 1825
1715@comment 3 1826@comment 3
1716@item 1827@item
1717Accurate normal font locking: Like level 2 but uses a different approach 1828Accurate font locking: Like level 2 but uses a different approach that
1718that can recognize types and declarations much more accurately. The 1829can recognize types and declarations much more accurately. The
1719@code{*-font-lock-extra-types} variables are still used, but user 1830@code{*-font-lock-extra-types} variables are still used, but user
1720defined types are recognized correctly anyway in most cases. Therefore 1831defined types are recognized correctly anyway in most cases. Therefore
1721those variables should be fairly restrictive and not contain patterns 1832those variables should be fairly restrictive and not contain patterns
@@ -1726,7 +1837,13 @@ that are uncertain.
1726 1837
1727This level is designed for fairly modern hardware and a font lock 1838This level is designed for fairly modern hardware and a font lock
1728support mode like Lazy Lock or Just-in-time Lock mode that only 1839support mode like Lazy Lock or Just-in-time Lock mode that only
1729fontifies the parts that are actually shown. 1840fontifies the parts that are actually shown. Fontifying the whole
1841buffer at once can easily get bothersomely slow even on contemporary
1842hardware.
1843@c ACM, 2005/8/28: There should be a page in the (X)Emacs manual
1844@c describing these support modes. There wasn't in the
1845@c fourteenth edition of the Emacs manual (released with Emacs 21.3).
1846@c There might be one in the Emacs CVS for 22.1.
1730@end enumerate 1847@end enumerate
1731 1848
1732@cindex user defined types 1849@cindex user defined types
@@ -1744,7 +1861,7 @@ additional regexps to match those you use:
1744For each language there's a variable @code{*-font-lock-extra-types}, 1861For each language there's a variable @code{*-font-lock-extra-types},
1745where @samp{*} stands for the language in question. It contains a list 1862where @samp{*} stands for the language in question. It contains a list
1746of regexps that matches identifiers that should be recognized as types, 1863of regexps that matches identifiers that should be recognized as types,
1747e.g., @samp{\\sw+_t} to recognize all identifiers ending with @samp{_t} 1864e.g. @samp{\\sw+_t} to recognize all identifiers ending with @samp{_t}
1748as is customary in C code. Each regexp should not match more than a 1865as is customary in C code. Each regexp should not match more than a
1749single identifier. 1866single identifier.
1750 1867
@@ -1761,7 +1878,7 @@ recognize types.
1761 1878
1762 1879
1763@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1880@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1764@node Faces, Documentation Comments, Font Locking Preliminaries, Font Locking 1881@node Faces, Doc Comments, Font Locking Preliminaries, Font Locking
1765@comment node-name, next, previous, up 1882@comment node-name, next, previous, up
1766@section Faces 1883@section Faces
1767@cindex faces 1884@cindex faces
@@ -1782,10 +1899,10 @@ Normal comments are fontified in @code{font-lock-comment-face}.
1782@vindex font-lock-doc-face 1899@vindex font-lock-doc-face
1783@vindex font-lock-doc-string-face 1900@vindex font-lock-doc-string-face
1784@vindex font-lock-comment-face 1901@vindex font-lock-comment-face
1785Comments that are recognized as documentation (@pxref{Documentation 1902Comments that are recognized as documentation (@pxref{Doc Comments})
1786Comments}) get @code{font-lock-doc-face} (Emacs) or 1903get @code{font-lock-doc-face} (Emacs) or
1787@code{font-lock-doc-string-face} (XEmacs) if those faces exist. If they 1904@code{font-lock-doc-string-face} (XEmacs) if those faces exist. If
1788don't then @code{font-lock-comment-face} is used. 1905they don't then @code{font-lock-comment-face} is used.
1789 1906
1790@item 1907@item
1791@vindex font-lock-string-face 1908@vindex font-lock-string-face
@@ -1841,7 +1958,7 @@ labels.
1841@vindex font-lock-builtin-face 1958@vindex font-lock-builtin-face
1842@vindex font-lock-reference-face 1959@vindex font-lock-reference-face
1843Preprocessor directives get @code{font-lock-preprocessor-face} if it 1960Preprocessor directives get @code{font-lock-preprocessor-face} if it
1844exists (i.e., XEmacs). In Emacs they get @code{font-lock-builtin-face} 1961exists (i.e. XEmacs). In Emacs they get @code{font-lock-builtin-face}
1845or @code{font-lock-reference-face}, for lack of a closer equivalent. 1962or @code{font-lock-reference-face}, for lack of a closer equivalent.
1846 1963
1847@item 1964@item
@@ -1860,21 +1977,21 @@ since those aren't syntactic errors in themselves.
1860 1977
1861 1978
1862@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1979@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1863@node Documentation Comments, , Faces, Font Locking 1980@node Doc Comments, AWK Mode Font Locking, Faces, Font Locking
1864@comment node-name, next, previous, up 1981@comment node-name, next, previous, up
1865@section Documentation Comments 1982@section Documentation Comments
1866@cindex documentation comments 1983@cindex documentation comments
1867@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1984@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1868 1985
1869There are various tools to supply documentation in the source as 1986There are various tools to supply documentation in the source as
1870specially structured comments, e.g., the standard Javadoc tool in Java. 1987specially structured comments, e.g. the standard Javadoc tool in Java.
1871@ccmode{} provides an extensible mechanism to fontify such comments and 1988@ccmode{} provides an extensible mechanism to fontify such comments and
1872the special markup inside them. 1989the special markup inside them.
1873 1990
1874@defopt c-doc-comment-style 1991@defopt c-doc-comment-style
1875@vindex doc-comment-style (c-) 1992@vindex doc-comment-style (c-)
1876This is a style variable that specifies which documentation comment 1993This is a style variable that specifies which documentation comment
1877style to recognize, e.g., @code{javadoc} for Javadoc comments. 1994style to recognize, e.g. @code{javadoc} for Javadoc comments.
1878 1995
1879The value may also be a list of styles, in which case all of them are 1996The value may also be a list of styles, in which case all of them are
1880recognized simultaneously (presumably with markup cues that don't 1997recognized simultaneously (presumably with markup cues that don't
@@ -1886,10 +2003,13 @@ looked up in the alist, and the value of that element is interpreted as
1886above if found. If it isn't found then the symbol `other' is looked up 2003above if found. If it isn't found then the symbol `other' is looked up
1887and its value is used instead. 2004and its value is used instead.
1888 2005
2006The default value for @code{c-doc-comment-style} is
2007@w{@code{((java-mode . javadoc) (pike-mode . autodoc) (c-mode . gtkdoc))}}.
2008
1889Note that @ccmode{} uses this variable to set other variables that 2009Note that @ccmode{} uses this variable to set other variables that
1890handle fontification etc. That's done at mode initialization or when 2010handle fontification etc. That's done at mode initialization or when
1891you switch to a style which sets this variable. Thus, if you change it 2011you switch to a style which sets this variable. Thus, if you change it
1892in some other way, e.g., interactively in a CC Mode buffer, you will need 2012in some other way, e.g. interactively in a CC Mode buffer, you will need
1893to do @kbd{M-x java-mode} (or whatever mode you're currently using) to 2013to do @kbd{M-x java-mode} (or whatever mode you're currently using) to
1894reinitialize. 2014reinitialize.
1895 2015
@@ -1897,7 +2017,7 @@ reinitialize.
1897@findex setup-doc-comment-style (c-) 2017@findex setup-doc-comment-style (c-)
1898Note also that when @ccmode{} starts up, the other variables are 2018Note also that when @ccmode{} starts up, the other variables are
1899modified before the mode hooks are run. If you change this variable in 2019modified before the mode hooks are run. If you change this variable in
1900a mode hook, you have to call @code{c-setup-doc-comment-style} 2020a mode hook, you'll have to call @code{c-setup-doc-comment-style}
1901afterwards to redo that work. 2021afterwards to redo that work.
1902@end defopt 2022@end defopt
1903 2023
@@ -1912,11 +2032,15 @@ Javadoc comments, the standard tool in Java.
1912@item autodoc 2032@item autodoc
1913@cindex Pike autodoc markup 2033@cindex Pike autodoc markup
1914For Pike autodoc markup, the standard in Pike. 2034For Pike autodoc markup, the standard in Pike.
2035
2036@item gtkdoc
2037@cindex GtkDoc markup
2038For GtkDoc markup, widely used in the Gnome community.
1915@end table 2039@end table
1916 2040
1917The above is by no means complete. If you'd like to see support for 2041The above is by no means complete. If you'd like to see support for
1918other doc comment styles, please let us know (@pxref{Mailing Lists and 2042other doc comment styles, please let us know (@pxref{Mailing Lists and
1919Submitting Bug Reports}). 2043Bug Reports}).
1920 2044
1921You can also write your own doc comment fontification support to use 2045You can also write your own doc comment fontification support to use
1922with @code{c-doc-comment-style}: Supply a variable or function 2046with @code{c-doc-comment-style}: Supply a variable or function
@@ -1927,688 +2051,276 @@ initialization and the result is prepended. For an example, see
1927@code{javadoc-font-lock-keywords} in @file{cc-fonts.el}. 2051@code{javadoc-font-lock-keywords} in @file{cc-fonts.el}.
1928 2052
1929If you add support for another doc comment style, please consider 2053If you add support for another doc comment style, please consider
1930contributing it --- send a note to @email{bug-cc-mode@@gnu.org}. 2054contributing it - send a note to @email{bug-cc-mode@@gnu.org}.
1931 2055
1932 2056
1933@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2057@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1934@node Commands, Customizing Indentation, Font Locking, Top 2058@node AWK Mode Font Locking, , Doc Comments, Font Locking
1935@comment node-name, next, previous, up 2059@comment node-name, next, previous, up
1936@chapter Commands 2060@section AWK Mode Font Locking
1937@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2061@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1938
1939@menu
1940* Indentation Commands::
1941* Movement Commands::
1942* Other Commands::
1943@end menu
1944
1945See also @ref{Text Filling and Line Breaking} and @ref{Macro Handling},
1946for commands concerning those bits.
1947
1948
1949@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1950@node Indentation Commands, Movement Commands, , Commands
1951@comment node-name, next, previous,up
1952@section Indentation Commands
1953@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1954
1955The following list of commands reindent C constructs. Note that when
1956you change your coding style, either interactively or through some other
1957means, your file does @emph{not} automatically get reindented. You
1958will need to execute one of the following commands to see the effects of
1959your changes.
1960
1961@cindex GNU indent program
1962Also, variables like @code{c-hanging-*} and @code{c-cleanup-list}
1963only affect how on-the-fly code is formatted. Changing the
1964``hanginess'' of a brace and then reindenting, will not move the brace
1965to a different line. For this, you're better off getting an external
1966program like GNU @code{indent}, which will rearrange brace location,
1967among other things.
1968 2062
1969Reindenting large sections of code can take a long time. When 2063The general appearance of font-locking in AWK mode is much like in any
1970@ccmode{} reindents a region of code, it is essentially equivalent to 2064other programming mode. @xref{Faces For Font Lock,,,elisp, GNU Emacs
1971hitting @kbd{TAB} on every line of the region. 2065Lisp Reference Manual}.
1972 2066
1973These commands are useful when indenting code: 2067The following faces are, however, used in a non-standard fashion in
2068AWK mode:
1974 2069
1975@table @asis 2070@table @asis
1976@item @kbd{TAB} (@code{c-indent-command}) 2071@item @code{font-lock-variable-name-face}
1977@kindex TAB 2072This face was intended for variable declarations. Since variables are
1978@findex c-indent-command 2073not declared in AWK, this face is used instead for AWK system
1979@findex indent-command (c-) 2074variables (such as @code{NF}) and ``Special File Names'' (such as
1980Indents the current line. The actual behavior is controlled by several 2075@code{"/dev/stderr"}).
1981variables, described below. See @code{c-tab-always-indent},
1982@code{c-insert-tab-function}, and @code{indent-tabs-mode}. With a
1983numeric argument, this command rigidly indents the region, preserving
1984the relative indentation among the lines.
1985
1986@item @kbd{C-M-q} (@code{c-indent-exp})
1987@kindex C-M-q
1988@findex c-indent-exp
1989@findex indent-exp (c-)
1990Indent an entire balanced brace or parenthesis expression. Note that
1991point must be on the opening brace or parenthesis of the expression you
1992want to indent.
1993 2076
1994@item @kbd{C-c C-q} (@code{c-indent-defun}) 2077@item @code{font-lock-builtin-face} (Emacs)/@code{font-lock-preprocessor-face} (XEmacs)
1995@kindex C-c C-q 2078This face is normally used for preprocessor directives in @ccmode{}.
1996@findex c-indent-defun 2079There are no such things in AWK, so this face is used instead for
1997@findex indent-defun (c-) 2080standard functions (such as @code{match}).
1998Indents the entire top-level function, class or macro definition
1999encompassing point. It leaves point unchanged. This function can't be
2000used to reindent a nested brace construct, such as a nested class or
2001function, or a Java method. The top-level construct being reindented
2002must be complete, i.e., it must have both a beginning brace and an ending
2003brace.
2004 2081
2005@item @kbd{C-M-\} (@code{indent-region}) 2082@item @code{font-lock-string-face}
2006@kindex C-M-\ 2083As well as being used for strings, including localizable strings,
2007@findex indent-region 2084(delimited by @samp{"} and @samp{_"}), this face is also used for AWK
2008Indents an arbitrary region of code. This is a standard Emacs command, 2085regular expressions (delimited by @samp{/}).
2009tailored for C code in a @ccmode{} buffer. Note, of course, that point
2010and mark must delineate the region you want to indent.
2011 2086
2012@item @kbd{M-;} (@code{indent-for-comment}) 2087@item @code{font-lock-warning-face} (Emacs)/@code{c-invalid-face} (XEmacs)
2013@kindex M-; 2088This face highlights the following syntactically invalid AWK
2014@findex indent-for-comment 2089constructs:
2015Insert a comment at the end of the current line, if none is there already.
2016Then reindent the comment according to the variables
2017@code{c-indent-comment-alist}, @code{c-indent-comments-syntactically-p}
2018and @code{comment-column}. Then position the point after the comment
2019starter. This is a standard Emacs command, but @ccmode{} enhances it a
2020bit with two variables:
2021 2090
2022@defopt c-indent-comment-alist 2091@itemize @bullet
2023@vindex indent-comment-alist (c-) 2092@item
2024@vindex comment-column 2093An unterminated string or regular expression. Here the opening
2025This style variable allows you to control which column @kbd{M-;} 2094delimiter (@samp{"} or @samp{/} or @samp{_"}) is displayed in
2026indents the comment to, depending on the preceding code and the 2095@code{font-lock-warning-face}. This is most noticeable when typing in a
2027indentation of a similar comment on the preceding line, if there is 2096new string/regular expression into a buffer, when the warning-face
2028any. It is an association list that maps different types of lines to 2097serves as a continual reminder to terminate the construct.
2029actions describing how they should be handled. If a certain line type
2030isn't present on the list then the line is indented to the column
2031specified by @code{comment-column}. See the documentation string for
2032@code{c-indent-comment-alist} for a full description of the available
2033line types and actions (use @kbd{C-h v c-indent-comment-alist}).
2034@end defopt
2035 2098
2036@defopt c-indent-comments-syntactically-p 2099AWK mode fontifies unterminated strings/regular expressions
2037@vindex indent-comments-syntactically-p (c-) 2100differently from other modes: Only the text up to the end of the line
2038Normally, when this variable is @code{nil}, @kbd{M-;} will indent 2101is fontified as a string (escaped newlines being handled correctly),
2039comment-only lines according to @code{c-indent-comment-alist}, just as 2102rather than the text up to the next string quote.
2040it does with lines where other code precede the comments. However, if
2041you want it to act just like @kbd{TAB} for comment-only lines you can
2042get that by setting @code{c-indent-comments-syntactically-p} to
2043non-@code{nil}.
2044 2103
2045If @code{c-indent-comments-syntactically-p} is non-@code{nil} then 2104@item
2046@code{c-indent-comment-alist} won't be consulted at all for comment-only 2105A space between the function name and opening parenthesis when calling
2047lines. 2106a user function. The last character of the function name and the
2048@end defopt 2107opening parenthesis are highlighted. This font-locking rule will
2108spuriously highlight a valid concatenation expression where an
2109identifier precedes a parenthesised expression. Unfortunately.
2049 2110
2050@item @kbd{C-M-h} (@code{c-mark-function}) 2111@item
2051@kindex C-M-h 2112Whitespace following the @samp{\} in what otherwise looks like an
2052@findex c-mark-function 2113escaped newline. The @samp{\} is highlighted.
2053@findex mark-function (c-) 2114@end itemize
2054While not strictly an indentation command, this is useful for marking
2055the current top-level function or class definition as the current
2056region. As with @code{c-indent-defun}, this command operates on
2057top-level constructs, and can't be used to mark say, a Java method.
2058@end table 2115@end table
2059 2116
2060These variables are also useful when indenting code:
2061
2062@defopt c-tab-always-indent
2063@vindex tab-always-indent (c-)
2064@kindex TAB
2065@cindex literal
2066This variable controls how @kbd{TAB} (@code{c-indent-command})
2067operates. When it is @code{t}, @kbd{TAB} always indents the current
2068line. When it is @code{nil}, the line is indented only if point is at
2069the left margin, or on or before the first non-whitespace character on
2070the line, otherwise some whitespace is inserted. If this variable is
2071some other value (not @code{nil} or @code{t}), then some whitespace is
2072inserted only within strings and comments (literals), but the line is
2073always reindented.
2074@end defopt
2075 2117
2076@defopt c-insert-tab-function 2118@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2077@vindex insert-tab-function (c-) 2119@node Config Basics, Custom Filling and Breaking, Font Locking, Top
2078@findex tab-to-tab-stop 2120@comment node-name, next, previous, up
2079When ``some whitespace'' is inserted as described above, what actually 2121@chapter Configuration Basics
2080happens is that the function stored in @code{c-insert-tab-function} is
2081called. Normally, this just inserts a real tab character, or the
2082equivalent number of spaces, depending on @code{indent-tabs-mode}.
2083Some people, however, set @code{c-insert-tab-function} to
2084@code{tab-to-tab-stop} so as to get hard tab stops when indenting.
2085@end defopt
2086
2087@defopt indent-tabs-mode
2088This is a standard Emacs variable that controls how line indentation
2089is composed. When it's non-@code{nil}, tabs can be used in a line's
2090indentation, otherwise only spaces can be used.
2091@end defopt
2092
2093@defopt c-progress-interval
2094@vindex progress-interval (c-)
2095When indenting large regions of code, this variable controls how often a
2096progress message is displayed. Set this variable to @code{nil} to
2097inhibit the progress messages, or set it to an integer which is how
2098often (in seconds) progress messages are to be displayed.
2099@end defopt
2100
2101
2102@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2103@node Movement Commands, Other Commands, Indentation Commands, Commands
2104@comment node-name, next, previous, up
2105@section Movement Commands
2106@cindex movement
2107@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2122@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2108 2123
2109@ccmode{} contains some useful commands for moving around in C 2124@cindex Emacs Initiliazation File
2110code. 2125@cindex Configuration
2111 2126You configure @ccmode{} by setting Lisp variables and calling (and
2127perhaps writing) Lisp functions@footnote{DON'T PANIC!!! This isn't
2128difficult.}, which is usually done by adding code to an Emacs
2129initialization file. This file might be @file{site-start.el} or
2130@file{.emacs} or @file{init.el} or @file{default.el} or perhaps some
2131other file. @xref{Init File,,,@emacsman{}, @emacsmantitle{}}. For
2132the sake of conciseness, we just call this file ``your @file{.emacs}''
2133throughout the rest of the manual.
2134
2135Several of these variables (currently 16), are known collectively as
2136@dfn{style variables}. @ccmode{} provides a special mechanism, known
2137as @dfn{styles} to make it easier to set these variables as a group,
2138to ``inherit'' settings from one style into another, and so on. Style
2139variables remain ordinary Lisp variables, whose values can be read and
2140changed independently of the style system. @xref{Style Variables}.
2141
2142There are several ways you can write the code, depending on the
2143precise effect you want---they are described further down on this page.
2144If you are new to @ccmode{}, we suggest you begin with the simplest
2145method, ``Top-level commands or the customization interface''.
2146
2147If you make conflicting settings in several of these ways, the way
2148that takes precedence is the one that appears latest in this list:
2149@itemize @asis
2150@item
2112@table @asis 2151@table @asis
2113@item @kbd{M-x c-beginning-of-defun} 2152@item Style
2114@findex c-beginning-of-defun 2153@itemx Top-level command or ``customization interface''
2115@findex beginning-of-defun (c-) 2154@itemx Hook
2116@findex beginning-of-defun 2155@itemx File Style
2117Move point back to the least-enclosing brace. This function is
2118analogous to the Emacs built-in command @code{beginning-of-defun},
2119except it eliminates the constraint that the top-level opening brace
2120must be in column zero. See @code{beginning-of-defun} for more
2121information.
2122
2123Depending on the coding style being used, you might prefer
2124@code{c-beginning-of-defun} to @code{beginning-of-defun}. If so,
2125consider binding @kbd{C-M-a} to the former instead. For backwards
2126compatibility reasons, the default binding remains in effect.
2127
2128In AWK mode, a defun doesn't necessarily have braces at all. AWK Mode
2129therefore has its own version of this function which is bound by
2130default to @kbd{C-M-a}. You can thus chose freely which function to
2131bind to @kbd{C-M-a} for the other modes without worrying about AWK
2132buffers. @xref{AWK Mode Defuns}.
2133
2134@item @kbd{M-x c-end-of-defun}
2135@findex c-end-of-defun
2136@findex end-of-defun (c-)
2137@findex end-of-defun
2138Moves point to the end of the current top-level definition. This
2139function is analogous to the Emacs built-in command @code{end-of-defun},
2140except it eliminates the constraint that the top-level opening brace of
2141the defun must be in column zero. See @code{end-of-defun} for more
2142information.
2143
2144Depending on the coding style being used, you might prefer
2145@code{c-end-of-defun} to @code{end-of-defun}. If so,
2146consider binding @kbd{C-M-e} to the former instead. For backwards
2147compatibility reasons, the default binding remains in effect.
2148
2149In AWK Mode, a defun doesn't necessarily have braces at all. AWK Mode
2150therefore has its own version of this function which is bound by
2151default to @kbd{C-M-e}. You can thus chose freely which function to
2152bind to @kbd{C-M-e} for the other modes without worrying about AWK
2153buffers. @ref{AWK Mode Defuns}.
2154
2155@item @kbd{C-c C-u} (@code{c-up-conditional})
2156@kindex C-c C-u
2157@findex c-up-conditional
2158@findex up-conditional (c-)
2159Move point back to the containing preprocessor conditional, leaving the
2160mark behind. A prefix argument acts as a repeat count. With a negative
2161argument, move point forward to the end of the containing
2162preprocessor conditional.
2163
2164@samp{#elif} is treated like @samp{#else} followed by @samp{#if}, so the
2165function stops at them when going backward, but not when going forward.
2166
2167@item @kbd{M-x c-up-conditional-with-else}
2168@findex c-up-conditional-with-else
2169@findex up-conditional-with-else (c-)
2170A variety of @code{c-up-conditional} that also stops at @samp{#else}
2171lines. Normally those lines are ignored.
2172
2173@item @kbd{M-x c-down-conditional}
2174@findex c-down-conditional
2175@findex down-conditional (c-)
2176Move point forward into the next nested preprocessor conditional,
2177leaving the mark behind. A prefix argument acts as a repeat count.
2178With a negative argument, move point backward into the previous
2179nested preprocessor conditional.
2180
2181@samp{#elif} is treated like @samp{#else} followed by @samp{#if}, so the
2182function stops at them when going forward, but not when going backward.
2183
2184@item @kbd{M-x c-down-conditional-with-else}
2185@findex c-down-conditional-with-else
2186@findex down-conditional-with-else (c-)
2187A variety of @code{c-down-conditional} that also stops at @samp{#else}
2188lines. Normally those lines are ignored.
2189
2190@item @kbd{C-c C-p} (@code{c-backward-conditional})
2191@kindex C-c C-p
2192@findex c-backward-conditional
2193@findex backward-conditional (c-)
2194Move point back over a preprocessor conditional, leaving the mark
2195behind. A prefix argument acts as a repeat count. With a negative
2196argument, move forward.
2197
2198@item @kbd{C-c C-n} (@code{c-forward-conditional})
2199@kindex C-c C-n
2200@findex c-forward-conditional
2201@findex forward-conditional (c-)
2202Move point forward across a preprocessor conditional, leaving the mark
2203behind. A prefix argument acts as a repeat count. With a negative
2204argument, move backward.
2205
2206@item @kbd{M-a} (@code{c-beginning-of-statement})
2207@kindex M-a
2208@findex c-beginning-of-statement
2209@findex beginning-of-statement (c-)
2210Move point to the beginning of the innermost C statement. If point is
2211already at the beginning of a statement, move to the beginning of the
2212closest preceding statement, even if that means moving into a block (you
2213can use @kbd{C-M-b} to move over a balanced block). With prefix
2214argument @var{n}, move back @var{n} @minus{} 1 statements.
2215
2216If point is within or next to a comment or a string which spans more
2217than one line, this command moves by sentences instead of statements.
2218
2219When called from a program, this function takes three optional
2220arguments: the repetition count, a buffer position limit which is the
2221farthest back to search for the syntactic context, and a flag saying
2222whether to do sentence motion in or near comments and multiline strings.
2223
2224@item @kbd{M-e} (@code{c-end-of-statement})
2225@kindex M-e
2226@findex c-end-of-statement
2227@findex end-of-statement (c-)
2228Move point to the end of the innermost C statement. If point is at the
2229end of a statement, move to the end of the next statement, even if it's
2230inside a nested block (use @kbd{C-M-f} to move to the other side of the
2231block). With prefix argument @var{n}, move forward @var{n} @minus{} 1
2232statements.
2233
2234If point is within or next to a comment or a string which spans more
2235than one line, this command moves by sentences instead of statements.
2236
2237When called from a program, this function takes three optional
2238arguments: the repetition count, a buffer position limit which is the
2239farthest back to search for the syntactic context, and a flag saying
2240whether to do sentence motion in or near comments and multiline strings.
2241
2242@item @kbd{M-x c-forward-into-nomenclature}
2243@findex c-forward-into-nomenclature
2244@findex forward-into-nomenclature (c-)
2245A popular programming style, especially for object-oriented languages
2246such as C++ is to write symbols in a mixed case format, where the first
2247letter of each word is capitalized, and not separated by underscores.
2248e.g., @samp{SymbolsWithMixedCaseAndNoUnderlines}.
2249
2250This command moves point forward to next capitalized word. With prefix
2251argument @var{n}, move @var{n} times.
2252
2253@item @kbd{M-x c-backward-into-nomenclature}
2254@findex c-backward-into-nomenclature
2255@findex backward-into-nomenclature (c-)
2256Move point backward to beginning of the next capitalized
2257word. With prefix argument @var{n}, move @var{n} times. If
2258@var{n} is negative, move forward.
2259@end table 2156@end table
2157@end itemize
2260 2158
2261 2159Here is a summary of the different ways of writing your configuration
2262@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2160settings:
2263@node Other Commands, , Movement Commands, Commands
2264@comment node-name, next, previous, up
2265@section Other Commands
2266@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2267
2268Here are the various other commands that didn't fit anywhere else:
2269 2161
2270@table @asis 2162@table @asis
2271@item @kbd{C-c :} (@code{c-scope-operator}) 2163@item Top-level commands or the ``customization interface''
2272@kindex C-c : 2164Most simply, you can write @code{setq} and similar commands at the top
2273@findex c-scope-operator 2165level of your @file{.emacs} file. When you load a @ccmode{} buffer,
2274@findex scope-operator (c-) 2166it initializes its configuration from these global values (at least,
2275In C++, it is also sometimes desirable to insert the double-colon scope 2167for those settings you have given values to), so it makes sense to
2276operator without performing the electric behavior of colon insertion. 2168have these @code{setq} commands run @emph{before} @ccmode{} is first
2277@kbd{C-c :} does just this. 2169initialized---in particular, before any call to @code{desktop-read}
2278@end table 2170(@pxref{Saving Emacs Sessions,,, emacs, GNU Emacs Manual}). For
2279 2171example, you might set c-basic-offset thus:
2280@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2281@node Customizing Indentation, Syntactic Symbols, Commands, Top
2282@comment node-name, next, previous, up
2283@chapter Customizing Indentation
2284@cindex customization, indentation
2285@cindex indentation
2286@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2287
2288The context sensitive indentation is mainly controlled by the variable
2289@code{c-offsets-alist}:
2290
2291@defopt c-offsets-alist
2292@vindex offsets-alist (c-)
2293This special style variable contains the mappings between syntactic
2294symbols and the offsets to apply for those symbols. It's set at mode
2295initialization from a @emph{style} you may specify. Styles are
2296groupings of syntactic symbol offsets and other style variable values.
2297Most likely, you'll find that one of the predefined styles will suit
2298your needs. @xref{Styles}, for an explanation of how to set up named
2299styles.
2300
2301Only syntactic symbols not already bound on @code{c-offsets-alist} will
2302be set from styles. This means that any association you set on it, be
2303it before or after mode initialization, will not be changed. The
2304@code{c-offsets-alist} variable may therefore be used from e.g., the
2305Customization interface@footnote{Available in Emacs 20 and later, and
2306XEmacs 19.15 and later.} to easily change indentation offsets without
2307having to bother about styles. Initially @code{c-offsets-alist} is
2308empty, so that all syntactic symbols are set by the style system.
2309
2310The offset associated with any particular syntactic symbol can be an
2311integer, a function or lambda expression, a variable name, a vector, a
2312list, or one of the following special symbols: @code{+}, @code{-},
2313@code{++}, @code{--}, @code{*}, or @code{/}. The meaning of these
2314values are described in detail below.
2315@end defopt
2316
2317The special symbols describe an offset in multiples of the value of
2318@code{c-basic-offset}:
2319
2320@defopt c-basic-offset
2321@vindex basic-offset (c-)
2322Style variable that holds the basic offset between indentation levels.
2323@end defopt
2324
2325By defining a style's indentation in terms of @code{c-basic-offset},
2326you can change the amount of whitespace given to an indentation level
2327while maintaining the same basic shape of your code. Here are the
2328values that the special symbols correspond to:
2329
2330@table @code
2331@item +
2332@code{c-basic-offset} times 1
2333@item -
2334@code{c-basic-offset} times -1
2335@item ++
2336@code{c-basic-offset} times 2
2337@item --
2338@code{c-basic-offset} times -2
2339@item *
2340@code{c-basic-offset} times 0.5
2341@item /
2342@code{c-basic-offset} times -0.5
2343@end table
2344
2345@cindex indentation functions
2346
2347When a function is used as offset, it's called an @dfn{indentation
2348function}. Such functions are useful when more context than just the
2349syntactic symbol is needed to get the desired indentation.
2350@xref{Indentation Functions}, and @ref{Custom Indentation Functions},
2351for details about them.
2352
2353If the offset is a vector, its first element sets the absolute
2354indentation column, which will override any previous relative
2355indentation. It won't override additional relative indentation for
2356nested constructs, though.
2357
2358@vindex c-strict-syntax-p
2359@vindex strict-syntax-p (c-)
2360The offset can also be a list, in which case it is evaluated recursively
2361using the semantics described above. The first element of the list that
2362returns a non-@code{nil} value succeeds and the evaluation stops. If
2363none of the list elements return a non-@code{nil} value, then an offset
2364of 0 (zero) is used@footnote{There is however a variable
2365@code{c-strict-syntax-p} that, when set to non-@code{nil}, will cause an
2366error to be signaled in that case. It's now considered obsolete since
2367it doesn't work well with some of the alignment functions that now
2368returns @code{nil} instead of zero to be more usable in lists. You
2369should therefore leave @code{c-strict-syntax-p} set to @code{nil}.}.
2370
2371So, for example, because most of the default offsets are defined in
2372terms of @code{+}, @code{-}, and @code{0}, if you like the general
2373indentation style, but you use 4 spaces instead of 2 spaces per level,
2374you can probably achieve your style just by changing
2375@code{c-basic-offset} like so@footnote{You can try this interactively in
2376a C buffer by typing the text that appears in italics.}:
2377 2172
2378@example 2173@example
2379@emph{M-x set-variable RET} 2174(setq c-basic-offset 4)
2380Set variable: @emph{c-basic-offset RET}
2381Set c-basic-offset to value: @emph{4 RET}
2382@end example
2383
2384@noindent
2385This would change
2386
2387@example
2388@group
2389int add( int val, int incr, int doit )
2390@{
2391 if( doit )
2392 @{
2393 return( val + incr );
2394 @}
2395 return( val );
2396@}
2397@end group
2398@end example 2175@end example
2399 2176
2400@noindent 2177You can use the more user friendly Customization interface instead,
2401to 2178but this manual does not cover in detail how that works. To do this,
2179start by typing @kbd{M-x customize-group @key{RET} c @key{RET}}.
2180@xref{Easy Customization,,,@emacsman{}, @emacsmantitle{}}.
2181@c The following note really belongs in the Emacs manual.
2182Emacs normally writes the customizations at the end of your
2183@file{.emacs} file. If you use @code{desktop-read}, you should edit
2184your @file{.emacs} to place the call to @code{desktop-read} @emph{after}
2185the customizations.
2186
2187The first initialization of @ccmode{} puts a snapshot of the
2188configuration settings into the special style @code{user}.
2189@xref{Built-in Styles}.
2190
2191For basic use of Emacs, either of these ways of configuring is
2192adequate. However, the settings are then the same in all @ccmode{}
2193buffers and it can be clumsy to communicate them between programmers.
2194For more flexibility, you'll want to use one (or both) of @ccmode{}'s
2195more sophisticated facilities, hooks and styles.
2196
2197@item Hooks
2198An Emacs @dfn{hook} is a place to put Lisp functions that you want
2199Emacs to execute later in specific circumstances.
2200@xref{Hooks,,,@lispref{}, @lispreftitle{}}. @ccmode{} supplies a main
2201hook and a language-specific hook for each language it supports - any
2202functions you put onto these hooks get executed as the last part of a
2203buffer's initialization. Typically you put most of your customization
2204within the main hook, and use the language-specific hooks to vary the
2205customization settings between language modes. For example, if you
2206wanted different (non-standard) values of @code{c-basic-offset} in C
2207Mode and Java Mode buffers, you could do it like this:
2402 2208
2403@example 2209@example
2404@group 2210@group
2405int add( int val, int incr, int doit ) 2211(defun my-c-mode-hook ()
2406@{ 2212 (setq c-basic-offset 3))
2407 if( doit ) 2213(add-hook 'c-mode-hook 'my-c-mode-hook)
2408 @{
2409 return( val + incr );
2410 @}
2411 return( val );
2412@}
2413@end group
2414@end example
2415
2416To change indentation styles more radically, you will want to change the
2417offsets associated with other syntactic symbols. First, I'll show you
2418how to do that interactively, then I'll describe how to make changes to
2419your @file{.emacs} file so that your changes are more permanent.
2420
2421@menu
2422* Interactive Customization::
2423* Permanent Customization::
2424* Hooks::
2425* Styles::
2426* Advanced Customizations::
2427@end menu
2428
2429
2430@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2431@node Interactive Customization, Permanent Customization, , Customizing Indentation
2432@comment node-name, next, previous, up
2433@section Interactive Customization
2434@cindex customization, interactive
2435@cindex interactive customization
2436@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2437 2214
2438As an example of how to customize indentation, let's change the 2215(defun my-java-mode-hook ()
2439style of this example@footnote{In this and subsequent examples, the 2216 (setq c-basic-offset 6))
2440original code is formatted using the @samp{gnu} style unless otherwise 2217(add-hook 'java-mode-hook 'my-java-mode-hook)
2441indicated. @xref{Styles}.}:
2442
2443@example
2444@group
2445 1: int add( int val, int incr, int doit )
2446 2: @{
2447 3: if( doit )
2448 4: @{
2449 5: return( val + incr );
2450 6: @}
2451 7: return( val );
2452 8: @}
2453@end group 2218@end group
2454@end example 2219@end example
2455 2220
2456@noindent 2221See @ref{CC Hooks} for more details on the use of @ccmode{} hooks.
2457to:
2458 2222
2459@example 2223@item Styles
2460@group 2224A @ccmode{} @dfn{style} is a coherent collection of customizations
2461 1: int add( int val, int incr, int doit ) 2225with a name. At any time, exactly one style is active in each
2462 2: @{ 2226@ccmode{} buffer, either the one you have selected or a default.
2463 3: if( doit ) 2227@ccmode{} is delivered with several existing styles. Additionally,
2464 4: @{ 2228you can create your own styles, possibly based on these existing
2465 5: return( val + incr ); 2229styles. If you worked in a programming team called the ``Free
2466 6: @} 2230Group'', which had its own coding standards, you might well have this
2467 7: return( val ); 2231in your @file{.emacs} file:
2468 8: @}
2469@end group
2470@end example
2471
2472In other words, we want to change the indentation of braces that open a
2473block following a condition so that the braces line up under the
2474conditional, instead of being indented. Notice that the construct we
2475want to change starts on line 4. To change the indentation of a line,
2476we need to see which syntactic components affect the offset calculations
2477for that line. Hitting @kbd{C-c C-s} on line 4 yields:
2478 2232
2479@example 2233@example
2480((substatement-open 44)) 2234(setq c-default-style '((java-mode . "java")
2235 (awk-mode . "awk")
2236 (other . "free-group-style")))
2481@end example 2237@end example
2482 2238
2483@noindent 2239See @ref{Styles} for fuller details on using @ccmode{} styles and how
2484so we know that to change the offset of the open brace, we need to 2240to create them.
2485change the indentation for the @code{substatement-open} syntactic
2486symbol.
2487
2488To do this interactively, just hit @kbd{C-c C-o}. This prompts
2489you for the syntactic symbol to change, providing a reasonable default.
2490In this case, the default is @code{substatement-open}, which is just the
2491syntactic symbol we want to change!
2492 2241
2493After you hit return, @ccmode{} will then prompt you for the new 2242@item File Styles
2494offset value, with the old value as the default. The default in this 2243A @dfn{file style} is a rarely used variant of the ``style'' mechanism
2495case is @samp{+}, but we want no extra indentation so enter 2244described above, which applies to an individual source file. To use
2496@samp{0} and @kbd{RET}. This will associate the offset 0 with the 2245it, you set certain Emacs local variables in a special block at the
2497syntactic symbol @code{substatement-open}. 2246end of the source file. @xref{File Styles}.
2498 2247
2499To check your changes quickly, just hit @kbd{C-c C-q} 2248@item Hooks with Styles
2500(@code{c-indent-defun}) to reindent the entire function. The example 2249For ultimate flexibility, you can use hooks and styles together. For
2501should now look like: 2250example, if your team were developing a product which required a
2251Linux driver, you'd probably want to use the ``linux'' style for the
2252driver, and your own team's style for the rest of the code. You
2253could achieve this with code like this in your @file{.emacs}:
2502 2254
2503@example 2255@example
2504@group 2256@group
2505 1: int add( int val, int incr, int doit ) 2257(defun my-c-mode-hook ()
2506 2: @{ 2258 (c-set-style
2507 3: if( doit ) 2259 (if (and (buffer-file-name)
2508 4: @{ 2260 (string-match "/usr/src/linux" (buffer-file-name)))
2509 5: return( val + incr ); 2261 "linux"
2510 6: @} 2262 "free-group-style")))
2511 7: return( val ); 2263(add-hook 'c-mode-hook 'my-c-mode-hook)
2512 8: @}
2513@end group 2264@end group
2514@end example 2265@end example
2515 2266
2516Notice how just changing the open brace offset on line 4 is all we 2267In a programming team, a hook is a also a good place for each member
2517needed to do. Since the other affected lines are indented relative to 2268to put his own personal preferences. For example, you might be the
2518line 4, they are automatically indented the way you'd expect. For more 2269only person in your team who likes Auto-newline minor mode. You could
2519complicated examples, this may not always work. The general approach to 2270have it enabled by default by placing the following in your
2520take is to always start adjusting offsets for lines higher up in the 2271@file{.emacs}:
2521file, then reindent and see if any following lines need further
2522adjustments.
2523
2524@deffn Command c-set-offset symbol offset
2525@findex set-offset (c-)
2526@kindex C-c C-o
2527This is the command bound to @kbd{C-c C-o}. It provides a convenient
2528way to set offsets on @code{c-offsets-alist} both interactively (see
2529the example above) and from your mode hook.
2530
2531It takes two arguments when used programmatically: @var{symbol} is the
2532syntactic element symbol to change and @var{offset} is the new offset
2533for that syntactic element.
2534@end deffn
2535
2536
2537@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2538@node Permanent Customization, Hooks, Interactive Customization, Customizing Indentation
2539@comment node-name, next, previous, up
2540@section Permanent Customization
2541@cindex customization, permanent
2542@cindex permanent customization
2543@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2544
2545To make your changes permanent, you need to add some lisp code to your
2546@file{.emacs} file. @ccmode{} supports many different ways to be
2547configured, from the straightforward way by setting variables globally
2548in @file{.emacs} or in the Customization interface, to the complex and
2549precisely controlled way by using styles and hook functions.
2550
2551The simplest way of customizing @ccmode{} permanently is to set the
2552variables in your @file{.emacs} with @code{setq} and similar commands.
2553So to make a permanent setting of @code{substatement-open} to 0, add
2554this to the @file{.emacs} file:
2555 2272
2556@example 2273@example
2557@group 2274@group
2558(setq c-offsets-alist 2275(defun my-turn-on-auto-newline ()
2559 '((substatement-open . 0))) 2276 (c-toggle-auto-newline 1))
2277(add-hook 'c-mode-common-hook 'my-turn-on-auto-newline)
2560@end group 2278@end group
2561@end example 2279@end example
2280@end table
2562 2281
2563When @ccmode{} initializes a buffer, it will fill out 2282@menu
2564@code{c-offsets-alist} with the remaining syntactic symbols according to 2283* CC Hooks::
2565the style system. 2284* Style Variables::
2566 2285* Styles::
2567You can also use the more user friendly Customization interface, but 2286@end menu
2568this manual does not cover how that works.
2569
2570Variables set like this at the top level in @file{.emacs} take effect in
2571all @ccmode{} buffers, regardless of language. The indentation style
2572related variables, e.g., @code{c-offsets-alist}, that you don't set this
2573way get their value from the style system (@pxref{Styles}), and they
2574therefore depend on the setting of @code{c-default-style}. Note that if
2575you use Customize, this means that the greyed-out default values
2576presented there might not be the ones you actually get, since the actual
2577values depend on the style, which may very well be different for
2578different languages.
2579
2580If you want to make more advanced configurations, e.g., language-specific
2581customization, setting global variables isn't enough. For that you can
2582use the language hooks, see @ref{Hooks}, and/or the style system, see
2583@ref{Styles}.
2584
2585@defopt c-style-variables-are-local-p
2586@vindex style-variables-are-local-p (c-)
2587By default, all style variables are buffer local, so that different
2588buffers can have different style settings. If you only use one style
2589in all the files you edit you might want to share them between buffers
2590so that a change take effect in all buffers. That's done by setting
2591this variable to @code{nil}. The value takes effect when @ccmode{} is
2592activated in a buffer for the first time in the Emacs session, so you
2593typically set it in your @file{.emacs} file and then restart Emacs.
2594@end defopt
2595
2596 2287
2597@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2288@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2598@node Hooks, Styles, Permanent Customization, Customizing Indentation 2289@node CC Hooks, Style Variables, Config Basics, Config Basics
2599@comment node-name, next, previous, up 2290@comment node-name, next, previous, up
2600@section Hooks 2291@section Hooks
2601@cindex mode hooks 2292@cindex mode hooks
2602@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2293@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2603 2294@c The node name is "CC Hooks" rather than "Hooks" because of a bug in
2604@ccmode{} provides several hooks that you can use to customize the mode 2295@c some older versions of Info, e.g. the info.el in GNU Emacs 21.3.
2605according to your coding style. Each language mode has its own hook, 2296@c If you go to "Config Basics" and hit <CR> on the xref to "CC
2606adhering to standard Emacs major mode conventions. There is also one 2297@c Hooks" the function Info-follow-reference searches for "*Note: CC
2607general hook and one package initialization hook: 2298@c Hooks" from the beginning of the page. If this node were instead
2299@c named "Hooks", that search would spuriously find "*Note:
2300@c Hooks(elisp)" and go to the wrong node.
2301
2302@ccmode{} provides several hooks that you can use to customize the
2303mode for your coding style. The main hook is
2304@code{c-mode-common-hook}; typically, you'll put the bulk of your
2305customizations here. In addition, each language mode has its own
2306hook, allowing you to fine tune your settings individually for the
2307different @ccmode{} languages, and there is a package initialization
2308hook. Finally, there is @code{c-special-indent-hook}, which enables
2309you to solve anomalous indentation problems. It is described in
2310@ref{Other Indentation}, not here. All these hooks adhere to the
2311standard Emacs conventions.
2312
2313When you open a buffer, @ccmode{} first initializes it with the
2314currently active style (@pxref{Styles}). Then it calls
2315@code{c-mode-common-hook}, and finally it calls the language-specific
2316hook. Thus, any style settings done in these hooks will override
2317those set by @code{c-default-style}.
2608 2318
2609@defvar c-initialization-hook 2319@defvar c-initialization-hook
2610@vindex initialization-hook (c-) 2320@vindex initialization-hook (c-)
2611Hook run only once per Emacs session, when @ccmode{} is initialized. 2321Hook run only once per Emacs session, when @ccmode{} is initialized.
2322This is a good place to change key bindings (or add new ones) in any
2323of the @ccmode{} key maps. @xref{Sample .emacs File}.
2612@end defvar 2324@end defvar
2613 2325
2614@defvar c-mode-common-hook 2326@defvar c-mode-common-hook
@@ -2628,12 +2340,10 @@ The language specific mode hooks. The appropriate one is run as the
2628last thing when you enter that language mode. 2340last thing when you enter that language mode.
2629@end defvar 2341@end defvar
2630 2342
2631Note that all the language-specific mode setup that CC Mode does is done 2343Although these hooks are variables defined in @ccmode{}, you can give
2632prior to both @code{c-mode-common-hook} and the language specific hook. 2344them values before @ccmode{}'s code is loaded - indeed, this is the
2633That includes installing the indentation style, which can be mode 2345only way to use @code{c-initialization-hook}. Their values aren't
2634specific (and also is by default for Java mode). Thus, any style 2346overwritten when @ccmode{} gets loaded.
2635settings done in @code{c-mode-common-hook} will override whatever
2636language-specific style is chosen by @code{c-default-style}.
2637 2347
2638Here's a simplified example of what you can add to your @file{.emacs} 2348Here's a simplified example of what you can add to your @file{.emacs}
2639file to do things whenever any @ccmode{} language is edited. See the 2349file to do things whenever any @ccmode{} language is edited. See the
@@ -2649,32 +2359,25 @@ file.
2649(add-hook 'c-mode-common-hook 'my-c-mode-common-hook) 2359(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
2650@end example 2360@end example
2651 2361
2652
2653@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2362@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2654@node Styles, Advanced Customizations, Hooks, Customizing Indentation 2363@node Style Variables, Styles, CC Hooks, Config Basics
2655@comment node-name, next, previous, up 2364@comment node-name, next, previous, up
2656@section Styles 2365@section Style Variables
2657@cindex styles 2366@cindex styles
2658@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2367@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2659 2368
2660Most people only need to edit code formatted in just a few well-defined
2661and consistent styles. For example, their organization might impose a
2662``blessed'' style that all its programmers must conform to. Similarly,
2663people who work on GNU software will have to use the GNU coding style.
2664Some shops are more lenient, allowing a variety of coding styles, and as
2665programmers come and go, there could be a number of styles in use. For
2666this reason, @ccmode{} makes it convenient for you to set up logical
2667groupings of customizations called @dfn{styles}, associate a single name
2668for any particular style, and pretty easily start editing new or
2669existing code using these styles.
2670
2671@cindex style variables 2369@cindex style variables
2672The variables that the style system affect are called @dfn{style 2370The variables that @ccmode{}'s style system control are called
2673variables}. They are handled specially in several ways: 2371@dfn{style variables}. Note that style variables are ordinary Lisp
2372variables, which the style system initializes; you can change their
2373values at any time (e.g. in a hook function). The style system can
2374also also set other variables, to some extent. @xref{Styles}.
2375
2376@dfn{Style variables} are handled specially in several ways:
2674 2377
2675@itemize @bullet 2378@itemize @bullet
2676@item 2379@item
2677Style variables are by default buffer local variables. However, they 2380Style variables are by default buffer-local variables. However, they
2678can instead be made global by setting 2381can instead be made global by setting
2679@code{c-style-variables-are-local-p} to @code{nil} before @ccmode{} is 2382@code{c-style-variables-are-local-p} to @code{nil} before @ccmode{} is
2680initialized. 2383initialized.
@@ -2682,72 +2385,103 @@ initialized.
2682@item 2385@item
2683@vindex c-old-style-variable-behavior 2386@vindex c-old-style-variable-behavior
2684@vindex old-style-variable-behavior (c-) 2387@vindex old-style-variable-behavior (c-)
2685The default value of any style variable (with two exceptions --- see 2388The default global binding of any style variable (with two exceptions
2686below) is the special symbol @code{set-from-style}. Variables that are 2389- see below) is the special symbol @code{set-from-style}. When the
2687still set to that symbol when a @ccmode{} buffer is initialized will be 2390style system initializes a buffer-local copy of a style variable for a
2688set according to the current style, otherwise they will keep their 2391@ccmode{} buffer, if its global binding is still that symbol then it
2689current value@footnote{This is a big change from versions of @ccmode{} 2392will be set from the current style. Otherwise it will retain its
2690earlier than 5.26, where such settings would get overridden by the style 2393global default@footnote{This is a big change from versions of
2691system unless special precautions were taken. That was changed since it 2394@ccmode{} earlier than 5.26, where such settings would get overridden
2692was counterintuitive and confusing, especially to novice users. If your 2395by the style system unless special precautions were taken. That was
2693configuration depends on the old overriding behavior, you can set the 2396changed since it was counterintuitive and confusing, especially to
2694variable @code{c-old-style-variable-behavior} to non-@code{nil}.}. 2397novice users. If your configuration depends on the old overriding
2695 2398behavior, you can set the variable
2696Note that when we talk about the ``default value'' for a style variable, 2399@code{c-old-style-variable-behavior} to non-@code{nil}.}. This
2697we don't mean the @code{set-from-style} symbol that all style variables 2400``otherwise'' happens, for example, when you've set the variable with
2698are set to initially, but instead the value it will get at mode 2401@code{setq} at the top level of your @file{.emacs} (@pxref{Config
2699initialization when neither a style nor a global setting has set its 2402Basics}).
2700value.
2701
2702The style variable @code{c-offsets-alist} is handled a little
2703differently from the other style variables. It's an association list,
2704and is thus by default set to the empty list, @code{nil}. When the
2705style system is initialized, any syntactic symbols already on it are
2706kept --- only the missing ones are filled in from the chosen style.
2707 2403
2404@item
2405The style variable @code{c-offsets-alist} (@pxref{c-offsets-alist}) is
2406an association list with an element for each syntactic symbol. It's
2407handled a little differently from the other style variables. It's
2408default global binding is the empty list @code{nil}, rather than
2409@code{set-from-style}. Before the style system is initialized, you
2410can add individual elements to @code{c-offsets-alist} by calling
2411@code{c-set-offset}(@pxref{c-offsets-alist}) just like you would set
2412other style variables with @code{setq}. Those elements will then
2413prevail when the style system later initializes a buffer-local copy of
2414@code{c-offsets-alist}.
2415
2416@item
2708The style variable @code{c-special-indent-hook} is also handled in a 2417The style variable @code{c-special-indent-hook} is also handled in a
2709special way. Styles may only add more functions on this hook, so the 2418special way. Styles can only add functions to this hook, not remove
2710global settings on it are always preserved@footnote{This did not change 2419them, so any global settings you put on it are always
2711in version 5.26.}. 2420preserved@footnote{This did not change in version 5.26.}. The value
2421you give this variable in a style definition can be either a function
2422or a list of functions.
2712 2423
2713@item 2424@item
2714The global settings of style variables get captured in the special 2425The global bindings of the style variables get captured in the special
2715@code{user} style, which is used as the base for all the other styles. 2426@code{user} style when the style system is first initialized.
2716@xref{Built-in Styles}, for details. 2427@xref{Built-in Styles}, for details.
2717@end itemize 2428@end itemize
2718 2429
2719The style variables are: 2430The style variables are:@*
2720@code{c-basic-offset}, 2431@code{c-indent-comment-alist},
2721@code{c-comment-only-line-offset}, 2432@code{c-indent-comments-syntactically-p} (@pxref{Indentation
2722@code{c-block-comment-prefix}, 2433Commands});@*
2723@code{c-comment-prefix-regexp}, 2434@code{c-doc-comment-style} (@pxref{Doc Comments});@*
2724@code{c-cleanup-list}, 2435@code{c-block-comment-prefix}, @code{c-comment-prefix-regexp}
2725@code{c-hanging-braces-alist}, 2436(@pxref{Custom Filling and Breaking});@*
2726@code{c-hanging-colons-alist}, 2437@code{c-hanging-braces-alist} (@pxref{Hanging Braces});@*
2727@code{c-hanging-semi&comma-criteria}, 2438@code{c-hanging-colons-alist} (@pxref{Hanging Colons});@*
2728@code{c-backslash-column}, 2439@code{c-hanging-semi&comma-criteria} (@pxref{Hanging Semicolons and
2729@code{c-backslash-max-column}, 2440Commas});@*
2730@code{c-special-indent-hook}, 2441@code{c-cleanup-list} (@pxref{Clean-ups});@*
2731@code{c-label-minimum-indentation}, and 2442@code{c-basic-offset} (@pxref{Customizing Indentation});@*
2732@code{c-offsets-alist}. 2443@code{c-offsets-alist} (@pxref{c-offsets-alist});@*
2444@code{c-comment-only-line-offset} (@pxref{Comment Line-Up});@*
2445@code{c-special-indent-hook}, @code{c-label-minimum-indentation}
2446(@pxref{Other Indentation});@*
2447@code{c-backslash-column}, @code{c-backslash-max-column}
2448(@pxref{Custom Macros}).
2449
2450@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2451@node Styles, , Style Variables, Config Basics
2452@comment node-name, next, previous, up
2453@section Styles
2454@cindex styles
2455@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2456
2457Most people only need to edit code formatted in just a few well-defined
2458and consistent styles. For example, their organization might impose a
2459``blessed'' style that all its programmers must conform to. Similarly,
2460people who work on GNU software will have to use the GNU coding style.
2461Some shops are more lenient, allowing a variety of coding styles, and as
2462programmers come and go, there could be a number of styles in use. For
2463this reason, @ccmode{} makes it convenient for you to set up logical
2464groupings of customizations called @dfn{styles}, associate a single name
2465for any particular style, and pretty easily start editing new or
2466existing code using these styles.
2733 2467
2734@menu 2468@menu
2735* Built-in Styles:: 2469* Built-in Styles::
2736* Choosing a Style:: 2470* Choosing a Style::
2737* Adding Styles:: 2471* Adding Styles::
2738* File Styles:: 2472* File Styles::
2739@end menu 2473@end menu
2740 2474
2741 2475
2742@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2476@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2743@node Built-in Styles, Choosing a Style, , Styles 2477@node Built-in Styles, Choosing a Style, Styles, Styles
2744@comment node-name, next, previous, up 2478@comment node-name, next, previous, up
2745@subsection Built-in Styles 2479@subsection Built-in Styles
2746@cindex styles, built-in 2480@cindex styles, built-in
2747@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2481@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2748 2482
2749If you're lucky, one of @ccmode{}'s built-in styles might be just 2483If you're lucky, one of @ccmode{}'s built-in styles might be just
2750what you're looking for. These include: 2484what you're looking for. These are:
2751 2485
2752@table @code 2486@table @code
2753@item gnu 2487@item gnu
@@ -2779,6 +2513,7 @@ and Recommendations,'' Erik Nyquist and Mats Henricson,
2779Ellemtel@footnote{This document is available at 2513Ellemtel@footnote{This document is available at
2780@uref{http://www.doc.ic.ac.uk/lab/cplus/c++.rules/} among other 2514@uref{http://www.doc.ic.ac.uk/lab/cplus/c++.rules/} among other
2781places.}. 2515places.}.
2516@c N.B. This URL was still valid at 2005/8/28 (ACM).
2782 2517
2783@item linux 2518@item linux
2784@cindex Linux style 2519@cindex Linux style
@@ -2796,16 +2531,21 @@ The style for editing Java code. Note that the default
2796value for @code{c-default-style} installs this style when you enter 2531value for @code{c-default-style} installs this style when you enter
2797@code{java-mode}. 2532@code{java-mode}.
2798 2533
2534@item awk
2535@cindex AWK style
2536The style for editing AWK code. Note that the default value for
2537@code{c-default-style} installs this style when you enter
2538@code{awk-mode}.
2539
2799@item user 2540@item user
2800@cindex User style 2541@cindex User style
2801This is a special style for several reasons. First, the 2542This is a special style created by you. It consists of the factory
2802@ccmode{} customizations you do by using either the Customization 2543defaults for all the style variables as modified by the customizations
2803interface, or by writing @code{setq}'s at the top level of your 2544you do either with the Customization interface or by writing
2804@file{.emacs} file, will be captured in the @code{user} style. Also, 2545@code{setq}s and @code{c-set-offset}s at the top level of your
2805all other styles implicitly inherit their settings from @code{user} 2546@file{.emacs} file (@pxref{Config Basics}). The style system creates
2806style. This means that for any styles you add via @code{c-add-style} 2547this style as part of its initialization and doesn't modify it
2807(@pxref{Adding Styles}) you need only define the differences between 2548afterwards.
2808your new style and @code{user} style.
2809@end table 2549@end table
2810 2550
2811 2551
@@ -2824,24 +2564,25 @@ Switch to the specified style in the current buffer. Use
2824interactively like this: 2564interactively like this:
2825 2565
2826@example 2566@example
2827@kbd{C-c . @var{style-name} RET} 2567@kbd{C-c . @var{style-name} @key{RET}}
2828@end example 2568@end example
2829 2569
2830Note that all style names are case insensitive, even the ones you 2570You can use the @key{TAB} in the normal way to do completion on the
2831define. 2571style name. Note that all style names are case insensitive, even the
2572ones you define yourself.
2832 2573
2833Setting a style in this way does @emph{not} automatically reindent your 2574Setting a style in this way does @emph{not} automatically reindent your
2834file. For commands that you can use to view the effect of your changes, 2575file. For commands that you can use to view the effect of your changes,
2835see @ref{Commands}. 2576see @ref{Indentation Commands} and @ref{Filling and Breaking}.
2836@end deffn 2577@end deffn
2837 2578
2838The default style in all newly created buffers is @code{gnu}, except 2579The default style in all newly created buffers is @code{gnu}, except
2839in Java mode where it's @code{java}. Although the @code{user} style 2580in Java and AWK modes where it's @code{java} and @code{awk}.
2840is not the default style, any style variable settings you do with the 2581
2841Customization interface or on the top level in your @file{.emacs} file 2582Remember that if you set a style variable with the Customization
2842will by default override the style system, so you don't need to set 2583interface or at the top level of your @file{.emacs} file before the
2843@code{c-default-style} to @code{user} to see the effect of such 2584style system is initialised (@pxref{Config Basics}), this setting will
2844settings. 2585override the one that the style system would have given the variable.
2845 2586
2846@defopt c-default-style 2587@defopt c-default-style
2847@vindex default-style (c-) 2588@vindex default-style (c-)
@@ -2865,13 +2606,15 @@ looked up. If it's found then the associated style is used.
2865 2606
2866@item 2607@item
2867If @samp{other} is not found then the @samp{gnu} style is used. 2608If @samp{other} is not found then the @samp{gnu} style is used.
2609@end enumerate
2868 2610
2869@item
2870In all cases, the style described in @code{c-default-style} is installed 2611In all cases, the style described in @code{c-default-style} is installed
2871@emph{before} the language hooks are run, so you can always override 2612@emph{before} the language hooks are run, so you can always override
2872this setting by including an explicit call to @code{c-set-style} in your 2613this setting by including an explicit call to @code{c-set-style} in your
2873language mode hook, or in @code{c-mode-common-hook}. 2614language mode hook, or in @code{c-mode-common-hook}.
2874@end enumerate 2615
2616The standard value of @code{c-default-style} is @w{@code{((java-mode
2617. "java") (awk-mode . "awk") (other . "gnu"))}}.
2875@end defopt 2618@end defopt
2876 2619
2877@defvar c-indentation-style 2620@defvar c-indentation-style
@@ -2891,49 +2634,55 @@ If none of the built-in styles is appropriate, you'll probably want to
2891create a new @dfn{style definition}, possibly based on an existing 2634create a new @dfn{style definition}, possibly based on an existing
2892style. To do this, put the new style's settings into a list with the 2635style. To do this, put the new style's settings into a list with the
2893following format - the list can then be passed as an argument to the 2636following format - the list can then be passed as an argument to the
2894function @code{c-add-style}: 2637function @code{c-add-style}. You can see an example of a style
2638definition in @ref{Sample .emacs File}.
2895 2639
2896@cindex style definition 2640@cindex style definition
2897@defvr {List} style definition 2641@c @defvr {List} style definition
2642@table @asis
2643@item Structure of a Style Definition List
2898([@var{base-style}] [(@var{variable} . @var{value}) @dots{}]) 2644([@var{base-style}] [(@var{variable} . @var{value}) @dots{}])
2899 2645
2900Optional @var{base-style}, if present, must be a string which is the 2646Optional @var{base-style}, if present, must be a string which is the
2901name of the @dfn{base style} from which this style inherits. At most 2647name of the @dfn{base style} from which this style inherits. At most
2902one @var{base-style} is allowed in a style definition. If 2648one @var{base-style} is allowed in a style definition. If
2903@var{base-style} is not specified, the style inherits from a table of 2649@var{base-style} is not specified, the style inherits from the table
2904default values@footnote{This table is stored internally in the 2650of factory default values@footnote{This table is stored internally in
2905variable c-fallback-style. It is computed during the initialisation 2651the variable c-fallback-style.} instead. All styles eventually
2906of @ccmode{} from the factory defaults of the style variables and any 2652inherit from this internal table. Style loops generate errors. The
2907global values they may have been given since starting Emacs.} instead. 2653list of pre-existing styles can be seen in @ref{Built-in Styles}.
2908All styles eventually inherit from this internal table. Style loops
2909generate errors. The list of pre-existing styles can be seen in
2910@ref{Built-in Styles}.
2911 2654
2912The dotted pairs (@var{variable} . @var{value}) each consist of a 2655The dotted pairs (@var{variable} . @var{value}) each consist of a
2913variable and the value it is to be set to when the style is later 2656variable and the value it is to be set to when the style is later
2914activated.@footnote{In certain circumstances, this value can get 2657activated.@footnote{Note that if the variable has been given a value
2915overridden by another value.} The variable can be either a @ccmode{} 2658by the Customization interface or a @code{setq} at the top level of
2916style variable or an arbitrary Emacs variable. In the latter case, it 2659your @file{.emacs}, this value will override the one the style system
2917is @emph{not} made buffer local by the @ccmode{} style system. 2660tries to give it. @xref{Config Basics}.} The variable can be either a
2918@end defvr 2661@ccmode{} style variable or an arbitrary Emacs variable. In the
2662latter case, it is @emph{not} made buffer-local by the @ccmode{} style
2663system.
2664@c @end defvr
2919 2665
2920Two variables are treated specially in the dotted pair list: 2666Two variables are treated specially in the dotted pair list:
2921 2667
2922@table @code 2668@table @code
2923@item c-offsets-alist 2669@item c-offsets-alist
2924The value is in turn a dotted list on the form 2670The value is in turn a list of dotted pairs of the form
2925 2671
2926(@var{syntactic-symbol} . @var{offset}) 2672@example
2673(@r{@var{syntactic-symbol}} . @r{@var{offset}})
2674@end example
2927 2675
2928as described in @ref{Customizing Indentation}. These are passed to 2676as described in @ref{c-offsets-alist}. These are passed to
2929@code{c-set-offset} so there is no need to set every syntactic symbol in 2677@code{c-set-offset} so there is no need to set every syntactic symbol
2930your style, only those that are different from the inherited style. 2678in your style, only those that are different from the inherited style.
2931 2679
2932@item c-special-indent-hook 2680@item c-special-indent-hook
2933The value is added to @code{c-special-indent-hook} using 2681The value is added to @code{c-special-indent-hook} using
2934@code{add-hook}, so any functions already on it are kept. If the value 2682@code{add-hook}, so any functions already on it are kept. If the value
2935is a list, each element of the list is added with @code{add-hook}. 2683is a list, each element of the list is added with @code{add-hook}.
2936@end table 2684@end table
2685@end table
2937 2686
2938Styles are kept in the @code{c-style-alist} variable, but you 2687Styles are kept in the @code{c-style-alist} variable, but you
2939should never modify this variable directly. Instead, @ccmode{} 2688should never modify this variable directly. Instead, @ccmode{}
@@ -2946,9 +2695,12 @@ Add or update a style called @var{stylename}, a string.
2946above. If @var{stylename} already exists in @code{c-style-alist} then 2695above. If @var{stylename} already exists in @code{c-style-alist} then
2947it is replaced by @var{description}. (Note, this replacement is 2696it is replaced by @var{description}. (Note, this replacement is
2948total. The old style is @emph{not} merged into the new one.) 2697total. The old style is @emph{not} merged into the new one.)
2949Otherwise, a new style is added. If the optional @var{set-p} is 2698Otherwise, a new style is added.
2950non-@code{nil} then the new style is applied to the current buffer as 2699
2951well. 2700If the optional @var{set-p} is non-@code{nil} then the new style is
2701applied to the current buffer as well. The use of this facility is
2702deprecated and it might be removed from @ccmode{} in a future release.
2703You should use @code{c-set-style} instead.
2952 2704
2953The sample @file{.emacs} file provides a concrete example of how a new 2705The sample @file{.emacs} file provides a concrete example of how a new
2954style can be added and automatically set. @xref{Sample .emacs File}. 2706style can be added and automatically set. @xref{Sample .emacs File}.
@@ -2962,7 +2714,7 @@ should not be changed directly; use @code{c-add-style} instead.
2962 2714
2963 2715
2964@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2716@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2965@node File Styles, , Adding Styles, Styles 2717@node File Styles, , Adding Styles, Styles
2966@comment node-name, next, previous, up 2718@comment node-name, next, previous, up
2967@subsection File Styles 2719@subsection File Styles
2968@cindex styles, file local 2720@cindex styles, file local
@@ -2970,175 +2722,513 @@ should not be changed directly; use @code{c-add-style} instead.
2970 2722
2971@cindex file local variables 2723@cindex file local variables
2972 2724
2973The Emacs manual describes how you can customize certain variables on 2725The Emacs manual describes how you can customize certain variables on a
2974a per-file basis by including a @dfn{file local variable} block at the 2726per-file basis by including a @dfn{file local variable} block at the end
2975end of the file. So far, you've only seen a functional interface to 2727of the file (@pxref{File Variables,, Local Variables in Files, @emacsman{},
2976@ccmode{} customization, which can't be used there. @ccmode{} 2728@emacsmantitle{}}).
2977provides two variables allow customization of the indentation style on 2729
2978a per-file basis: 2730So far, you've only seen a functional interface for setting styles in
2731@ccmode{}, and this can't be used here. @ccmode{} fills the gap by
2732providing two variables for use in a file's local variable list.
2733Don't use them anywhere else! These allow you to customize the style
2734on a per-file basis:
2979 2735
2980@defvar c-file-style 2736@defvar c-file-style
2981@vindex file-style (c-) 2737@vindex file-style (c-)
2982This variable can be set to a style name string. When the file is 2738Set this variable to a style name string in the Local Variables list.
2983visited, @ccmode{} will automatically set the file's style to this 2739From now on, when you visit the file, @ccmode{} will automatically set
2984one using @code{c-set-style}. 2740the file's style to this one using @code{c-set-style}.
2985@end defvar 2741@end defvar
2986 2742
2987@defvar c-file-offsets 2743@defvar c-file-offsets
2988@vindex file-offsets (c-) 2744@vindex file-offsets (c-)
2989This variable takes an association list similar to what is allowed in 2745Set this variable (in the Local Variables list) to an association list
2990@code{c-offsets-alist}. When the file is visited, @ccmode{} will 2746of the same format as @code{c-offsets-alist}. From now on, when you
2991automatically institute these offsets using @code{c-set-offset}. 2747visit the file, @ccmode{} will automatically institute these offsets
2748using @code{c-set-offset}.
2992@end defvar 2749@end defvar
2993 2750
2994Note that file style settings (i.e., @code{c-file-style}) are applied 2751Note that file style settings (i.e. @code{c-file-style}) are applied
2995before file offset settings (i.e., @code{c-file-offsets}). Also, if 2752before file offset settings
2996either of these are set in a file's local variable section, all the 2753(i.e. @code{c-file-offsets})@footnote{Also, if either of these are set
2997style variable values are made local to that buffer. 2754in a file's local variable section, all the style variable values are
2998 2755made local to that buffer, even if
2756@code{c-style-variables-are-local-p} is @code{nil}. Since this
2757variable is virtually always non-@code{nil} anyhow, you're unlikely to
2758notice this effect.}.
2759
2760If you set any variables, including style variables, by the file local
2761variables mechanism, these settings take priority over all other
2762settings, even those in your mode hooks (@pxref{CC Hooks}). If you
2763use @code{c-file-style} or @code{c-file-offsets} and also explicitly
2764set a style variable in a local variable block, the explicit setting
2765will take priority.
2999 2766
3000@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2767@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3001@node Advanced Customizations, , Styles, Customizing Indentation 2768@node Custom Filling and Breaking, Custom Auto-newlines, Config Basics, Top
3002@comment node-name, next, previous, up 2769@comment node-name, next, previous, up
3003@section Advanced Customizations 2770@chapter Customizing Filling and Line Breaking
3004@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2771@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3005 2772
3006For most users, @ccmode{} will support their coding styles with very 2773Since there's a lot of normal text in comments and string literals,
3007little need for more advanced customizations. Usually, one of the 2774@ccmode{} provides features to edit these like in text mode. It does
3008standard styles (@pxref{Built-in Styles}) will do the trick. At most, 2775this by hooking in on the different line breaking functions and tuning
3009perhaps one of the syntactic symbol offsets will need to be tweaked 2776relevant variables as necessary.
3010slightly, or maybe @code{c-basic-offset} will need to be changed.
3011However, some styles require a more flexible framework for
3012customization, and one of the real strengths of @ccmode{} is that the
3013syntactic analysis model provides just such a framework. This allows
3014you to implement custom indentation calculations for situations not
3015handled by the mode directly.
3016 2777
3017@menu 2778@vindex c-comment-prefix-regexp
3018* Custom Indentation Functions:: 2779@vindex comment-prefix-regexp (c-)
3019* Custom Brace and Colon Hanging:: 2780@cindex comment line prefix
3020* Customizing Semicolons and Commas:: 2781@vindex comment-start
3021* Other Special Indentations:: 2782@vindex comment-end
3022@end menu 2783@vindex comment-start-skip
2784@vindex paragraph-start
2785@vindex paragraph-separate
2786@vindex paragraph-ignore-fill-prefix
2787@vindex adaptive-fill-mode
2788@vindex adaptive-fill-regexp
2789@vindex adaptive-fill-first-line-regexp
2790To make Emacs recognize comments and treat text in them as normal
2791paragraphs, @ccmode{} makes several standard
2792variables@footnote{@code{comment-start}, @code{comment-end},
2793@code{comment-start-skip}, @code{paragraph-start},
2794@code{paragraph-separate}, @code{paragraph-ignore-fill-prefix},
2795@code{adaptive-fill-mode}, @code{adaptive-fill-regexp}, and
2796@code{adaptive-fill-first-line-regexp}.} buffer-local and modifies them
2797according to the language syntax and the comment line prefix.
2798
2799@defopt c-comment-prefix-regexp
2800@vindex comment-prefix-regexp (c-)
2801This style variable contains the regexp used to recognize the
2802@dfn{comment line prefix}, which is the line decoration that starts
2803every line in a comment. The variable is either the comment line
2804prefix itself, or (more usually) an association list with different
2805values for different languages. The symbol for the major mode is
2806looked up in the alist to get the regexp for the language, and if it
2807isn't found then the special symbol @samp{other} is looked up instead.
2808
2809When a comment line gets divided by @kbd{M-j} or the like, @ccmode{}
2810inserts the comment line prefix from a neighbouring line at the start
2811of the new line. The default value of c-comment-prefix-regexp is
2812@samp{//+\\|\\**}, which matches C++ style line comments like
2813
2814@example
2815// blah blah
2816@end example
2817
2818@noindent
2819with two or more slashes in front of them, and the second and
2820subsequent lines of C style block comments like
2821
2822@example
2823@group
2824/*
2825 * blah blah
2826 */
2827@end group
2828@end example
2829
2830@noindent
2831with zero or more stars at the beginning of every line. If you change
2832this variable, please make sure it still matches the comment starter
2833(i.e. @code{//}) of line comments @emph{and} the line prefix inside
2834block comments.
2835
2836@findex c-setup-paragraph-variables
2837@findex setup-paragraph-variables (c-)
2838Also note that since @ccmode{} uses the value of
2839@code{c-comment-prefix-regexp} to set up several other variables at
2840mode initialization, there won't be any effect if you just change it
2841inside a @ccmode{} buffer. You need to call the command
2842@code{c-setup-paragraph-variables} too, to update those other
2843variables. That's also the case if you modify
2844@code{c-comment-prefix-regexp} in a mode hook, since @ccmode{} will
2845already have set up these variables before calling the hook.
2846@end defopt
2847
2848In comments, @ccmode{} uses @code{c-comment-prefix-regexp} to adapt
2849the line prefix from the other lines in the comment.
2850
2851@vindex adaptive-fill-mode
2852@cindex Adaptive Fill mode
2853@ccmode{} uses adaptive fill mode (@pxref{Adaptive Fill,,, emacs, GNU
2854Emacs Manual}) to make Emacs correctly keep the line prefix when
2855filling paragraphs. That also makes Emacs preserve the text
2856indentation @emph{inside} the comment line prefix. E.g. in the
2857following comment, both paragraphs will be filled with the left
2858margins of the texts kept intact:
2859
2860@example
2861@group
2862/* Make a balanced b-tree of the nodes in the incoming
2863 * stream. But, to quote the famous words of Donald E.
2864 * Knuth,
2865 *
2866 * Beware of bugs in the above code; I have only
2867 * proved it correct, not tried it.
2868 */
2869@end group
2870@end example
2871
2872@findex c-setup-filladapt
2873@findex setup-filladapt (c-)
2874@findex filladapt-mode
2875@vindex filladapt-mode
2876@cindex Filladapt mode
2877It's also possible to use other adaptive filling packages, notably Kyle
2878E. Jones' Filladapt package@footnote{It's available from
2879@uref{http://www.wonderworks.com/}. As of version 2.12, it does however
2880lack a feature that makes it work suboptimally when
2881@code{c-comment-prefix-regexp} matches the empty string (which it does
2882by default). A patch for that is available from
2883@uref{http://cc-mode.sourceforge.net/,, the CC Mode web site}.},
2884@c 2005/11/22: The above is still believed to be the case.
2885which handles things like bulleted lists nicely. There's a convenience
2886function @code{c-setup-filladapt} that tunes the relevant variables in
2887Filladapt for use in @ccmode{}. Call it from a mode hook, e.g. with
2888something like this in your @file{.emacs}:
2889
2890@example
2891(defun my-c-mode-common-hook ()
2892 (c-setup-filladapt)
2893 (filladapt-mode 1))
2894(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
2895@end example
2896
2897@defopt c-block-comment-prefix
2898@vindex block-comment-prefix (c-)
2899@vindex c-comment-continuation-stars
2900@vindex comment-continuation-stars (c-)
2901Normally the comment line prefix inserted for a new line inside a
2902comment is deduced from other lines in it. However there's one
2903situation when there's no hint about what the prefix should look like,
2904namely when a block comment is broken for the first time. This style
2905variable@footnote{In versions before 5.26, this variable was called
2906@code{c-comment-continuation-stars}. As a compatibility measure,
2907@ccmode{} still uses the value on that variable if it's set.} is used
2908then as the comment prefix. It defaults to @samp{*
2909}@footnote{Actually, this default setting of
2910@code{c-block-comment-prefix} typically gets overriden by the default
2911style @code{gnu}, which sets it to blank. You can see the line
2912splitting effect described here by setting a different style,
2913e.g. @code{k&r} @xref{Choosing a Style}.}, which makes a comment
2914
2915@example
2916/* Got O(n^2) here, which is a Bad Thing. */
2917@end example
2918
2919@noindent
2920break into
2921
2922@example
2923@group
2924/* Got O(n^2) here, which
2925 * is a Bad Thing. */
2926@end group
2927@end example
2928
2929Note that it won't work to adjust the indentation by putting leading
2930spaces in @code{c-block-comment-prefix}, since @ccmode{} still uses the
2931normal indentation engine to indent the line. Thus, the right way to
2932fix the indentation is by customizing the @code{c} syntactic symbol. It
2933defaults to @code{c-lineup-C-comments}, which handles the indentation of
2934most common comment styles, see @ref{Line-Up Functions}.
2935@end defopt
2936
2937@defopt c-ignore-auto-fill
2938@vindex ignore-auto-fill (c-)
2939When auto fill mode is enabled, @ccmode{} can selectively ignore it
2940depending on the context the line break would occur in, e.g. to never
2941break a line automatically inside a string literal. This variable
2942takes a list of symbols for the different contexts where auto-filling
2943never should occur:
2944
2945@table @code
2946@item string
2947Inside a string or character literal.
2948@item c
2949Inside a C style block comment.
2950@item c++
2951Inside a C++ style line comment.
2952@item cpp
2953Inside a preprocessor directive.
2954@item code
2955Anywhere else, i.e. in normal code.
2956@end table
2957
2958By default, @code{c-ignore-auto-fill} is set to @code{(string cpp
2959code)}, which means that when auto-fill mode is activated,
2960auto-filling only occurs in comments. In literals, it's often
2961desirable to have explicit control over newlines. In preprocessor
2962directives, the necessary @samp{\} escape character before the newline
2963is not automatically inserted, so an automatic line break would
2964produce invalid code. In normal code, line breaks are normally
2965dictated by some logical structure in the code rather than the last
2966whitespace character, so automatic line breaks there will produce poor
2967results in the current implementation.
2968@end defopt
2969
2970@vindex comment-multi-line
2971If inside a comment and @code{comment-multi-line} (@pxref{Auto Fill,,,
2972@emacsman{}, @emacsmantitle{}} is non-@code{nil}, the indentation and
2973line prefix are preserved. If inside a comment and
2974@code{comment-multi-line} is @code{nil}, a new comment of the same
2975type is started on the next line and indented as appropriate for
2976comments.
2977
2978Note that @ccmode{} sets @code{comment-multi-line} to @code{t} at
2979startup. The reason is that @kbd{M-j} could otherwise produce sequences
2980of single line block comments for texts that should logically be treated
2981as one comment, and the rest of the paragraph handling code
2982(e.g. @kbd{M-q} and @kbd{M-a}) can't cope with that, which would lead to
2983inconsistent behavior.
3023 2984
3024@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2985@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3025@node Custom Indentation Functions, Custom Brace and Colon Hanging, , Advanced Customizations 2986@node Custom Auto-newlines, Clean-ups, Custom Filling and Breaking, Top
3026@comment node-name, next, previous, up 2987@comment node-name, next, previous, up
3027@subsection Custom Indentation Functions 2988@chapter Customizing Auto-newlines
3028@cindex customization, indentation functions
3029@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2989@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3030 2990
3031The most flexible way to customize @ccmode{} is by writing custom 2991@ccmode{} determines whether to insert auto-newlines in two basically
3032indentation functions, and associating them with specific syntactic 2992different ways, depending on the character just typed:
3033symbols (@pxref{Syntactic Symbols}). @ccmode{} itself uses indentation 2993
3034functions to provide more sophisticated indentation, for example when 2994@table @asis
3035lining up C++ stream operator blocks: 2995@item Braces and Colons
2996@ccmode{} first determines the syntactic context of the brace or colon
2997(@pxref{Syntactic Symbols}), then looks for a corresponding element in
2998an alist. This element specifies where to put newlines - this is any
2999combination of before and after the brace or colon. If no alist
3000element is found, newlines are inserted both before and after a brace,
3001but none are inserted around a colon. See @ref{Hanging Braces} and
3002@ref{Hanging Colons}.
3003
3004@item Semicolons and Commas
3005The variable @code{c-hanging-semi&comma-criteria} contains a list of
3006functions which determine whether to insert a newline after a newly
3007typed semicolon or comma. @xref{Hanging Semicolons and Commas}.
3008@end table
3009
3010The names of these configuration variables contain @samp{hanging}
3011because they let you @dfn{hang} the pertinent characters. A character
3012which introduces a C construct is said to @dfn{hang on the right} when
3013it appears at the end of a line after other code, being separated by a
3014line break from the construct it introduces, like the opening brace in:
3036 3015
3037@example 3016@example
3038@group 3017@group
3039 1: void main(int argc, char**) 3018while (i < MAX) @{
3040 2: @{ 3019 total += entry[i];
3041 3: cout << "There were " 3020 entry [i++] = 0;
3042 4: << argc 3021@}
3043 5: << "arguments passed to the program"
3044 6: << endl;
3045 7: @}
3046@end group 3022@end group
3047@end example 3023@end example
3048 3024
3049In this example, lines 4 through 6 are assigned the @code{stream-op} 3025@noindent
3050syntactic symbol. Here, @code{stream-op} has an offset of @code{+}, and 3026A character @dfn{hangs on the left} when it appears at the start of
3051with a @code{c-basic-offset} of 2, you can see that lines 4 through 6 3027the line after the construct it closes off, like the above closing
3052are simply indented two spaces to the right of line 3. But perhaps we'd 3028brace.
3053like @ccmode{} to be a little more intelligent so that it aligns 3029
3054all the @samp{<<} symbols in lines 3 through 6. To do this, we have 3030The next chapter, ``Clean-ups'', describes how to configure @ccmode{}
3055to write a custom indentation function which finds the column of the first 3031to remove these automatically added newlines in certain specific
3056stream operator on the first line of the statement. Here is sample 3032circumstances. @xref{Clean-ups}.
3057lisp code implementing this: 3033
3034@menu
3035* Hanging Braces::
3036* Hanging Colons::
3037* Hanging Semicolons and Commas::
3038@end menu
3039
3040
3041@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3042@node Hanging Braces, Hanging Colons, Custom Auto-newlines, Custom Auto-newlines
3043@comment node-name, next, previous, up
3044@section Hanging Braces
3045@cindex hanging braces
3046@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3047
3048To specify which kinds of braces you want auto-newlines put around,
3049you set the style variable @code{c-hanging-braces-alist}. Its
3050structure and semantics are described in this section. Details of how
3051to set it up, and its relationship to CC Mode's style system are given
3052in @ref{Style Variables}.
3053
3054Say you wanted an auto-newline after (but not before) the following
3055@samp{@{}:
3058 3056
3059@example 3057@example
3060(defun c-lineup-streamop (langelem) 3058if (foo < 17) @{
3061 (save-excursion
3062 (goto-char (cdr langelem))
3063 (re-search-forward "<<\\|>>" (c-point 'eol) 'move)
3064 (goto-char (match-beginning 0))
3065 (vector (current-column))))
3066@end example 3059@end example
3067 3060
3068Indentation functions take a single argument, which is a syntactic 3061@noindent
3069component cons cell (@pxref{Syntactic Analysis}). The function can 3062First you need to find the @dfn{syntactic context} of the brace---type
3070return an integer which is added to the running total indentation for 3063a @key{RET} before the brace to get it on a line of its
3071the line, or a vector containing an integer which is an absolute 3064own@footnote{Also insert a @samp{\} at the end of the previous line if
3072column to align to. Usually an absolute column is wanted when 3065you're in AWK Mode.}, then type @kbd{C-c C-s}. That will tell you
3073aligning to existing text, as in this example. 3066something like:
3074 3067
3075The function should return @code{nil} if it's used in a situation where 3068@example
3076it doesn't want to make any decision. If the function is used in a list 3069((substatement-open 1061))
3077expression (@pxref{Customizing Indentation}), that will cause @ccmode{} 3070@end example
3078to go on and check the next entry in the list. 3071
3072@noindent
3073So here you need to put the entry @code{(substatement-open . (after))}
3074into @code{c-hanging-braces-alist}.
3079 3075
3080Now, to associate the function @code{c-lineup-streamop} with the 3076If you don't want any auto-newlines for a particular syntactic symbol,
3081@code{stream-op} syntactic symbol, we can add something like the 3077put this into @code{c-hanging-braces-alist}:
3082following to our @code{c++-mode-hook}@footnote{It probably makes more
3083sense to add this to @code{c++-mode-hook} than @code{c-mode-common-hook}
3084since stream operators are only relevant for C++.}:
3085 3078
3086@example 3079@example
3087(c-set-offset 'stream-op 'c-lineup-streamop) 3080(brace-entry-open)
3088@end example 3081@end example
3089 3082
3090Now the function looks like this after reindenting (using @kbd{C-c 3083If some brace syntactic symbol is not in @code{c-hanging-brace-alist},
3091C-q}): 3084its entry is taken by default as @code{(before after)}---insert a
3085newline both before and after the brace. In place of a
3086``before/after'' list you can specify a function in this alist---this
3087is useful when the auto newlines depend on the code around the brace.
3088
3089@defopt c-hanging-braces-alist
3090@vindex hanging-braces-alist (c-)
3091
3092This variable is an association list which maps syntactic symbols to
3093lists of places to insert a newline. @xref{Association
3094Lists,,,@lispref{}, @lispreftitle{}}. The key of each element is the
3095syntactic symbol, the associated value is either @code{nil}, a list,
3096or a function.
3097
3098@table @asis
3099@item The Key - the syntactic symbol
3100The syntactic symbols that are useful as keys in this list are
3101@code{brace-list-intro}, @code{statement-cont},
3102@code{inexpr-class-open}, @code{inexpr-class-close}, and all the
3103@code{*-open} and @code{*-close} symbols. @xref{Syntactic Symbols},
3104for a more detailed description of these syntactic symbols, except for
3105@code{inexpr-class-open} and @code{inexpr-class-close}, which aren't
3106actual syntactic symbols. Elements with any other value as a key get
3107ignored.
3108
3109The braces of anonymous inner classes in Java are given the special
3110symbols @code{inexpr-class-open} and @code{inexpr-class-close}, so that
3111they can be distinguished from the braces of normal classes@footnote{The
3112braces of anonymous classes produce a combination of
3113@code{inexpr-class}, and @code{class-open} or @code{class-close} in
3114normal indentation analysis.}.
3115
3116Note that the aggregate constructs in Pike mode, @samp{(@{}, @samp{@})},
3117@samp{([}, @samp{])}, and @samp{(<}, @samp{>)}, do not count as brace
3118lists in this regard, even though they do for normal indentation
3119purposes. It's currently not possible to set automatic newlines on
3120these constructs.
3121
3122@item The associated value - the ``ACTION'' list or function
3123The value associated with each syntactic symbol in this association
3124list is called an @var{action}, which can be either a list or a
3125function which returns a list. @xref{Custom Braces}, for how to use
3126a function as a brace hanging @var{action}.
3127
3128The list @var{action} (or the list returned by @var{action} when it's
3129a function) contains some combination of the symbols @code{before} and
3130@code{after}, directing @ccmode{} where to put newlines in
3131relationship to the brace being inserted. Thus, if the list contains
3132only the symbol @code{after}, then the brace hangs on the right side
3133of the line, as in:
3092 3134
3093@example 3135@example
3094@group 3136// here, open braces always `hang'
3095 1: void main(int argc, char**) 3137void spam( int i ) @{
3096 2: @{ 3138 if( i == 7 ) @{
3097 3: cout << "There were " 3139 dosomething(i);
3098 4: << argc 3140 @}
3099 5: << " arguments passed to the program" 3141@}
3100 6: << endl;
3101 7: @}
3102@end group
3103@end example 3142@end example
3104 3143
3105Custom indentation functions can be as simple or as complex as you like, 3144When the list contains both @code{after} and @code{before}, the braces
3106and any syntactic symbol that appears in @code{c-offsets-alist} can have 3145will appear on a line by themselves, as shown by the close braces in
3107a custom indentation function associated with it. 3146the above example. The list can also be empty, in which case newlines
3147are added neither before nor after the brace.
3148@end table
3108 3149
3109@ccmode{} comes with an extensive set of predefined indentation 3150If a syntactic symbol is missing entirely from
3110functions, not all of which are used by the default styles. So there's 3151@code{c-hanging-braces-alist}, it's treated in the same way as an
3111a good chance the function you want already exists. @xref{Indentation 3152@var{action} with a list containing @code{before} and @code{after}, so
3112Functions}, for a list of them. If you have written an indentation 3153that braces by default end up on their own line.
3113function that you think is generally useful, you're very welcome to 3154
3114contribute it; please contact @email{bug-cc-mode@@gnu.org}. 3155For example, the default value of @code{c-hanging-braces-alist} is:
3156
3157@example
3158((brace-list-open)
3159 (brace-entry-open)
3160 (statement-cont)
3161 (substatement-open after)
3162 (block-close . c-snug-do-while)
3163 (extern-lang-open after)
3164 (namespace-open after)
3165 (module-open after)
3166 (composition-open after)
3167 (inexpr-class-open after)
3168 (inexpr-class-close before))
3169@end example
3170
3171@noindent which says that @code{brace-list-open},
3172@code{brace-entry-open} and @code{statement-cont}@footnote{Brace lists
3173inside statements, such as initializers for static array variables
3174inside functions in C, are recognized as @code{statement-cont}. All
3175normal substatement blocks are recognized with other symbols.} braces
3176should both hang on the right side and allow subsequent text to follow
3177on the same line as the brace. Also, @code{substatement-open},
3178@code{extern-lang-open}, and @code{inexpr-class-open} braces should hang
3179on the right side, but subsequent text should follow on the next line.
3180The opposite holds for @code{inexpr-class-close} braces; they won't
3181hang, but the following text continues on the same line. Here, in the
3182@code{block-close} entry, you also see an example of using a function as
3183an @var{action}. In all other cases, braces are put on a line by
3184themselves.
3185@end defopt
3115 3186
3187@menu
3188* Custom Braces::
3189@end menu
3116 3190
3117@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3191@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3118@node Custom Brace and Colon Hanging, Customizing Semicolons and Commas, Custom Indentation Functions, Advanced Customizations 3192@node Custom Braces, , Hanging Braces, Hanging Braces
3119@comment node-name, next, previous, up 3193@comment node-name, next, previous, up
3120@subsection Custom Brace and Colon Hanging 3194@subsection Custom Brace Hanging
3121@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3195@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3122 3196
3123@vindex c-hanging-braces-alist 3197@vindex c-hanging-braces-alist
3124@vindex hanging-braces-alist (c-) 3198@vindex hanging-braces-alist (c-)
3199@cindex action functions
3125Syntactic symbols aren't the only place where you can customize 3200Syntactic symbols aren't the only place where you can customize
3126@ccmode{} with the lisp equivalent of callback functions. Brace 3201@ccmode{} with the lisp equivalent of callback functions. Remember
3127``hanginess'' can also be determined by custom functions associated with 3202that @var{action}s are usually a list containing some combination of
3128syntactic symbols on the @code{c-hanging-braces-alist} style variable. 3203the symbols @code{before} and @code{after} (@pxref{Hanging Braces}).
3129Remember that @var{action}'s are typically a list containing some 3204For more flexibility, you can instead specify brace ``hanginess'' by
3130combination of the symbols @code{before} and @code{after} 3205giving a synctactic symbol an @dfn{action function} in
3131(@pxref{Hanging Braces}). However, an @var{action} can also be a 3206@code{c-hanging-braces-alist}; this function determines the
3132function which gets called when a brace matching that syntactic symbol 3207``hanginess'' of a brace, usually by looking at the code near it.
3133is entered.
3134 3208
3135@cindex customization, brace hanging 3209@cindex customization, brace hanging
3136These @var{action} functions are called with two arguments: the 3210An action function is called with two arguments: the syntactic symbol
3137syntactic symbol for the brace, and the buffer position at which the 3211for the brace (e.g. @code{substatement-open}), and the buffer position
3138brace was inserted. The @var{action} function is expected to return a 3212where the brace has been inserted. Point is undefined on entry to an
3139list containing some combination of @code{before} and @code{after}, 3213action function, but the function must preserve it (e.g. by using
3140including neither of them (i.e., @code{nil}). This return value has the 3214@code{save-excursion}). The return value should be a list containing
3141normal brace hanging semantics. 3215some combination of @code{before} and @code{after}, including neither
3216of them (i.e. @code{nil}).
3217
3218@defvar c-syntactic-context
3219@vindex syntactic-context (c-)
3220During the call to the indentation or brace hanging @var{action}
3221function, this variable is bound to the full syntactic analysis list.
3222This might be, for example, @samp{((block-close 73))}. Don't ever
3223give @code{c-syntactic-context} a value yourself---this would disrupt
3224the proper functioning of @ccmode{}.
3225
3226This variable is also bound in three other circumstances:
3227(i)@tie{}when calling a c-hanging-semi&comma-criteria function
3228(@pxref{Hanging Semicolons and Commas}; (ii)@tie{}when calling a
3229line-up function (@pxref{Custom Line-Up}; (iii)@tie{}when calling a
3230c-special-indent-hook function (@pxref{Other Indentation}).
3231@end defvar
3142 3232
3143As an example, @ccmode{} itself uses this feature to dynamically 3233As an example, @ccmode{} itself uses this feature to dynamically
3144determine the hanginess of braces which close ``do-while'' 3234determine the hanginess of braces which close ``do-while''
@@ -3186,54 +3276,92 @@ that a newline should be inserted before the brace, but not after it.
3186In all other cases, it returns the list @samp{(before after)} so 3276In all other cases, it returns the list @samp{(before after)} so
3187that the brace appears on a line by itself. 3277that the brace appears on a line by itself.
3188 3278
3189@defvar c-syntactic-context 3279@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3190@vindex syntactic-context (c-) 3280@node Hanging Colons, Hanging Semicolons and Commas, Hanging Braces, Custom Auto-newlines
3191During the call to the indentation or brace hanging @var{action} 3281@comment node-name, next, previous, up
3192function, this variable is bound to the full syntactic analysis list. 3282@section Hanging Colons
3193@end defvar 3283@cindex hanging colons
3284@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3194 3285
3195@cindex customization, colon hanging 3286@cindex customization, colon hanging
3196@vindex c-hanging-colons-alist 3287@vindex c-hanging-colons-alist
3197@vindex hanging-colons-alist (c-) 3288@vindex hanging-colons-alist (c-)
3198Note that for symmetry, colon hanginess should be customizable by
3199allowing function symbols as @var{action}s on the
3200@code{c-hanging-colons-alist} style variable. Since no use has actually
3201been found for this feature, it isn't currently implemented!
3202 3289
3290Using a mechanism similar to brace hanging (@pxref{Hanging Braces}),
3291colons can also be made to hang using the style variable
3292@code{c-hanging-colons-alist} - When a colon is typed, @ccmode
3293determines its syntactic context, looks this up in the alist
3294@code{c-changing-colons-alist} and inserts up to two newlines
3295accordingly. Here, however, If @ccmode fails to find an entry for a
3296syntactic symbol in the alist, no newlines are inserted around the
3297newly typed colon.
3298
3299@defopt c-hanging-colons-alist
3300@vindex hanging-colons-alist (c-)
3301
3302@table @asis
3303@item The Key - the syntactic symbol
3304The syntactic symbols appropriate as keys in this association list
3305are: @code{case-label}, @code{label}, @code{access-label},
3306@code{member-init-intro}, and @code{inher-intro}. @xref{Syntactic
3307Symbols}. Elements with any other value as a key get ignored.
3308
3309@item The associate value - the ``ACTION'' list
3310The @var{action} here is simply a list containing a combination of the
3311symbols @code{before} and @code{after}. Unlike in
3312@code{c-hanging-braces-alist}, functions as @var{actions} are not
3313supported - there doesn't seem to be any need for them.
3314@end table
3315@end defopt
3316
3317In C++, double-colons are used as a scope operator but because these
3318colons always appear right next to each other, newlines before and after
3319them are controlled by a different mechanism, called @dfn{clean-ups} in
3320@ccmode{}. @xref{Clean-ups}, for details.
3203 3321
3204@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3322@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3205@node Customizing Semicolons and Commas, Other Special Indentations, Custom Brace and Colon Hanging, Advanced Customizations 3323@node Hanging Semicolons and Commas, , Hanging Colons, Custom Auto-newlines
3206@comment node-name, next, previous, up 3324@comment node-name, next, previous, up
3207@subsection Customizing Semicolons and Commas 3325@section Hanging Semicolons and Commas
3326@cindex hanging semicolons
3327@cindex hanging commas
3208@cindex customization, semicolon newlines 3328@cindex customization, semicolon newlines
3209@cindex customization, comma newlines 3329@cindex customization, comma newlines
3210@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3330@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3211 3331
3212You can also customize the insertion of newlines after semicolons and
3213commas when the auto-newline minor mode is enabled (@pxref{Minor
3214Modes}).
3215
3216@defopt c-hanging-semi&comma-criteria 3332@defopt c-hanging-semi&comma-criteria
3217@vindex hanging-semi&comma-criteria (c-) 3333@vindex hanging-semi&comma-criteria (c-)
3218This style variable takes a list of hooks that get called when a 3334This style variable takes a list of functions; these get called when
3219semicolon or comma is inserted. The hooks are called in order without 3335you type a semicolon or comma. The functions are called in order
3220arguments, and are expected to return one of the following values: 3336without arguments. When these functions are entered, point is just
3337after the newly inserted @samp{;} or @samp{,} and they must preserve
3338point (e.g., by using @code{save-excursion}). During the call, the
3339variable @code{c-syntactic-context} is bound to the syntactic context
3340of the current line@footnote{This was first introduced in @ccmode{}
33415.31.} @pxref{Custom Braces}. These functions don't insert newlines
3342themselves, rather they direct @ccmode{} whether or not to do so.
3343They should return one of the following values:
3221 3344
3222@table @code 3345@table @code
3223@item t 3346@item t
3224A newline is inserted, and no more functions from the list are called. 3347A newline is to be inserted after the @samp{;} or @samp{,}, and no
3348more functions from the list are to be called.
3225@item stop 3349@item stop
3226No more functions from the list are called, but no newline is 3350No more functions from the list are to be called, and no newline is to
3227inserted. 3351be inserted.
3228@item nil 3352@item nil
3229No determination is made, and the next function in the list is called. 3353No determination has been made, and the next function in the list is
3354to be called.
3230@end table 3355@end table
3231 3356
3232If every function in the list is called without a determination being 3357Note that auto-newlines are never inserted @emph{before} a semicolon
3233made, then no newline is added. The default value for this variable is a 3358or comma. If every function in the list is called without a
3234list containing a single function which inserts newlines only after 3359determination being made, then no newline is added.
3235semicolons which do not appear inside parenthesis lists (i.e., those 3360
3236that separate @code{for}-clause statements). 3361In AWK mode, this variable is set by default to @code{nil}. In the
3362other modes, the default value is a list containing a single function,
3363@code{c-semi&comma-inside-parenlist}. This inserts newlines after all
3364semicolons, apart from those separating @code{for}-clause statements.
3237@end defopt 3365@end defopt
3238 3366
3239@defun c-semi&comma-no-newlines-before-nonblanks 3367@defun c-semi&comma-no-newlines-before-nonblanks
@@ -3266,234 +3394,715 @@ statements. In addition to
3266@ccmode{} also comes with the criteria function 3394@ccmode{} also comes with the criteria function
3267@code{c-semi&comma-no-newlines-for-oneline-inliners}, which suppresses 3395@code{c-semi&comma-no-newlines-for-oneline-inliners}, which suppresses
3268newlines after semicolons inside one-line inline method definitions 3396newlines after semicolons inside one-line inline method definitions
3269(e.g., in C++ or Java). 3397(e.g. in C++ or Java).
3270@end defun 3398@end defun
3271 3399
3272 3400
3273@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3401@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3274@node Other Special Indentations, , Customizing Semicolons and Commas, Advanced Customizations 3402@node Clean-ups, Indentation Engine Basics, Custom Auto-newlines, Top
3275@comment node-name, next, previous, up 3403@comment node-name, next, previous, up
3276@subsection Other Special Indentations 3404@chapter Clean-ups
3405@cindex clean-ups
3277@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3406@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3278 3407
3279Here are the remaining odds and ends regarding indentation: 3408@dfn{Clean-ups} are mechanisms which remove (or exceptionally, add)
3409whitespace in specific circumstances and are complementary to colon
3410and brace hanging. You enable a clean-up by adding its symbol into
3411@code{c-cleanup-list}.
3280 3412
3281@defopt c-label-minimum-indentation 3413On the surface, it would seem that clean-ups overlap the functionality
3282@vindex label-minimum-indentation (c-) 3414provided by the @code{c-hanging-*-alist} variables. Clean-ups,
3283In @samp{gnu} style (@pxref{Built-in Styles}), a minimum indentation 3415however, are used to adjust code ``after-the-fact'', i.e. to adjust
3284is imposed on lines inside top-level constructs. This minimum 3416the whitespace in constructs later than when they were typed.
3285indentation is controlled by this style variable. The default value 3417
3286is 1. 3418Most of the clean-ups remove automatically inserted newlines, and are
3419only active when auto-newline minor mode is turned on. Others will
3420work all the time. Note that clean-ups are only performed when there
3421is nothing but whitespace appearing between the individual components
3422of the construct, and (apart from @code{comment-close-slash}) when the
3423construct does not occur within a literal (@pxref{Auto-newlines}).
3424
3425@defopt c-cleanup-list
3426@vindex cleanup-list (c-)
3427@cindex literal
3428
3429You configure @ccmode{}'s clean-ups by setting the style variable
3430@code{c-cleanup-list}, which is a list of clean-up symbols. By
3431default, @ccmode{} cleans up only the @code{scope-operator} construct,
3432which is necessary for proper C++ support.
3287@end defopt 3433@end defopt
3288 3434
3289@defopt c-special-indent-hook 3435These are the clean-ups that are only active when electric and
3290@vindex special-indent-hook (c-) 3436auto-newline minor modes are enabled:
3291This style variable is a standard hook variable that is called after 3437
3292every line is indented by @ccmode{}. You can use it to do any special 3438@c TBD: Would like to use some sort of @deffoo here; @table indents a
3293indentation or line adjustments your style dictates, such as adding 3439@c bit too much in dvi output.
3294extra indentation to constructors or destructor declarations in a 3440@table @code
3295class definition, etc. Note that you should not change point or mark 3441@item brace-else-brace
3296inside your @code{c-special-indent-hook} functions, i.e., you'll 3442Clean up @samp{@} else @{} constructs by placing the entire construct on
3297probably want to wrap your function in a @code{save-excursion}. 3443a single line. Clean up occurs when the open brace after the
3298 3444@samp{else} is typed. So for example, this:
3299Setting @code{c-special-indent-hook} in your style definition is 3445
3300handled slightly differently than other variables. In your style 3446@example
3301definition, you should set the value for @code{c-special-indent-hook} 3447@group
3302to a function or list of functions, which will be appended to 3448void spam(int i)
3303@code{c-special-indent-hook} using @code{add-hook}. That way, the 3449@{
3304current setting for the buffer local value of 3450 if( i==7 ) @{
3305@code{c-special-indent-hook} won't be overridden. 3451 dosomething();
3452 @}
3453 else
3454 @{
3455@end group
3456@end example
3457
3458@noindent
3459appears like this after the last open brace is typed:
3460
3461@example
3462@group
3463void spam(int i)
3464@{
3465 if( i==7 ) @{
3466 dosomething();
3467 @} else @{
3468@end group
3469@end example
3470
3471@item brace-elseif-brace
3472Similar to the @code{brace-else-brace} clean-up, but this cleans up
3473@samp{@} else if (...) @{} constructs. For example:
3474
3475@example
3476@group
3477void spam(int i)
3478@{
3479 if( i==7 ) @{
3480 dosomething();
3481 @}
3482 else if( i==3 )
3483 @{
3484@end group
3485@end example
3486
3487@noindent
3488appears like this after the last open parenthesis is typed:
3489
3490@example
3491@group
3492void spam(int i)
3493@{
3494 if( i==7 ) @{
3495 dosomething();
3496 @} else if(
3497@end group
3498@end example
3499
3500@noindent
3501and like this after the last open brace is typed:
3502
3503@example
3504@group
3505void spam(int i)
3506@{
3507 if( i==7 ) @{
3508 dosomething();
3509 @} else if( i==3 ) @{
3510@end group
3511@end example
3512
3513@item brace-catch-brace
3514Analogous to @code{brace-elseif-brace}, but cleans up @samp{@} catch
3515(...) @{} in C++ and Java mode.
3516
3517@item empty-defun-braces
3518Clean up braces following a top-level function or class definition that
3519contains no body. Clean up occurs when the closing brace is typed.
3520Thus the following:
3521
3522@example
3523@group
3524class Spam
3525@{
3526@}
3527@end group
3528@end example
3529
3530@noindent
3531is transformed into this when the close brace is typed:
3532
3533@example
3534@group
3535class Spam
3536@{@}
3537@end group
3538@end example
3539
3540@item defun-close-semi
3541Clean up the terminating semicolon on top-level function or class
3542definitions when they follow a close brace. Clean up occurs when the
3543semicolon is typed. So for example, the following:
3544
3545@example
3546@group
3547class Spam
3548@{
3549...
3550@}
3551;
3552@end group
3553@end example
3554
3555@noindent
3556is transformed into this when the semicolon is typed:
3557
3558@example
3559@group
3560class Spam
3561@{
3562...
3563@};
3564@end group
3565@end example
3566
3567@item list-close-comma
3568Clean up commas following braces in array and aggregate initializers.
3569Clean up occurs when the comma is typed. The space before the comma
3570is zapped just like the space before the semicolon in
3571@code{defun-close-semi}.
3572
3573@item scope-operator
3574Clean up double colons which might designate a C++ scope operator split
3575across multiple lines@footnote{Certain C++ constructs introduce
3576ambiguous situations, so @code{scope-operator} clean-ups might not
3577always be correct. This usually only occurs when scoped identifiers
3578appear in switch label tags.}. Clean up occurs when the second colon is
3579typed. You will always want @code{scope-operator} in the
3580@code{c-cleanup-list} when you are editing C++ code.
3581
3582@item one-liner-defun
3583Clean up a single line of code enclosed by defun braces by removing
3584the whitespace before and after the code. The clean-up happens when
3585the closing brace is typed. If the variable
3586@code{c-max-one-liner-length} is set, the cleanup is only done if the
3587resulting line would be no longer than the value of that variable.
3588
3589For example, consider this AWK code:
3590
3591@example
3592@group
3593BEGIN @{
3594 FS = "\t" # use <TAB> as a field separator
3595@}
3596@end group
3597@end example
3598
3599@noindent
3600It gets compacted to the following when the closing brace is typed:
3601
3602@example
3603@group
3604BEGIN @{FS = "\t"@} # use <TAB> as a field separator
3605@end group
3606@end example
3607
3608@defopt c-max-one-liner-length
3609@vindex max-one-liner-length (c-)
3610The maximum length of the resulting line for which the clean-up
3611@code{one-liner-defun} will be triggered. This length is that of the entire
3612line, including any leading whitespace and any trailing comment. Its
3613default value is 80. If the value is zero or @code{nil}, no limit
3614applies.
3306@end defopt 3615@end defopt
3616@end table
3617
3618The following clean-ups are always active when they occur on
3619@code{c-cleanup-list}, regardless of whether Electric minor mode or
3620Auto-newline minor mode are enabled:
3621
3622@table @code
3623@item space-before-funcall
3624Insert a space between the function name and the opening parenthesis
3625of a function call. This produces function calls in the style
3626mandated by the GNU coding standards, e.g. @samp{signal@tie{}(SIGINT,
3627SIG_IGN)} and @samp{abort@tie{}()}. Clean up occurs when the opening
3628parenthesis is typed. This clean-up should never be active in AWK
3629Mode, since such a space is syntactically invalid for user defined
3630functions.
3631
3632@item compact-empty-funcall
3633Clean up any space between the function name and the opening parenthesis
3634of a function call that has no arguments. This is typically used
3635together with @code{space-before-funcall} if you prefer the GNU function
3636call style for functions with arguments but think it looks ugly when
3637it's only an empty parenthesis pair. I.e. you will get @samp{signal
3638(SIGINT, SIG_IGN)}, but @samp{abort()}. Clean up occurs when the
3639closing parenthesis is typed.
3640
3641@item comment-close-slash
3642When inside a block comment, terminate the comment when you type a
3643slash at the beginning of a line (i.e. immediately after the comment
3644prefix). This clean-up removes whitespace preceding the slash and if
3645needed, inserts a star to complete the token @samp{*/}.
3646@end table
3647
3648
3649@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3650@node Indentation Engine Basics, Customizing Indentation, Clean-ups, Top
3651@comment node-name, next, previous, up
3652@chapter Indentation Engine Basics
3653@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3654
3655This chapter will briefly cover how @ccmode{} indents lines of code.
3656It is helpful to understand the indentation model being used so that
3657you will know how to customize @ccmode{} for your personal coding
3658style. All the details are in @ref{Customizing Indentation}.
3659
3660@ccmode{} has an indentation engine that provides a flexible and
3661general mechanism for customizing indentation. When @ccmode{} indents
3662a line of code, it separates its calculations into two steps:
3663
3664@enumerate
3665@item
3666@cindex syntactic symbol
3667@cindex anchor position
3668It analyzes the line to determine its @dfn{syntactic symbol(s)} (the
3669kind of language construct it's looking at) and its @dfn{anchor
3670position} (the position earlier in the file that @ccmode{} will indent
3671the line relative to). The anchor position might be the location of
3672an opening brace in the previous line, for example. @xref{Syntactic
3673Analysis}.
3674@item
3675@cindex offsets
3676@cindex indentation offset specifications
3677It looks up the syntactic symbol(s) in the configuration to get the
3678corresponding @dfn{offset(s)}. The symbol @code{+}, which means
3679``indent this line one more level'' is a typical offset. @ccmode{}
3680then applies these offset(s) to the anchor position, giving the
3681indentation for the line. The different sorts of offsets are
3682described in @ref{c-offsets-alist}.
3683@end enumerate
3684
3685In exceptional circumstances, the syntax directed indentation
3686described here may be a nuisance rather than a help. You can disable
3687it by setting @code{c-syntactic-indentation} to @code{nil}. (To set
3688the variable interactively, @ref{Minor Modes}).
3689
3690@defopt c-syntactic-indentation
3691@vindex syntactic-indentation (c-)
3692When this is non-@code{nil} (which it is by default), the indentation
3693of code is done according to its syntactic structure. When it's
3694@code{nil}, every line is just indented to the same level as the
3695previous one, and @kbd{TAB} (@code{c-indent-command}) adjusts the
3696indentation in steps of @code{c-basic-offset}. The current style
3697(@pxref{Config Basics}) then has no effect on indentation, nor do any
3698of the variables associated with indentation, not even
3699@code{c-special-indent-hook}.
3700@end defopt
3701
3702@menu
3703* Syntactic Analysis::
3704* Syntactic Symbols::
3705* Indentation Calculation::
3706@end menu
3307 3707
3308 3708
3309@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3709@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3310@node Syntactic Symbols, Indentation Functions, Customizing Indentation, Top 3710@node Syntactic Analysis, Syntactic Symbols, Indentation Engine Basics, Indentation Engine Basics
3311@comment node-name, next, previous, up 3711@comment node-name, next, previous, up
3312@chapter Syntactic Symbols 3712@section Syntactic Analysis
3713@cindex syntactic analysis
3714@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3715
3716@cindex syntactic element
3717@cindex syntactic context
3718The first thing @ccmode{} does when indenting a line of code, is to
3719analyze the line, determining the @dfn{syntactic context} of the
3720(first) construct on that line. It's a list of @dfn{syntactic
3721elements}, where each syntactic element in turn is a list@footnote{In
3722@ccmode 5.28 and earlier, a syntactic element was a dotted pair; the
3723cons was the syntactic symbol and the cdr was the anchor position.
3724For compatibility's sake, the parameter passed to a line-up function
3725still has this dotted pair form (@pxref{Custom Line-Up}).} Here is a
3726brief and typical example:
3727
3728@example
3729((defun-block-intro 1959))
3730@end example
3731
3732@cindex syntactic symbol
3733@noindent
3734The first thing inside each syntactic element is always a
3735@dfn{syntactic symbol}. It describes the kind of construct that was
3736recognized, e.g. @code{statement}, @code{substatement},
3737@code{class-open}, @code{class-close}, etc. @xref{Syntactic Symbols},
3738for a complete list of currently recognized syntactic symbols and
3739their semantics. The remaining entries are various data associated
3740with the recognized construct - there might be zero or more.
3741
3742@cindex anchor position
3743Conceptually, a line of code is always indented relative to some
3744position higher up in the buffer (typically the indentation of the
3745previous line). That position is the @dfn{anchor position} in the
3746syntactic element. If there is an entry after the syntactic symbol in
3747the syntactic element list then it's either nil or that anchor position.
3748
3749Here is an example. Suppose we had the following code as the only thing
3750in a C++ buffer @footnote{The line numbers in this and future examples
3751don't actually appear in the buffer, of course!}:
3752
3753@example
3754 1: void swap( int& a, int& b )
3755 2: @{
3756 3: int tmp = a;
3757 4: a = b;
3758 5: b = tmp;
3759 6: @}
3760@end example
3761
3762@noindent
3763We can use @kbd{C-c C-s} (@code{c-show-syntactic-information}) to
3764report what the syntactic analysis is for the current line:
3765
3766@table @asis
3767@item @kbd{C-c C-s} (@code{c-show-syntactic-information})
3768@kindex C-c C-s
3769@findex c-show-syntactic-information
3770@findex show-syntactic-information (c-)
3771This command calculates the syntactic analysis of the current line and
3772displays it in the minibuffer. The command also highlights the anchor
3773position(s).
3774@end table
3775
3776 Running this command on line 4 of this example, we'd see in the echo
3777area@footnote{With a universal argument (i.e. @kbd{C-u C-c C-s}) the
3778analysis is inserted into the buffer as a comment on the current
3779line.}:
3780
3781@example
3782((statement 35))
3783@end example
3784
3785@noindent
3786and the @samp{i} of @code{int} on line 3 would be highlighted. This
3787tells us that the line is a statement and it is indented relative to
3788buffer position 35, the highlighted position. If you were to move
3789point to line 3 and hit @kbd{C-c C-s}, you would see:
3790
3791@example
3792((defun-block-intro 29))
3793@end example
3794
3795@noindent
3796This indicates that the @samp{int} line is the first statement in a top
3797level function block, and is indented relative to buffer position 29,
3798which is the brace just after the function header.
3799
3800Here's another example:
3801
3802@example
3803 1: int add( int val, int incr, int doit )
3804 2: @{
3805 3: if( doit )
3806 4: @{
3807 5: return( val + incr );
3808 6: @}
3809 7: return( val );
3810 8: @}
3811@end example
3812
3813@noindent
3814Hitting @kbd{C-c C-s} on line 4 gives us:
3815
3816@example
3817((substatement-open 46))
3818@end example
3819
3820@cindex substatement
3821@cindex substatement block
3822@noindent
3823which tells us that this is a brace that @emph{opens} a substatement
3824block. @footnote{A @dfn{substatement} is the line after a
3825conditional statement, such as @code{if}, @code{else}, @code{while},
3826@code{do}, @code{switch}, etc. A @dfn{substatement
3827block} is a brace block following one of these conditional statements.}
3828
3829@cindex comment-only line
3830Syntactic contexts can contain more than one element, and syntactic
3831elements need not have anchor positions. The most common example of
3832this is a @dfn{comment-only line}:
3833
3834@example
3835 1: void draw_list( List<Drawables>& drawables )
3836 2: @{
3837 3: // call the virtual draw() method on each element in list
3838 4: for( int i=0; i < drawables.count(), ++i )
3839 5: @{
3840 6: drawables[i].draw();
3841 7: @}
3842 8: @}
3843@end example
3844
3845@noindent
3846Hitting @kbd{C-c C-s} on line 3 of this example gives:
3847
3848@example
3849((comment-intro) (defun-block-intro 46))
3850@end example
3851
3852@noindent
3853and you can see that the syntactic context contains two syntactic
3854elements. Notice that the first element, @samp{(comment-intro)}, has no
3855anchor position.
3856
3857
3858@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3859@node Syntactic Symbols, Indentation Calculation, Syntactic Analysis, Indentation Engine Basics
3860@comment node-name, next, previous, up
3861@section Syntactic Symbols
3313@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3862@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3314 3863
3315@cindex syntactic symbols, brief list 3864@cindex syntactic symbols, brief list
3316@vindex c-offsets-alist 3865@vindex c-offsets-alist
3317@vindex offsets-alist (c-) 3866@vindex offsets-alist (c-)
3318Here is a complete list of the recognized syntactic symbols as described 3867This section is a complete list of the syntactic symbols which appear
3319in the @code{c-offsets-alist} style variable, along with a brief 3868in the @code{c-offsets-alist} style variable, along with brief
3320description. More detailed descriptions follow. 3869descriptions. The previous section (@pxref{Syntactic Analysis})
3870states what syntactic symbols are and how the indentation engine uses
3871them.
3872
3873More detailed descriptions of these symbols, together with snippets of
3874source code to which they apply, appear in the examples in the
3875subsections below. Note that, in the interests of brevity, the anchor
3876position associated with most syntactic symbols is @emph{not}
3877specified. In cases of doubt, type @kbd{C-c C-s} on a pertinent
3878line---this highlights the anchor position.
3879
3880@ssindex -open symbols
3881@ssindex -close symbols
3882@ssindex -block-intro symbols
3883The syntactic symbols which indicate brace constructs follow a general
3884naming convention. When a line begins with an open or close brace,
3885its syntactic symbol will contain the suffix @code{-open} or
3886@code{-close} respectively. The first line within the brace block
3887construct will contain the suffix @code{-block-intro}.
3888
3889@ssindex -intro symbols
3890@ssindex -cont symbols
3891In constructs which can span several lines, a distinction is usually
3892made between the first line that introduces the construct and the
3893lines that continue it. The syntactic symbols that indicate these
3894lines will contain the suffixes @code{-intro} or @code{-cont}
3895respectively.
3896
3897The best way to understand how all this works is by looking at some
3898examples. Remember that you can see the syntax of any source code
3899line by using @kbd{C-c C-s}.
3321 3900
3322@table @code 3901@table @code
3323@item string 3902@item string
3324Inside a multiline string. 3903Inside a multiline string. @ref{Literal Symbols}.
3325@item c 3904@item c
3326Inside a multiline C style block comment. 3905Inside a multiline C style block comment. @ref{Literal Symbols}.
3327@item defun-open 3906@item defun-open
3328Brace that opens a top-level function definition. 3907Brace that opens a top-level function definition. @ref{Function
3908Symbols}.
3329@item defun-close 3909@item defun-close
3330Brace that closes a top-level function definition. 3910Brace that closes a top-level function definition. @ref{Function
3911Symbols}.
3331@item defun-block-intro 3912@item defun-block-intro
3332The first line in a top-level defun. 3913The first line in a top-level defun. @ref{Function Symbols}.
3333@item class-open 3914@item class-open
3334Brace that opens a class definition. 3915Brace that opens a class definition. @ref{Class Symbols}.
3335@item class-close 3916@item class-close
3336Brace that closes a class definition. 3917Brace that closes a class definition. @ref{Class Symbols}.
3337@item inline-open 3918@item inline-open
3338Brace that opens an in-class inline method. 3919Brace that opens an in-class inline method. @ref{Class Symbols}.
3339@item inline-close 3920@item inline-close
3340Brace that closes an in-class inline method. 3921Brace that closes an in-class inline method. @ref{Class Symbols}.
3341@item func-decl-cont 3922@item func-decl-cont
3342The region between a function definition's argument list and the 3923The region between a function definition's argument list and the
3343function opening brace (excluding K&R argument declarations). In C, you 3924function opening brace (excluding K&R argument declarations). In C,
3344cannot put anything but whitespace and comments in this region, however 3925you cannot put anything but whitespace and comments in this region,
3345in C++ and Java, @code{throws} declarations and other things can appear 3926however in C++ and Java, @code{throws} declarations and other things
3346here. 3927can appear here. @ref{Literal Symbols}. @c @emph{FIXME!!! Can it not
3928@c go somewhere better?}
3347@item knr-argdecl-intro 3929@item knr-argdecl-intro
3348First line of a K&R C argument declaration. 3930First line of a K&R C argument declaration. @ref{K&R Symbols}.
3349@item knr-argdecl 3931@item knr-argdecl
3350Subsequent lines in a K&R C argument declaration. 3932Subsequent lines in a K&R C argument declaration. @ref{K&R Symbols}.
3351@item topmost-intro 3933@item topmost-intro
3352The first line in a ``topmost'' definition. 3934The first line in a ``topmost'' definition. @ref{Function Symbols}.
3353@item topmost-intro-cont 3935@item topmost-intro-cont
3354Topmost definition continuation lines. This is only used in the parts 3936Topmost definition continuation lines. This is only used in the parts
3355that aren't covered by other symbols such as @code{func-decl-cont} and 3937that aren't covered by other symbols such as @code{func-decl-cont} and
3356@code{knr-argdecl}. 3938@code{knr-argdecl}. @ref{Function Symbols}.
3357@item member-init-intro 3939@item member-init-intro
3358First line in a member initialization list. 3940First line in a member initialization list. @ref{Class Symbols}.
3359@item member-init-cont 3941@item member-init-cont
3360Subsequent member initialization list lines. 3942Subsequent member initialization list lines. @ref{Class Symbols}.
3361@item inher-intro 3943@item inher-intro
3362First line of a multiple inheritance list. 3944First line of a multiple inheritance list. @ref{Class Symbols}.
3363@item inher-cont 3945@item inher-cont
3364Subsequent multiple inheritance lines. 3946Subsequent multiple inheritance lines. @ref{Class Symbols}.
3365@item block-open 3947@item block-open
3366Statement block open brace. 3948Statement block open brace. @ref{Literal Symbols}.
3367@item block-close 3949@item block-close
3368Statement block close brace. 3950Statement block close brace. @ref{Conditional Construct Symbols}.
3369@item brace-list-open 3951@item brace-list-open
3370Open brace of an enum or static array list. 3952Open brace of an enum or static array list. @ref{Brace List Symbols}.
3371@item brace-list-close 3953@item brace-list-close
3372Close brace of an enum or static array list. 3954Close brace of an enum or static array list. @ref{Brace List Symbols}.
3373@item brace-list-intro 3955@item brace-list-intro
3374First line in an enum or static array list. 3956First line in an enum or static array list. @ref{Brace List Symbols}.
3375@item brace-list-entry 3957@item brace-list-entry
3376Subsequent lines in an enum or static array list. 3958Subsequent lines in an enum or static array list. @ref{Brace List
3959Symbols}.
3377@item brace-entry-open 3960@item brace-entry-open
3378Subsequent lines in an enum or static array list where the line begins 3961Subsequent lines in an enum or static array list where the line begins
3379with an open brace. 3962with an open brace. @ref{Brace List Symbols}.
3380@item statement 3963@item statement
3381A statement. 3964A statement. @ref{Function Symbols}.
3382@item statement-cont 3965@item statement-cont
3383A continuation of a statement. 3966A continuation of a statement. @ref{Function Symbols}.
3384@item statement-block-intro 3967@item statement-block-intro
3385The first line in a new statement block. 3968The first line in a new statement block. @ref{Conditional Construct
3969Symbols}.
3386@item statement-case-intro 3970@item statement-case-intro
3387The first line in a case block. 3971The first line in a case block. @ref{Switch Statement Symbols}.
3388@item statement-case-open 3972@item statement-case-open
3389The first line in a case block that starts with a brace. 3973The first line in a case block that starts with a brace. @ref{Switch
3974Statement Symbols}.
3390@item substatement 3975@item substatement
3391The first line after a conditional or loop construct. 3976The first line after a conditional or loop construct.
3977@ref{Conditional Construct Symbols}.
3392@item substatement-open 3978@item substatement-open
3393The brace that opens a substatement block. 3979The brace that opens a substatement block. @ref{Conditional Construct
3980Symbols}.
3394@item substatement-label 3981@item substatement-label
3395The first line after a conditional or loop construct if it's a label. 3982The first line after a conditional or loop construct if it's a label.
3983@ref{Conditional Construct Symbols}.
3396@item case-label 3984@item case-label
3397A label in a @code{switch} block. 3985A label in a @code{switch} block. @ref{Switch Statement Symbols}.
3398@item access-label 3986@item access-label
3399C++ access control label. 3987C++ access control label. @ref{Class Symbols}.
3400@item label 3988@item label
3401Any other label. 3989Any other label. @ref{Literal Symbols}.
3402@item do-while-closure 3990@item do-while-closure
3403The @code{while} line that ends a @code{do}-@code{while} construct. 3991The @code{while} line that ends a @code{do}-@code{while} construct.
3992@ref{Conditional Construct Symbols}.
3404@item else-clause 3993@item else-clause
3405The @code{else} line of an @code{if}-@code{else} construct. 3994The @code{else} line of an @code{if}-@code{else} construct.
3995@ref{Conditional Construct Symbols}.
3406@item catch-clause 3996@item catch-clause
3407The @code{catch} or @code{finally} (in Java) line of a 3997The @code{catch} or @code{finally} (in Java) line of a
3408@code{try}-@code{catch} construct. 3998@code{try}-@code{catch} construct. @ref{Conditional Construct
3999Symbols}.
3409@item comment-intro 4000@item comment-intro
3410A line containing only a comment introduction. 4001A line containing only a comment introduction. @ref{Literal Symbols}.
3411@item arglist-intro 4002@item arglist-intro
3412The first line in an argument list. 4003The first line in an argument list. @ref{Paren List Symbols}.
3413@item arglist-cont 4004@item arglist-cont
3414Subsequent argument list lines when no arguments follow on the same line 4005Subsequent argument list lines when no arguments follow on the same
3415as the arglist opening paren. 4006line as the arglist opening paren. @ref{Paren List Symbols}.
3416@item arglist-cont-nonempty 4007@item arglist-cont-nonempty
3417Subsequent argument list lines when at least one argument follows on the 4008Subsequent argument list lines when at least one argument follows on
3418same line as the arglist opening paren. 4009the same line as the arglist opening paren. @ref{Paren List Symbols}.
3419@item arglist-close 4010@item arglist-close
3420The solo close paren of an argument list. 4011The solo close paren of an argument list. @ref{Paren List Symbols}.
3421@item stream-op 4012@item stream-op
3422Lines continuing a stream operator (C++ only). 4013Lines continuing a stream operator (C++ only). @ref{Literal
4014Symbols}. @c @emph{FIXME!!! Can this not be moved somewhere better?}
3423@item inclass 4015@item inclass
3424The line is nested inside a class definition. 4016The line is nested inside a class definition. @ref{Class Symbols}.
3425@item cpp-macro 4017@item cpp-macro
3426The start of a preprocessor macro definition. 4018The start of a preprocessor macro definition. @ref{Literal Symbols}.
3427@item cpp-define-intro 4019@item cpp-define-intro
3428The first line inside a multiline preproprocessor macro if 4020The first line inside a multiline preproprocessor macro if
3429@code{c-syntactic-indentation-in-macros} is set. 4021@code{c-syntactic-indentation-in-macros} is set. @ref{Multiline Macro
4022Symbols}.
3430@item cpp-macro-cont 4023@item cpp-macro-cont
3431All lines inside multiline preprocessor macros if 4024All lines inside multiline preprocessor macros if
3432@code{c-syntactic-indentation-in-macros} is @code{nil}. 4025@code{c-syntactic-indentation-in-macros} is @code{nil}.
4026@ref{Multiline Macro Symbols}.
3433@item friend 4027@item friend
3434A C++ friend declaration. 4028A C++ friend declaration. @ref{Class Symbols}.
3435@item objc-method-intro 4029@item objc-method-intro
3436The first line of an Objective-C method definition. 4030The first line of an Objective-C method definition. @ref{Objective-C
4031Method Symbols}.
3437@item objc-method-args-cont 4032@item objc-method-args-cont
3438Lines continuing an Objective-C method definition. 4033Lines continuing an Objective-C method definition. @ref{Objective-C
4034Method Symbols}.
3439@item objc-method-call-cont 4035@item objc-method-call-cont
3440Lines continuing an Objective-C method call. 4036Lines continuing an Objective-C method call. @ref{Objective-C Method
4037Symbols}.
3441@item extern-lang-open 4038@item extern-lang-open
3442Brace that opens an @code{extern} block (e.g., @code{extern "C" @{...@}}). 4039Brace that opens an @code{extern} block (e.g. @code{extern "C"
4040@{...@}}). @ref{External Scope Symbols}.
3443@item extern-lang-close 4041@item extern-lang-close
3444Brace that closes an @code{extern} block. 4042Brace that closes an @code{extern} block. @ref{External Scope
4043Symbols}.
3445@item inextern-lang 4044@item inextern-lang
3446Analogous to @code{inclass} syntactic symbol, but used inside 4045Analogous to @code{inclass} syntactic symbol, but used inside
3447@code{extern} blocks. 4046@code{extern} blocks. @ref{External Scope Symbols}.
3448@item namespace-open 4047@item namespace-open
3449@itemx namespace-close 4048@itemx namespace-close
3450@itemx innamespace 4049@itemx innamespace
3451These are analogous to the three @code{extern-lang} symbols above, but 4050These are analogous to the three @code{extern-lang} symbols above, but
3452are returned for C++ namespace blocks. 4051are returned for C++ namespace blocks. @ref{External Scope Symbols}.
3453@item module-open 4052@item module-open
3454@itemx module-close 4053@itemx module-close
3455@itemx inmodule 4054@itemx inmodule
3456Analogous to the above, but for CORBA IDL @code{module} blocks. 4055Analogous to the above, but for CORBA IDL @code{module} blocks.
4056@ref{External Scope Symbols}.
3457@item composition-open 4057@item composition-open
3458@itemx composition-close 4058@itemx composition-close
3459@itemx incomposition 4059@itemx incomposition
3460Analogous to the above, but for CORBA CIDL @code{composition} blocks. 4060Analogous to the above, but for CORBA CIDL @code{composition} blocks.
4061@ref{External Scope Symbols}.
3461@item template-args-cont 4062@item template-args-cont
3462C++ template argument list continuations. 4063C++ template argument list continuations. @ref{Class Symbols}.
3463@item inlambda 4064@item inlambda
3464Analogous to @code{inclass} syntactic symbol, but used inside lambda 4065Analogous to @code{inclass} syntactic symbol, but used inside lambda
3465(i.e., anonymous) functions. Only used in Pike mode. 4066(i.e. anonymous) functions. Only used in Pike mode. @ref{Statement
4067Block Symbols}.
3466@item lambda-intro-cont 4068@item lambda-intro-cont
3467Lines continuing the header of a lambda function, i.e., between the 4069Lines continuing the header of a lambda function, i.e. between the
3468@code{lambda} keyword and the function body. Only used in Pike mode. 4070@code{lambda} keyword and the function body. Only used in Pike mode.
4071@ref{Statement Block Symbols}.
3469@item inexpr-statement 4072@item inexpr-statement
3470A statement block inside an expression. The gcc C and C++ extension for 4073A statement block inside an expression. The gcc C and C++ extension
3471this is recognized. It's also used for the special functions that take 4074for this is recognized. It's also used for the special functions that
3472a statement block as an argument in Pike. 4075take a statement block as an argument in Pike. @ref{Statement Block
4076Symbols}.
3473@item inexpr-class 4077@item inexpr-class
3474A class definition inside an expression. This is used for anonymous 4078A class definition inside an expression. This is used for anonymous
3475classes in Java. It's also used for anonymous array initializers in 4079classes in Java. It's also used for anonymous array initializers in
3476Java. 4080Java. @ref{Anonymous Class Symbol}.
3477@end table 4081@end table
3478 4082
3479@ssindex -open symbols 4083@menu
3480@ssindex -close symbols 4084* Function Symbols::
3481Most syntactic symbol names follow a general naming convention. When a 4085* Class Symbols::
3482line begins with an open or close brace, the syntactic symbol will 4086* Conditional Construct Symbols::
3483contain the suffix @code{-open} or @code{-close} respectively. 4087* Switch Statement Symbols::
4088* Brace List Symbols::
4089* External Scope Symbols::
4090* Paren List Symbols::
4091* Literal Symbols::
4092* Multiline Macro Symbols::
4093* Objective-C Method Symbols::
4094* Anonymous Class Symbol::
4095* Statement Block Symbols::
4096* K&R Symbols::
4097@end menu
3484 4098
3485@ssindex -intro symbols 4099@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3486@ssindex -cont symbols 4100@node Function Symbols, Class Symbols, Syntactic Symbols, Syntactic Symbols
3487@ssindex -block-intro symbols 4101@comment node-name, next, previous, up
3488Usually, a distinction is made between the first line that introduces a 4102@subsection Function Symbols
3489construct and lines that continue a construct, and the syntactic symbols 4103@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3490that represent these lines will contain the suffix @code{-intro} or
3491@code{-cont} respectively. As a sub-classification of this scheme, a
3492line which is the first of a particular brace block construct will
3493contain the suffix @code{-block-intro}.
3494 4104
3495Let's look at some examples to understand how this works. Remember that 4105This example shows a typical function declaration.
3496you can check the syntax of any line by using @kbd{C-c C-s}.
3497 4106
3498@example 4107@example
3499 1: void 4108 1: void
@@ -3519,7 +4128,7 @@ top-level construct introduction so it has the syntax
3519the brace that opens a top-level function definition. Line 9 is the 4128the brace that opens a top-level function definition. Line 9 is the
3520corresponding 4129corresponding
3521@code{defun-close} since it contains the brace that closes the top-level 4130@code{defun-close} since it contains the brace that closes the top-level
3522function definition. Line 4 is a @code{defun-block-intro}, i.e., it is 4131function definition. Line 4 is a @code{defun-block-intro}, i.e. it is
3523the first line of a brace-block, enclosed in a 4132the first line of a brace-block, enclosed in a
3524top-level function definition. 4133top-level function definition.
3525 4134
@@ -3530,8 +4139,13 @@ isn't much special about them. Note however that line 8 is given
3530@code{statement-cont} syntax since it continues the statement begun 4139@code{statement-cont} syntax since it continues the statement begun
3531on the previous line. 4140on the previous line.
3532 4141
3533Here's another example, which illustrates some C++ class syntactic 4142@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3534symbols: 4143@node Class Symbols, Conditional Construct Symbols, Function Symbols, Syntactic Symbols
4144@comment node-name, next, previous, up
4145@subsection Class related Symbols
4146@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4147
4148Here's an example which illustrates some C++ class syntactic symbols:
3535 4149
3536@example 4150@example
3537 1: class Bass 4151 1: class Bass
@@ -3657,9 +4271,10 @@ elements:
3657((inclass 58) (topmost-intro 380) (friend)) 4271((inclass 58) (topmost-intro 380) (friend))
3658@end example 4272@end example
3659 4273
3660The @code{friend} syntactic symbol is a modifier that typically does not 4274The @code{friend} and @code{inline-open} syntactic symbols are
3661have a relative buffer position. 4275modifiers that do not have anchor positions.
3662 4276
4277@ssindex template-args-cont
3663Template definitions introduce yet another syntactic symbol: 4278Template definitions introduce yet another syntactic symbol:
3664 4279
3665@example 4280@example
@@ -3671,8 +4286,14 @@ Template definitions introduce yet another syntactic symbol:
3671Here, line 1 is analyzed as a @code{topmost-intro}, but lines 2 and 3 4286Here, line 1 is analyzed as a @code{topmost-intro}, but lines 2 and 3
3672are both analyzed as @code{template-args-cont} lines. 4287are both analyzed as @code{template-args-cont} lines.
3673 4288
3674Here is another (totally contrived) example which illustrates how syntax 4289@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3675is assigned to various conditional constructs: 4290@node Conditional Construct Symbols, Switch Statement Symbols, Class Symbols, Syntactic Symbols
4291@comment node-name, next, previous, up
4292@subsection Conditional Construct Symbols
4293@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4294
4295Here is a (totally contrived) example which illustrates how syntax is
4296assigned to various conditional constructs:
3676 4297
3677@example 4298@example
3678 1: void spam( int index ) 4299 1: void spam( int index )
@@ -3695,14 +4316,16 @@ is assigned to various conditional constructs:
3695Only the lines that illustrate new syntactic symbols will be discussed. 4316Only the lines that illustrate new syntactic symbols will be discussed.
3696 4317
3697@ssindex substatement-open 4318@ssindex substatement-open
3698@ssindex substatement-block-intro 4319@ssindex statement-block-intro
3699@ssindex block-close 4320@ssindex block-close
3700Line 4 has a brace which opens a conditional's substatement block. It 4321Line 4 has a brace which opens a conditional's substatement block. It
3701is thus assigned @code{substatement-open} syntax, and since line 5 is 4322is thus assigned @code{substatement-open} syntax, and since line 5 is
3702the first line in the substatement block, it is assigned 4323the first line in the substatement block, it is assigned
3703@code{substatement-block-intro} syntax. Line 10 contains the brace that 4324@code{statement-block-intro} syntax. Line 10 contains the brace
3704closes the inner substatement block, and is therefore given the syntax 4325that closes the inner substatement block, and is therefore given the
3705@code{block-close}. Line 13 is treated the same way. 4326syntax @code{block-close}@footnote{@code{block-open} is used only for
4327``free-standing'' blocks, and is somewhat rare (@pxref{Literal
4328Symbols} for an example.)}. Line 13 is treated the same way.
3706 4329
3707@ssindex substatement 4330@ssindex substatement
3708Lines 6 and 9 are also substatements of conditionals, but since they 4331Lines 6 and 9 are also substatements of conditionals, but since they
@@ -3731,6 +4354,12 @@ appears on a line by itself. Note that if the @code{while} appeared on
3731the same line as the preceding close brace, that line would still have 4354the same line as the preceding close brace, that line would still have
3732@code{block-close} syntax. 4355@code{block-close} syntax.
3733 4356
4357@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4358@node Switch Statement Symbols, Brace List Symbols, Conditional Construct Symbols, Syntactic Symbols
4359@comment node-name, next, previous, up
4360@subsection Switch Statement Symbols
4361@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4362
3734Switch statements have their own set of syntactic symbols. Here's an 4363Switch statements have their own set of syntactic symbols. Here's an
3735example: 4364example:
3736 4365
@@ -3761,6 +4390,12 @@ while lines 5 and 8 are assigned @code{statement-case-intro}. Line 11
3761is treated slightly differently since it contains a brace that opens a 4390is treated slightly differently since it contains a brace that opens a
3762block --- it is given @code{statement-case-open} syntax. 4391block --- it is given @code{statement-case-open} syntax.
3763 4392
4393@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4394@node Brace List Symbols, External Scope Symbols, Switch Statement Symbols, Syntactic Symbols
4395@comment node-name, next, previous, up
4396@subsection Brace List Symbols
4397@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4398
3764@cindex brace lists 4399@cindex brace lists
3765There are a set of syntactic symbols that are used to recognize 4400There are a set of syntactic symbols that are used to recognize
3766constructs inside of brace lists. A brace list is defined as an 4401constructs inside of brace lists. A brace list is defined as an
@@ -3815,6 +4450,12 @@ pretty standard, and line 7 is a @code{brace-list-close} as you'd
3815expect. Once again, line 8 is assigned as @code{brace-entry-open} as is 4450expect. Once again, line 8 is assigned as @code{brace-entry-open} as is
3816line 10. 4451line 10.
3817 4452
4453@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4454@node External Scope Symbols, Paren List Symbols, Brace List Symbols, Syntactic Symbols
4455@comment node-name, next, previous, up
4456@subsection External Scope Symbols
4457@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4458
3818External language definition blocks also have their own syntactic 4459External language definition blocks also have their own syntactic
3819symbols. In this example: 4460symbols. In this example:
3820 4461
@@ -3844,7 +4485,7 @@ where @code{inextern-lang} is a modifier similar in purpose to
3844 4485
3845There are various other top level blocks like @code{extern}, and they 4486There are various other top level blocks like @code{extern}, and they
3846are all treated in the same way except that the symbols are named after 4487are all treated in the same way except that the symbols are named after
3847the keyword that introduces the block. e.g., C++ namespace blocks get 4488the keyword that introduces the block. E.g. C++ namespace blocks get
3848the three symbols @code{namespace-open}, @code{namespace-close} and 4489the three symbols @code{namespace-open}, @code{namespace-close} and
3849@code{innamespace}. The currently recognized top level blocks are: 4490@code{innamespace}. The currently recognized top level blocks are:
3850 4491
@@ -3873,6 +4514,12 @@ that isn't the case for historical reasons.}
3873@code{composition} blocks in CORBA CIDL. 4514@code{composition} blocks in CORBA CIDL.
3874@end table 4515@end table
3875 4516
4517@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4518@node Paren List Symbols, Literal Symbols, External Scope Symbols, Syntactic Symbols
4519@comment node-name, next, previous, up
4520@subsection Parenthesis (Argument) List Symbols
4521@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4522
3876A number of syntactic symbols are associated with parenthesis lists, 4523A number of syntactic symbols are associated with parenthesis lists,
3877a.k.a argument lists, as found in function declarations and function 4524a.k.a argument lists, as found in function declarations and function
3878calls. This example illustrates these: 4525calls. This example illustrates these:
@@ -3916,10 +4563,23 @@ parenthesis. Contrast this against lines 6 and 13 which are assigned
3916@code{arglist-cont} syntax. This is because the parenthesis that opens 4563@code{arglist-cont} syntax. This is because the parenthesis that opens
3917their argument lists is the last character on that line. 4564their argument lists is the last character on that line.
3918 4565
4566Syntactic elements with @code{arglist-intro},
4567@code{arglist-cont-nonempty}, and @code{arglist-close} contain two
4568buffer positions: the anchor position (the beginning of the
4569declaration or statement) and the position of the open parenthesis.
4570The latter position can be used in a line-up function (@pxref{Line-Up
4571Functions}).
4572
3919Note that there is no @code{arglist-open} syntax. This is because any 4573Note that there is no @code{arglist-open} syntax. This is because any
3920parenthesis that opens an argument list, appearing on a separate line, 4574parenthesis that opens an argument list, appearing on a separate line,
3921is assigned the @code{statement-cont} syntax instead. 4575is assigned the @code{statement-cont} syntax instead.
3922 4576
4577@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4578@node Literal Symbols, Multiline Macro Symbols, Paren List Symbols, Syntactic Symbols
4579@comment node-name, next, previous, up
4580@subsection Comment String Label and Macro Symbols
4581@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4582
3923A few miscellaneous syntactic symbols that haven't been previously 4583A few miscellaneous syntactic symbols that haven't been previously
3924covered are illustrated by this C++ example: 4584covered are illustrated by this C++ example:
3925 4585
@@ -3955,7 +4615,9 @@ Line 2 is assigned the @code{func-decl-cont} syntax.
3955@item 4615@item
3956@ssindex comment-intro 4616@ssindex comment-intro
3957Line 4 is assigned both @code{defun-block-intro} @emph{and} 4617Line 4 is assigned both @code{defun-block-intro} @emph{and}
3958@code{comment-intro} syntax. 4618@code{comment-intro} syntax. A syntactic element with
4619@code{comment-intro} has no anchor point --- It is always accompanied
4620by another syntactic element which does have one.
3959 4621
3960@item 4622@item
3961@ssindex c 4623@ssindex c
@@ -3980,7 +4642,10 @@ Line 10 is assigned @code{label} syntax.
3980 4642
3981@item 4643@item
3982@ssindex block-open 4644@ssindex block-open
3983Line 11 is assigned @code{block-open} syntax. 4645Line 11 is assigned @code{block-open} as well as @code{statement}
4646syntax. A @code{block-open} syntactic element doesn't have an anchor
4647position, since it always appears with another syntactic element which
4648does have one.
3984 4649
3985@item 4650@item
3986@ssindex cpp-macro 4651@ssindex cpp-macro
@@ -3990,20 +4655,28 @@ normal syntactic symbols (@code{statement-block-intro} and
3990configured to cancel out the normal syntactic context to make all 4655configured to cancel out the normal syntactic context to make all
3991preprocessor directives stick to the first column, but that's easily 4656preprocessor directives stick to the first column, but that's easily
3992changed if you want preprocessor directives to be indented like the rest 4657changed if you want preprocessor directives to be indented like the rest
3993of the code. 4658of the code. Like @code{comment-intro}, a syntactic element with
4659@code{cpp-macro} doesn't contain an anchor position.
3994 4660
3995@item 4661@item
3996@ssindex stream-op 4662@ssindex stream-op
3997Line 17 is assigned @code{stream-op} syntax. 4663Line 17 is assigned @code{stream-op} syntax.
3998@end itemize 4664@end itemize
3999 4665
4666@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4667@node Multiline Macro Symbols, Objective-C Method Symbols, Literal Symbols, Syntactic Symbols
4668@comment node-name, next, previous, up
4669@subsection Multiline Macro Symbols
4670@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4671
4000@cindex multiline macros 4672@cindex multiline macros
4001@cindex syntactic whitespace 4673@cindex syntactic whitespace
4002@ssindex cpp-define-intro 4674@ssindex cpp-define-intro
4675@ssindex cpp-macro-cont
4003Multiline preprocessor macro definitions are normally handled just like 4676Multiline preprocessor macro definitions are normally handled just like
4004other code, i.e., the lines inside them are indented according to the 4677other code, i.e. the lines inside them are indented according to the
4005syntactic analysis of the preceding lines inside the macro. The first 4678syntactic analysis of the preceding lines inside the macro. The first
4006line inside a macro definition (i.e., the line after the starting line of 4679line inside a macro definition (i.e. the line after the starting line of
4007the cpp directive itself) gets @code{cpp-define-intro}. In this example: 4680the cpp directive itself) gets @code{cpp-define-intro}. In this example:
4008 4681
4009@example 4682@example
@@ -4019,17 +4692,23 @@ line 1 is given the syntactic symbol @code{cpp-macro}. The first line
4019of a cpp directive is always given that symbol. Line 2 is given 4692of a cpp directive is always given that symbol. Line 2 is given
4020@code{cpp-define-intro}, so that you can give the macro body as a whole 4693@code{cpp-define-intro}, so that you can give the macro body as a whole
4021some extra indentation. Lines 3 through 5 are then analyzed as normal 4694some extra indentation. Lines 3 through 5 are then analyzed as normal
4022code, i.e., @code{substatement} on lines 3 and 4, and @code{else-clause} 4695code, i.e. @code{substatement} on lines 3 and 4, and @code{else-clause}
4023on line 5. 4696on line 5.
4024 4697
4025The syntactic analysis inside macros can be turned off with 4698The syntactic analysis inside macros can be turned off with
4026@code{c-syntactic-indentation-in-macros}. In that case, lines 2 through 4699@code{c-syntactic-indentation-in-macros} (@pxref{Custom Macros}). In
40275 would all be given @code{cpp-macro-cont} with a relative buffer 4700that case, lines 2 through 5 would all be given @code{cpp-macro-cont}
4028position pointing to the @code{#} which starts the cpp 4701with an anchor position pointing to the @code{#} which starts the cpp
4029directive@footnote{This is how @ccmode{} 5.28 and earlier analyzed 4702directive@footnote{This is how @ccmode{} 5.28 and earlier analyzed
4030macros.}. 4703macros.}.
4031 4704
4032@xref{Macro Handling}, for more info about the treatment of macros. 4705@xref{Custom Macros}, for more info about the treatment of macros.
4706
4707@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4708@node Objective-C Method Symbols, Anonymous Class Symbol, Multiline Macro Symbols, Syntactic Symbols
4709@comment node-name, next, previous, up
4710@subsection Objective-C Method Symbols
4711@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4033 4712
4034In Objective-C buffers, there are three additional syntactic symbols 4713In Objective-C buffers, there are three additional syntactic symbols
4035assigned to various message calling constructs. Here's an example 4714assigned to various message calling constructs. Here's an example
@@ -4052,7 +4731,13 @@ Here, line 1 is assigned @code{objc-method-intro} syntax, and line 2 is
4052assigned @code{objc-method-args-cont} syntax. Lines 5 and 6 are both 4731assigned @code{objc-method-args-cont} syntax. Lines 5 and 6 are both
4053assigned @code{objc-method-call-cont} syntax. 4732assigned @code{objc-method-call-cont} syntax.
4054 4733
4055Java has a concept of anonymous classes, which may look something like 4734@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4735@node Anonymous Class Symbol, Statement Block Symbols, Objective-C Method Symbols, Syntactic Symbols
4736@comment node-name, next, previous, up
4737@subsection Anonymous Class Symbol (Java)
4738@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4739
4740Java has a concept of anonymous classes which can look something like
4056this: 4741this:
4057 4742
4058@example 4743@example
@@ -4070,11 +4755,18 @@ The brace following the @code{new} operator opens the anonymous class.
4070Lines 3 and 6 are assigned the @code{inexpr-class} syntax, besides the 4755Lines 3 and 6 are assigned the @code{inexpr-class} syntax, besides the
4071@code{inclass} symbol used in normal classes. Thus, the class will be 4756@code{inclass} symbol used in normal classes. Thus, the class will be
4072indented just like a normal class, with the added indentation given to 4757indented just like a normal class, with the added indentation given to
4073@code{inexpr-class}. 4758@code{inexpr-class}. An @code{inexpr-class} syntactic element doesn't
4759have an anchor position.
4760
4761@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4762@node Statement Block Symbols, K&R Symbols, Anonymous Class Symbol, Syntactic Symbols
4763@comment node-name, next, previous, up
4764@subsection Statement Block Symbols
4765@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4074 4766
4075There are a few occasions where a statement block may be used inside an 4767There are a few occasions where a statement block might be used inside
4076expression. One is in C or C++ code using the gcc extension for this, 4768an expression. One is in C or C++ code using the gcc extension for
4077e.g: 4769this, e.g:
4078 4770
4079@example 4771@example
4080 1: int res = (@{ 4772 1: int res = (@{
@@ -4088,7 +4780,8 @@ e.g:
4088Lines 2 and 5 get the @code{inexpr-statement} syntax, besides the 4780Lines 2 and 5 get the @code{inexpr-statement} syntax, besides the
4089symbols they'd get in a normal block. Therefore, the indentation put on 4781symbols they'd get in a normal block. Therefore, the indentation put on
4090@code{inexpr-statement} is added to the normal statement block 4782@code{inexpr-statement} is added to the normal statement block
4091indentation. 4783indentation. An @code{inexpr-statement} syntactic element doesn't
4784contain an anchor position.
4092 4785
4093In Pike code, there are a few other situations where blocks occur inside 4786In Pike code, there are a few other situations where blocks occur inside
4094statements, as illustrated here: 4787statements, as illustrated here:
@@ -4129,6 +4822,12 @@ with the @code{inexpr-statement} syntax, just like the gcc extended C
4129example above. The other similar special function, @code{gauge}, is 4822example above. The other similar special function, @code{gauge}, is
4130handled like this too. 4823handled like this too.
4131 4824
4825@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4826@node K&R Symbols, , Statement Block Symbols, Syntactic Symbols
4827@comment node-name, next, previous, up
4828@subsection K&R Symbols
4829@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4830
4132@ssindex knr-argdecl-intro 4831@ssindex knr-argdecl-intro
4133@ssindex knr-argdecl 4832@ssindex knr-argdecl
4134Two other syntactic symbols can appear in old style, non-prototyped C 4833Two other syntactic symbols can appear in old style, non-prototyped C
@@ -4146,30 +4845,467 @@ code @footnote{a.k.a. K&R C, or Kernighan & Ritchie C}:
4146 4845
4147Here, line 2 is the first line in an argument declaration list and so is 4846Here, line 2 is the first line in an argument declaration list and so is
4148given the @code{knr-argdecl-intro} syntactic symbol. Subsequent lines 4847given the @code{knr-argdecl-intro} syntactic symbol. Subsequent lines
4149(i.e., lines 3 and 4 in this example), are given @code{knr-argdecl} 4848(i.e. lines 3 and 4 in this example), are given @code{knr-argdecl}
4150syntax. 4849syntax.
4151 4850
4152 4851
4153@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 4852@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4154@node Indentation Functions, AWK Mode, Syntactic Symbols, Top 4853@node Indentation Calculation, , Syntactic Symbols, Indentation Engine Basics
4155@comment node-name, next, previous, up 4854@comment node-name, next, previous, up
4156@chapter Indentation Functions 4855@section Indentation Calculation
4856@cindex indentation
4157@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 4857@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4158 4858
4159@cindex indentation function 4859Indentation for a line is calculated from the syntactic context
4160@cindex line-up function 4860(@pxref{Syntactic Analysis}).
4161Often there are cases when a simple offset setting on a syntactic 4861
4162symbol isn't enough to get the desired indentation. Therefore, it's 4862First, a buffer position is found whose column will be the base for the
4163also possible to use an @dfn{indentation function} (a.k.a. @dfn{line-up 4863indentation calculation. It's the anchor position in the first
4164function}) for a syntactic symbol. 4864syntactic element that provides one that is used. If no syntactic
4865element has an anchor position then column zero is used.
4866
4867Second, the syntactic symbols in each syntactic element are looked up
4868in the @code{c-offsets-alist} style variable
4869(@pxref{c-offsets-alist}), which is an association list of syntactic
4870symbols and the offsets to apply for those symbols. These offsets are
4871added together with the base column to produce the new indentation
4872column.
4873
4874Let's use our two code examples above to see how this works. Here is
4875our first example again:
4876
4877@example
4878 1: void swap( int& a, int& b )
4879 2: @{
4880 3: int tmp = a;
4881 4: a = b;
4882 5: b = tmp;
4883 6: @}
4884@end example
4885
4886Let's say point is on line 3 and we hit the @kbd{TAB} key to reindent
4887the line. The syntactic context for that line is:
4888
4889@example
4890((defun-block-intro 29))
4891@end example
4892
4893@noindent
4894Since buffer position 29 is the first and only anchor position in the
4895list, @ccmode{} goes there and asks for the current column. This brace
4896is in column zero, so @ccmode{} uses @samp{0} as the base column.
4897
4898Next, @ccmode{} looks up @code{defun-block-intro} in the
4899@code{c-offsets-alist} style variable. Let's say it finds the value
4900@samp{4}; it adds this to the base column @samp{0}, yielding a running
4901total indentation of 4 spaces.
4902
4903Since there is only one syntactic element on the list for this line,
4904indentation calculation is complete, and the total indentation for the
4905line is 4 spaces.
4906
4907Here's another example:
4908
4909@example
4910 1: int add( int val, int incr, int doit )
4911 2: @{
4912 3: if( doit )
4913 4: @{
4914 5: return( val + incr );
4915 6: @}
4916 7: return( val );
4917 8: @}
4918@end example
4919
4920If we were to hit @kbd{TAB} on line 4 in the above example, the same
4921basic process is performed, despite the differences in the syntactic
4922context. The context for this line is:
4923
4924@example
4925((substatement-open 46))
4926@end example
4927
4928Here, @ccmode{} goes to buffer position 46, which is the @samp{i} in
4929@code{if} on line 3. This character is in the fourth column on that
4930line so the base column is @samp{4}. Then @ccmode{} looks up the
4931@code{substatement-open} symbol in @code{c-offsets-alist}. Let's say it
4932finds the value @samp{4}. It's added with the base column and yields an
4933indentation for the line of 8 spaces.
4934
4935Simple, huh?
4936
4937Actually, it's a bit more complicated than that since the entries on
4938@code{c-offsets-alist} can be much more than plain offsets.
4939@xref{c-offsets-alist}, for the full story.
4940
4941Anyway, the mode usually just does The Right Thing without you having to
4942think about it in this much detail. But when customizing indentation,
4943it's helpful to understand the general indentation model being used.
4944
4945As you configure @ccmode{}, you might want to set the variable
4946@code{c-echo-syntactic-information-p} to non-@code{nil} so that the
4947syntactic context and calculated offset always is echoed in the
4948minibuffer when you hit @kbd{TAB}.
4949
4950
4951@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4952@node Customizing Indentation, Custom Macros, Indentation Engine Basics, Top
4953@comment node-name, next, previous, up
4954@chapter Customizing Indentation
4955@cindex customization, indentation
4956@cindex indentation
4957@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4958
4959The principal variable for customizing indentation is the style
4960variable @code{c-offsets-alist}, which gives an @dfn{offset} (an
4961indentation rule) for each syntactic symbol. Its structure and
4962semantics are completely described in @ref{c-offsets-alist}. The
4963various ways you can set the variable, including the use of the
4964@ccmode{} style system, are described in @ref{Config Basics} and its
4965sections, in particular @ref{Style Variables}.
4966
4967The simplest and most used kind of ``offset'' setting in
4968@code{c-offsets-alist} is in terms of multiples of
4969@code{c-basic-offset}:
4970
4971@defopt c-basic-offset
4972@vindex basic-offset (c-)
4973This style variable holds the basic offset between indentation levels.
4974It's factory default is 4, but all the built-in styles set it
4975themselves, to some value between 2 (for @code{gnu} style) and 8 (for
4976@code{bsd}, @code{linux}, and @code{python} styles).
4977@end defopt
4978
4979The most flexible ``offset'' setting you can make in
4980@code{c-offsets-alist} is a line-up function (or even a list of them),
4981either one supplied by @ccmode{} (@pxref{Line-Up Functions}) or one
4982you write yourself (@pxref{Custom Line-Up}).
4983
4984Finally, in @ref{Other Indentation} you'll find the tool of last
4985resort: a hook which is called after a line has been indented. You
4986can install functions here to make ad-hoc adjustments to any line's
4987indentation.
4988
4989@menu
4990* c-offsets-alist::
4991* Interactive Customization::
4992* Line-Up Functions::
4993* Custom Line-Up::
4994* Other Indentation::
4995@end menu
4996
4997
4998@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4999@node c-offsets-alist, Interactive Customization, Customizing Indentation, Customizing Indentation
5000@comment node-name, next, previous, up
5001@section c-offsets-alist
5002@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5003
5004This section explains the structure and semantics of the style
5005variable @code{c-offset-alist}, the principal variable for configuring
5006indentation. Details of how to set it up, and its relationship to
5007@ccmode{}'s style system are given in @ref{Style Variables}.
5008
5009@defopt c-offsets-alist
5010@vindex offsets-alist (c-)
5011This is an alist which associates an offset with each syntactic
5012symbol. This @dfn{offset} is a rule specifying how to indent a line
5013whose syntactic context matches the symbol. @xref{Syntactic
5014Analysis}.
5015
5016Note that the buffer-local binding of this alist in a @ccmode{} buffer
5017contains an entry for @emph{every} syntactic symbol. Its global
5018binding and its settings within style specifications usually contain
5019only a few entries. @xref{Style Variables}.
5020
5021The offset specification associated with any particular syntactic
5022symbol can be an integer, a variable name, a vector, a function or
5023lambda expression, a list, or one of the following special symbols:
5024@code{+}, @code{-}, @code{++}, @code{--}, @code{*}, or @code{/}. The
5025meanings of these values are described in detail below.
5026
5027Here is an example fragment of a @code{c-offsets-alist}, showing some
5028of these kinds of offsets:
5029
5030@example
5031((statement . 0)
5032 (substatement . +)
5033 (cpp-macro . [0])
5034 (topmost-intro-cont . c-lineup-topmost-intro-cont)
5035 (statement-block-intro . (add c-lineup-whitesmith-in-block
5036 c-indent-multi-line-block))
5037 @dots{}
5038@*)
5039@end example
5040@end defopt
5041
5042@deffn Command c-set-offset (@kbd{C-c C-o})
5043@findex set-offset (c-)
5044@kindex C-c C-o
5045This command changes the entry for a syntactic symbol in the current
5046binding of @code{c-offsets-alist}, or it inserts a new entry if there
5047isn't already one for that syntactic symbol.
5048
5049You can use @code{c-set-offsets} interactively within a @ccmode{}
5050buffer to make experimental changes to your indentation settings.
5051@kbd{C-c C-o} prompts you for the syntactic symbol to change
5052(defaulting to that of the current line) and the new offset
5053(defaulting to the current offset).
5054
5055@code{c-set-offsets} takes two arguments when used programmatically:
5056@var{symbol}, the syntactic element symbol to change and @var{offset},
5057the new offset for that syntactic element. You can call the command
5058in your @file{.emacs} to change the global binding of
5059@code{c-offsets-alist} (@pxref{Style Variables}); you can use it in a
5060hook function to make changes from the current style. @ccmode{}
5061itself uses this function when initializing styles.
5062@end deffn
5063
5064@cindex offset specification
5065The ``offset specifications'' in @code{c-offsets-alist} can be any of
5066the following:
5067
5068@table @asis
5069@item An integer
5070The integer specifies a relative offset. All relative
5071offsets@footnote{The syntactic context @code{@w{((defun-block-intro
50722724) (comment-intro))}} would likely have two relative offsets.} will
5073be added together and used to calculate the indentation relative to an
5074anchor position earlier in the buffer. @xref{Indentation
5075Calculation}, for details. Most of the time, it's probably better to
5076use one of the special symbols like @code{+} than an integer (apart
5077from zero).
5078
5079@item One of the symbols @code{+}, @code{-}, @code{++}, @code{--}, @code{*}, or @code{/}
5080These special symbols describe a relative offset in multiples of
5081@code{c-basic-offset}:
5082
5083By defining a style's indentation in terms of @code{c-basic-offset},
5084you can change the amount of whitespace given to an indentation level
5085while maintaining the same basic shape of your code. Here are the
5086values that the special symbols correspond to:
5087
5088@table @code
5089@item +
5090@code{c-basic-offset} times 1
5091@item -
5092@code{c-basic-offset} times -1
5093@item ++
5094@code{c-basic-offset} times 2
5095@item --
5096@code{c-basic-offset} times -2
5097@item *
5098@code{c-basic-offset} times 0.5
5099@item /
5100@code{c-basic-offset} times -0.5
5101@end table
5102
5103@item A vector
5104The first element of the vector, an integer, sets the absolute
5105indentation column. This will override any previously calculated
5106indentation, but won't override relative indentation calculated from
5107syntactic elements later on in the syntactic context of the line being
5108indented. @xref{Indentation Calculation}. Any elements in the vector
5109beyond the first will be ignored.
5110
5111@item A function or lambda expression
5112The function will be called and its return value will in turn be
5113evaluated as an offset specification. Functions are useful when more
5114context than just the syntactic symbol is needed to get the desired
5115indentation. @xref{Line-Up Functions}, and @ref{Custom Line-Up}, for
5116details about them.
5117
5118@item A symbol with a variable binding
5119If the symbol also has a function binding, the function takes
5120precedence over the variable. Otherwise the value of the variable is
5121used. It must be an integer (which is used as relative offset) or a
5122vector (an absolute offset).
5123
5124@item A list
5125The offset can also be a list containing several offset
5126specifications; these are evaluated recursively and combined. A list
5127is typically only useful when some of the offsets are line-up
5128functions. A common strategy is calling a sequence of functions in
5129turn until one of them recognizes that it is appropriate for the
5130source line and returns a non-@code{nil} value.
5131
5132@code{nil} values are always ignored when the offsets are combined.
5133The first element of the list specifies the method of combining the
5134non-@code{nil} offsets from the remaining elements:
5135
5136@table @code
5137@item first
5138Use the first offset that doesn't evaluate to @code{nil}. Subsequent
5139elements of the list don't get evaluated.
5140@item min
5141Use the minimum of all the offsets. All must be either relative or
5142absolute - they can't be mixed.
5143@item max
5144Use the maximum of all the offsets. All must be either relative or
5145absolute - they can't be mixed.
5146@item add
5147Add all the evaluated offsets together. Exactly one of them may be
5148absolute, in which case the result is absolute. Any relative offsets
5149that preceded the absolute one in the list will be ignored in that case.
5150@end table
5151
5152As a compatibility measure, if the first element is none of the above
5153then it too will be taken as an offset specification and the whole list
5154will be combined according to the method @code{first}.
5155@end table
5156
5157@vindex c-strict-syntax-p
5158@vindex strict-syntax-p (c-)
5159If an offset specification evaluates to @code{nil}, then a relative
5160offset of 0 (zero) is used@footnote{There is however a variable
5161@code{c-strict-syntax-p} that when set to non-@code{nil} will cause an
5162error to be signaled in that case. It's now considered obsolete since
5163it doesn't work well with some of the alignment functions that returns
5164@code{nil} instead of zero. You should therefore leave
5165@code{c-strict-syntax-p} set to @code{nil}.}.
5166
5167@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5168@node Interactive Customization, Line-Up Functions, c-offsets-alist, Customizing Indentation
5169@comment node-name, next, previous, up
5170@section Interactive Customization
5171@cindex customization, interactive
5172@cindex interactive customization
5173@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5174
5175As an example of how to customize indentation, let's change the
5176style of this example@footnote{In this and subsequent examples, the
5177original code is formatted using the @samp{gnu} style unless otherwise
5178indicated. @xref{Styles}.}:
5179
5180@example
5181@group
5182 1: int add( int val, int incr, int doit )
5183 2: @{
5184 3: if( doit )
5185 4: @{
5186 5: return( val + incr );
5187 6: @}
5188 7: return( val );
5189 8: @}
5190@end group
5191@end example
5192
5193@noindent
5194to:
5195
5196@example
5197@group
5198 1: int add( int val, int incr, int doit )
5199 2: @{
5200 3: if( doit )
5201 4: @{
5202 5: return( val + incr );
5203 6: @}
5204 7: return( val );
5205 8: @}
5206@end group
5207@end example
5208
5209In other words, we want to change the indentation of braces that open a
5210block following a condition so that the braces line up under the
5211conditional, instead of being indented. Notice that the construct we
5212want to change starts on line 4. To change the indentation of a line,
5213we need to see which syntactic symbols affect the offset calculations
5214for that line. Hitting @kbd{C-c C-s} on line 4 yields:
5215
5216@example
5217((substatement-open 44))
5218@end example
5219
5220@noindent
5221so we know that to change the offset of the open brace, we need to
5222change the indentation for the @code{substatement-open} syntactic
5223symbol.
5224
5225To do this interactively, just hit @kbd{C-c C-o}. This prompts
5226you for the syntactic symbol to change, providing a reasonable default.
5227In this case, the default is @code{substatement-open}, which is just the
5228syntactic symbol we want to change!
5229
5230After you hit return, @ccmode{} will then prompt you for the new
5231offset value, with the old value as the default. The default in this
5232case is @samp{+}, but we want no extra indentation so enter
5233@samp{0} and @kbd{RET}. This will associate the offset 0 with the
5234syntactic symbol @code{substatement-open}.
4165 5235
4166@ccmode{} comes with many predefined indentation functions for common 5236To check your changes quickly, just hit @kbd{C-c C-q}
4167situations. If none of these does what you want, you can write your 5237(@code{c-indent-defun}) to reindent the entire function. The example
4168own, see @ref{Custom Indentation Functions}. If you do, it's probably a 5238should now look like:
4169good idea to start working from one of these predefined functions, they
4170can be found in the file @file{cc-align.el}.
4171 5239
4172For every function below there is a ``works with'' list that indicates 5240@example
5241@group
5242 1: int add( int val, int incr, int doit )
5243 2: @{
5244 3: if( doit )
5245 4: @{
5246 5: return( val + incr );
5247 6: @}
5248 7: return( val );
5249 8: @}
5250@end group
5251@end example
5252
5253Notice how just changing the open brace offset on line 4 is all we
5254needed to do. Since the other affected lines are indented relative to
5255line 4, they are automatically indented the way you'd expect. For more
5256complicated examples, this might not always work. The general approach
5257to take is to always start adjusting offsets for lines higher up in the
5258file, then reindent and see if any following lines need further
5259adjustments.
5260
5261@c Move this bit to "Styles" (2005/10/7)
5262@deffn Command c-set-offset symbol offset
5263@findex set-offset (c-)
5264@kindex C-c C-o
5265This is the command bound to @kbd{C-c C-o}. It provides a convenient
5266way to set offsets on @code{c-offsets-alist} both interactively (see
5267the example above) and from your mode hook.
5268
5269It takes two arguments when used programmatically: @var{symbol} is the
5270syntactic element symbol to change and @var{offset} is the new offset
5271for that syntactic element.
5272@end deffn
5273@c End of MOVE THIS BIT.
5274
5275@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5276@node Line-Up Functions, Custom Line-Up, Interactive Customization, Customizing Indentation
5277@comment node-name, next, previous, up
5278@section Line-Up Functions
5279@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5280
5281@cindex line-up function
5282@cindex indentation function
5283Often there are cases when a simple offset setting on a syntactic
5284symbol isn't enough to get the desired indentation---for example, you
5285might want to line up a closing parenthesis with the matching opening
5286one rather than indenting relative to its ``anchor point''. @ccmode{}
5287provides this flexibility with @dfn{line-up functions}.
5288
5289The way you associate a line-up function with a syntactic symbol is
5290described in @ref{c-offsets-alist}. @ccmode{} comes with many
5291predefined line-up functions for common situations. If none of these
5292does what you want, you can write your own. @xref{Custom Line-Up}.
5293Sometimes, it is easier to tweak the standard indentation by adding a
5294function to @code{c-special-indent-hook} (@pxref{Other Indentation}).
5295
5296The line-up functions haven't been adapted for AWK buffers or tested
5297with them. Some of them might work serendipitously. There shouldn't be
5298any problems writing custom line-up functions for AWK mode.
5299
5300The calling convention for line-up functions is described fully in
5301@ref{Custom Line-Up}. Roughly speaking, the return value is either an
5302offset itself (such as @code{+} or @code{[0]}) or it's @code{nil},
5303meaning ``this function is inappropriate in this case - try a
5304different one''. @xref{c-offsets-alist}.
5305
5306The subsections below describe all the standard line-up functions,
5307categorized by the sort of token the lining-up centres around. For
5308each of these functions there is a ``works with'' list that indicates
4173which syntactic symbols the function is intended to be used with. 5309which syntactic symbols the function is intended to be used with.
4174 5310
4175@macro workswith 5311@macro workswith
@@ -4202,6 +5338,77 @@ Works with:
4202@end macro 5338@end macro
4203@end iftex 5339@end iftex
4204 5340
5341@menu
5342* Brace/Paren Line-Up::
5343* List Line-Up::
5344* Operator Line-Up::
5345* Comment Line-Up::
5346* Misc Line-Up::
5347@end menu
5348
5349@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5350@node Brace/Paren Line-Up, List Line-Up, Line-Up Functions, Line-Up Functions
5351@comment node-name, next, previous, up
5352@subsection Brace and Parenthesis Line-Up Functions
5353@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5354
5355The line-up functions here calculate the indentation for braces,
5356parentheses and statements within brace blocks.
5357
5358@defun c-lineup-close-paren
5359@findex lineup-close-paren (c-)
5360Line up the closing paren under its corresponding open paren if the
5361open paren is followed by code. If the open paren ends its line, no
5362indentation is added. E.g:
5363
5364@example
5365@group
5366main (int,
5367 char **
5368 ) @hereFn{c-lineup-close-paren}
5369@end group
5370@end example
5371
5372@noindent
5373and
5374
5375@example
5376@group
5377main (
5378 int, char **
5379) @hereFn{c-lineup-close-paren}
5380@end group
5381@end example
5382
5383As a special case, if a brace block is opened at the same line as the
5384open parenthesis of the argument list, the indentation is
5385@code{c-basic-offset} instead of the open paren column. See
5386@code{c-lineup-arglist} for further discussion of this ``DWIM'' measure.
5387
5388@workswith All @code{*-close} symbols.
5389@end defun
5390
5391@comment ------------------------------------------------------------
5392
5393@anchor{c-lineup-arglist-close-under-paren}
5394@defun c-lineup-arglist-close-under-paren
5395@findex lineup-arglist-close-under-paren (c-)
5396Set your @code{arglist-close} syntactic symbol to this line-up function
5397so that parentheses that close argument lists will line up under the
5398parenthesis that opened the argument list. It can also be used with
5399@code{arglist-cont} and @code{arglist-cont-nonempty} to line up all
5400lines inside a parenthesis under the open paren.
5401
5402As a special case, if a brace block is opened at the same line as the
5403open parenthesis of the argument list, the indentation is
5404@code{c-basic-offset} only. See @code{c-lineup-arglist} for further
5405discussion of this ``DWIM'' measure.
5406
5407@workswith Almost all symbols, but are typically most useful on
5408@code{arglist-close}, @code{brace-list-close}, @code{arglist-cont} and
5409@code{arglist-cont-nonempty}.
5410@end defun
5411
4205@comment ------------------------------------------------------------ 5412@comment ------------------------------------------------------------
4206 5413
4207@defun c-indent-one-line-block 5414@defun c-indent-one-line-block
@@ -4274,29 +5481,141 @@ block, which makes the function usable in list expressions.
4274 5481
4275@comment ------------------------------------------------------------ 5482@comment ------------------------------------------------------------
4276 5483
4277@defun c-lineup-argcont 5484@defun c-lineup-runin-statements
4278@findex lineup-argcont (c-) 5485@findex lineup-runin-statements (c-)
4279Line up a continued argument. E.g: 5486Line up statements for coding standards which place the first statement
5487in a block on the same line as the block opening brace@footnote{Run-in
5488style doesn't really work too well. You might need to write your own
5489custom line-up functions to better support this style.}. E.g:
4280 5490
4281@example 5491@example
4282@group 5492@group
4283foo (xyz, aaa + bbb + ccc 5493int main()
4284 + ddd + eee + fff); @hereFn{c-lineup-argcont} 5494@{ puts ("Hello!");
5495 return 0; @hereFn{c-lineup-runin-statements}
5496@}
4285@end group 5497@end group
4286@end example 5498@end example
4287 5499
4288Only continuation lines like this are touched, @code{nil} is returned on 5500If there is no statement after the opening brace to align with,
4289lines which are the start of an argument. 5501@code{nil} is returned. This makes the function usable in list
5502expressions.
4290 5503
4291Within a gcc @code{asm} block, @code{:} is recognised as an argument 5504@workswith The @code{statement} syntactic symbol.
4292separator, but of course only between operand specifications, not in the 5505@end defun
4293expressions for the operands.
4294 5506
4295@workswith @code{arglist-cont}, @code{arglist-cont-nonempty}. 5507@comment ------------------------------------------------------------
5508
5509@defun c-lineup-inexpr-block
5510@findex lineup-inexpr-block (c-)
5511This can be used with the in-expression block symbols to indent the
5512whole block to the column where the construct is started. E.g. for Java
5513anonymous classes, this lines up the class under the @samp{new} keyword,
5514and in Pike it lines up the lambda function body under the @samp{lambda}
5515keyword. Returns @code{nil} if the block isn't part of such a
5516construct.
5517
5518@workswith @code{inlambda}, @code{inexpr-statement},
5519@code{inexpr-class}.
4296@end defun 5520@end defun
4297 5521
4298@comment ------------------------------------------------------------ 5522@comment ------------------------------------------------------------
4299 5523
5524@defun c-lineup-after-whitesmith-blocks
5525@findex lineup-after-whitesmith-blocks (c-)
5526Compensate for Whitesmith style indentation of blocks. Due to the way
5527@ccmode{} calculates anchor positions for normal lines inside blocks,
5528this function is necessary for those lines to get correct Whitesmith
5529style indentation. Consider the following examples:
5530
5531@example
5532@group
5533int foo()
5534 @{
5535 a;
5536 x; @hereFn{c-lineup-after-whitesmith-blocks}
5537@end group
5538@end example
5539
5540@example
5541@group
5542int foo()
5543 @{
5544 @{
5545 a;
5546 @}
5547 x; @hereFn{c-lineup-after-whitesmith-blocks}
5548@end group
5549@end example
5550
5551The fact that the line with @code{x} is preceded by a Whitesmith style
5552indented block in the latter case and not the first should not affect
5553its indentation. But since CC Mode in cases like this uses the
5554indentation of the preceding statement as anchor position, the @code{x}
5555would in the second case be indented too much if the offset for
5556@code{statement} was set simply to zero.
5557
5558This lineup function corrects for this situation by detecting if the
5559anchor position is at an open paren character. In that case, it instead
5560indents relative to the surrounding block just like
5561@code{c-lineup-whitesmith-in-block}.
5562
5563@workswith @code{brace-list-entry}, @code{brace-entry-open},
5564@code{statement}, @code{arglist-cont}.
5565@end defun
5566
5567@comment ------------------------------------------------------------
5568
5569@defun c-lineup-whitesmith-in-block
5570@findex lineup-whitesmith-in-block (c-)
5571Line up lines inside a block in Whitesmith style. It's done in a way
5572that works both when the opening brace hangs and when it doesn't. E.g:
5573
5574@example
5575@group
5576something
5577 @{
5578 foo; @hereFn{c-lineup-whitesmith-in-block}
5579 @}
5580@end group
5581@end example
5582
5583@noindent
5584and
5585
5586@example
5587@group
5588something @{
5589 foo; @hereFn{c-lineup-whitesmith-in-block}
5590 @}
5591@sssTBasicOffset{}
5592@end group
5593@end example
5594
5595In the first case the indentation is kept unchanged, in the second
5596@code{c-basic-offset} is added.
5597
5598@workswith @code{defun-close}, @code{defun-block-intro},
5599@code{inline-close}, @code{block-close}, @code{brace-list-close},
5600@code{brace-list-intro}, @code{statement-block-intro},
5601@code{arglist-intro}, @code{arglist-cont-nonempty},
5602@code{arglist-close}, and all @code{in*} symbols, e.g. @code{inclass}
5603and @code{inextern-lang}.
5604@end defun
5605
5606@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5607@node List Line-Up, Operator Line-Up, Brace/Paren Line-Up, Line-Up Functions
5608@comment node-name, next, previous, up
5609@subsection List Line-Up Functions
5610@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5611
5612The line-up functions here calculate the indentation for lines which
5613form lists of items, usually separated by commas.
5614
5615The function @ref{c-lineup-arglist-close-under-paren}, which is mainly
5616for indenting a close parenthesis, is also useful for the lines
5617contained within parentheses.
5618
4300@defun c-lineup-arglist 5619@defun c-lineup-arglist
4301@findex lineup-arglist (c-) 5620@findex lineup-arglist (c-)
4302Line up the current argument line under the first argument. 5621Line up the current argument line under the first argument.
@@ -4304,7 +5623,7 @@ Line up the current argument line under the first argument.
4304As a special case, if an argument on the same line as the open 5623As a special case, if an argument on the same line as the open
4305parenthesis starts with a brace block opener, the indentation is 5624parenthesis starts with a brace block opener, the indentation is
4306@code{c-basic-offset} only. This is intended as a ``DWIM'' measure in 5625@code{c-basic-offset} only. This is intended as a ``DWIM'' measure in
4307cases like macros that contains statement blocks, e.g: 5626cases like macros that contain statement blocks, e.g:
4308 5627
4309@example 5628@example
4310@group 5629@group
@@ -4337,22 +5656,188 @@ brace block.
4337 5656
4338@comment ------------------------------------------------------------ 5657@comment ------------------------------------------------------------
4339 5658
4340@defun c-lineup-arglist-close-under-paren 5659@defun c-lineup-multi-inher
4341@findex lineup-arglist-close-under-paren (c-) 5660@findex lineup-multi-inher (c-)
4342Set your @code{arglist-close} syntactic symbol to this line-up function 5661Line up the classes in C++ multiple inheritance clauses and member
4343so that parentheses that close argument lists will line up under the 5662initializers under each other. E.g:
4344parenthesis that opened the argument list. It can also be used with
4345@code{arglist-cont} and @code{arglist-cont-nonempty} to line up all
4346lines inside a parenthesis under the open paren.
4347 5663
4348As a special case, if a brace block is opened at the same line as the 5664@example
4349open parenthesis of the argument list, the indentation is 5665@group
4350@code{c-basic-offset} only. See @code{c-lineup-arglist} for further 5666Foo::Foo (int a, int b):
4351discussion of this ``DWIM'' measure. 5667 Cyphr (a),
5668 Bar (b) @hereFn{c-lineup-multi-inher}
5669@end group
5670@end example
4352 5671
4353@workswith Almost all symbols, but are typically most useful on 5672@noindent
4354@code{arglist-close}, @code{brace-list-close}, @code{arglist-cont} and 5673and
4355@code{arglist-cont-nonempty}. 5674
5675@example
5676@group
5677class Foo
5678 : public Cyphr,
5679 public Bar @hereFn{c-lineup-multi-inher}
5680@end group
5681@end example
5682
5683@noindent
5684and
5685
5686@example
5687@group
5688Foo::Foo (int a, int b)
5689 : Cyphr (a)
5690 , Bar (b) @hereFn{c-lineup-multi-inher}
5691@end group
5692@end example
5693
5694@workswith @code{inher-cont}, @code{member-init-cont}.
5695@end defun
5696
5697@comment ------------------------------------------------------------
5698
5699@defun c-lineup-java-inher
5700@findex lineup-java-inher (c-)
5701Line up Java implements and extends declarations. If class names
5702follow on the same line as the @samp{implements}/@samp{extends}
5703keyword, they are lined up under each other. Otherwise, they are
5704indented by adding @code{c-basic-offset} to the column of the keyword.
5705E.g:
5706
5707@example
5708@group
5709class Foo
5710 extends
5711 Bar @hereFn{c-lineup-java-inher}
5712 @sssTBasicOffset{}
5713@end group
5714@end example
5715
5716@noindent
5717and
5718
5719@example
5720@group
5721class Foo
5722 extends Cyphr,
5723 Bar @hereFn{c-lineup-java-inher}
5724@end group
5725@end example
5726
5727@workswith @code{inher-cont}.
5728@end defun
5729
5730@comment ------------------------------------------------------------
5731
5732@defun c-lineup-java-throws
5733@findex lineup-java-throws (c-)
5734Line up Java throws declarations. If exception names follow on the
5735same line as the throws keyword, they are lined up under each other.
5736Otherwise, they are indented by adding @code{c-basic-offset} to the
5737column of the @samp{throws} keyword. The @samp{throws} keyword itself
5738is also indented by @code{c-basic-offset} from the function declaration
5739start if it doesn't hang. E.g:
5740
5741@example
5742@group
5743int foo()
5744 throws @hereFn{c-lineup-java-throws}
5745 Bar @hereFn{c-lineup-java-throws}
5746@sssTsssTBasicOffset{}
5747@end group
5748@end example
5749
5750@noindent
5751and
5752
5753@example
5754@group
5755int foo() throws Cyphr,
5756 Bar, @hereFn{c-lineup-java-throws}
5757 Vlod @hereFn{c-lineup-java-throws}
5758@end group
5759@end example
5760
5761@workswith @code{func-decl-cont}.
5762@end defun
5763
5764@comment ------------------------------------------------------------
5765
5766@defun c-lineup-template-args
5767@findex lineup-template-args (c-)
5768Line up the arguments of a template argument list under each other, but
5769only in the case where the first argument is on the same line as the
5770opening @samp{<}.
5771
5772To allow this function to be used in a list expression, @code{nil} is
5773returned if there's no template argument on the first line.
5774
5775@workswith @code{template-args-cont}.
5776@end defun
5777
5778@comment ------------------------------------------------------------
5779
5780@defun c-lineup-ObjC-method-call
5781@findex lineup-ObjC-method-call (c-)
5782For Objective-C code, line up selector args as Emacs Lisp mode does
5783with function args: go to the position right after the message receiver,
5784and if you are at the end of the line, indent the current line
5785c-basic-offset columns from the opening bracket; otherwise you are
5786looking at the first character of the first method call argument, so
5787lineup the current line with it.
5788
5789@workswith @code{objc-method-call-cont}.
5790@end defun
5791
5792@comment ------------------------------------------------------------
5793
5794@defun c-lineup-ObjC-method-args
5795@findex lineup-ObjC-method-args (c-)
5796For Objective-C code, line up the colons that separate args. The colon
5797on the current line is aligned with the one on the first line.
5798
5799@workswith @code{objc-method-args-cont}.
5800@end defun
5801
5802@comment ------------------------------------------------------------
5803
5804@defun c-lineup-ObjC-method-args-2
5805@findex lineup-ObjC-method-args-2 (c-)
5806Similar to @code{c-lineup-ObjC-method-args} but lines up the colon on
5807the current line with the colon on the previous line.
5808
5809@workswith @code{objc-method-args-cont}.
5810@end defun
5811
5812@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5813@node Operator Line-Up, Comment Line-Up, List Line-Up, Line-Up Functions
5814@comment node-name, next, previous, up
5815@subsection Operator Line-Up Functions
5816@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5817
5818The line-up functions here calculate the indentation for lines which
5819start with an operator, by lining it up with something on the previous
5820line.
5821
5822@defun c-lineup-argcont
5823@findex lineup-argcont (c-)
5824Line up a continued argument. E.g:
5825
5826@example
5827@group
5828foo (xyz, aaa + bbb + ccc
5829 + ddd + eee + fff); @hereFn{c-lineup-argcont}
5830@end group
5831@end example
5832
5833Only continuation lines like this are touched, @code{nil} is returned on
5834lines which are the start of an argument.
5835
5836Within a gcc @code{asm} block, @code{:} is recognised as an argument
5837separator, but of course only between operand specifications, not in the
5838expressions for the operands.
5839
5840@workswith @code{arglist-cont}, @code{arglist-cont-nonempty}.
4356@end defun 5841@end defun
4357 5842
4358@comment ------------------------------------------------------------ 5843@comment ------------------------------------------------------------
@@ -4361,7 +5846,7 @@ discussion of this ``DWIM'' measure.
4361@findex lineup-arglist-operators (c-) 5846@findex lineup-arglist-operators (c-)
4362Line up lines starting with an infix operator under the open paren. 5847Line up lines starting with an infix operator under the open paren.
4363Return @code{nil} on lines that don't start with an operator, to leave 5848Return @code{nil} on lines that don't start with an operator, to leave
4364those cases to other lineup functions. Example: 5849those cases to other line-up functions. Example:
4365 5850
4366@example 5851@example
4367@group 5852@group
@@ -4374,7 +5859,7 @@ if ( x < 10
4374 5859
4375Since this function doesn't do anything for lines without an infix 5860Since this function doesn't do anything for lines without an infix
4376operator you typically want to use it together with some other lineup 5861operator you typically want to use it together with some other lineup
4377settings, e.g., as follows (the @code{arglist-close} setting is just a 5862settings, e.g. as follows (the @code{arglist-close} setting is just a
4378suggestion to get a consistent style): 5863suggestion to get a consistent style):
4379 5864
4380@example 5865@example
@@ -4391,6 +5876,96 @@ suggestion to get a consistent style):
4391 5876
4392@comment ------------------------------------------------------------ 5877@comment ------------------------------------------------------------
4393 5878
5879@defun c-lineup-assignments
5880@findex lineup-assignments (c-)
5881Line up the current line after the assignment operator on the first line
5882in the statement. If there isn't any, return nil to allow stacking with
5883other line-up functions. If the current line contains an assignment
5884operator too, try to align it with the first one.
5885
5886@workswith @code{topmost-intro-cont}, @code{statement-cont},
5887@code{arglist-cont}, @code{arglist-cont-nonempty}.
5888
5889@end defun
5890
5891@comment ------------------------------------------------------------
5892
5893@defun c-lineup-math
5894@findex lineup-math (c-)
5895Like @code{c-lineup-assignments} but indent with @code{c-basic-offset}
5896if no assignment operator was found on the first line. I.e. this
5897function is the same as specifying a list @code{(c-lineup-assignments
5898+)}. It's provided for compatibility with old configurations.
5899
5900@workswith @code{topmost-intro-cont}, @code{statement-cont},
5901@code{arglist-cont}, @code{arglist-cont-nonempty}.
5902@end defun
5903
5904@comment ------------------------------------------------------------
5905
5906@defun c-lineup-cascaded-calls
5907@findex lineup-cascaded-calls (c-)
5908Line up ``cascaded calls'' under each other. If the line begins with
5909@code{->} or @code{.} and the preceding line ends with one or more
5910function calls preceded by the same token, then the arrow is lined up
5911with the first of those tokens. E.g:
5912
5913@example
5914@group
5915r = proc->add(17)->add(18)
5916 ->add(19) + @hereFn{c-lineup-cascaded-calls}
5917 offset; @hereFn{c-lineup-cascaded-calls@r{ (inactive)}}
5918@end group
5919@end example
5920
5921In any other situation @code{nil} is returned to allow use in list
5922expressions.
5923
5924@workswith @code{topmost-intro-cont}, @code{statement-cont},
5925@code{arglist-cont}, @code{arglist-cont-nonempty}.
5926@end defun
5927
5928@comment ------------------------------------------------------------
5929
5930@defun c-lineup-streamop
5931@findex lineup-streamop (c-)
5932Line up C++ stream operators (i.e. @samp{<<} and @samp{>>}).
5933
5934@workswith @code{stream-op}.
5935@end defun
5936
5937@comment ------------------------------------------------------------
5938
5939@defun c-lineup-string-cont
5940@findex lineup-string-cont (c-)
5941Line up a continued string under the one it continues. A continued
5942string in this sense is where a string literal follows directly after
5943another one. E.g:
5944
5945@example
5946@group
5947result = prefix + "A message "
5948 "string."; @hereFn{c-lineup-string-cont}
5949@end group
5950@end example
5951
5952@code{nil} is returned in other situations, to allow stacking with other
5953lineup functions.
5954
5955@workswith @code{topmost-intro-cont}, @code{statement-cont},
5956@code{arglist-cont}, @code{arglist-cont-nonempty}.
5957@end defun
5958
5959
5960@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5961@node Comment Line-Up, Misc Line-Up, Operator Line-Up, Line-Up Functions
5962@comment node-name, next, previous, up
5963@subsection Comment Line-Up Functions
5964@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5965
5966The lineup functions here calculate the indentation for several types
5967of comment structure.
5968
4394@defun c-lineup-C-comments 5969@defun c-lineup-C-comments
4395@findex lineup-C-comments (c-) 5970@findex lineup-C-comments (c-)
4396Line up C block comment continuation lines. Various heuristics are used 5971Line up C block comment continuation lines. Various heuristics are used
@@ -4435,7 +6010,7 @@ to handle most of the common comment styles. Some examples:
4435@end example 6010@end example
4436 6011
4437The style variable @code{c-comment-prefix-regexp} is used to recognize 6012The style variable @code{c-comment-prefix-regexp} is used to recognize
4438the comment line prefix, e.g., the @samp{*} that usually starts every 6013the comment line prefix, e.g. the @samp{*} that usually starts every
4439line inside a comment. 6014line inside a comment.
4440 6015
4441@workswith The @code{c} syntactic symbol. 6016@workswith The @code{c} syntactic symbol.
@@ -4443,65 +6018,6 @@ line inside a comment.
4443 6018
4444@comment ------------------------------------------------------------ 6019@comment ------------------------------------------------------------
4445 6020
4446@defun c-lineup-cascaded-calls
4447@findex lineup-cascaded-calls (c-)
4448Line up ``cascaded calls'' under each other. If the line begins with
4449@code{->} or @code{.} and the preceding line ends with one or more
4450function calls preceded by the same token, then the arrow is lined up
4451with the first of those tokens. E.g:
4452
4453@example
4454@group
4455r = proc->add(17)->add(18)
4456 ->add(19) + @hereFn{c-lineup-cascaded-calls}
4457 offset; @hereFn{c-lineup-cascaded-calls@r{ (inactive)}}
4458@end group
4459@end example
4460
4461In any other situation @code{nil} is returned to allow use in list
4462expressions.
4463
4464@workswith @code{topmost-intro-cont}, @code{statement-cont},
4465@code{arglist-cont}, @code{arglist-cont-nonempty}.
4466@end defun
4467
4468@comment ------------------------------------------------------------
4469
4470@defun c-lineup-close-paren
4471@findex lineup-close-paren (c-)
4472Line up the closing paren under its corresponding open paren if the
4473open paren is followed by code. If the open paren ends its line, no
4474indentation is added. E.g:
4475
4476@example
4477@group
4478main (int,
4479 char **
4480 ) @hereFn{c-lineup-close-paren}
4481@end group
4482@end example
4483
4484@noindent
4485and
4486
4487@example
4488@group
4489main (
4490 int, char **
4491) @hereFn{c-lineup-close-paren}
4492@end group
4493@end example
4494
4495As a special case, if a brace block is opened at the same line as the
4496open parenthesis of the argument list, the indentation is
4497@code{c-basic-offset} instead of the open paren column. See
4498@code{c-lineup-arglist} for further discussion of this ``DWIM'' measure.
4499
4500@workswith All @code{*-close} symbols.
4501@end defun
4502
4503@comment ------------------------------------------------------------
4504
4505@defun c-lineup-comment 6021@defun c-lineup-comment
4506@findex lineup-comment (c-) 6022@findex lineup-comment (c-)
4507Line up a comment-only line according to the style variable 6023Line up a comment-only line according to the style variable
@@ -4529,6 +6045,47 @@ is equivalent to @code{(@r{@var{value}} . -1000)}.
4529 6045
4530@comment ------------------------------------------------------------ 6046@comment ------------------------------------------------------------
4531 6047
6048@defun c-lineup-knr-region-comment
6049@findex lineup-knr-region-comment (c-)
6050Line up a comment in the ``K&R region'' with the declaration. That is
6051the region between the function or class header and the beginning of the
6052block. E.g:
6053
6054@example
6055@group
6056int main()
6057/* Called at startup. */ @hereFn{c-lineup-knr-region-comment}
6058@{
6059 return 0;
6060@}
6061@end group
6062@end example
6063
6064Return @code{nil} if called in any other situation, to be useful in list
6065expressions.
6066
6067@workswith @code{comment-intro}.
6068@end defun
6069
6070@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6071@node Misc Line-Up, , Comment Line-Up, Line-Up Functions
6072@comment node-name, next, previous, up
6073@subsection Miscellaneous Line-Up Functions
6074@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6075
6076The line-up functions here are the odds and ends which didn't fit into
6077any earlier category.
6078
6079@defun c-lineup-dont-change
6080@findex lineup-dont-change (c-)
6081This lineup function makes the line stay at whatever indentation it
6082already has; think of it as an identity function for lineups.
6083
6084@workswith Any syntactic symbol.
6085@end defun
6086
6087@comment ------------------------------------------------------------
6088
4532@defun c-lineup-cpp-define 6089@defun c-lineup-cpp-define
4533@findex lineup-cpp-define (c-) 6090@findex lineup-cpp-define (c-)
4534Line up macro continuation lines according to the indentation of the 6091Line up macro continuation lines according to the indentation of the
@@ -4564,7 +6121,7 @@ int dribble() @{
4564 6121
4565If @code{c-syntactic-indentation-in-macros} is non-@code{nil}, the 6122If @code{c-syntactic-indentation-in-macros} is non-@code{nil}, the
4566function returns the relative indentation to the macro start line to 6123function returns the relative indentation to the macro start line to
4567allow accumulation with other offsets. e.g., in the following cases, 6124allow accumulation with other offsets. E.g. in the following cases,
4568@code{cpp-define-intro} is combined with the 6125@code{cpp-define-intro} is combined with the
4569@code{statement-block-intro} that comes from the @samp{do @{} that hangs 6126@code{statement-block-intro} that comes from the @samp{do @{} that hangs
4570on the @samp{#define} line: 6127on the @samp{#define} line:
@@ -4618,16 +6175,6 @@ described above.
4618 6175
4619@comment ------------------------------------------------------------ 6176@comment ------------------------------------------------------------
4620 6177
4621@defun c-lineup-dont-change
4622@findex lineup-dont-change (c-)
4623This lineup function makes the line stay at whatever indentation it
4624already has; think of it as an identity function for lineups.
4625
4626@workswith Any syntactic symbol.
4627@end defun
4628
4629@comment ------------------------------------------------------------
4630
4631@defun c-lineup-gcc-asm-reg 6178@defun c-lineup-gcc-asm-reg
4632@findex lineup-gcc-asm-reg (c-) 6179@findex lineup-gcc-asm-reg (c-)
4633Line up a gcc asm register under one on a previous line. 6180Line up a gcc asm register under one on a previous line.
@@ -4660,269 +6207,6 @@ arglist lineups, e.g.
4660 6207
4661@comment ------------------------------------------------------------ 6208@comment ------------------------------------------------------------
4662 6209
4663@defun c-lineup-inexpr-block
4664@findex lineup-inexpr-block (c-)
4665This can be used with the in-expression block symbols to indent the
4666whole block to the column where the construct is started. e.g., for Java
4667anonymous classes, this lines up the class under the @samp{new} keyword,
4668and in Pike it lines up the lambda function body under the @samp{lambda}
4669keyword. Returns @code{nil} if the block isn't part of such a
4670construct.
4671
4672@workswith @code{inlambda}, @code{inexpr-statement},
4673@code{inexpr-class}.
4674@end defun
4675
4676@comment ------------------------------------------------------------
4677
4678@defun c-lineup-java-inher
4679@findex lineup-java-inher (c-)
4680Line up Java implements and extends declarations. If class names
4681follow on the same line as the @samp{implements}/@samp{extends}
4682keyword, they are lined up under each other. Otherwise, they are
4683indented by adding @code{c-basic-offset} to the column of the keyword.
4684E.g:
4685
4686@example
4687@group
4688class Foo
4689 extends
4690 Bar @hereFn{c-lineup-java-inher}
4691 @sssTBasicOffset{}
4692@end group
4693@end example
4694
4695@noindent
4696and
4697
4698@example
4699@group
4700class Foo
4701 extends Cyphr,
4702 Bar @hereFn{c-lineup-java-inher}
4703@end group
4704@end example
4705
4706@workswith @code{inher-cont}.
4707@end defun
4708
4709@comment ------------------------------------------------------------
4710
4711@defun c-lineup-java-throws
4712@findex lineup-java-throws (c-)
4713Line up Java throws declarations. If exception names follow on the
4714same line as the throws keyword, they are lined up under each other.
4715Otherwise, they are indented by adding @code{c-basic-offset} to the
4716column of the @samp{throws} keyword. The @samp{throws} keyword itself
4717is also indented by @code{c-basic-offset} from the function declaration
4718start if it doesn't hang. E.g:
4719
4720@example
4721@group
4722int foo()
4723 throws @hereFn{c-lineup-java-throws}
4724 Bar @hereFn{c-lineup-java-throws}
4725@sssTsssTBasicOffset{}
4726@end group
4727@end example
4728
4729@noindent
4730and
4731
4732@example
4733@group
4734int foo() throws Cyphr,
4735 Bar, @hereFn{c-lineup-java-throws}
4736 Vlod @hereFn{c-lineup-java-throws}
4737@end group
4738@end example
4739
4740@workswith @code{func-decl-cont}.
4741@end defun
4742
4743@comment ------------------------------------------------------------
4744
4745@defun c-lineup-knr-region-comment
4746@findex lineup-knr-region-comment (c-)
4747Line up a comment in the ``K&R region'' with the declaration. That is
4748the region between the function or class header and the beginning of the
4749block. E.g:
4750
4751@example
4752@group
4753int main()
4754/* Called at startup. */ @hereFn{c-lineup-knr-region-comment}
4755@{
4756 return 0;
4757@}
4758@end group
4759@end example
4760
4761Return @code{nil} if called in any other situation, to be useful in list
4762expressions.
4763
4764@workswith @code{comment-intro}.
4765@end defun
4766
4767@comment ------------------------------------------------------------
4768
4769@defun c-lineup-math
4770@findex lineup-math (c-)
4771Line up the current line to after the equal sign on the first line in the
4772statement. If there isn't any, indent with @code{c-basic-offset}. If
4773the current line contains an equal sign too, try to align it with the
4774first one.
4775
4776@workswith @code{topmost-intro-cont}, @code{statement-cont},
4777@code{arglist-cont}, @code{arglist-cont-nonempty}.
4778@end defun
4779
4780@comment ------------------------------------------------------------
4781
4782@defun c-lineup-multi-inher
4783@findex lineup-multi-inher (c-)
4784Line up the classes in C++ multiple inheritance clauses and member
4785initializers under each other. E.g:
4786
4787@example
4788@group
4789Foo::Foo (int a, int b):
4790 Cyphr (a),
4791 Bar (b) @hereFn{c-lineup-multi-inher}
4792@end group
4793@end example
4794
4795@noindent
4796and
4797
4798@example
4799@group
4800class Foo
4801 : public Cyphr,
4802 public Bar @hereFn{c-lineup-multi-inher}
4803@end group
4804@end example
4805
4806@noindent
4807and
4808
4809@example
4810@group
4811Foo::Foo (int a, int b)
4812 : Cyphr (a)
4813 , Bar (b) @hereFn{c-lineup-multi-inher}
4814@end group
4815@end example
4816
4817@workswith @code{inher-cont}, @code{member-init-cont}.
4818@end defun
4819
4820@comment ------------------------------------------------------------
4821
4822@defun c-lineup-ObjC-method-call
4823@findex lineup-ObjC-method-call (c-)
4824For Objective-C code, line up selector args as Emacs Lisp mode does
4825with function args: go to the position right after the message receiver,
4826and if you are at the end of the line, indent the current line
4827c-basic-offset columns from the opening bracket; otherwise you are
4828looking at the first character of the first method call argument, so
4829lineup the current line with it.
4830
4831@workswith @code{objc-method-call-cont}.
4832@end defun
4833
4834@comment ------------------------------------------------------------
4835
4836@defun c-lineup-ObjC-method-args
4837@findex lineup-ObjC-method-args (c-)
4838For Objective-C code, line up the colons that separate args. The colon
4839on the current line is aligned with the one on the first line.
4840
4841@workswith @code{objc-method-args-cont}.
4842@end defun
4843
4844@comment ------------------------------------------------------------
4845
4846@defun c-lineup-ObjC-method-args-2
4847@findex lineup-ObjC-method-args-2 (c-)
4848Similar to @code{c-lineup-ObjC-method-args} but lines up the colon on
4849the current line with the colon on the previous line.
4850
4851@workswith @code{objc-method-args-cont}.
4852@end defun
4853
4854@comment ------------------------------------------------------------
4855
4856@defun c-lineup-runin-statements
4857@findex lineup-runin-statements (c-)
4858Line up statements for coding standards which place the first statement
4859in a block on the same line as the block opening brace@footnote{Run-in
4860style doesn't really work too well. You might need to write your own
4861custom indentation functions to better support this style.}. E.g:
4862
4863@example
4864@group
4865int main()
4866@{ puts ("Hello!");
4867 return 0; @hereFn{c-lineup-runin-statements}
4868@}
4869@end group
4870@end example
4871
4872If there is no statement after the opening brace to align with,
4873@code{nil} is returned. This makes the function usable in list
4874expressions.
4875
4876@workswith The @code{statement} syntactic symbol.
4877@end defun
4878
4879@comment ------------------------------------------------------------
4880
4881@defun c-lineup-streamop
4882@findex lineup-streamop (c-)
4883Line up C++ stream operators (i.e., @samp{<<} and @samp{>>}).
4884
4885@workswith @code{stream-op}.
4886@end defun
4887
4888@comment ------------------------------------------------------------
4889
4890@defun c-lineup-string-cont
4891@findex lineup-string-cont (c-)
4892Line up a continued string under the one it continues. A continued
4893string in this sense is where a string literal follows directly after
4894another one. E.g:
4895
4896@example
4897@group
4898result = prefix + "A message "
4899 "string."; @hereFn{c-lineup-string-cont}
4900@end group
4901@end example
4902
4903@code{nil} is returned in other situations, to allow stacking with other
4904lineup functions.
4905
4906@workswith @code{topmost-intro-cont}, @code{statement-cont},
4907@code{arglist-cont}, @code{arglist-cont-nonempty}.
4908@end defun
4909
4910@comment ------------------------------------------------------------
4911
4912@defun c-lineup-template-args
4913@findex lineup-template-args (c-)
4914Line up the arguments of a template argument list under each other, but
4915only in the case where the first argument is on the same line as the
4916opening @samp{<}.
4917
4918To allow this function to be used in a list expression, @code{nil} is
4919returned if there's no template argument on the first line.
4920
4921@workswith @code{template-args-cont}.
4922@end defun
4923
4924@comment ------------------------------------------------------------
4925
4926@defun c-lineup-topmost-intro-cont 6210@defun c-lineup-topmost-intro-cont
4927@findex lineup-topmost-intro-cont (c-) 6211@findex lineup-topmost-intro-cont (c-)
4928Line up declaration continuation lines zero or one indentation 6212Line up declaration continuation lines zero or one indentation
@@ -4974,297 +6258,227 @@ the_larch, @hereFn{c-lineup-topmost-intro-cont}
4974@workswith @code{topmost-intro-cont}. 6258@workswith @code{topmost-intro-cont}.
4975@end defun 6259@end defun
4976 6260
4977@comment ------------------------------------------------------------ 6261@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6262@node Custom Line-Up, Other Indentation, Line-Up Functions, Customizing Indentation
6263@comment node-name, next, previous, up
6264@section Custom Line-Up Functions
6265@cindex customization, indentation functions
6266@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4978 6267
4979@defun c-lineup-whitesmith-in-block 6268The most flexible way to customize indentation is by writing custom
4980@findex lineup-whitesmith-in-block (c-) 6269line-up functions, and associating them with specific syntactic
4981Line up lines inside a block in Whitesmith style. It's done in a way 6270symbols (@pxref{c-offsets-alist}). Depending on the effect you want,
4982that works both when the opening brace hangs and when it doesn't. E.g: 6271it might be better to write a @code{c-special-indent-hook} function
6272rather than a line-up function (@pxref{Other Indentation}).
6273
6274@ccmode{} comes with an extensive set of predefined line-up functions,
6275not all of which are used by the default styles. So there's a good
6276chance the function you want already exists. @xref{Line-Up
6277Functions}, for a list of them. If you write your own line-up
6278function, it's probably a good idea to start working from one of these
6279predefined functions, which can be found in the file
6280@file{cc-align.el}. If you have written a line-up function that you
6281think is generally useful, you're very welcome to contribute it;
6282please contact @email{bug-cc-mode@@gnu.org}.
6283
6284 Line-up functions are passed a single argument, the syntactic
6285element (see below). The return value is a @code{c-offsets-alist}
6286offset specification: for example, an integer, a symbol such as
6287@code{+}, a vector, @code{nil}@footnote{Returning @code{nil} is useful
6288when the offset specification for a syntactic element is a list
6289containing the line-up function (@pxref{c-offsets-alist}).}, or even
6290another line-up function. Full details of these are in
6291@ref{c-offsets-alist}.
6292
6293Line-up functions must not move point or change the content of the
6294buffer (except temporarily). They are however allowed to do
6295@dfn{hidden buffer changes}, i.e. setting text properties for caching
6296purposes etc. Buffer undo recording is disabled while they run.
6297
6298The syntactic element passed as the parameter to a line-up function is
6299a cons cell of the form
4983 6300
4984@example 6301@example
4985@group 6302(@r{@var{syntactic-symbol}} . @r{@var{anchor-position}})
4986something
4987 @{
4988 foo; @hereFn{c-lineup-whitesmith-in-block}
4989 @}
4990@end group
4991@end example 6303@end example
4992 6304
4993@noindent 6305@noindent
4994and 6306@c FIXME!!! The following sentence might be better omitted, since the
4995 6307@c information is in the cross reference "Syntactic Analysis". 2005/10/2.
4996@example 6308where @var{syntactic-symbol} is the symbol that the function was
4997@group 6309called for, and @var{anchor-position} is the anchor position (if any)
4998something @{ 6310for the construct that triggered the syntactic symbol
4999 foo; @hereFn{c-lineup-whitesmith-in-block} 6311(@pxref{Syntactic Analysis}). This cons cell is how the syntactic
5000 @} 6312element of a line used to be represented in @ccmode{} 5.28 and
5001@sssTBasicOffset{} 6313earlier. Line-up functions are still passed this cons cell, so as to
5002@end group 6314preserve compatibility with older configurations. In the future, we
5003@end example 6315may decide to convert to using the full list format---you can prepare
5004 6316your setup for this by using the access functions
5005In the first case the indentation is kept unchanged, in the second 6317(@code{c-langelem-sym}, etc.) described below.
5006@code{c-basic-offset} is added. 6318
5007 6319@vindex c-syntactic-element
5008@workswith @code{defun-close}, @code{defun-block-intro}, 6320@vindex syntactic-element (c-)
5009@code{block-close}, @code{brace-list-close}, @code{brace-list-intro}, 6321@vindex c-syntactic-context
5010@code{statement-block-intro} and all @code{in*} symbols, 6322@vindex syntactic-context (c-)
5011e.g., @code{inclass} and @code{inextern-lang}. 6323Some syntactic symbols, e.g. @code{arglist-cont-nonempty}, have more
6324info in the syntactic element - typically other positions that can be
6325interesting besides the anchor position. That info can't be accessed
6326through the passed argument, which is a cons cell. Instead, you can
6327get this information from the variable @code{c-syntactic-element},
6328which is dynamically bound to the complete syntactic element. The
6329variable @code{c-syntactic-context} might also be useful - it gets
6330dynamically bound to the complete syntactic context. @xref{Custom
6331Braces}.
6332
6333@ccmode{} provides a few functions to access parts of syntactic
6334elements in a more abstract way. Besides making the code easier to
6335read, they also hide the difference between the old cons cell form
6336used in the line-up function argument and the new list form used in
6337@code{c-syntactic-element} and everywhere else. The functions are:
6338
6339@defun c-langelem-sym langelem
6340@findex langelem-sym (c-)
6341Return the syntactic symbol in @var{langelem}.
5012@end defun 6342@end defun
5013 6343
6344@defun c-langelem-pos langelem
6345@findex langelem-pos (c-)
6346Return the anchor position in @var{langelem}, or nil if there is none.
6347@end defun
5014 6348
5015@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6349@defun c-langelem-col langelem &optional preserve-point
5016@node AWK Mode, Odds and Ends, Indentation Functions, Top 6350@findex langelem-col (c-)
5017@comment node-name, next, previous, up 6351Return the column of the anchor position in @var{langelem}. Also move
5018@chapter Status of AWK Mode 6352the point to that position unless @var{preserve-point} is
5019@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6353non-@code{nil}.
5020 6354@end defun
5021@dfn{AWK mode} existed until recently in the file @file{awk-mode.el}
5022as a mode derived from c-mode. It had not been actively maintained to
5023keep pace with the newer @ccmode{}, and its indentation mechanism no
5024longer worked satisfactorally.
5025
5026The current AWK mode is based around the GNU implementation,
5027@emph{GAWK version 3.1.0}, though it should work pretty well with any
5028AWK. It has now been updated and integrated into @ccmode{} to a
5029substantial extent, though as yet not all the features of @ccmode{}
5030have been adapted to support it.
5031
5032If your (X)Emacs is set up to use the old file @file{awk-mode.elc}
5033(which will usually be the case if you have obtained this @ccmode{}
5034independently of (X)Emacs itself), or if you are not sure, insert the
5035following form into your @file{.emacs} or @file{init.el} so that the new
5036AWK mode will be used instead:
5037
5038@example
5039(autoload 'awk-mode "cc-mode" nil t)
5040@end example
5041
5042You can check which AWK mode you are running by displaying the mode
5043documentation string with @kbd{C-h m} from an AWK buffer. The newer
5044mode's doc string contains @code{To submit a problem report, enter
5045`C-c C-b'} near the top of the doc string where the older mode has
5046@code{This is much like C mode except ....}.
5047
5048Since this newer AWK mode makes essential use of a relatively new
5049Emacs Lisp feature@footnote{Specifically, the @code{syntax-table} text
5050property.}, you need either GNU Emacs 20.1 (or later) or XEmacs 21.4
5051(or later) to use it. If your Emacs version is earlier than one of
5052these, the older @file{awk-mode.el} will get loaded and run in place
5053of the AWK mode described here, even when you have put the above
5054@code{autoload} form into your @file{.emacs} or @file{init.el}.
5055Upgrading your (X)Emacs is strongly recommended if this is the case.
5056
5057Here is an overview of which @ccmode{} features currently work with
5058AWK mode and which don't:
5059
5060@table @asis
5061@item Indentation Engine
5062The @ccmode{} indentation engine fully supports AWK mode.
5063@xref{Indentation Engine}.
5064
5065AWK mode handles code formatted in the conventional AWK fashion:
5066@samp{@{}s which start actions, user-defined functions, or compound
5067statements are placed on the same line as the associated construct; the
5068matching @samp{@}}s are normally placed under the start of the
5069respective pattern, function definition, or structured statement.
5070@c Add in a bit about the @samp{@}} being on the same line when the
5071@c contents are short.
5072
5073The predefined indentation functions (@pxref{Indentation Functions})
5074haven't yet been adapted for AWK mode, though some of them may work
5075serendipitously. There shouldn't be any problems writing custom
5076indentation functions for AWK mode.
5077
5078The command @kbd{C-c C-q} (@code{c-indent-defun}) hasn't yet been
5079adapted for AWK, though in practice it works properly nearly all the
5080time. Should it fail, explicitly set the region around the function
5081(using @kbd{C-u C-SPC}: @kbd{C-M-h} probably won't work either) then do
5082@kbd{C-M-\} (@code{indent-region}).
5083
5084@item Font Locking
5085There is a single level of font locking in AWK mode, rather than the
5086three distinct levels the other modes have. There are several
5087idiosyncrasies in AWK mode's font-locking due to the peculiarities of
5088the AWK language itself. @xref{AWK Mode Font Locking}.
5089
5090@item Comment Commands
5091@kbd{M-;} (@code{indent-for-comment}) works fine. None of the other
5092@ccmode{} comment formatting commands have yet been adapted for AWK
5093mode. @xref{Text Filling and Line Breaking}.
5094
5095@item Movement Commands
5096Most of the movement commands work in AWK mode. The most important
5097exceptions are @kbd{M-a} (@code{c-beginning-of-statement}) and
5098@kbd{M-e} (@code{c-end-of-statement}) which haven't yet been adapted.
5099
5100The notion of @dfn{defun} has been augmented to include pattern-action
5101pairs. See @ref{AWK Mode Defuns} for a description of commands which
5102work on AWK ``defuns''.
5103
5104Since there is no preprocessor in AWK, the commands which move to
5105preprocessor directives (e.g., @code{c-up-conditional}) are meaningless
5106in AWK mode and are not bound in the AWK mode keymap.
5107
5108@item Auto-newline Insertion and Clean-ups
5109Auto-newline insertion hasn't yet been adapted for AWK. Some of the
5110clean-ups can actually convert good AWK code into syntactically
5111invalid code.
5112
5113If auto-newline or its associated clean-ups are enabled generally for
5114the modes in @ccmode{}, you are strongly recommended to disable them
5115in the AWK Mode hook. @xref{Initialising AWK Mode}.
5116
5117The clean-up @code{space-before-funcall}, which is independent of
5118auto-newline, should never be active in AWK mode (since inserting a
5119space between a user function's name and its opening @samp{(} makes
5120the call syntactically invalid). If necessary, this should be
5121disabled in the AWK Mode hook. @xref{Initialising AWK Mode}.
5122
5123@end table
5124
5125@menu
5126* Initialising AWK Mode::
5127* AWK Mode Font Locking::
5128* AWK Mode Defuns::
5129@end menu
5130
5131
5132@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5133@node Initialising AWK Mode, AWK Mode Font Locking, , AWK Mode
5134@comment node-name, next, previous, up
5135@section AWK mode - What to put in your @file{.emacs} or @file{init.el}
5136@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5137
5138Much of the AWK mode initialization can, of course, be done by the
5139@ccmode{} general initialization procedure. You may want to use certain
5140@ccmode{} features such as @code{auto-newline} and @code{clean-ups} in
5141the other modes, and you might thus have enabled them in a
5142@code{c-mode-common-hook} function, as described in @ref{Sample .emacs File}.
5143These features have not yet been amended for AWK mode, and far from
5144being useful, can be irritating in AWK mode or actually make AWK code
5145syntactically invalid. Adding the following code to your
5146@file{.emacs} or @file{init.el} file will disable them for AWK mode.
5147
5148@example
5149(defun my-awk-mode-hook ()
5150 "Disable certain @ccmode{} features which could impair AWK mode."
5151 (c-toggle-auto-state -1) ; disable automatic insertions of newlines
5152 (if (memq 'space-before-funcall c-cleanup-list)
5153 (setq c-cleanup-list ; don't automatically insert a space into "foo("
5154 (remove 'space-before-funcall c-cleanup-list))))
5155(add-hook 'awk-mode-hook 'my-awk-mode-hook)
5156@end example
5157
5158Naturally you can add your own AWK-specific customizations to this
5159function. @xref{Hooks}.
5160
5161
5162@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5163@node AWK Mode Font Locking, AWK Mode Defuns, Initialising AWK Mode, AWK Mode
5164@comment node-name, next, previous, up
5165@section AWK Mode Font Locking
5166@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5167
5168The general appearance of font-locking in AWK mode is much like in any
5169other programming mode. @xref{Faces For Font Lock,,,elisp}.
5170
5171The following faces are, however, used in a non-standard fashion in
5172AWK mode:
5173
5174@table @asis
5175@item @code{font-lock-variable-name-face}
5176This face was intended for variable declarations. Since variables are
5177not declared in AWK, this face is used instead for AWK system
5178variables (such as @code{NF}) and ``Special File Names'' (such as
5179@code{"/dev/stderr"}).
5180
5181@item @code{font-lock-builtin-face} (Emacs)/@code{font-lock-preprocessor-face} (XEmacs)
5182This face is normally used for preprocessor directives in @ccmode{}.
5183There are no such things in AWK, so this face is used instead for
5184standard functions (such as @code{match}).
5185 6355
5186@item @code{font-lock-string-face} 6356@defun c-langelem-2nd-pos langelem
5187As well as being used for strings, including localizable strings, 6357@findex langelem-2nd-pos (c-)
5188(delimited by @samp{"} and @samp{_"}), this face is also used for AWK 6358Return the secondary position in @var{langelem}, or @code{nil} if there
5189regular expressions (delimited by @samp{/}). 6359is none.
5190 6360
5191@item @code{font-lock-warning-face} (Emacs)/@code{c-invalid-face} (XEmacs) 6361Note that the return value of this function is always @code{nil} if
5192This face highlights the following syntactically invalid AWK 6362@var{langelem} is in the old cons cell form. Thus this function is
5193constructs: 6363only meaningful when used on syntactic elements taken from
6364@code{c-syntactic-element} or @code{c-syntactic-context}.
6365@end defun
5194 6366
5195@itemize @bullet 6367Custom line-up functions can be as simple or as complex as you like, and
5196@item 6368any syntactic symbol that appears in @code{c-offsets-alist} can have a
5197An unterminated string or regular expression. Here the opening 6369custom line-up function associated with it.
5198delimiter (@samp{"} or @samp{/} or @samp{_"}) is displayed in
5199@code{font-lock-warning-face}. This is most noticeable when typing in a
5200new string/regular expression into a buffer, when the warning-face
5201serves as a continual reminder to terminate the construct.
5202 6370
5203AWK mode fontifies unterminated strings/regular expressions 6371@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5204differently from other modes: Only the text up to the end of the line 6372@node Other Indentation, , Custom Line-Up, Customizing Indentation
5205is fontified as a string (escaped newlines being handled correctly), 6373@comment node-name, next, previous, up
5206rather than the text up to the next string quote. 6374@section Other Special Indentations
6375@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5207 6376
5208@item 6377Here are the remaining odds and ends regarding indentation:
5209A space between the function name and opening parenthesis when calling
5210a user function. The last character of the function name and the
5211opening parenthesis are highlighted. This font-locking rule will
5212spuriously highlight a valid concatenation expression where an
5213identifier precedes a parenthesised expression. Unfortunately.
5214 6378
5215@item 6379@defopt c-label-minimum-indentation
5216Whitespace following the @samp{\} in what otherwise looks like an 6380@vindex label-minimum-indentation (c-)
5217escaped newline. The @samp{\} is highlighted. 6381In @samp{gnu} style (@pxref{Built-in Styles}), a minimum indentation is
5218@end itemize 6382imposed on lines inside code blocks. This minimum indentation is
5219@end table 6383controlled by this style variable. The default value is 1.
6384
6385@findex c-gnu-impose-minimum
6386@findex gnu-impose-minimum (c-)
6387It's the function @code{c-gnu-impose-minimum} that enforces this minimum
6388indentation. It must be present on @code{c-special-indent-hook} to
6389work.
6390@end defopt
5220 6391
6392@defopt c-special-indent-hook
6393@vindex special-indent-hook (c-)
6394This style variable is a standard hook variable that is called after
6395every line is indented by @ccmode{}. It is called only if
6396@code{c-syntactic-indentation} is non-@code{nil} (which it is by
6397default (@pxref{Indentation Engine Basics})). You can put a function
6398on this hook to do any special indentation or ad hoc line adjustments
6399your style dictates, such as adding extra indentation to constructors
6400or destructor declarations in a class definition, etc. Sometimes it
6401is better to write a custom Line-up Function instead (@pxref{Custom
6402Line-Up}).
6403
6404When the indentation engine calls this hook, the variable
6405@code{c-syntactic-context} is bound to the current syntactic context
6406(i.e. what you would get by typing @kbd{C-c C-s} on the source line.
6407@xref{Custom Braces}.). Note that you should not change point or mark
6408inside a @code{c-special-indent-hook} function, i.e. you'll probably
6409want to wrap your function in a @code{save-excursion}@footnote{The
6410numerical value returned by @code{point} will change if you change the
6411indentation of the line within a @code{save-excursion} form, but point
6412itself will still be over the same piece of text.}.
6413
6414Setting @code{c-special-indent-hook} in style definitions is handled
6415slightly differently from other variables---A style can only add
6416functions to this hook, not remove them. @xref{Style Variables}.
6417@end defopt
5221 6418
5222@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5223@node AWK Mode Defuns, , AWK Mode Font Locking, AWK Mode
5224@comment node-name, next, previous, up
5225@section AWK Mode Defuns
5226@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5227 6419
5228In AWK mode, @dfn{defun} means either a user-defined function or a 6420@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5229pattern-action pair. Either the pattern or the action may be 6421@node Custom Macros, Odds and Ends, Customizing Indentation, Top
5230implicit. 6422@comment node-name, next, previous, up
6423@chapter Customizing Macros
6424@cindex macros
6425@cindex preprocessor directives
6426@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5231 6427
5232The beginning of a defun is recognised heuristically as, more or less, 6428Normally, the lines in a multi-line macro are indented relative to
5233code which begins in column zero. Having the @samp{@{} in column zero, 6429eachother as though they were code. You can suppress this behaviour
5234as is suggested for some modes, is neither necessary nor helpful in AWK 6430by setting the following user option:
5235mode.
5236 6431
5237More precisely, the beginning of a defun is code which begins in 6432@defopt c-syntactic-indentation-in-macros
5238column zero, and which isn't a closing brace, a comment, or a 6433@vindex syntactic-indentation-in-macros (c-)
5239continuation of the previous line. Code is the @dfn{continuation of 6434Enable syntactic analysis inside macros, which is the default. If this
5240the previous line} when that line is syntactically incomplete, for 6435is @code{nil}, all lines inside macro definitions are analyzed as
5241example when it ends with @samp{@{} or an escaped newline. 6436@code{cpp-macro-cont}.
6437@end defopt
5242 6438
5243The end of a defun is the @samp{@}} which matches the @samp{@{} (if 6439@ccmode{} provides some tools to help keep the line continuation
5244any) at the beginning of the action or function body, or the EOL or 6440backslashes in macros neat and tidy. Their precise action is
5245@samp{;} which marks an implicit action. Although this @samp{@}} is 6441customized with these variables:
5246usually placed in column zero, AWK mode doesn't need it to be placed
5247there.
5248 6442
5249@table @asis 6443@defopt c-backslash-column
5250@item @kbd{C-M-a} @code{c-awk-beginning-of-defun} 6444@vindex backslash-column (c-)
5251@itemx @kbd{C-M-e} @code{c-awk-end-of-defun} 6445@defoptx c-backslash-max-column
5252@findex c-awk-beginning-of-defun 6446@vindex backslash-max-column (c-)
5253@findex awk-beginning-of-defun (c-) 6447These variables control the alignment columns for line continuation
5254@findex c-awk-end-of-defun 6448backslashes in multiline macros. They are used by the functions that
5255@findex awk-end-of-defun (c-) 6449automatically insert or align such backslashes,
5256Move point back to the beginning or forward to the end of the current 6450e.g. @code{c-backslash-region} and @code{c-context-line-break}.
5257AWK defun. These functions can take prefix-arguments, their
5258functionality being entirely equivalent to @code{beginning-of-defun}
5259and @code{end-of-defun}. @xref{Moving by Defuns,,,emacs}.
5260 6451
5261@item @kbd{C-M-h} @code{c-mark-function} 6452@code{c-backslash-column} specifies the minimum column for the
5262This works fine with AWK defuns. @xref{Indentation Commands}. 6453backslashes. If any line in the macro goes past this column, then the
5263@end table 6454next tab stop (i.e. next multiple of @code{tab-width}) in that line is
6455used as the alignment column for all the backslashes, so that they
6456remain in a single column. However, if any lines go past
6457@code{c-backslash-max-column} then the backslashes in the rest of the
6458macro will be kept at that column, so that the lines which are too
6459long ``stick out'' instead.
6460
6461Don't ever set these variables to @code{nil}. If you want to disable
6462the automatic alignment of backslashes, use
6463@code{c-auto-align-backslashes}.
6464@end defopt
5264 6465
6466@defopt c-auto-align-backslashes
6467@vindex auto-align-backslashes (c-)
6468Align automatically inserted line continuation backslashes if
6469non-@code{nil}. When line continuation backslashes are inserted
6470automatically for line breaks in multiline macros, e.g. by
6471@code{c-context-line-break}, they are aligned with the other
6472backslashes in the same macro if this flag is set.
6473
6474If @code{c-auto-align-backslashes} is @code{nil}, automatically
6475inserted backslashes are preceded by a single space, and backslashes
6476get aligned only when you explicitly invoke the command
6477@code{c-backslash-region} (@kbd{C-c C-\}).
6478@end defopt
5265 6479
5266@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6480@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5267@node Odds and Ends, Performance Issues, AWK Mode, Top 6481@node Odds and Ends, Sample .emacs File, Custom Macros, Top
5268@comment node-name, next, previous, up 6482@comment node-name, next, previous, up
5269@chapter Odds and Ends 6483@chapter Odds and Ends
5270@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6484@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -5273,16 +6487,16 @@ The stuff that didn't fit in anywhere else is documented here.
5273 6487
5274@defopt c-require-final-newline 6488@defopt c-require-final-newline
5275@vindex require-final-newline (c-) 6489@vindex require-final-newline (c-)
5276Controls whether a final newline is ensured when the file is saved. The 6490Controls whether a final newline is enforced when the file is saved.
5277value is an association list that for each language mode specifies the 6491The value is an association list that for each language mode specifies
5278value to give to @code{require-final-newline} at mode initialization; 6492the value to give to @code{require-final-newline} (@pxref{Saving
5279see that variable for details about the value. If a language isn't 6493Buffers,,, @lispref{}, @lispreftitle{}}) at mode initialization. If a
5280present on the association list, CC Mode won't touch 6494language isn't present on the association list, CC Mode won't touch
5281@code{require-final-newline} in buffers for that language. 6495@code{require-final-newline} in buffers for that language.
5282 6496
5283The default is to set @code{require-final-newline} to @code{t} in the 6497The default is to set @code{require-final-newline} to @code{t} in the
5284languages that mandates that source files should end with newlines, 6498languages that mandate that source files should end with newlines.
5285i.e., C, C++ and Objective-C. 6499These are C, C++ and Objective-C.
5286@end defopt 6500@end defopt
5287 6501
5288@defopt c-echo-syntactic-information-p 6502@defopt c-echo-syntactic-information-p
@@ -5308,7 +6522,68 @@ anchoring position to indent the line in that case.
5308 6522
5309 6523
5310@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6524@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5311@node Performance Issues, Limitations and Known Bugs, Odds and Ends, Top 6525@node Sample .emacs File, Performance Issues, Odds and Ends, Top
6526@comment node-name, next, previous, up
6527@appendix Sample .emacs File
6528@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6529
6530@verbatim
6531;; Here's a sample .emacs file fragment that might help you along the
6532;; way. Just copy this region and paste it into your .emacs file.
6533;; You might want to change some of the actual values.
6534
6535;; Make some non-standard key bindings. We can put these in
6536;; c-mode-base-map because c-mode-map, c++-mode-map, and so on,
6537;; inherit from it.
6538(defun my-c-initialization-hook ()
6539 (define-key c-mode-base-map "\C-m" 'c-context-line-break)
6540 (define-key c-mode-base-map [?\C-\M-a] 'c-beginning-of-defun)
6541 (define-key c-mode-base-map [?\C-\M-e] 'c-end-of-defun)
6542(add-hook 'c-initialization-hook 'my-c-initialization-hook)
6543
6544;; offset customizations not in my-c-style
6545;; This will take precedence over any setting of the syntactic symbol
6546;; made by a style.
6547(setq c-offsets-alist '((member-init-intro . ++)))
6548
6549;; Create my personal style.
6550(defconst my-c-style
6551 '((c-tab-always-indent . t)
6552 (c-comment-only-line-offset . 4)
6553 (c-hanging-braces-alist . ((substatement-open after)
6554 (brace-list-open)))
6555 (c-hanging-colons-alist . ((member-init-intro before)
6556 (inher-intro)
6557 (case-label after)
6558 (label after)
6559 (access-label after)))
6560 (c-cleanup-list . (scope-operator
6561 empty-defun-braces
6562 defun-close-semi))
6563 (c-offsets-alist . ((arglist-close . c-lineup-arglist)
6564 (substatement-open . 0)
6565 (case-label . 4)
6566 (block-open . 0)
6567 (knr-argdecl-intro . -)))
6568 (c-echo-syntactic-information-p . t))
6569 "My C Programming Style")
6570(c-add-style "PERSONAL" my-c-style)
6571
6572;; Customizations for all modes in CC Mode.
6573(defun my-c-mode-common-hook ()
6574 ;; set my personal style for the current buffer
6575 (c-set-style "PERSONAL")
6576 ;; other customizations
6577 (setq tab-width 8
6578 ;; this will make sure spaces are used instead of tabs
6579 indent-tabs-mode nil)
6580 ;; we like auto-newline, but not hungry-delete
6581 (c-toggle-auto-newline 1))
6582(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
6583@end verbatim
6584
6585@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6586@node Performance Issues, Limitations and Known Bugs, Sample .emacs File, Top
5312@comment node-name, next, previous, up 6587@comment node-name, next, previous, up
5313@chapter Performance Issues 6588@chapter Performance Issues
5314@cindex performance 6589@cindex performance
@@ -5323,10 +6598,10 @@ pathological code can cause @ccmode{} to perform fairly badly. This
5323section gives some insight in how @ccmode{} operates, how that interacts 6598section gives some insight in how @ccmode{} operates, how that interacts
5324with some coding styles, and what you can use to improve performance. 6599with some coding styles, and what you can use to improve performance.
5325 6600
5326The overall goal is that @ccmode{} shouldn't be overly slow (i.e., take 6601The overall goal is that @ccmode{} shouldn't be overly slow (i.e. take
5327more than a fraction of a second) in any interactive operation. 6602more than a fraction of a second) in any interactive operation.
5328i.e., it's tuned to limit the maximum response time in single operations, 6603I.e. it's tuned to limit the maximum response time in single operations,
5329which sometimes is at the expense of batch-like operations like 6604which is sometimes at the expense of batch-like operations like
5330reindenting whole blocks. If you find that @ccmode{} gradually gets 6605reindenting whole blocks. If you find that @ccmode{} gradually gets
5331slower and slower in certain situations, perhaps as the file grows in 6606slower and slower in certain situations, perhaps as the file grows in
5332size or as the macro or comment you're editing gets bigger, then chances 6607size or as the macro or comment you're editing gets bigger, then chances
@@ -5337,28 +6612,30 @@ Because @ccmode{} has to scan the buffer backwards from the current
5337insertion point, and because C's syntax is fairly difficult to parse in 6612insertion point, and because C's syntax is fairly difficult to parse in
5338the backwards direction, @ccmode{} often tries to find the nearest 6613the backwards direction, @ccmode{} often tries to find the nearest
5339position higher up in the buffer from which to begin a forward scan 6614position higher up in the buffer from which to begin a forward scan
5340(it's typically an opening or closing parethesis of some kind). The 6615(it's typically an opening or closing parenthesis of some kind). The
5341farther this position is from the current insertion point, the slower it 6616farther this position is from the current insertion point, the slower it
5342gets. 6617gets.
5343 6618
5344@findex beginning-of-defun 6619@findex beginning-of-defun
5345@findex defun-prompt-regexp 6620In earlier versions of @ccmode{}, we used to recommend putting the
5346One of the simplest things you can do to reduce scan time, is make sure 6621opening brace of a top-level construct@footnote{E.g. a function in C,
5347any brace that opens a top-level construct@footnote{e.g., a function in 6622or outermost class definition in C++ or Java.} into the leftmost
5348C, or outermost class definition in C++ or Java.} always appears in the 6623column. Earlier still, this used to be a rigid Emacs constraint, as
5349leftmost column. This is actually an Emacs constraint, as embodied in 6624embodied in the @code{beginning-of-defun} function. @ccmode now
5350the @code{beginning-of-defun} function which @ccmode{} uses heavily. If 6625caches syntactic information much better, so that the delay caused by
5351you hang top-level open braces on the right side of the line, then you 6626searching for such a brace when it's not in column 0 is minimal,
5352might want to set the variable @code{defun-prompt-regexp} to something 6627except perhaps when you've just moved a long way inside the file.
5353reasonable, however that ``something reasonable'' is difficult to 6628Don't forget to rebind @kbd{C-M-a} and @kbd{C-M-e} to the @ccmode{}
5354define, so @ccmode{} doesn't do it for you. 6629functions @code{beginning-of-defun} and @code{end-of-defun} if you're
6630going to be hanging your braces! @xref{Sample .emacs File}.
5355 6631
6632@findex defun-prompt-regexp
5356@vindex c-Java-defun-prompt-regexp 6633@vindex c-Java-defun-prompt-regexp
5357@vindex Java-defun-prompt-regexp (c-) 6634@vindex Java-defun-prompt-regexp (c-)
5358A special note about @code{defun-prompt-regexp} in Java mode: The common 6635A special note about @code{defun-prompt-regexp} in Java mode: The common
5359style is to hang the opening braces of functions and classes on the 6636style is to hang the opening braces of functions and classes on the
5360right side of the line, and that doesn't work well with the Emacs 6637right side of the line, and that doesn't work well with the Emacs
5361approach. @ccmode{} comes with a variable 6638approach. @ccmode{} comes with a constant
5362@code{c-Java-defun-prompt-regexp} which tries to define a regular 6639@code{c-Java-defun-prompt-regexp} which tries to define a regular
5363expression usable for this style, but there are problems with it. In 6640expression usable for this style, but there are problems with it. In
5364some cases it can cause @code{beginning-of-defun} to hang@footnote{This 6641some cases it can cause @code{beginning-of-defun} to hang@footnote{This
@@ -5386,7 +6663,7 @@ XEmacs users can set the variable
5386tells @ccmode{} to use XEmacs-specific built-in functions which, in some 6663tells @ccmode{} to use XEmacs-specific built-in functions which, in some
5387circumstances, can locate the top-most opening brace much more quickly than 6664circumstances, can locate the top-most opening brace much more quickly than
5388@code{beginning-of-defun}. Preliminary testing has shown that for 6665@code{beginning-of-defun}. Preliminary testing has shown that for
5389styles where these braces are hung (e.g., most JDK-derived Java styles), 6666styles where these braces are hung (e.g. most JDK-derived Java styles),
5390this hack can improve performance of the core syntax parsing routines 6667this hack can improve performance of the core syntax parsing routines
5391from 3 to 60 times. However, for styles which @emph{do} conform to 6668from 3 to 60 times. However, for styles which @emph{do} conform to
5392Emacs' recommended style of putting top-level braces in column zero, 6669Emacs' recommended style of putting top-level braces in column zero,
@@ -5397,7 +6674,7 @@ in Emacs since the necessary built-in functions don't exist (in Emacs
539721.3 as of this writing in May 2003). 667421.3 as of this writing in May 2003).
5398 6675
5399Text properties are used to speed up skipping over syntactic whitespace, 6676Text properties are used to speed up skipping over syntactic whitespace,
5400i.e., comments and preprocessor directives. Indenting a line after a 6677i.e. comments and preprocessor directives. Indenting a line after a
5401huge macro definition can be slow the first time, but after that the 6678huge macro definition can be slow the first time, but after that the
5402text properties are in place and it should be fast (even after you've 6679text properties are in place and it should be fast (even after you've
5403edited other parts of the file and then moved back). 6680edited other parts of the file and then moved back).
@@ -5405,7 +6682,7 @@ edited other parts of the file and then moved back).
5405Font locking can be a CPU hog, especially the font locking done on 6682Font locking can be a CPU hog, especially the font locking done on
5406decoration level 3 which tries to be very accurate. Note that that 6683decoration level 3 which tries to be very accurate. Note that that
5407level is designed to be used with a font lock support mode that only 6684level is designed to be used with a font lock support mode that only
5408fontifies the text that's actually shown, i.e., Lazy Lock or Just-in-time 6685fontifies the text that's actually shown, i.e. Lazy Lock or Just-in-time
5409Lock mode, so make sure you use one of them. Fontification of a whole 6686Lock mode, so make sure you use one of them. Fontification of a whole
5410buffer with some thousand lines can often take over a minute. That is 6687buffer with some thousand lines can often take over a minute. That is
5411a known weakness; the idea is that it never should happen. 6688a known weakness; the idea is that it never should happen.
@@ -5418,7 +6695,7 @@ more info.
5418 6695
5419 6696
5420@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6697@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5421@node Limitations and Known Bugs, Frequently Asked Questions, Performance Issues, Top 6698@node Limitations and Known Bugs, FAQ, Performance Issues, Top
5422@comment node-name, next, previous, up 6699@comment node-name, next, previous, up
5423@chapter Limitations and Known Bugs 6700@chapter Limitations and Known Bugs
5424@cindex limitations 6701@cindex limitations
@@ -5427,9 +6704,9 @@ more info.
5427 6704
5428@itemize @bullet 6705@itemize @bullet
5429@item 6706@item
5430There is no way to apply auto newline settings (@pxref{Auto-newline 6707There is no way to apply auto newline settings (@pxref{Auto-newlines})
5431Insertion}) on already typed lines. That's only a feature to ease 6708on already typed lines. That's only a feature to ease interactive
5432interactive editing. 6709editing.
5433 6710
5434To generalize this issue a bit: @ccmode{} is not intended to be used as 6711To generalize this issue a bit: @ccmode{} is not intended to be used as
5435a reformatter for old code in some more or less batch-like way. With 6712a reformatter for old code in some more or less batch-like way. With
@@ -5438,47 +6715,29 @@ geared to be used interactively to edit new code. There's currently no
5438intention to change this goal. 6715intention to change this goal.
5439 6716
5440If you want to reformat old code, you're probably better off using some 6717If you want to reformat old code, you're probably better off using some
5441other tool instead, e.g., @ref{Top, , GNU indent, indent, The `indent' 6718other tool instead, e.g. @ref{Top, , GNU indent, indent, The `indent'
5442Manual}, which has more powerful reformatting capabilities than 6719Manual}, which has more powerful reformatting capabilities than
5443@ccmode{}. 6720@ccmode{}.
5444 6721
5445@item 6722@item
5446@vindex signal-error-on-buffer-boundary 6723The support for C++ templates (in angle brackets) is not yet complete.
5447XEmacs has a variable called @code{signal-error-on-buffer-boundary}. 6724When a non-nested template is used in a declaration, @ccmode{} indents
5448It's used as a solution to user interface problems associated with 6725it and font-locks it OK. Templates used in expressions, and nested
5449buffer movement and the @code{zmacs-region} deactivation on errors. 6726templates do not fare so well. Sometimes a workaround is to refontify
5450However, setting this variable to a non-default value in XEmacs 19 and 6727the expression after typing the closing @samp{>}.
545120 had the deleterious side effect of breaking many built-in primitive
5452functions. @strong{Do not set this variable to @code{nil} in XEmacs
545319 and 20}; you will cause serious problems in @ccmode{} and probably
5454other XEmacs packages! In XEmacs 21 the effects of the variable is
5455limited to some functions that are only used interactively, so it's
5456not a problem there.
5457@end itemize 6728@end itemize
5458 6729
5459
5460@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6730@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5461@node Frequently Asked Questions, Getting the Latest CC Mode Release, Limitations and Known Bugs, Top 6731@node FAQ, Updating CC Mode, Limitations and Known Bugs, Top
5462@comment node-name, next, previous, up 6732@comment node-name, next, previous, up
5463@appendix Frequently Asked Questions 6733@appendix Frequently Asked Questions
5464@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6734@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5465 6735
5466@itemize @bullet 6736@itemize @bullet
5467@item 6737@item
5468@kindex C-x h 6738@emph{How can I change the indent level from 4 spaces to 2 spaces?}
5469@kindex C-M-\
5470@emph{How do I reindent the whole file?}
5471 6739
5472Visit the file and hit @kbd{C-x h} to mark the whole buffer. Then hit 6740Set the variable @code{c-basic-offset}. @xref{Getting Started}.
5473@kbd{C-M-\}.
5474
5475@item
5476@kindex C-M-q
5477@kindex C-M-u
5478@emph{How do I reindent the current block?}
5479
5480First move to the brace which opens the block with @kbd{C-M-u}, then
5481reindent that expression with @kbd{C-M-q}.
5482 6741
5483@item 6742@item
5484@kindex RET 6743@kindex RET
@@ -5487,57 +6746,55 @@ reindent that expression with @kbd{C-M-q}.
5487 6746
5488Emacs' convention is that @kbd{RET} just adds a newline, and that 6747Emacs' convention is that @kbd{RET} just adds a newline, and that
5489@kbd{C-j} adds a newline and indents it. You can make @kbd{RET} do this 6748@kbd{C-j} adds a newline and indents it. You can make @kbd{RET} do this
5490too by adding this to your @code{c-mode-common-hook}: 6749too by adding this to your @code{c-initialization-hook}:
5491 6750
5492@example 6751@example
5493(define-key c-mode-base-map "\C-m" 'c-context-line-break) 6752(define-key c-mode-base-map "\C-m" 'c-context-line-break)
5494@end example 6753@end example
5495 6754
5496This is a very common question. If you want this to be the default 6755@xref{Getting Started}. This is a very common question. If you want
5497behavior, don't lobby me, lobby RMS! @t{:-)} 6756this to be the default behavior, don't lobby us, lobby RMS! @t{:-)}
6757
6758@item
6759@emph{How do I stop my code jumping all over the place when I type?}
6760
6761Deactivate ``electric minor mode'' with @kbd{C-c C-l}. @xref{Getting
6762Started}.
6763
6764@item
6765@kindex C-x h
6766@kindex C-M-\
6767@emph{How do I reindent the whole file?}
6768
6769Visit the file and hit @kbd{C-x h} to mark the whole buffer. Then hit
6770@kbd{C-M-\}. @xref{Indentation Commands}.
6771
6772@item
6773@kindex C-M-q
6774@kindex C-M-u
6775@emph{How do I reindent the current block?}
6776
6777First move to the brace which opens the block with @kbd{C-M-u}, then
6778reindent that expression with @kbd{C-M-q}. @xref{Indentation
6779Commands}.
5498 6780
5499@item 6781@item
5500@emph{I put @code{(c-set-offset 'substatement-open 0)} in my 6782@emph{I put @code{(c-set-offset 'substatement-open 0)} in my
5501@file{.emacs} file but I get an error saying that @code{c-set-offset}'s 6783@file{.emacs} file but I get an error saying that @code{c-set-offset}'s
5502function definition is void. What's wrong?} 6784function definition is void. What's wrong?}
5503 6785
5504This means that @ccmode{} wasn't loaded into your Emacs session by the 6786This means that @ccmode{} hasn't yet been loaded into your Emacs
5505time the @code{c-set-offset} call was reached, most likely because 6787session by the time the @code{c-set-offset} call is reached, most
5506@ccmode{} is being autoloaded. Instead of putting the 6788likely because @ccmode{} is being autoloaded. Instead of putting the
5507@code{c-set-offset} line in your top-level @file{.emacs} file, put it in 6789@code{c-set-offset} line in your top-level @file{.emacs} file, put it
5508your @code{c-mode-common-hook}, or simply modify @code{c-offsets-alist} 6790in your @code{c-initialization-hook} (@pxref{CC Hooks}), or simply
5509directly: 6791modify @code{c-offsets-alist} directly:
5510 6792
5511@example 6793@example
5512(setq c-offsets-alist '((substatement-open . 0))) 6794(setq c-offsets-alist '((substatement-open . 0)))
5513@end example 6795@end example
5514 6796
5515@item 6797@item
5516@kindex M-a
5517@kindex M-e
5518@emph{@kbd{M-a} and @kbd{M-e} used to move over entire balanced brace
5519lists, but now they move into blocks. How do I get the old behavior
5520back?}
5521
5522Use @kbd{C-M-f} and @kbd{C-M-b} to move over balanced brace blocks. Use
5523@kbd{M-a} and @kbd{M-e} to move by statements, which will also move into
5524blocks.
5525
5526@item
5527@emph{Whenever I try to indent a line or type an ``electric'' key such
5528as @kbd{;}, @kbd{@{}, or @kbd{@}}, I get an error that look like this:
5529@code{Invalid function: (macro . #[...}. What gives?}
5530
5531This is a common error when @ccmode{} hasn't been compiled correctly,
5532especially under Emacs 19.34@footnote{Technically, it's because some
5533macro wasn't defined during the compilation, so the byte compiler put
5534in function calls instead of the macro expansions. Later, when the
5535interpreter tries to call the macro as a function, it shows this
5536(somewhat cryptic) error message.}. If you are using the standalone
5537@ccmode{} distribution, try recompiling it according to the instructions
5538in the @file{README} file.
5539
5540@item
5541@cindex open paren in column zero 6798@cindex open paren in column zero
5542@emph{I have an open paren character at column zero inside a comment or 6799@emph{I have an open paren character at column zero inside a comment or
5543multiline string literal, and it causes the fontification and/or 6800multiline string literal, and it causes the fontification and/or
@@ -5546,20 +6803,25 @@ indentation to go haywire. What gives?}
5546It's due to the ad-hoc rule in (X)Emacs that such open parens always 6803It's due to the ad-hoc rule in (X)Emacs that such open parens always
5547start defuns (which translates to functions, classes, namespaces or any 6804start defuns (which translates to functions, classes, namespaces or any
5548other top-level block constructs in the @ccmode{} languages). 6805other top-level block constructs in the @ccmode{} languages).
5549@xref{Left Margin Paren,,, emacs, The Emacs Editor}, for details 6806@ifset XEMACS
5550(@xref{Defuns,,, emacs, The Emacs Editor}, in the Emacs 20 manual). 6807@xref{Defuns,,, xemacs, XEmacs User's Manual}, for details.
6808@end ifset
6809@ifclear XEMACS
6810@xref{Left Margin Paren,,, emacs, GNU Emacs Manual}, for details
6811(@xref{Defuns,,, emacs, GNU Emacs Manual}, in the Emacs 20 manual).
6812@end ifclear
5551 6813
5552This heuristic is built into the core syntax analysis routines in 6814This heuristic is built into the core syntax analysis routines in
5553(X)Emacs, so it's not really a @ccmode{} issue. However, in Emacs 22.1 6815(X)Emacs, so it's not really a @ccmode{} issue. However, in Emacs
5554it has become possible to turn it off@footnote{Using the variable 681621.1 it became possible to turn it off@footnote{Using the variable
5555@code{open-paren-in-column-0-is-defun-start}.} and @ccmode{} does so 6817@code{open-paren-in-column-0-is-defun-start}.} and @ccmode{} does so
5556there since it got its own system to keep track of blocks. 6818there since it's got its own system to keep track of blocks.
5557 6819
5558@end itemize 6820@end itemize
5559 6821
5560 6822
5561@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6823@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5562@node Getting the Latest CC Mode Release, Mailing Lists and Submitting Bug Reports, Frequently Asked Questions, Top 6824@node Updating CC Mode, Mailing Lists and Bug Reports, FAQ, Top
5563@comment node-name, next, previous, up 6825@comment node-name, next, previous, up
5564@appendix Getting the Latest CC Mode Release 6826@appendix Getting the Latest CC Mode Release
5565@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6827@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -5579,7 +6841,7 @@ compatibility, etc. are all available on the web site:
5579 6841
5580 6842
5581@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6843@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5582@node Mailing Lists and Submitting Bug Reports, Sample .emacs File, Getting the Latest CC Mode Release, Top 6844@node Mailing Lists and Bug Reports, Command and Function Index, Updating CC Mode, Top
5583@comment node-name, next, previous, up 6845@comment node-name, next, previous, up
5584@appendix Mailing Lists and Submitting Bug Reports 6846@appendix Mailing Lists and Submitting Bug Reports
5585@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6847@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -5597,83 +6859,33 @@ to include any code that appears @emph{before} your bug example, if
5597you think it might affect our ability to reproduce it. 6859you think it might affect our ability to reproduce it.
5598 6860
5599Please try to produce the problem in an Emacs instance without any 6861Please try to produce the problem in an Emacs instance without any
5600customizations loaded (i.e., start it with the @samp{-q --no-site-file} 6862customizations loaded (i.e. start it with the @samp{-q -no-site-file}
5601arguments). If it works correctly there, the problem might be caused by 6863arguments). If it works correctly there, the problem might be caused
5602faulty customizations in either your own or your site configuration. In 6864by faulty customizations in either your own or your site
5603that case, we'd appreciate if you isolate the Emacs Lisp code that trigs 6865configuration. In that case, we'd appreciate if you isolate the Emacs
5604the bug and include it in your report. 6866Lisp code that triggers the bug and include it in your report.
5605 6867
5606@cindex bug report mailing list 6868@cindex bug report mailing list
5607Bug reports are sent to @email{bug-cc-mode@@gnu.org}. You can also send 6869Bug reports should be sent to @email{bug-cc-mode@@gnu.org}. You can
5608other questions and suggestions (kudos? @t{;-)} to that address. It's a 6870also send other questions and suggestions (kudos? @t{;-)} to that
5609mailing list which you can join or browse an archive of; see the web 6871address. It's a mailing list which you can join or browse an archive
5610site at @uref{http://cc-mode.sourceforge.net/} for further details. 6872of; see the web site at @uref{http://cc-mode.sourceforge.net/} for
6873further details.
5611 6874
5612@cindex announcement mailing list 6875@cindex announcement mailing list
5613If you want to get announcements of new @ccmode{} releases, send the 6876If you want to get announcements of new @ccmode{} releases, send the
5614word @emph{subscribe} in the body of a message to 6877word @emph{subscribe} in the body of a message to
5615@email{cc-mode-announce-request@@lists.sourceforge.net}. It's possible 6878@email{cc-mode-announce-request@@lists.sourceforge.net}. It's possible
5616to subscribe from the web site too. Announcements will also be posted 6879to subscribe from the web site too. Announcements will also be posted
5617to the Usenet newsgroups @code{gnu.emacs.sources}, @code{comp.emacs} and 6880to the Usenet newsgroups @code{gnu.emacs.sources}, @code{comp.emacs},
5618@code{comp.emacs.xemacs}. 6881@code{comp.emacs.xemacs}, @code{comp.lang.c}, @code{comp.lang.c++},
5619 6882@code{comp.lang.objective-c}, @code{comp.lang.java.softwaretools},
6883@code{comp.lang.idl}, and @code{comp.lang.awk}.
6884@c There is no newsgroup for Pike. :-(
5620 6885
6886@c Removed the tentative node "Mode Initialization" from here, 2005/8/27.
5621@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6887@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5622@node Sample .emacs File, Command and Function Index, Mailing Lists and Submitting Bug Reports, Top 6888@node Command and Function Index, Variable Index, Mailing Lists and Bug Reports, Top
5623@comment node-name, next, previous, up
5624@appendix Sample .emacs file
5625@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5626
5627@example
5628;; Here's a sample .emacs file that might help you along the way.
5629;; Just copy this region and paste it into your .emacs file. You may
5630;; want to change some of the actual values.
5631
5632(defconst my-c-style
5633 '((c-tab-always-indent . t)
5634 (c-comment-only-line-offset . 4)
5635 (c-hanging-braces-alist . ((substatement-open after)
5636 (brace-list-open)))
5637 (c-hanging-colons-alist . ((member-init-intro before)
5638 (inher-intro)
5639 (case-label after)
5640 (label after)
5641 (access-label after)))
5642 (c-cleanup-list . (scope-operator
5643 empty-defun-braces
5644 defun-close-semi))
5645 (c-offsets-alist . ((arglist-close . c-lineup-arglist)
5646 (substatement-open . 0)
5647 (case-label . 4)
5648 (block-open . 0)
5649 (knr-argdecl-intro . -)))
5650 (c-echo-syntactic-information-p . t))
5651 "My C Programming Style")
5652
5653;; offset customizations not in my-c-style
5654(setq c-offsets-alist '((member-init-intro . ++)))
5655
5656;; Customizations for all modes in CC Mode.
5657(defun my-c-mode-common-hook ()
5658 ;; add my personal style and set it for the current buffer
5659 (c-add-style "PERSONAL" my-c-style t)
5660 ;; other customizations
5661 (setq tab-width 8
5662 ;; this will make sure spaces are used instead of tabs
5663 indent-tabs-mode nil)
5664 ;; we like auto-newline and hungry-delete
5665 (c-toggle-auto-hungry-state 1)
5666 ;; key bindings for all supported languages. We can put these in
5667 ;; c-mode-base-map because c-mode-map, c++-mode-map, objc-mode-map,
5668 ;; java-mode-map, idl-mode-map, and pike-mode-map inherit from it.
5669 (define-key c-mode-base-map "\C-m" 'c-context-line-break))
5670
5671(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
5672@end example
5673
5674
5675@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5676@node Command and Function Index, Variable Index, Sample .emacs File, Top
5677@comment node-name, next, previous, up 6889@comment node-name, next, previous, up
5678@unnumbered Command and Function Index 6890@unnumbered Command and Function Index
5679@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6891@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -5688,7 +6900,7 @@ Since most @ccmode{} commands are prepended with the string
5688 6900
5689 6901
5690@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6902@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5691@node Variable Index, Concept Index, Command and Function Index, Top 6903@node Variable Index, Concept and Key Index, Command and Function Index, Top
5692@comment node-name, next, previous, up 6904@comment node-name, next, previous, up
5693@unnumbered Variable Index 6905@unnumbered Variable Index
5694@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6906@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -5703,9 +6915,9 @@ Since most @ccmode{} variables are prepended with the string
5703 6915
5704 6916
5705@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6917@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5706@node Concept Index, , Variable Index, Top 6918@node Concept and Key Index, , Variable Index, Top
5707@comment node-name, next, previous, up 6919@comment node-name, next, previous, up
5708@unnumbered Concept Index 6920@unnumbered Concept and Key Index
5709@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6921@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5710 6922
5711@printindex cp 6923@printindex cp