Merge branch 'master' into comment-cache
[emacs.git] / doc / misc / cc-mode.texi
blob14981c9c58b9fac6b5be9030eb7f28b47959a184
1 \input texinfo
2 @c Notes to self regarding line handling:
3 @c
4 @c Empty lines are often significant before @end directives; avoid them.
5 @c
6 @c Empty lines before and after @example directives are significant in
7 @c info output but not in TeX.  Empty lines inside @example directives
8 @c are significant.
10 @c Conventions for formatting examples:
11 @c o  If the example contains empty lines then put the surrounding empty
12 @c    lines inside the @example directives.  Put them outside otherwise.
13 @c o  Use @group inside the example only if it shows indentation where
14 @c    the relation between lines inside is relevant.
15 @c o  Format line number columns like this:
16 @c     1: foo
17 @c     2: bar
18 @c       ^ one space
19 @c    ^^ two columns, right alignment
20 @c o  Check line lengths in TeX output; they can typically be no longer
21 @c    than 70 chars, 60 if the paragraph is indented.
23 @comment TBD: Document the finer details of statement anchoring?
25 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26 @comment %**start of header (This is for running Texinfo on a region)
27 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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
36 In each of the following pairs of commands, the first generates a
37 version with cross references pointing to the GNU Emacs manuals,
38 the second with them pointing to the XEmacs manuals.
39     ## Info output
40     makeinfo cc-mode.texi
41     makeinfo -DXEMACS cc-mode.texi
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
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
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
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
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
72     #### (You must be in the same directory as the viewed file.)
74       ## View DVI output
75       xdvi cc-mode.dvi &
77       ## View HTML output
78       mozilla cc-mode.html
79 @end ignore
81 @comment No overfull hbox marks in the dvi file.
82 @finalout
84 @setfilename  ../../info/ccmode.info
85 @settitle     CC Mode Manual
86 @include docstyle.texi
87 @footnotestyle end
89 @c The following four macros generate the filenames and titles of the
90 @c main (X)Emacs manual and the Elisp/Lispref manual.  Leave the
91 @c Texinfo variable 'XEMACS' unset to generate a GNU Emacs version, set it
92 @c to generate an XEmacs version, e.g., with
93 @c "makeinfo -DXEMACS cc-mode.texi".
94 @ifset XEMACS
95 @macro emacsman
96 xemacs
97 @end macro
98 @macro emacsmantitle
99 XEmacs User's Manual
100 @end macro
101 @macro lispref
102 lispref
103 @end macro
104 @macro lispreftitle
105 XEmacs Lisp Reference Manual
106 @end macro
107 @end ifset
109 @ifclear XEMACS
110 @macro emacsman
111 emacs
112 @end macro
113 @macro emacsmantitle
114 GNU Emacs Manual
115 @end macro
116 @macro lispref
117 elisp
118 @end macro
119 @macro lispreftitle
120 GNU Emacs Lisp Reference Manual
121 @end macro
122 @end ifclear
125 @macro ccmode
126 CC Mode
127 @end macro
129 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
130 @comment @setchapternewpage odd !! we don't want blank pages !!
131 @comment %**end of header (This is for running Texinfo on a region)
132 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
135 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
136 @comment
137 @comment Texinfo manual for CC Mode
138 @comment Generated from the original README file by Krishna Padmasola
139 @comment <krishna@earth-gw.njit.edu>
140 @comment
141 @comment Authors:
142 @comment Barry A. Warsaw
143 @comment Martin Stjernholm
144 @comment Alan Mackenzie
145 @comment
146 @comment Maintained by Martin Stjernholm and Alan Mackenzie <bug-cc-mode@gnu.org>
147 @comment
148 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
150 @comment Define an index for syntactic symbols.
151 @defindex ss
153 @comment Combine key, syntactic symbol and concept indices into one.
154 @syncodeindex ss cp
155 @syncodeindex ky cp
157 @copying
158 This manual is for CC Mode in Emacs.
160 Copyright @copyright{} 1995--2017 Free Software Foundation, Inc.
162 @quotation
163 Permission is granted to copy, distribute and/or modify this document
164 under the terms of the GNU Free Documentation License, Version 1.3 or
165 any later version published by the Free Software Foundation; with no
166 Invariant Sections, with the Front-Cover Texts being ``A GNU Manual'',
167 and with the Back-Cover Texts as in (a) below.  A copy of the license
168 is included in the section entitled ``GNU Free Documentation License''.
170 (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
171 modify this GNU manual.''
172 @end quotation
173 @end copying
175 @comment Info directory entry for use by install-info. The indentation
176 @comment here is by request from the FSF folks.
177 @dircategory Emacs editing modes
178 @direntry
179 * CC Mode: (ccmode).            Emacs mode for editing C, C++, Objective-C,
180                                   Java, Pike, AWK, and CORBA IDL code.
181 @end direntry
183 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
184 @comment TeX title page
185 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
187 @titlepage
188 @sp 10
190 @center @titlefont{CC Mode 5.32}
191 @sp 2
192 @center A GNU Emacs mode for editing C and C-like languages
193 @sp 2
194 @center Barry A. Warsaw, Martin Stjernholm, Alan Mackenzie
196 @page
197 @vskip 0pt plus 1filll
198 @insertcopying
200 This manual was generated from cc-mode.texi, which is distributed with Emacs,
201 or can be downloaded from @url{http://savannah.gnu.org/projects/emacs/}.
202 @end titlepage
204 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
205 @comment The Top node contains the master menu for the Info file.
206 @comment This appears only in the Info file, not the printed manual.
207 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
209 @summarycontents
210 @contents
212 @node    Top, Introduction, (dir), (dir)
213 @comment node-name, next, previous, up
215 @ifnottex
216 @top @ccmode{}
218 @ccmode{} is a GNU Emacs mode for editing files containing C, C++,
219 Objective-C, Java, CORBA IDL (and the variants PSDL and CIDL), Pike
220 and AWK code.  It provides syntax-based indentation, font locking, and
221 has several handy commands and some minor modes to make the editing
222 easier.  It does not provide tools to look up and navigate between
223 functions, classes, etc.; there are other packages for that.
225 @insertcopying
226 @end ifnottex
228 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
229 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
231 @menu
232 * Introduction::
233 * Overview::
234 * Getting Started::
235 * Commands::
236 * Font Locking::
237 * Config Basics::
238 * Custom Filling and Breaking::
239 * Custom Auto-newlines::
240 * Clean-ups::
241 * Indentation Engine Basics::
242 * Customizing Indentation::
243 * Custom Macros::
244 * Odds and Ends::
245 * Sample Init File::
246 * Performance Issues::
247 * Limitations and Known Bugs::
248 * FAQ::
249 * Updating CC Mode::
250 * Mailing Lists and Bug Reports::
251 * GNU Free Documentation License::
252 * Command and Function Index::
253 * Variable Index::
254 * Concept and Key Index::
256 @detailmenu
257  --- The Detailed Node Listing ---
259 Commands
261 * Indentation Commands::
262 * Comment Commands::
263 * Movement Commands::
264 * Filling and Breaking::
265 * Minor Modes::
266 * Electric Keys::
267 * Auto-newlines::
268 * Hungry WS Deletion::
269 * Subword Movement::
270 * Other Commands::
272 Font Locking
274 * Font Locking Preliminaries::
275 * Faces::
276 * Doc Comments::
277 * AWK Mode Font Locking::
279 Configuration Basics
281 * CC Hooks::
282 * Style Variables::
283 * Styles::
285 Styles
287 * Built-in Styles::
288 * Choosing a Style::
289 * Adding Styles::
290 * Guessing the Style::
291 * File Styles::
293 Customizing Auto-newlines
295 * Hanging Braces::
296 * Hanging Colons::
297 * Hanging Semicolons and Commas::
299 Hanging Braces
301 * Custom Braces::
303 Indentation Engine Basics
305 * Syntactic Analysis::
306 * Syntactic Symbols::
307 * Indentation Calculation::
309 Syntactic Symbols
311 * Function Symbols::
312 * Class Symbols::
313 * Conditional Construct Symbols::
314 * Switch Statement Symbols::
315 * Brace List Symbols::
316 * External Scope Symbols::
317 * Paren List Symbols::
318 * Literal Symbols::
319 * Multiline Macro Symbols::
320 * Objective-C Method Symbols::
321 * Java Symbols::
322 * Statement Block Symbols::
323 * K&R Symbols::
325 Customizing Indentation
327 * c-offsets-alist::
328 * Interactive Customization::
329 * Line-Up Functions::
330 * Custom Line-Up::
331 * Other Indentation::
333 Line-Up Functions
335 * Brace/Paren Line-Up::
336 * List Line-Up::
337 * Operator Line-Up::
338 * Comment Line-Up::
339 * Misc Line-Up::
342 Customizing Macros
344 * Macro Backslashes::
345 * Macros with ;::
346 * Noise Macros::
348 @end detailmenu
349 @end menu
350 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
351 @node    Introduction, Overview, Top, Top
352 @comment node-name, next, previous, up
353 @chapter Introduction
354 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
356 @cindex BOCM
357 @cindex history
358 @cindex awk-mode.el
359 @cindex c-mode.el
360 @cindex c++-mode.el
362 Welcome to @ccmode{}, a GNU Emacs mode for editing files containing C,
363 C++, Objective-C, Java, CORBA IDL (and the variants CORBA PSDL and
364 CIDL), Pike and AWK code.  This incarnation of the mode is descended
365 from @file{c-mode.el} (also called ``Boring Old C Mode'' or BOCM
366 @t{:-)}, @file{c++-mode.el} version 2, which Barry Warsaw had been
367 maintaining since 1992, and @file{awk-mode.el}, a long neglected mode
368 in the (X)Emacs base.
370 Late in 1997, Martin Stjernholm joined Barry on the @ccmode{}
371 Maintainers Team, and implemented the Pike support.  In 2000 Martin
372 took over as the sole maintainer.  In 2001 Alan Mackenzie joined the
373 team, implementing AWK support in version 5.30.  @ccmode{} did not
374 originally contain the font lock support for its languages; that
375 was added in version 5.30.
377 This manual describes @ccmode{}
378 @comment The following line must appear on its own, so that the
379 version 5.32.
380 @comment Release.py script can update the version number automatically
382 @ccmode{} supports the editing of C, C++, Objective-C,
383 Java, CORBA's Interface Definition Language, Pike@footnote{A C-like
384 scripting language with its roots in the LPC language used in some MUD
385 engines.  See @uref{http://pike.ida.liu.se/}.} and AWK files.  In this
386 way, you can easily set up consistent font locking and coding styles for
387 use in editing all of these languages, although AWK is not yet as
388 uniformly integrated as the other languages.
390 @findex c-mode
391 @findex c++-mode
392 @findex objc-mode
393 @findex java-mode
394 @findex idl-mode
395 @findex pike-mode
396 @findex awk-mode
397 Note that the name of this package is ``@ccmode{}'', but there is no top
398 level @code{cc-mode} entry point.  All of the variables, commands, and
399 functions in @ccmode{} are prefixed with @code{c-@var{thing}}, and
400 @code{c-mode}, @code{c++-mode}, @code{objc-mode}, @code{java-mode},
401 @code{idl-mode}, @code{pike-mode}, and @code{awk-mode} entry points are
402 provided.  This package is intended to be a replacement for
403 @file{c-mode.el}, @file{c++-mode.el} and @file{awk-mode.el}.
405 A special word of thanks goes to Krishna Padmasola for his work in
406 converting the original @file{README} file to Texinfo format.  I'd
407 also like to thank all the @ccmode{} victims who help enormously
408 during the early beta stages of @ccmode{}'s development.
410 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
411 @node    Overview, Getting Started, Introduction, Top
412 @comment  node-name,  next,  previous,  up@cindex organization of the manual
413 @chapter Overview of the Manual
414 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
416 @noindent
417 The manual starts with several introductory chapters (including this
418 one).
420 @noindent
421 The next chunk of the manual describes the day to day @emph{use} of
422 @ccmode{} (as contrasted with how to customize it).
424 @itemize @bullet
425 @item
426 The chapter ``Commands'' describes in detail how to use (nearly) all
427 of @ccmode{}'s features.  There are extensive cross-references from
428 here to the corresponding sections later in the manual which tell you
429 how to customize these features.
431 @item
432 ``Font Locking'' describes how ``syntax highlighting'' is applied to
433 your buffers.  It is mainly background information and can be skipped
434 over at a first reading.
435 @end itemize
437 @noindent
438 The next chunk of the manual describes how to @emph{customize}
439 @ccmode{}.  Typically, an overview of a topic is given at the chapter
440 level, then the sections and subsections describe the material in
441 increasing detail.
443 @itemize @bullet
444 @item
445 The chapter ``Configuration Basics'' tells you @emph{how} to write
446 customizations: whether in hooks, in styles, in both, or in neither,
447 depending on your needs.  It describes the @ccmode{} style system and
448 lists the standard styles that @ccmode{} supplies.
450 @item
451 The next few chapters describe in detail how to customize the various
452 features of @ccmode{}.
454 @item
455 Finally, there is a sample @file{.emacs} fragment, which might help you
456 in creating your own customization.
457 @end itemize
459 @noindent
460 The manual ends with ``this and that'', things that don't fit cleanly
461 into any of the previous chunks.
463 @itemize @bullet
464 @item
465 Two chapters discuss the performance of @ccmode{} and known
466 bugs/limitations.
468 @item
469 The FAQ contains a list of common problems and questions.
471 @item
472 The next two chapters tell you how to get in touch with the @ccmode{}
473 project: whether for updating @ccmode{} or submitting bug reports.
474 @end itemize
476 @noindent
477 Finally, there are the customary indices.
479 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
480 @node    Getting Started, Commands, Overview, Top
481 @comment node-name, next, previous, up
482 @chapter Getting Started
483 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
485 If you got this version of @ccmode{} with Emacs or XEmacs, it should
486 work just fine right out of the box.  Note however that you might not
487 have the latest @ccmode{} release and might want to upgrade your copy
488 (see below).
490 You should probably start by skimming through the entire Commands chapter
491 (@pxref{Commands}) to get an overview of @ccmode{}'s capabilities.
493 After trying out some commands, you may dislike some aspects of
494 @ccmode{}'s default configuration.  Here is an outline of how to
495 change some of the settings that newcomers to @ccmode{} most often
496 want to change:
498 @table @asis
499 @item c-basic-offset
500 This Lisp variable holds an integer, the number of columns @ccmode{}
501 indents nested code.  To set this value to 6, customize
502 @code{c-basic-offset} or put this into your @file{.emacs}:
504 @example
505 (setq c-basic-offset 6)
506 @end example
508 @item The (indentation) style
509 The basic ``shape'' of indentation created by @ccmode{}---by default,
510 this is @code{gnu} style (except for Java and AWK buffers).  A list of
511 the available styles and their descriptions can be found in
512 @ref{Built-in Styles}.  A complete specification of the @ccmode{}
513 style system, including how to create your own style, can be found in
514 the chapter @ref{Styles}.  To set your style to @code{linux}, either
515 customize @code{c-default-style} or put this into your @file{.emacs}:
517 @example
518 (setq c-default-style '((java-mode . "java")
519                         (awk-mode . "awk")
520                         (other . "linux")))
521 @end example
523 @item Electric Indentation
524 Normally, when you type ``punctuation'' characters such as @samp{;} or
525 @samp{@{}, @ccmode{} instantly reindents the current line.  This can
526 be disconcerting until you get used to it.  To disable @dfn{electric
527 indentation} in the current buffer, type @kbd{C-c C-l}.  Type the same
528 thing to enable it again.  To have electric indentation disabled by
529 default, put the following into your @file{.emacs} file@footnote{There
530 is no ``easy customization'' facility for making this change.}:
532 @example
533 (setq-default c-electric-flag nil)
534 @end example
536 @noindent
537 Details of this and other similar ``Minor Modes'' appear in the
538 section @ref{Minor Modes}.
540 @item Making the @key{RET} key indent the new line
541 The standard Emacs binding for @key{RET} just adds a new line.  If you
542 want it to reindent the new line as well, rebind the key.  Note that
543 the action of rebinding would fail if the pertinent keymap didn't yet
544 exist---we thus need to delay the action until after @ccmode{} has
545 been loaded.  Put the following code into your @file{.emacs}:
547 @example
548 (defun my-make-CR-do-indent ()
549   (define-key c-mode-base-map "\C-m" 'c-context-line-break))
550 (add-hook 'c-initialization-hook 'my-make-CR-do-indent)
551 @end example
553 @noindent
554 This example demonstrates the use of a very powerful @ccmode{} (and
555 Emacs) facility, the hook.  The use of @ccmode{}'s hooks is described
556 in @ref{CC Hooks}.
557 @end table
559 All these settings should occur in your @file{.emacs} @emph{before}
560 any @ccmode{} buffers get loaded---in particular, before any call of
561 @code{desktop-read}.
563 As you get to know the mode better, you may want to make more
564 ambitious changes to your configuration.  For this, you should start
565 reading the chapter @ref{Config Basics}.
567 If you are upgrading an existing @ccmode{} installation, please see
568 the @file{README} file for installation details.  In particular, if
569 you are going to be editing AWK files, @file{README} describes how to
570 configure your (X)Emacs so that @ccmode{} will supersede the obsolete
571 @code{awk-mode.el} which might have been supplied with your (X)Emacs.
572 @ccmode{} might not work with older versions of Emacs or XEmacs.  See
573 the @ccmode{} release notes at @uref{http://cc-mode.sourceforge.net}
574 for the latest information on Emacs version and package compatibility
575 (@pxref{Updating CC Mode}).
577 @deffn Command c-version
578 @findex version (c-)
579 You can find out what version of @ccmode{} you are using by visiting a C
580 file and entering @kbd{M-x c-version RET}.  You should see this message in
581 the echo area:
583 @example
584 Using CC Mode version 5.XX
585 @end example
587 @noindent
588 where @samp{XX} is the minor release number.
589 @end deffn
591 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
592 @node    Commands, Font Locking, Getting Started, Top
593 @comment node-name, next, previous, up
594 @chapter Commands
595 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
597 This chapter specifies all of CC Mode's commands, and thus contains
598 nearly everything you need to know to @emph{use} @ccmode{} (as
599 contrasted with configuring it).  @dfn{Commands} here means both
600 control key sequences and @dfn{electric keys}, these being characters
601 such as @samp{;} which, as well as inserting themselves into the
602 buffer, also do other things.
604 You might well want to review
605 @ifset XEMACS
606 @ref{Lists,,,@emacsman{}, @emacsmantitle{}},
607 @end ifset
608 @ifclear XEMACS
609 @ref{Moving by Parens,,,@emacsman{}, @emacsmantitle{}},
610 @end ifclear
611 which describes commands for moving around brace and parenthesis
612 structures.
615 @menu
616 * Indentation Commands::
617 * Comment Commands::
618 * Movement Commands::
619 * Filling and Breaking::
620 * Minor Modes::
621 * Electric Keys::
622 * Auto-newlines::
623 * Hungry WS Deletion::
624 * Subword Movement::
625 * Other Commands::
626 @end menu
628 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
629 @node    Indentation Commands, Comment Commands, Commands, Commands
630 @comment node-name, next, previous,up
631 @section Indentation Commands
632 @cindex indentation
633 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
635 The following commands reindent C constructs.  Note that when you
636 change your coding style, either interactively or through some other
637 means, your file does @emph{not} automatically get reindented.  You
638 will need to execute one of the following commands to see the effects
639 of your changes.
641 @cindex GNU indent program
642 Also, variables like @code{c-hanging-*} and @code{c-cleanup-list}
643 (@pxref{Custom Auto-newlines}) only affect how on-the-fly code is
644 formatted.  Changing the ``hanginess'' of a brace and then
645 reindenting, will not move the brace to a different line.  For this,
646 you're better off getting an external program like GNU @code{indent},
647 which will rearrange brace location, amongst other things.
649 Preprocessor directives are handled as syntactic whitespace from other
650 code, i.e., they can be interspersed anywhere without affecting the
651 indentation of the surrounding code, just like comments.
653 The code inside macro definitions is, by default, still analyzed
654 syntactically so that you get relative indentation there just as you'd
655 get if the same code was outside a macro.  However, since there is no
656 hint about the syntactic context, i.e., whether the macro expands to an
657 expression, to some statements, or perhaps to whole functions, the
658 syntactic recognition can be wrong.  @ccmode{} manages to figure it
659 out correctly most of the time, though.
661 Some macros, when invoked, ''have their own semicolon''.  To get the
662 next line indented correctly, rather than as a continuation line,
663 @xref{Macros with ;}.
665 Reindenting large sections of code can take a long time.  When
666 @ccmode{} reindents a region of code, it is essentially equivalent to
667 hitting @key{TAB} on every line of the region.
669 These commands indent code:
671 @table @asis
672 @item @kbd{@key{TAB}} (@code{c-indent-command})
673 @kindex TAB
674 @findex c-indent-command
675 @findex indent-command (c-)
676 This command indents the current line.  That is all you need to know
677 about it for normal use.
679 @code{c-indent-command} does different things, depending on the
680 setting of @code{c-syntactic-indentation} (@pxref{Indentation Engine
681 Basics}):
683 @itemize @bullet
684 @item
685 When it's non-@code{nil} (which it normally is), the command indents
686 the line according to its syntactic context.  With a prefix argument
687 (@kbd{C-u @key{TAB}}), it will re-indent the entire
688 expression@footnote{this is only useful for a line starting with a
689 comment opener or an opening brace, parenthesis, or string quote.}
690 that begins at the line's left margin.
692 @item
693 When it's @code{nil}, the command indents the line by an extra
694 @code{c-basic-offset} columns.  A prefix argument acts as a
695 multiplier.  A bare prefix (@kbd{C-u @key{TAB}}) is equivalent to -1,
696 removing @code{c-basic-offset} columns from the indentation.
697 @end itemize
699 The precise behavior is modified by several variables: With
700 @code{c-tab-always-indent}, you can make @key{TAB} insert whitespace
701 in some circumstances---@code{c-insert-tab-function} then defines
702 precisely what sort of ``whitespace'' this will be.  Set the standard
703 Emacs variable @code{indent-tabs-mode} to @code{t} if you want real
704 @samp{tab} characters to be used in the indentation, to @code{nil} if
705 you want only spaces.  @xref{Just Spaces,,,@emacsman{},
706 @emacsmantitle{}}.
708 @defopt c-tab-always-indent
709 @vindex tab-always-indent (c-)
710 @cindex literal
711 This variable modifies how @key{TAB} operates.
712 @itemize @bullet
713 @item
714 When it is @code{t} (the default), @key{TAB} simply indents the
715 current line.
716 @item
717 When it is @code{nil}, @key{TAB} (re)indents the line only if point is
718 to the left of the first non-whitespace character on the line.
719 Otherwise it inserts some whitespace (a tab or an equivalent number of
720 spaces; see below) at point.
721 @item
722 With some other value, the line is reindented.  Additionally, if point
723 is within a string or comment, some whitespace is inserted.
724 @end itemize
725 @end defopt
727 @defopt c-insert-tab-function
728 @vindex insert-tab-function (c-)
729 @findex tab-to-tab-stop
730 When ``some whitespace'' is inserted as described above, what actually
731 happens is that the function stored in @code{c-insert-tab-function} is
732 called.  Normally, this is @code{insert-tab}, which inserts a real tab
733 character or the equivalent number of spaces (depending on
734 @code{indent-tabs-mode}).  Some people, however, set
735 @code{c-insert-tab-function} to @code{tab-to-tab-stop} so as to get
736 hard tab stops when indenting.
737 @end defopt
738 @end table
740 @noindent
741 The kind of indentation the next five commands do depends on the
742 setting of @code{c-syntactic-indentation} (@pxref{Indentation Engine
743 Basics}):
744 @itemize @bullet
745 @item
746 when it is non-@code{nil} (the default), the commands indent lines
747 according to their syntactic context;
748 @item
749 when it is @code{nil}, they just indent each line the same amount as
750 the previous non-blank line.  The commands that indent a region aren't
751 very useful in this case.
752 @end itemize
754 @table @asis
755 @item @kbd{C-M-q} (@code{c-indent-exp})
756 @kindex C-M-q
757 @findex c-indent-exp
758 @findex indent-exp (c-)
759 Indents an entire balanced brace or parenthesis expression.  Note that
760 point must be on the opening brace or parenthesis of the expression
761 you want to indent.
763 @item @kbd{C-c C-q} (@code{c-indent-defun})
764 @kindex C-c C-q
765 @findex c-indent-defun
766 @findex indent-defun (c-)
767 Indents the entire top-level function, class or macro definition
768 encompassing point.  It leaves point unchanged.  This function can't be
769 used to reindent a nested brace construct, such as a nested class or
770 function, or a Java method.  The top-level construct being reindented
771 must be complete, i.e., it must have both a beginning brace and an ending
772 brace.
774 @item @kbd{C-M-\} (@code{indent-region})
775 @kindex C-M-\
776 @findex indent-region
777 Indents an arbitrary region of code.  This is a standard Emacs command,
778 tailored for C code in a @ccmode{} buffer.  Note, of course, that point
779 and mark must delineate the region you want to indent.
781 @item @kbd{C-M-h} (@code{c-mark-function})
782 @kindex C-M-h
783 @findex c-mark-function
784 @findex mark-function (c-)
785 While not strictly an indentation command, this is useful for marking
786 the current top-level function or class definition as the current
787 region.  As with @code{c-indent-defun}, this command operates on
788 top-level constructs, and can't be used to mark say, a Java method.
789 @end table
791 These variables are also useful when indenting code:
793 @defopt indent-tabs-mode
794 This is a standard Emacs variable that controls how line indentation
795 is composed.  When it's non-@code{nil}, tabs can be used in a line's
796 indentation, otherwise only spaces are used.
797 @end defopt
799 @defopt c-progress-interval
800 @vindex progress-interval (c-)
801 When indenting large regions of code, this variable controls how often a
802 progress message is displayed.  Set this variable to @code{nil} to
803 inhibit the progress messages, or set it to an integer which is how
804 often (in seconds) progress messages are to be displayed.
805 @end defopt
807 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
808 @node    Comment Commands, Movement Commands, Indentation Commands, Commands
809 @comment node-name, next, previous, up
810 @section Comment Commands
811 @cindex comments (insertion of)
812 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
814 @table @asis
815 @item @kbd{C-c C-c} (@code{comment-region})
816 @kindex C-c C-c
817 @findex comment-region
818 This command comments out the lines that start in the region.  With a
819 negative argument, it does the opposite: it deletes the comment
820 delimiters from these lines.  @xref{Multi-Line Comments,,, emacs, GNU
821 Emacs Manual}, for fuller details.  @code{comment-region} isn't
822 actually part of @ccmode{}; it is given a @ccmode{} binding for
823 convenience.
825 @item @kbd{M-;} (@code{comment-dwim} or @code{indent-for-comment} @footnote{The name of this command varies between (X)Emacs versions.})
826 @kindex M-;
827 @findex comment-dwim
828 @findex indent-for-comment
829 Insert a comment at the end of the current line, if none is there
830 already.  Then reindent the comment according to @code{comment-column}
831 @ifclear XEMACS
832 (@pxref{Options for Comments,,, emacs, GNU Emacs Manual})
833 @end ifclear
834 @ifset XEMACS
835 (@pxref{Comments,,, xemacs, XEmacs User's Manual})
836 @end ifset
837 and the variables below.  Finally, position the point after the
838 comment starter.  @kbd{C-u M-;} kills any comment on the current line,
839 together with any whitespace before it.  This is a standard Emacs
840 command, but @ccmode{} enhances it a bit with two variables:
842 @defopt c-indent-comment-alist
843 @vindex indent-comment-alist (c-)
844 @vindex comment-column
845 This style variable allows you to vary the column that @kbd{M-;} puts
846 the comment at, depending on what sort of code is on the line, and
847 possibly the indentation of any similar comment on the preceding line.
848 It is an association list that maps different types of lines to
849 actions describing how they should be handled.  If a certain line type
850 isn't present on the list then the line is indented to the column
851 specified by @code{comment-column}.
853 See the documentation string for a full description of this
854 variable (use @kbd{C-h v c-indent-comment-alist}).
855 @end defopt
857 @defopt c-indent-comments-syntactically-p
858 @vindex indent-comments-syntactically-p (c-)
859 Normally, when this style variable is @code{nil}, @kbd{M-;} will
860 indent comment-only lines according to @code{c-indent-comment-alist},
861 just as it does with lines where other code precede the comments.
862 However, if you want it to act just like @key{TAB} for comment-only
863 lines you can get that by setting
864 @code{c-indent-comments-syntactically-p} to non-@code{nil}.
866 If @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
868 lines.
869 @end defopt
870 @end table
872 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
873 @node    Movement Commands, Filling and Breaking, Comment Commands, Commands
874 @comment node-name, next, previous, up
875 @section Movement Commands
876 @cindex movement
877 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
879 @ccmode{} contains some useful commands for moving around in C code.
881 @table @asis
882 @item @kbd{C-M-a} (@code{c-beginning-of-defun})
883 @itemx @kbd{C-M-e} (@code{c-end-of-defun})
884 @findex c-beginning-of-defun
885 @findex c-end-of-defun
886 @vindex c-defun-tactic
887 @vindex defun-tactic (c-)
889 Move to the beginning or end of the current or next function.  Other
890 constructs (such as a structs or classes) which have a brace block
891 also count as ``functions'' here.  To move over several functions, you
892 can give these commands a repeat count.
894 The start of a function is at its header.  The end of the function is
895 after its closing brace, or after the semicolon of a construct (such
896 as a @code{struct}) which doesn't end at the brace.  These two
897 commands try to leave point at the beginning of a line near the actual
898 start or end of the function.  This occasionally causes point not to
899 move at all.
901 By default, these commands will recognize functions contained within a
902 @dfn{declaration scope} such as a C++ @code{class} or @code{namespace}
903 construct, should the point start inside it.  If @ccmode fails to find
904 function beginnings or ends inside the current declaration scope, it
905 will search the enclosing scopes.  If you want @ccmode to recognize
906 functions only at the top level@footnote{this was @ccmode{}'s
907 behavior prior to version 5.32.}, set @code{c-defun-tactic} to
908 @code{t}.
910 These functions are analogous to the Emacs built-in commands
911 @code{beginning-of-defun} and @code{end-of-defun}, except they
912 eliminate the constraint that the top-level opening brace of the defun
913 must be in column zero.  See @ref{Defuns,,,@emacsman{},
914 @emacsmantitle{}}, for more information.
916 @item @kbd{C-M-a} (AWK Mode) (@code{c-awk-beginning-of-defun})
917 @itemx @kbd{C-M-e} (AWK Mode) (@code{c-awk-end-of-defun})
918 @kindex C-M-a (AWK Mode)
919 @kindex C-M-e (AWK Mode)
920 @findex c-awk-beginning-of-defun
921 @findex awk-beginning-of-defun (c-)
922 @findex c-awk-end-of-defun
923 @findex awk-end-of-defun (c-)
924 Move to the beginning or end of the current or next AWK defun.  These
925 commands can take prefix-arguments, their functionality being entirely
926 equivalent to @code{beginning-of-defun} and @code{end-of-defun}.
928 AWK Mode @dfn{defuns} are either pattern/action pairs (either of which
929 might be implicit) or user defined functions.  Having the @samp{@{} and
930 @samp{@}} (if there are any) in column zero, as is suggested for some
931 modes, is neither necessary nor helpful in AWK mode.
933 @item @kbd{M-a} (@code{c-beginning-of-statement})
934 @itemx @kbd{M-e} (@code{c-end-of-statement})
935 @kindex M-a
936 @kindex M-e
937 @findex c-beginning-of-statement
938 @findex c-end-of-statement
939 @findex beginning-of-statement (c-)
940 @findex end-of-statement (c-)
941 Move to the beginning or end of the innermost C statement.  If point
942 is already there, move to the next beginning or end of a statement,
943 even if that means moving into a block.  (Use @kbd{C-M-b} or
944 @kbd{C-M-f} to move over a balanced block.)  A prefix argument @var{n}
945 means move over @var{n} statements.
947 If point is within or next to a comment or a string which spans more
948 than one line, these commands move by sentences instead of statements.
950 When called from a program, these functions take three optional
951 arguments: the repetition count, a buffer position limit which is the
952 farthest back to search for the syntactic context, and a flag saying
953 whether to do sentence motion in or near comments and multiline
954 strings.
956 @item @kbd{C-c C-u} (@code{c-up-conditional})
957 @kindex C-c C-u
958 @findex c-up-conditional
959 @findex up-conditional (c-)
960 Move back to the containing preprocessor conditional, leaving the mark
961 behind.  A prefix argument acts as a repeat count.  With a negative
962 argument, move forward to the end of the containing preprocessor
963 conditional.
965 @samp{#elif} is treated like @samp{#else} followed by @samp{#if}, so the
966 function stops at them when going backward, but not when going
967 forward.
969 This key sequence is not bound in AWK Mode, which doesn't have
970 preprocessor statements.
972 @item @kbd{M-x c-up-conditional-with-else}
973 @findex c-up-conditional-with-else
974 @findex up-conditional-with-else (c-)
975 A variety of @code{c-up-conditional} that also stops at @samp{#else}
976 lines.  Normally those lines are ignored.
978 @item @kbd{M-x c-down-conditional}
979 @findex c-down-conditional
980 @findex down-conditional (c-)
981 Move forward into the next nested preprocessor conditional, leaving
982 the mark behind.  A prefix argument acts as a repeat count.  With a
983 negative argument, move backward into the previous nested preprocessor
984 conditional.
986 @samp{#elif} is treated like @samp{#else} followed by @samp{#if}, so the
987 function stops at them when going forward, but not when going backward.
989 @item @kbd{M-x c-down-conditional-with-else}
990 @findex c-down-conditional-with-else
991 @findex down-conditional-with-else (c-)
992 A variety of @code{c-down-conditional} that also stops at @samp{#else}
993 lines.  Normally those lines are ignored.
995 @item @kbd{C-c C-p} (@code{c-backward-conditional})
996 @itemx @kbd{C-c C-n} (@code{c-forward-conditional})
997 @kindex C-c C-p
998 @kindex C-c C-n
999 @findex c-backward-conditional
1000 @findex c-forward-conditional
1001 @findex backward-conditional (c-)
1002 @findex forward-conditional (c-)
1003 Move backward or forward across a preprocessor conditional, leaving
1004 the mark behind.  A prefix argument acts as a repeat count.  With a
1005 negative argument, move in the opposite direction.
1007 These key sequences are not bound in AWK Mode, which doesn't have
1008 preprocessor statements.
1010 @item @kbd{M-x c-backward-into-nomenclature}
1011 @itemx @kbd{M-x c-forward-into-nomenclature}
1012 @findex c-backward-into-nomenclature
1013 @findex c-forward-into-nomenclature
1014 @findex backward-into-nomenclature (c-)
1015 @findex forward-into-nomenclature (c-)
1016 A popular programming style, especially for object-oriented languages
1017 such as C++ is to write symbols in a mixed case format, where the
1018 first letter of each word is capitalized, and not separated by
1019 underscores.  E.g., @samp{SymbolsWithMixedCaseAndNoUnderlines}.
1021 These commands move backward or forward to the beginning of the next
1022 capitalized word.  With prefix argument @var{n}, move @var{n} times.
1023 If @var{n} is negative, move in the opposite direction.
1025 Note that these two commands have been superseded by
1026 @code{subword-mode}, which you should use instead.  @xref{Subword
1027 Movement}.  They might be removed from a future release of @ccmode{}.
1028 @end table
1030 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1031 @node    Filling and Breaking, Minor Modes, Movement Commands, Commands
1032 @comment  node-name,  next,  previous,  up
1033 @section Filling and Line Breaking Commands
1034 @cindex text filling
1035 @cindex line breaking
1036 @cindex comment handling
1037 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1039 Since there's a lot of normal text in comments and string literals,
1040 @ccmode{} provides features to edit these like in text mode.  The goal
1041 is to do it seamlessly, i.e., you can use auto fill mode, sentence and
1042 paragraph movement, paragraph filling, adaptive filling etc.@: wherever
1043 there's a piece of normal text without having to think much about it.
1044 @ccmode{} keeps the indentation, fixes suitable comment line prefixes,
1045 and so on.
1047 You can configure the exact way comments get filled and broken, and
1048 where Emacs does auto-filling (see @pxref{Custom Filling and
1049 Breaking}).  Typically, the style system (@pxref{Styles}) will have
1050 set this up for you, so you probably won't have to bother.
1052 @findex auto-fill-mode
1053 @cindex Auto Fill mode
1054 @cindex paragraph filling
1055 Line breaks are by default handled (almost) the same regardless of
1056 whether they are made by auto fill mode (@pxref{Auto
1057 Fill,,,@emacsman{}, @emacsmantitle{}}), by paragraph filling (e.g., with
1058 @kbd{M-q}), or explicitly with @kbd{M-j} or similar methods.  In
1059 string literals, the new line gets the same indentation as the
1060 previous nonempty line.@footnote{You can change this default by
1061 setting the @code{string} syntactic symbol (@pxref{Syntactic Symbols}
1062 and @pxref{Customizing Indentation})}.
1064 @table @asis
1065 @item @kbd{M-q} (@code{c-fill-paragraph})
1066 @kindex M-q
1067 @findex c-fill-paragraph
1068 @findex fill-paragraph (c-)
1069 @cindex Javadoc markup
1070 @cindex Pike autodoc markup
1071 This command fills multiline string literals and both block
1072 and line style comments.  In Java buffers, the Javadoc markup words
1073 are recognized as paragraph starters.  The line oriented Pike autodoc
1074 markup words are recognized in the same way in Pike mode.
1076 The formatting of the starters (@code{/*}) and enders (@code{*/}) of
1077 block comments are kept as they were before the filling.  I.e., if
1078 either the starter or ender were on a line of its own, then it stays
1079 on its own line; conversely, if the delimiter has comment text on its
1080 line, it keeps at least one word of that text with it on the line.
1082 This command is the replacement for @code{fill-paragraph} in @ccmode{}
1083 buffers.
1085 @item @kbd{M-j} (@code{c-indent-new-comment-line})
1086 @kindex M-j
1087 @findex c-indent-new-comment-line
1088 @findex indent-new-comment-line (c-)
1089 This breaks the current line at point and indents the new line.  If
1090 point was in a comment, the new line gets the proper comment line
1091 prefix.  If point was inside a macro, a backslash is inserted before
1092 the line break.  It is the replacement for
1093 @code{indent-new-comment-line}.
1095 @item @kbd{M-x c-context-line-break}
1096 @findex c-context-line-break
1097 @findex context-line-break (c-)
1098 Insert a line break suitable to the context: If the point is inside a
1099 comment, the new line gets the suitable indentation and comment line
1100 prefix like @code{c-indent-new-comment-line}.  In normal code it's
1101 indented like @code{newline-and-indent} would do.  In macros it acts
1102 like @code{newline-and-indent} but additionally inserts and optionally
1103 aligns the line ending backslash so that the macro remains unbroken.
1104 @xref{Custom Macros}, for details about the backslash alignment.  In a
1105 string, a backslash is inserted only if the string is within a
1106 macro@footnote{In GCC, unescaped line breaks within strings are
1107 valid.}.
1109 This function is not bound to a key by default, but it's intended to be
1110 used on the @kbd{RET} key.  If you like the behavior of
1111 @code{newline-and-indent} on @kbd{RET}, you should consider switching to
1112 this function.  @xref{Sample Init File}.
1114 @item @kbd{M-x c-context-open-line}
1115 @findex c-context-open-line
1116 @findex context-open-line (c-)
1117 This is to @kbd{C-o} (@kbd{M-x open-line}) as
1118 @code{c-context-line-break} is to @kbd{RET}.  I.e., it works just like
1119 @code{c-context-line-break} but leaves the point before the inserted
1120 line break.
1121 @end table
1124 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1125 @node    Minor Modes, Electric Keys, Filling and Breaking, Commands
1126 @comment node-name, next, previous, up
1127 @section Minor Modes
1128 @cindex Minor Modes
1129 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1131 @ccmode{} contains several minor-mode-like features that you might
1132 find useful while writing new code or editing old code:
1134 @table @asis
1135 @item electric mode
1136 When this is enabled, certain visible characters cause reformatting as
1137 they are typed.  This is normally helpful, but can be a nuisance when
1138 editing chaotically formatted code.  It can also be disconcerting,
1139 especially for users who are new to @ccmode{}.
1140 @item auto-newline mode
1141 This automatically inserts newlines where you'd probably want to type
1142 them yourself, e.g., after typing @samp{@}}s.  Its action is suppressed
1143 when electric mode is disabled.
1144 @item hungry-delete mode
1145 This lets you delete a contiguous block of whitespace with a single
1146 key: for example, the newline and indentation just inserted by
1147 auto-newline when you want to back up and write a comment after the
1148 last statement.
1149 @item subword mode
1150 This mode makes basic word movement commands like @kbd{M-f}
1151 (@code{forward-word}) and @kbd{M-b} (@code{backward-word}) treat the
1152 parts of sillycapsed symbols as different words.
1153 E.g., @samp{NSGraphicsContext} is treated as three words @samp{NS},
1154 @samp{Graphics}, and @samp{Context}.
1155 @item syntactic-indentation mode
1156 When this is enabled (which it normally is), indentation commands such
1157 as @kbd{C-j} indent lines of code according to their syntactic
1158 structure.  Otherwise, a line is simply indented to the same level as
1159 the previous one and @kbd{@key{TAB}} adjusts the indentation in steps
1160 of @code{c-basic-offset}.
1161 @end table
1163 Full details on how these minor modes work are at @ref{Electric Keys},
1164 @ref{Auto-newlines}, @ref{Hungry WS Deletion}, @ref{Subword Movement},
1165 and @ref{Indentation Engine Basics}.
1167 You can toggle each of these minor modes on and off, and you can
1168 configure @ccmode{} so that it starts up with your favorite
1169 combination of them (@pxref{Sample Init File}).  By default, when
1170 you initialize a buffer, electric mode and syntactic-indentation mode
1171 are enabled but the other three modes are disabled.
1173 @ccmode{} displays the current state of the first four of these minor
1174 modes on the modeline by appending letters to the major mode's name,
1175 one letter for each enabled minor mode: @samp{l} for electric mode,
1176 @samp{a} for auto-newline mode, @samp{h} for hungry delete mode, and
1177 @samp{w} for subword mode.  If all these modes were enabled, you'd see
1178 @samp{C/lahw}@footnote{The @samp{C} would be replaced with the name of
1179 the language in question for the other languages @ccmode{} supports.}.
1181 Here are the commands to toggle these modes:
1183 @table @asis
1184 @item @kbd{C-c C-l} (@code{c-toggle-electric-state})
1185 @kindex C-c C-l
1186 @findex c-toggle-electric-state
1187 @findex toggle-electric-state (c-)
1188 Toggle electric minor mode.  When the command turns the mode off, it
1189 also suppresses auto-newline mode.
1191 @item @kbd{C-c C-a} (@code{c-toggle-auto-newline})
1192 @kindex C-c C-a
1193 @findex c-toggle-auto-newline
1194 @findex toggle-auto-newline (c-)
1195 Toggle auto-newline minor mode.  When the command turns the mode on,
1196 it also enables electric minor mode.
1198 @item @kbd{M-x c-toggle-hungry-state}@footnote{Prior to @ccmode{} 5.31, this command was bound to @kbd{C-c C-d}.}
1199 @findex c-toggle-hungry-state
1200 @findex toggle-hungry-state (c-)
1201 Toggle hungry-delete minor mode.
1203 @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}.}
1204 @findex c-toggle-auto-hungry-state
1205 @findex toggle-auto-hungry-state (c-)
1206 Toggle both auto-newline and hungry delete minor modes.
1208 @item @kbd{C-c C-w} (@code{M-x subword-mode})
1209 @kindex C-c C-w
1210 @findex subword-mode
1211 Toggle subword mode.
1213 @item @kbd{M-x c-toggle-syntactic-indentation}
1214 @findex c-toggle-syntactic-indentation
1215 @findex toggle-syntactic-indentation (c-)
1216 Toggle syntactic-indentation mode.
1217 @end table
1219 Common to all the toggle functions above is that if they are called
1220 programmatically, they take an optional numerical argument.  A
1221 positive value will turn on the minor mode (or both of them in the
1222 case of @code{c-toggle-auto-hungry-state}) and a negative value will
1223 turn it (or them) off.
1226 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1227 @node    Electric Keys, Auto-newlines, Minor Modes, Commands
1228 @comment node-name, next, previous, up
1229 @section Electric Keys and Keywords
1230 @cindex electric characters
1231 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1233 Most punctuation keys provide @dfn{electric} behavior: as well as
1234 inserting themselves they perform some other action, such as
1235 reindenting the line.  This reindentation saves you from having to
1236 reindent a line manually after typing, say, a @samp{@}}.  A few
1237 keywords, such as @code{else}, also trigger electric action.
1239 You can inhibit the electric behavior described here by disabling
1240 electric minor mode (@pxref{Minor Modes}).
1242 Common to all these keys is that they only behave electrically when
1243 used in normal code (as contrasted with getting typed in a string
1244 literal or comment).  Those which cause re-indentation do so only when
1245 @code{c-syntactic-indentation} has a non-@code{nil} value (which it
1246 does by default).
1248 These keys and keywords are:
1249 @c ACM, 2004/8/24:  c-electric-pound doesn't check c-s-i: this is more
1250 @c like a bug in the code than a bug in this document.  It'll get
1251 @c fixed in the code sometime.
1253 @table @kbd
1254 @item #
1255 @kindex #
1256 @findex c-electric-pound
1257 @findex electric-pound (c-)
1258 @vindex c-electric-pound-behavior
1259 @vindex electric-pound-behavior (c-)
1260 Pound (bound to @code{c-electric-pound}) is electric when typed as the
1261 first non-whitespace character on a line and not within a macro
1262 definition.  In this case, the variable @code{c-electric-pound-behavior}
1263 is consulted for the electric behavior.  This variable takes a list
1264 value, although the only element currently defined is @code{alignleft},
1265 which tells this command to force the @samp{#} character into column
1266 zero.  This is useful for entering preprocessor macro definitions.
1268 Pound is not electric in AWK buffers, where @samp{#} starts a comment,
1269 and is bound to @code{self-insert-command} like any typical printable
1270 character.
1271 @c ACM, 2004/8/24:  Change this (and the code) to do AWK comment
1272 @c reindentation.
1274 @item *
1275 @kindex *
1276 @itemx /
1277 @kindex /
1278 @findex c-electric-star
1279 @findex electric-star (c-)
1280 @findex c-electric-slash
1281 @findex electric-slash (c-)
1282 A star (bound to @code{c-electric-star}) or a slash
1283 (@code{c-electric-slash}) causes reindentation when you type it as the
1284 second component of a C style block comment opener (@samp{/*}) or a
1285 C++ line comment opener (@samp{//}) respectively, but only if the
1286 comment opener is the first thing on the line (i.e., there's only
1287 whitespace before it).
1289 Additionally, you can configure @ccmode{} so that typing a slash at
1290 the start of a line within a block comment will terminate the
1291 comment.  You don't need to have electric minor mode enabled to get
1292 this behavior.  @xref{Clean-ups}.
1294 In AWK mode, @samp{*} and @samp{/} do not delimit comments and are not
1295 electric.
1297 @item <
1298 @kindex <
1299 @itemx >
1300 @kindex >
1301 @findex c-electric-lt-gt
1302 @findex electric-lt-gt (c-)
1303 A less-than or greater-than sign (bound to @code{c-electric-lt-gt}) is
1304 electric in two circumstances: when it is an angle bracket in a C++
1305 @samp{template} declaration (and similar constructs in other
1306 languages) and when it is the second of two @kbd{<} or @kbd{>}
1307 characters in a C++ style stream operator.  In either case, the line
1308 is reindented.  Angle brackets in C @samp{#include} directives are not
1309 electric.
1311 @item (
1312 @kindex (
1313 @itemx )
1314 @kindex )
1315 @findex c-electric-paren
1316 @findex electric-paren (c-)
1317 The normal parenthesis characters @samp{(} and @samp{)} (bound to
1318 @code{c-electric-paren}) reindent the current line.  This is useful
1319 for getting the closing parenthesis of an argument list aligned
1320 automatically.
1322 You can also configure @ccmode{} to insert a space automatically
1323 between a function name and the @samp{(} you've just typed, and to
1324 remove it automatically after typing @samp{)}, should the argument
1325 list be empty.  You don't need to have electric minor mode enabled to
1326 get these actions.  @xref{Clean-ups}.
1328 @item @{
1329 @kindex @{
1330 @itemx @}
1331 @kindex @}
1332 @findex c-electric-brace
1333 @findex electric-brace (c-)
1334 Typing a brace (bound to @code{c-electric-brace}) reindents the
1335 current line.  Also, one or more newlines might be inserted if
1336 auto-newline minor mode is enabled.  @xref{Auto-newlines}.
1337 Additionally, you can configure @ccmode{} to compact excess whitespace
1338 inserted by auto-newline mode in certain circumstances.
1339 @xref{Clean-ups}.
1341 @item :
1342 @kindex :
1343 @findex c-electric-colon
1344 @findex electric-colon (c-)
1345 Typing a colon (bound to @code{c-electric-colon}) reindents the
1346 current line.  Additionally, one or more newlines might be inserted if
1347 auto-newline minor mode is enabled.  @xref{Auto-newlines}.  If you
1348 type a second colon immediately after such an auto-newline, by default
1349 the whitespace between the two colons is removed, leaving a C++ scope
1350 operator.  @xref{Clean-ups}.
1352 If you prefer, you can insert @samp{::} in a single operation,
1353 avoiding all these spurious reindentations, newlines, and clean-ups.
1354 @xref{Other Commands}.
1356 @item ;
1357 @kindex ;
1358 @itemx ,
1359 @kindex ,
1360 @findex c-electric-semi&comma
1361 @findex electric-semi&comma (c-)
1362 Typing a semicolon or comma (bound to @code{c-electric-semi&comma})
1363 reindents the current line.  Also, a newline might be inserted if
1364 auto-newline minor mode is enabled.  @xref{Auto-newlines}.
1365 Additionally, you can configure @ccmode{} so that when auto-newline
1366 has inserted whitespace after a @samp{@}}, it will be removed again
1367 when you type a semicolon or comma just after it.  @xref{Clean-ups}.
1369 @end table
1371 @deffn Command c-electric-continued-statement
1372 @findex electric-continued-statement (c-)
1374 Certain keywords are electric, causing reindentation when they are
1375 preceded only by whitespace on the line.  The keywords are those that
1376 continue an earlier statement instead of starting a new one:
1377 @code{else}, @code{while}, @code{catch} (only in C++ and Java) and
1378 @code{finally} (only in Java).
1380 An example:
1382 @example
1383 @group
1384 for (i = 0; i < 17; i++)
1385   if (a[i])
1386     res += a[i]->offset;
1387 else
1388 @end group
1389 @end example
1391 Here, the @code{else} should be indented like the preceding @code{if},
1392 since it continues that statement. @ccmode{} will automatically
1393 reindent it after the @code{else} has been typed in full, since only
1394 then is it possible to decide whether it's a new statement or a
1395 continuation of the preceding @code{if}.
1397 @vindex abbrev-mode
1398 @findex abbrev-mode
1399 @cindex Abbrev mode
1400 @ccmode{} uses Abbrev mode (@pxref{Abbrevs,,,@emacsman{}, @emacsmantitle{}})
1401 to accomplish this. It's therefore turned on by default in all language
1402 modes except IDL mode, since CORBA IDL doesn't have any statements.
1403 @end deffn
1406 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1407 @node    Auto-newlines, Hungry WS Deletion, Electric Keys, Commands
1408 @comment node-name, next, previous, up
1409 @section Auto-newline Insertion
1410 @cindex auto-newline
1411 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1413 When you have @dfn{Auto-newline minor mode} enabled (@pxref{Minor
1414 Modes}), @ccmode{} inserts newlines for you automatically (in certain
1415 syntactic contexts) when you type a left or right brace, a colon, a
1416 semicolon, or a comma.  Sometimes a newline appears before the
1417 character you type, sometimes after it, sometimes both.
1419 Auto-newline only triggers when the following conditions hold:
1421 @itemize @bullet
1422 @item
1423 Auto-newline minor mode is enabled, as evidenced by the indicator
1424 @samp{a} after the mode name on the modeline (e.g., @samp{C/a} or
1425 @samp{C/la}).
1427 @item
1428 The character was typed at the end of a line, or with only whitespace
1429 after it, and possibly a @samp{\} escaping the newline.
1431 @item
1432 The character is not on its own line already.  (This applies only to
1433 insertion of a newline @emph{before} the character.)
1435 @item
1436 @cindex literal
1437 @cindex syntactic whitespace
1438 The character was not typed inside of a literal @footnote{A
1439 @dfn{literal} is defined as any comment, string, or preprocessor macro
1440 definition.  These constructs are also known as @dfn{syntactic
1441 whitespace} since they are usually ignored when scanning C code.}.
1443 @item
1444 No numeric argument was supplied to the command (i.e., it was typed as
1445 normal, with no @kbd{C-u} prefix).
1446 @end itemize
1448 You can configure the precise circumstances in which newlines get
1449 inserted (see @pxref{Custom Auto-newlines}).  Typically, the style
1450 system (@pxref{Styles}) will have set this up for you, so you probably
1451 won't have to bother.
1453 Sometimes @ccmode{} inserts an auto-newline where you don't want one,
1454 such as after a @samp{@}} when you're about to type a @samp{;}.
1455 Hungry deletion can help here (@pxref{Hungry WS Deletion}), or you can
1456 activate an appropriate @dfn{clean-up}, which will remove the excess
1457 whitespace after you've typed the @samp{;}.  See @ref{Clean-ups} for a
1458 full description.  See also @ref{Electric Keys} for a summary of
1459 clean-ups listed by key.
1462 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1463 @node    Hungry WS Deletion, Subword Movement, Auto-newlines, Commands
1464 @comment node-name, next, previous, up
1465 @section Hungry Deletion of Whitespace
1466 @cindex hungry-deletion
1467 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1469 If you want to delete an entire block of whitespace at point, you can
1470 use @dfn{hungry deletion}.  This deletes all the contiguous whitespace
1471 either before point or after point in a single operation.
1472 ``Whitespace'' here includes tabs and newlines, but not comments or
1473 preprocessor commands.  Hungry deletion can markedly cut down on the
1474 number of times you have to hit deletion keys when, for example,
1475 you've made a mistake on the preceding line and have already pressed
1476 @kbd{C-j}.
1478 Hungry deletion is a simple feature that some people find extremely
1479 useful.  In fact, you might find yourself wanting it in @strong{all}
1480 your editing modes!
1482 Loosely speaking, in what follows, @dfn{@key{DEL}} means ``the
1483 backspace key'' and @dfn{@key{DELETE}} means ``the forward delete
1484 key''.  This is discussed in more detail below.
1486 There are two different ways you can use hungry deletion:
1488 @table @asis
1489 @item Using @dfn{Hungry Delete Mode} with @kbd{@key{DEL}} and @kbd{C-d}
1490 Here you toggle Hungry Delete minor mode with @kbd{M-x
1491 c-toggle-hungry-state}@footnote{Prior to @ccmode{} 5.31, this command
1492 was bound to @kbd{C-c C-d}.  @kbd{C-c C-d} is now the default binding
1493 for @code{c-hungry-delete-forward}.} (@pxref{Minor Modes}.)  This
1494 makes @kbd{@key{DEL}} and @kbd{C-d} do backwards and forward hungry
1495 deletion.
1497 @table @asis
1498 @item @kbd{@key{DEL}} (@code{c-electric-backspace})
1499 @kindex DEL
1500 @findex c-electric-backspace
1501 @findex electric-backspace (c-)
1502 This command is run by default when you hit the @kbd{DEL} key.  When
1503 hungry delete mode is enabled, it deletes any amount of whitespace in
1504 the backwards direction.  Otherwise, or when used with a prefix
1505 argument or in a literal (@pxref{Auto-newlines}), the command just
1506 deletes backwards in the usual way.  (More precisely, it calls the
1507 function contained in the variable @code{c-backspace-function},
1508 passing it the prefix argument, if any.)
1510 @item @code{c-backspace-function}
1511 @vindex c-backspace-function
1512 @vindex backspace-function (c-)
1513 @findex backward-delete-char-untabify
1514 Hook that gets called by @code{c-electric-backspace} when it doesn't
1515 do an ``electric'' deletion of the preceding whitespace.  The default
1516 value is @code{backward-delete-char-untabify}
1517 (@pxref{Deletion,,,@lispref{}, @lispreftitle{}}, the function which
1518 deletes a single character.
1520 @item @kbd{C-d} (@code{c-electric-delete-forward})
1521 @kindex C-d
1522 @findex c-electric-delete-forward
1523 @findex electric-delete-forward (c-)
1524 This function, which is bound to @kbd{C-d} by default, works just like
1525 @code{c-electric-backspace} but in the forward direction.  When it
1526 doesn't do an ``electric'' deletion of the following whitespace, it
1527 just does @code{delete-char}, more or less.  (Strictly speaking, it
1528 calls the function in @code{c-delete-function} with the prefix
1529 argument.)
1531 @item @code{c-delete-function}
1532 @vindex c-delete-function
1533 @vindex delete-function (c-)
1534 @findex delete-char
1535 Hook that gets called by @code{c-electric-delete-forward} when it
1536 doesn't do an ``electric'' deletion of the following whitespace.  The
1537 default value is @code{delete-char}.
1538 @end table
1540 @item Using Distinct Bindings
1541 The other (newer and recommended) way to use hungry deletion is to
1542 perform @code{c-hungry-delete-backwards} and
1543 @code{c-hungry-delete-forward} directly through their key sequences
1544 rather than using the minor mode toggling.
1546 @table @asis
1547 @item @kbd{C-c C-@key{DEL}}, or @kbd{C-c @key{DEL}} (@code{c-hungry-delete-backwards})@footnote{This command was formerly known as @code{c-hungry-backspace}.}
1548 @kindex C-c C-<backspace>
1549 @kindex C-c <backspace>
1550 @kindex C-c C-DEL
1551 @kindex C-c DEL
1552 @findex c-hungry-delete-backwards
1553 @findex hungry-delete-backwards (c-)
1554 Delete any amount of whitespace in the backwards direction (regardless
1555 whether hungry-delete mode is enabled or not).  This command is bound
1556 to both @kbd{C-c C-@key{DEL}} and @kbd{C-c @key{DEL}}, since the more
1557 natural one, @kbd{C-c C-@key{DEL}}, is sometimes difficult to type at
1558 a character terminal.
1560 @item @kbd{C-c C-d}, @kbd{C-c C-@key{DELETE}}, or @kbd{C-c @key{DELETE}} (@code{c-hungry-delete-forward})
1561 @kindex C-c C-d
1562 @kindex C-c C-<DELETE>
1563 @kindex C-c <DELETE>
1564 @findex c-hungry-delete-forward
1565 @findex hungry-delete-forward (c-)
1566 Delete any amount of whitespace in the forward direction (regardless
1567 whether hungry-delete mode is enabled or not).  This command is bound
1568 to both @kbd{C-c C-@key{DELETE}} and @kbd{C-c @key{DELETE}} for the
1569 same reason as for @key{DEL} above.
1570 @end table
1571 @end table
1573 @kindex <delete>
1574 @kindex <backspace>
1576 When we talk about @kbd{@key{DEL}}, and @kbd{@key{DELETE}} above, we
1577 actually do so without connecting them to the physical keys commonly
1578 known as @key{Backspace} and @key{Delete}.  The default bindings to
1579 those two keys depends on the flavor of (X)Emacs you are using.
1581 @findex c-electric-delete
1582 @findex electric-delete (c-)
1583 @findex c-hungry-delete
1584 @findex hungry-delete (c-)
1585 @vindex delete-key-deletes-forward
1586 In XEmacs 20.3 and beyond, the @key{Backspace} key is bound to
1587 @code{c-electric-backspace} and the @key{Delete} key is bound to
1588 @code{c-electric-delete}.  You control the direction it deletes in by
1589 setting the variable @code{delete-key-deletes-forward}, a standard
1590 XEmacs variable.
1591 @c This variable is encapsulated by XEmacs's (defsubst delete-forward-p ...).
1592 When this variable is non-@code{nil}, @code{c-electric-delete} will do
1593 forward deletion with @code{c-electric-delete-forward}, otherwise it
1594 does backward deletion with @code{c-electric-backspace}.  Similarly,
1595 @kbd{C-c @key{Delete}} and @kbd{C-c C-@key{Delete}} are bound to
1596 @code{c-hungry-delete} which is controlled in the same way by
1597 @code{delete-key-deletes-forward}.
1599 @findex normal-erase-is-backspace-mode
1601 Emacs 21 and later automatically binds @key{Backspace} and
1602 @key{Delete} to @kbd{DEL} and @kbd{C-d} according to your environment,
1603 and @ccmode{} extends those bindings to @kbd{C-c C-@key{Backspace}}
1604 etc.  If you need to change the bindings through
1605 @code{normal-erase-is-backspace-mode} then @ccmode{} will also adapt
1606 its extended bindings accordingly.
1608 In earlier (X)Emacs versions, @ccmode{} doesn't bind either
1609 @key{Backspace} or @key{Delete} directly.  Only the key codes
1610 @kbd{DEL} and @kbd{C-d} are bound, and it's up to the default bindings
1611 to map the physical keys to them.  You might need to modify this
1612 yourself if the defaults are unsuitable.
1614 Getting your @key{Backspace} and @key{Delete} keys properly set up can
1615 sometimes be tricky.  The information in @ref{DEL Does Not
1616 Delete,,,emacs, GNU Emacs Manual}, might be helpful if you're having
1617 trouble with this in GNU Emacs.
1620 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1621 @node    Subword Movement, Other Commands, Hungry WS Deletion, Commands
1622 @comment node-name, next, previous, up
1623 @section Subword Movement and Editing
1624 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1626 @cindex nomenclature
1627 @cindex subword
1628 In spite of the GNU Coding Standards, it is popular to name a symbol
1629 by mixing uppercase and lowercase letters, e.g., @samp{GtkWidget},
1630 @samp{EmacsFrameClass}, or @samp{NSGraphicsContext}.  Here we call
1631 these mixed case symbols @dfn{nomenclatures}.  Also, each capitalized
1632 (or completely uppercase) part of a nomenclature is called a
1633 @dfn{subword}.  Here are some examples:
1635 @multitable {@samp{NSGraphicsContext}} {@samp{NS}, @samp{Graphics}, and @samp{Context}}
1636 @c This could be converted to @headitem when we require Texinfo 4.7
1637 @iftex
1638 @item @b{Nomenclature}
1639   @tab @b{Subwords}
1640 @end iftex
1641 @ifnottex
1642 @item Nomenclature
1643   @tab Subwords
1644 @item ---------------------------------------------------------
1645 @end ifnottex
1646 @item @samp{GtkWindow}
1647   @tab @samp{Gtk} and @samp{Window}
1648 @item @samp{EmacsFrameClass}
1649   @tab @samp{Emacs}, @samp{Frame}, and @samp{Class}
1650 @item @samp{NSGraphicsContext}
1651   @tab @samp{NS}, @samp{Graphics}, and @samp{Context}
1652 @end multitable
1654 The subword minor mode replaces the basic word oriented movement and
1655 editing commands with variants that recognize subwords in a
1656 nomenclature and treat them as separate words:
1658 @findex c-forward-subword
1659 @findex forward-subword (c-)
1660 @findex c-backward-subword
1661 @findex backward-subword (c-)
1662 @findex c-mark-subword
1663 @findex mark-subword (c-)
1664 @findex c-kill-subword
1665 @findex kill-subword (c-)
1666 @findex c-backward-kill-subword
1667 @findex backward-kill-subword (c-)
1668 @findex c-transpose-subwords
1669 @findex transpose-subwords (c-)
1670 @findex c-capitalize-subword
1671 @findex capitalize-subword (c-)
1672 @findex c-upcase-subword
1673 @findex upcase-subword (c-)
1674 @findex c-downcase-subword
1675 @findex downcase-subword (c-)
1676 @multitable @columnfractions .20 .40 .40
1677 @c This could be converted to @headitem when we require Texinfo 4.7
1678 @iftex
1679 @item     @b{Key}     @tab @b{Word oriented command} @tab @b{Subword oriented command}
1680 @end iftex
1681 @ifnottex
1682 @item     Key         @tab Word oriented command     @tab Subword oriented command
1683 @item ----------------------------------------------------------------------------
1684 @end ifnottex
1685 @item     @kbd{M-f}   @tab @code{forward-word}       @tab @code{c-forward-subword}
1686 @item     @kbd{M-b}   @tab @code{backward-word}      @tab @code{c-backward-subword}
1687 @item     @kbd{M-@@}  @tab @code{mark-word}          @tab @code{c-mark-subword}
1688 @item     @kbd{M-d}   @tab @code{kill-word}          @tab @code{c-kill-subword}
1689 @item     @kbd{M-DEL} @tab @code{backward-kill-word} @tab @code{c-backward-kill-subword}
1690 @item     @kbd{M-t}   @tab @code{transpose-words}    @tab @code{c-transpose-subwords}
1691 @item     @kbd{M-c}   @tab @code{capitalize-word}    @tab @code{c-capitalize-subword}
1692 @item     @kbd{M-u}   @tab @code{upcase-word}        @tab @code{c-upcase-subword}
1693 @item     @kbd{M-l}   @tab @code{downcase-word}      @tab @code{c-downcase-subword}
1694 @end multitable
1696 Note that if you have changed the key bindings for the word oriented
1697 commands in your @file{.emacs} or a similar place, the keys you have
1698 configured are also used for the corresponding subword oriented
1699 commands.
1701 Type @kbd{C-c C-w} to toggle subword mode on and off.  To make the
1702 mode turn on automatically, put the following code in your
1703 @file{.emacs}:
1705 @example
1706 (add-hook 'c-mode-common-hook
1707           (lambda () (subword-mode 1)))
1708 @end example
1710 As a bonus, you can also use @code{subword-mode} in non-@ccmode{}
1711 buffers by typing @kbd{M-x subword-mode}.
1713 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1714 @node    Other Commands,  , Subword Movement, Commands
1715 @comment node-name, next, previous, up
1716 @section Other Commands
1717 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1719 Here are the various other commands that didn't fit anywhere else:
1721 @table @asis
1722 @item @kbd{C-c .} (@code{c-set-style})
1723 @kindex C-c .
1724 @findex c-set-style
1725 @findex set-style (c-)
1726 Switch to the specified style in the current buffer.  Use like this:
1728 @example
1729 @kbd{C-c . @var{style-name} @key{RET}}
1730 @end example
1732 You can use the @key{TAB} in the normal way to do completion on the
1733 style name.  Note that all style names are case insensitive, even the
1734 ones you define yourself.
1736 Setting a style in this way does @emph{not} automatically reindent your
1737 file.  For commands that you can use to view the effect of your changes,
1738 see @ref{Indentation Commands} and @ref{Filling and Breaking}.
1740 For details of the @ccmode{} style system, see @ref{Styles}.
1741 @item @kbd{C-c :} (@code{c-scope-operator})
1742 @kindex C-c :
1743 @findex c-scope-operator
1744 @findex scope-operator (c-)
1745 In C++, it is also sometimes desirable to insert the double-colon scope
1746 operator without performing the electric behavior of colon insertion.
1747 @kbd{C-c :} does just this.
1749 @item @kbd{C-c C-\} (@code{c-backslash-region})
1750 @kindex C-c C-\
1751 @findex c-backslash-region
1752 @findex backslash-region (c-)
1753 This function inserts and aligns or deletes end-of-line backslashes in
1754 the current region.  These are typically used in multi-line macros.
1756 With no prefix argument, it inserts any missing backslashes and aligns
1757 them according to the @code{c-backslash-column} and
1758 @code{c-backslash-max-column} variables.  With a prefix argument, it
1759 deletes any backslashes.
1761 The function does not modify blank lines at the start of the region.  If
1762 the region ends at the start of a line, it always deletes the backslash
1763 (if any) at the end of the previous line.
1765 To customize the precise workings of this command, @ref{Custom Macros}.
1766 @end table
1768 @noindent
1769 The recommended line breaking function, @code{c-context-line-break}
1770 (@pxref{Filling and Breaking}), is especially nice if you edit
1771 multiline macros frequently.  When used inside a macro, it
1772 automatically inserts and adjusts the mandatory backslash at the end
1773 of the line to keep the macro together, and it leaves the point at the
1774 right indentation column for the code.  Thus you can write code inside
1775 macros almost exactly as you can elsewhere, without having to bother
1776 with the trailing backslashes.
1778 @table @asis
1779 @item @kbd{C-c C-e} (@code{c-macro-expand})
1780 @kindex C-c C-e
1781 @findex c-macro-expand
1782 @findex macro-expand (c-)
1783 This command expands C, C++, Objective C or Pike macros in the region,
1784 using an appropriate external preprocessor program.  Normally it
1785 displays its output in a temporary buffer, but if you give it a prefix
1786 arg (with @kbd{C-u C-c C-e}) it will overwrite the original region
1787 with the expansion.
1789 The command does not work in any of the other modes, and the key
1790 sequence is not bound in these other modes.
1792 @code{c-macro-expand} isn't actually part of @ccmode{}, even though it
1793 is bound to a @ccmode{} key sequence.  If you need help setting it up
1794 or have other problems with it, you can either read its source code or
1795 ask for help in the standard (X)Emacs forums.
1796 @end table
1798 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1799 @node    Font Locking, Config Basics, Commands, Top
1800 @comment node-name, next, previous, up
1801 @chapter Font Locking
1802 @cindex font locking
1803 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1805 @cindex Font Lock mode
1807 @ccmode{} provides font locking for its supported languages by
1808 supplying patterns for use with Font Lock mode.  This means that you
1809 get distinct faces on the various syntactic parts such as comments,
1810 strings, keywords and types, which is very helpful in telling them
1811 apart at a glance and discovering syntactic errors.  @xref{Font
1812 Lock,,, emacs, GNU Emacs Manual}, for ways to enable font locking in
1813 @ccmode{} buffers.
1815 @strong{Please note:} The font locking in AWK mode is currently not
1816 integrated with the rest of @ccmode{}.  Only the last section of this
1817 chapter, @ref{AWK Mode Font Locking}, applies to AWK@.  The other
1818 sections apply to the other languages.
1820 @menu
1821 * Font Locking Preliminaries::
1822 * Faces::
1823 * Doc Comments::
1824 * AWK Mode Font Locking::
1825 @end menu
1828 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1829 @node    Font Locking Preliminaries, Faces, Font Locking, Font Locking
1830 @comment node-name, next, previous, up
1831 @section Font Locking Preliminaries
1832 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1834 The font locking for most of the @ccmode{} languages were provided
1835 directly by the Font Lock package prior to version 5.30 of @ccmode{}.
1836 In the transition to @ccmode{} the patterns have been reworked
1837 completely and are applied uniformly across all the languages except AWK
1838 mode, just like the indentation rules (although each language still has
1839 some peculiarities of its own, of course).  Since the languages
1840 previously had completely separate font locking patterns, this means
1841 that it's a bit different in most languages now.
1843 The main goal for the font locking in @ccmode{} is accuracy, to provide
1844 a dependable aid in recognizing the various constructs.  Some, like
1845 strings and comments, are easy to recognize while others, like
1846 declarations and types, can be very tricky.  @ccmode{} can go to great
1847 lengths to recognize declarations and casts correctly, especially when
1848 the types aren't recognized by standard patterns.  This is a fairly
1849 demanding analysis which can be slow on older hardware, and it can
1850 therefore be disabled by choosing a lower decoration level with the
1851 variable @code{font-lock-maximum-decoration} (@pxref{Font Lock,,,
1852 emacs, GNU Emacs Manual}).
1854 @vindex font-lock-maximum-decoration
1856 The decoration levels are used as follows:
1858 @enumerate
1859 @comment 1
1860 @item
1861 Minimal font locking: Fontify only comments, strings and preprocessor
1862 directives (in the languages that use cpp).
1864 @comment 2
1865 @item
1866 Fast font locking: In addition to level 1, fontify keywords, simple
1867 types and declarations that are easy to recognize.  The variables
1868 @code{*-font-lock-extra-types} (where @samp{*} is the name of the
1869 language) are used to recognize types (see below).  Documentation
1870 comments like Javadoc are fontified according to
1871 @code{c-doc-comment-style} (@pxref{Doc Comments}).
1873 Use this if you think the font locking is too slow.  It's the closest
1874 corresponding level to level 3 in the old font lock patterns.
1876 @comment 3
1877 @item
1878 Accurate font locking: Like level 2 but uses a different approach that
1879 can recognize types and declarations much more accurately.  The
1880 @code{*-font-lock-extra-types} variables are still used, but user
1881 defined types are recognized correctly anyway in most cases.  Therefore
1882 those variables should be fairly restrictive and not contain patterns
1883 that are uncertain.
1885 @cindex Lazy Lock mode
1886 @cindex Just-in-time Lock mode
1888 This level is designed for fairly modern hardware and a font lock
1889 support mode like Lazy Lock or Just-in-time Lock mode that only
1890 fontifies the parts that are actually shown.  Fontifying the whole
1891 buffer at once can easily get bothersomely slow even on contemporary
1892 hardware. @xref{Font Lock,,,@emacsman{}, @emacsmantitle{}}.
1893 @end enumerate
1895 @cindex user defined types
1896 @cindex types, user defined
1898 Since user defined types are hard to recognize you can provide
1899 additional regexps to match those you use:
1901 @defopt c-font-lock-extra-types
1902 @defoptx c++-font-lock-extra-types
1903 @defoptx objc-font-lock-extra-types
1904 @defoptx java-font-lock-extra-types
1905 @defoptx idl-font-lock-extra-types
1906 @defoptx pike-font-lock-extra-types
1907 For each language there's a variable @code{*-font-lock-extra-types},
1908 where @samp{*} stands for the language in question.  It contains a list
1909 of regexps that matches identifiers that should be recognized as types,
1910 e.g., @samp{\\sw+_t} to recognize all identifiers ending with @samp{_t}
1911 as is customary in C code.  Each regexp should not match more than a
1912 single identifier.
1914 The default values contain regexps for many types in standard runtime
1915 libraries that are otherwise difficult to recognize, and patterns for
1916 standard type naming conventions like the @samp{_t} suffix in C and C++.
1917 Java, Objective-C and Pike have as a convention to start class names
1918 with capitals, so there are patterns for that in those languages.
1920 Despite the names of these variables, they are not only used for
1921 fontification but in other places as well where @ccmode{} needs to
1922 recognize types.
1923 @end defopt
1926 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1927 @node    Faces, Doc Comments, Font Locking Preliminaries, Font Locking
1928 @comment node-name, next, previous, up
1929 @section Faces
1930 @cindex faces
1931 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1933 @ccmode{} attempts to use the standard faces for programming languages
1934 in accordance with their intended purposes as far as possible.  No extra
1935 faces are currently provided, with the exception of a replacement face
1936 @code{c-invalid-face} for emacsen that don't provide
1937 @code{font-lock-warning-face}.
1939 @itemize @bullet
1940 @item
1941 @vindex font-lock-comment-face
1942 Normal comments are fontified in @code{font-lock-comment-face}.
1944 @item
1945 @vindex font-lock-doc-face
1946 @vindex font-lock-doc-string-face
1947 @vindex font-lock-comment-face
1948 Comments that are recognized as documentation (@pxref{Doc Comments})
1949 get @code{font-lock-doc-face} (Emacs) or
1950 @code{font-lock-doc-string-face} (XEmacs) if those faces exist.  If
1951 they don't then @code{font-lock-comment-face} is used.
1953 @item
1954 @vindex font-lock-string-face
1955 String and character literals are fontified in
1956 @code{font-lock-string-face}.
1958 @item
1959 @vindex font-lock-keyword-face
1960 Keywords are fontified with @code{font-lock-keyword-face}.
1962 @item
1963 @vindex font-lock-function-name-face
1964 @code{font-lock-function-name-face} is used for function names in
1965 declarations and definitions, and classes in those contexts.  It's also
1966 used for preprocessor defines with arguments.
1968 @item
1969 @vindex font-lock-variable-name-face
1970 Variables in declarations and definitions, and other identifiers in such
1971 variable contexts, get @code{font-lock-variable-name-face}.  It's also
1972 used for preprocessor defines without arguments.
1974 @item
1975 @vindex font-lock-constant-face
1976 @vindex font-lock-reference-face
1977 Builtin constants are fontified in @code{font-lock-constant-face} if it
1978 exists, @code{font-lock-reference-face} otherwise.  As opposed to the
1979 preceding two faces, this is used on the names in expressions, and it's
1980 not used in declarations, even if there happen to be a @samp{const} in
1981 them somewhere.
1983 @item
1984 @vindex font-lock-type-face
1985 @code{font-lock-type-face} is put on types (both predefined and user
1986 defined) and classes in type contexts.
1988 @item
1989 @vindex font-lock-constant-face
1990 @vindex font-lock-reference-face
1991 Label identifiers get @code{font-lock-constant-face} if it exists,
1992 @code{font-lock-reference-face} otherwise.
1994 @item
1995 Name qualifiers and identifiers for scope constructs are fontified like
1996 labels.
1998 @item
1999 Special markup inside documentation comments are also fontified like
2000 labels.
2002 @item
2003 @vindex font-lock-preprocessor-face
2004 @vindex font-lock-builtin-face
2005 @vindex font-lock-reference-face
2006 Preprocessor directives get @code{font-lock-preprocessor-face} if it
2007 exists (i.e., XEmacs).  In Emacs they get @code{font-lock-builtin-face}
2008 or @code{font-lock-reference-face}, for lack of a closer equivalent.
2010 @item
2011 @vindex font-lock-warning-face
2012 @vindex c-invalid-face
2013 @vindex invalid-face (c-)
2014 Some kinds of syntactic errors are fontified with
2015 @code{font-lock-warning-face} in Emacs.  In older XEmacs versions
2016 there's no corresponding standard face, so there a special
2017 @code{c-invalid-face} is used, which is defined to stand out sharply by
2018 default.
2020 Note that it's not used for @samp{#error} or @samp{#warning} directives,
2021 since those aren't syntactic errors in themselves.
2022 @end itemize
2025 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2026 @node    Doc Comments, AWK Mode Font Locking, Faces, Font Locking
2027 @comment node-name, next, previous, up
2028 @section Documentation Comments
2029 @cindex documentation comments
2030 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2032 There are various tools to supply documentation in the source as
2033 specially structured comments, e.g., the standard Javadoc tool in Java.
2034 @ccmode{} provides an extensible mechanism to fontify such comments and
2035 the special markup inside them.
2037 @defopt c-doc-comment-style
2038 @vindex doc-comment-style (c-)
2039 This is a style variable that specifies which documentation comment
2040 style to recognize, e.g., @code{javadoc} for Javadoc comments.
2042 The value may also be a list of styles, in which case all of them are
2043 recognized simultaneously (presumably with markup cues that don't
2044 conflict).
2046 The value may also be an association list to specify different comment
2047 styles for different languages.  The symbol for the major mode is then
2048 looked up in the alist, and the value of that element is interpreted as
2049 above if found.  If it isn't found then the symbol @code{other} is looked up
2050 and its value is used instead.
2052 The default value for @code{c-doc-comment-style} is
2053 @w{@code{((java-mode . javadoc) (pike-mode . autodoc) (c-mode . gtkdoc))}}.
2055 Note that @ccmode{} uses this variable to set other variables that
2056 handle fontification etc.  That's done at mode initialization or when
2057 you switch to a style which sets this variable.  Thus, if you change it
2058 in some other way, e.g., interactively in a CC Mode buffer, you will need
2059 to do @kbd{M-x java-mode} (or whatever mode you're currently using) to
2060 reinitialize.
2062 @findex c-setup-doc-comment-style
2063 @findex setup-doc-comment-style (c-)
2064 Note also that when @ccmode{} starts up, the other variables are
2065 modified before the mode hooks are run.  If you change this variable in
2066 a mode hook, you'll have to call @code{c-setup-doc-comment-style}
2067 afterwards to redo that work.
2068 @end defopt
2070 @ccmode{} currently provides handing of the following doc comment
2071 styles:
2073 @table @code
2074 @item javadoc
2075 @cindex Javadoc markup
2076 Javadoc comments, the standard tool in Java.
2078 @item autodoc
2079 @cindex Pike autodoc markup
2080 For Pike autodoc markup, the standard in Pike.
2082 @item gtkdoc
2083 @cindex GtkDoc markup
2084 For GtkDoc markup, widely used in the Gnome community.
2085 @end table
2087 The above is by no means complete.  If you'd like to see support for
2088 other doc comment styles, please let us know (@pxref{Mailing Lists and
2089 Bug Reports}).
2091 You can also write your own doc comment fontification support to use
2092 with @code{c-doc-comment-style}: Supply a variable or function
2093 @code{*-font-lock-keywords} where @samp{*} is the name you want to use
2094 in @code{c-doc-comment-style}.  If it's a variable, it's prepended to
2095 @code{font-lock-keywords}.  If it's a function, it's called at mode
2096 initialization and the result is prepended.  For an example, see
2097 @code{javadoc-font-lock-keywords} in @file{cc-fonts.el}.
2099 If you add support for another doc comment style, please consider
2100 contributing it: send a note to @email{bug-cc-mode@@gnu.org}.
2103 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2104 @node    AWK Mode Font Locking,  , Doc Comments, Font Locking
2105 @comment  node-name,  next,  previous,  up
2106 @section AWK Mode Font Locking
2107 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2109 The general appearance of font-locking in AWK mode is much like in any
2110 other programming mode.  @xref{Faces for Font Lock,,,elisp, GNU Emacs
2111 Lisp Reference Manual}.
2113 The following faces are, however, used in a non-standard fashion in
2114 AWK mode:
2116 @table @asis
2117 @item @code{font-lock-variable-name-face}
2118 This face was intended for variable declarations.  Since variables are
2119 not declared in AWK, this face is used instead for AWK system
2120 variables (such as @code{NF}) and ``Special File Names'' (such as
2121 @code{"/dev/stderr"}).
2123 @item @code{font-lock-builtin-face} (Emacs)/@code{font-lock-preprocessor-face} (XEmacs)
2124 This face is normally used for preprocessor directives in @ccmode{}.
2125 There are no such things in AWK, so this face is used instead for
2126 standard functions (such as @code{match}).
2128 @item @code{font-lock-string-face}
2129 As well as being used for strings, including localizable strings,
2130 (delimited by @samp{"} and @samp{_"}), this face is also used for AWK
2131 regular expressions (delimited by @samp{/}).
2133 @item @code{font-lock-warning-face} (Emacs)/@code{c-invalid-face} (XEmacs)
2134 This face highlights the following syntactically invalid AWK
2135 constructs:
2137 @itemize @bullet
2138 @item
2139 An unterminated string or regular expression.  Here the opening
2140 delimiter (@samp{"} or @samp{/} or @samp{_"}) is displayed in
2141 @code{font-lock-warning-face}.  This is most noticeable when typing in a
2142 new string/regular expression into a buffer, when the warning-face
2143 serves as a continual reminder to terminate the construct.
2145 AWK mode fontifies unterminated strings/regular expressions
2146 differently from other modes: Only the text up to the end of the line
2147 is fontified as a string (escaped newlines being handled correctly),
2148 rather than the text up to the next string quote.
2150 @item
2151 A space between the function name and opening parenthesis when calling
2152 a user function.  The last character of the function name and the
2153 opening parenthesis are highlighted.  This font-locking rule will
2154 spuriously highlight a valid concatenation expression where an
2155 identifier precedes a parenthesized expression.  Unfortunately.
2157 @item
2158 Whitespace following the @samp{\} in what otherwise looks like an
2159 escaped newline.  The @samp{\} is highlighted.
2160 @end itemize
2161 @end table
2164 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2165 @node    Config Basics, Custom Filling and Breaking, Font Locking, Top
2166 @comment  node-name,  next,  previous,  up
2167 @chapter Configuration Basics
2168 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2170 @cindex Emacs Initialization File
2171 @cindex Configuration
2172 You configure @ccmode{} by setting Lisp variables and calling (and
2173 perhaps writing) Lisp functions@footnote{DON'T PANIC!!!  This isn't
2174 difficult.}, which is usually done by adding code to an Emacs
2175 initialization file.  This file might be @file{site-start.el} or
2176 @file{.emacs} or @file{init.el} or @file{default.el} or perhaps some
2177 other file.  @xref{Init File,,,@emacsman{}, @emacsmantitle{}}.  For
2178 the sake of conciseness, we just call this file ``your @file{.emacs}''
2179 throughout the rest of the manual.
2181 Several of these variables (currently 16), are known collectively as
2182 @dfn{style variables}.  @ccmode{} provides a special mechanism, known
2183 as @dfn{styles} to make it easier to set these variables as a group,
2184 to ``inherit'' settings from one style into another, and so on.  Style
2185 variables remain ordinary Lisp variables, whose values can be read and
2186 changed independently of the style system.  @xref{Style Variables}.
2188 There are several ways you can write the code, depending on the
2189 precise effect you want---they are described further down on this page.
2190 If you are new to @ccmode{}, we suggest you begin with the simplest
2191 method, ``Top-level commands or the customization interface''.
2193 If you make conflicting settings in several of these ways, the way
2194 that takes precedence is the one that appears latest in this list:
2195 @itemize @w{}
2196 @item
2197 @table @asis
2198 @item Style
2199 @itemx File Style@footnote{In earlier versions of @ccmode{}, a File Style setting took precedence over any other setting apart from a File Local Variable setting.}
2200 @itemx Top-level command or ``customization interface''
2201 @itemx Hook
2202 @itemx File Local Variable setting
2203 @end table
2204 @end itemize
2206 Here is a summary of the different ways of writing your configuration
2207 settings:
2209 @table @asis
2210 @item Top-level commands or the ``customization interface''
2211 Most simply, you can write @code{setq} and similar commands at the top
2212 level of your @file{.emacs} file.  When you load a @ccmode{} buffer,
2213 it initializes its configuration from these global values (at least,
2214 for those settings you have given values to), so it makes sense to
2215 have these @code{setq} commands run @emph{before} @ccmode{} is first
2216 initialized---in particular, before any call to @code{desktop-read}
2217 (@pxref{Saving Emacs Sessions,,, emacs, GNU Emacs Manual}).  For
2218 example, you might set c-basic-offset thus:
2220 @example
2221 (setq c-basic-offset 4)
2222 @end example
2224 You can use the more user friendly Customization interface instead,
2225 but this manual does not cover in detail how that works.  To do this,
2226 start by typing @kbd{M-x customize-group @key{RET} c @key{RET}}.
2227 @xref{Easy Customization,,,@emacsman{}, @emacsmantitle{}}.
2228 @c The following note really belongs in the Emacs manual.
2229 Emacs normally writes the customizations at the end of your
2230 @file{.emacs} file.  If you use @code{desktop-read}, you should edit
2231 your @file{.emacs} to place the call to @code{desktop-read} @emph{after}
2232 the customizations.
2234 The first initialization of @ccmode{} puts a snapshot of the
2235 configuration settings into the special style @code{user}.
2236 @xref{Built-in Styles}.
2238 For basic use of Emacs, either of these ways of configuring is
2239 adequate.  However, the settings are then the same in all @ccmode{}
2240 buffers and it can be clumsy to communicate them between programmers.
2241 For more flexibility, you'll want to use one (or both) of @ccmode{}'s
2242 more sophisticated facilities, hooks and styles.
2244 @item Hooks
2245 An Emacs @dfn{hook} is a place to put Lisp functions that you want
2246 Emacs to execute later in specific circumstances.
2247 @xref{Hooks,,,@lispref{}, @lispreftitle{}}.  @ccmode{} supplies a main
2248 hook and a language-specific hook for each language it supports; any
2249 functions you put onto these hooks get executed as the last part of a
2250 buffer's initialization.  Typically you put most of your customization
2251 within the main hook, and use the language-specific hooks to vary the
2252 customization settings between language modes.  For example, if you
2253 wanted different (non-standard) values of @code{c-basic-offset} in C
2254 Mode and Java Mode buffers, you could do it like this:
2256 @example
2257 @group
2258 (defun my-c-mode-hook ()
2259   (setq c-basic-offset 3))
2260 (add-hook 'c-mode-hook 'my-c-mode-hook)
2262 (defun my-java-mode-hook ()
2263   (setq c-basic-offset 6))
2264 (add-hook 'java-mode-hook 'my-java-mode-hook)
2265 @end group
2266 @end example
2268 See @ref{CC Hooks} for more details on the use of @ccmode{} hooks.
2270 @item Styles
2271 A @ccmode{} @dfn{style} is a coherent collection of customizations
2272 with a name.  At any time, exactly one style is active in each
2273 @ccmode{} buffer, either the one you have selected or a default.
2274 @ccmode{} is delivered with several existing styles.  Additionally,
2275 you can create your own styles, possibly based on these existing
2276 styles.  If you worked in a programming team called the ``Free
2277 Group'', which had its own coding standards, you might well have this
2278 in your @file{.emacs} file:
2280 @example
2281 (setq c-default-style '((java-mode . "java")
2282                         (awk-mode . "awk")
2283                         (other . "free-group-style")))
2284 @end example
2286 See @ref{Styles} for fuller details on using @ccmode{} styles and how
2287 to create them.
2289 @item File Local Variable setting
2290 A @dfn{file local variable setting} is a setting which applies to an
2291 individual source file.  You put this in a @dfn{local variables list},
2292 a special block at the end of the source file (@pxref{Specifying File
2293 Variables,,,@emacsman{}}).
2295 @item File Styles
2296 A @dfn{file style} is a rarely used variant of the ``style'' mechanism
2297 described above, which applies to an individual source file.
2298 @xref{File Styles}.  You use this by setting certain special variables
2299 in a local variables list (@pxref{Specifying File
2300 Variables,,,@emacsman{}}).
2302 @item Hooks with Styles
2303 For ultimate flexibility, you can use hooks and styles together.  For
2304 example, if your team were developing a product which required a
2305 Linux driver, you'd probably want to use the ``linux'' style for the
2306 driver, and your own team's style for the rest of the code.  You
2307 could achieve this with code like this in your @file{.emacs}:
2309 @example
2310 @group
2311 (defun my-c-mode-hook ()
2312   (c-set-style
2313    (if (and (buffer-file-name)
2314             (string-match "/usr/src/linux" (buffer-file-name)))
2315        "linux"
2316      "free-group-style")))
2317 (add-hook 'c-mode-hook 'my-c-mode-hook)
2318 @end group
2319 @end example
2321 In a programming team, a hook is a also a good place for each member
2322 to put his own personal preferences.  For example, you might be the
2323 only person in your team who likes Auto-newline minor mode.  You could
2324 have it enabled by default by placing the following in your
2325 @file{.emacs}:
2327 @example
2328 @group
2329 (defun my-turn-on-auto-newline ()
2330   (c-toggle-auto-newline 1))
2331 (add-hook 'c-mode-common-hook 'my-turn-on-auto-newline)
2332 @end group
2333 @end example
2334 @end table
2336 @menu
2337 * CC Hooks::
2338 * Style Variables::
2339 * Styles::
2340 @end menu
2342 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2343 @node    CC Hooks, Style Variables, Config Basics, Config Basics
2344 @comment node-name, next, previous, up
2345 @section Hooks
2346 @cindex mode hooks
2347 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2348 @c The node name is "CC Hooks" rather than "Hooks" because of a bug in
2349 @c some older versions of Info, e.g., the info.el in GNU Emacs 21.3.
2350 @c If you go to "Config Basics" and hit <CR> on the xref to "CC
2351 @c Hooks" the function Info-follow-reference searches for "*Note: CC
2352 @c Hooks" from the beginning of the page.  If this node were instead
2353 @c named "Hooks", that search would spuriously find "*Note:
2354 @c Hooks(elisp)" and go to the wrong node.
2356 @ccmode{} provides several hooks that you can use to customize the
2357 mode for your coding style.  The main hook is
2358 @code{c-mode-common-hook}; typically, you'll put the bulk of your
2359 customizations here.  In addition, each language mode has its own
2360 hook, allowing you to fine tune your settings individually for the
2361 different @ccmode{} languages, and there is a package initialization
2362 hook.  Finally, there is @code{c-special-indent-hook}, which enables
2363 you to solve anomalous indentation problems.  It is described in
2364 @ref{Other Indentation}, not here.  All these hooks adhere to the
2365 standard Emacs conventions.
2367 When you open a buffer, @ccmode{} first initializes it with the
2368 currently active style (@pxref{Styles}).  Then it calls
2369 @code{c-mode-common-hook}, and finally it calls the language-specific
2370 hook.  Thus, any style settings done in these hooks will override
2371 those set by @code{c-default-style}.
2373 @defvar c-initialization-hook
2374 @vindex initialization-hook (c-)
2375 Hook run only once per Emacs session, when @ccmode{} is initialized.
2376 This is a good place to change key bindings (or add new ones) in any
2377 of the @ccmode{} key maps.  @xref{Sample Init File}.
2378 @end defvar
2380 @defvar c-mode-common-hook
2381 @vindex mode-common-hook (c-)
2382 Common hook across all languages.  It's run immediately before the
2383 language specific hook.
2384 @end defvar
2386 @defvar c-mode-hook
2387 @defvarx c++-mode-hook
2388 @defvarx objc-mode-hook
2389 @defvarx java-mode-hook
2390 @defvarx idl-mode-hook
2391 @defvarx pike-mode-hook
2392 @defvarx awk-mode-hook
2393 The language specific mode hooks.  The appropriate one is run as the
2394 last thing when you enter that language mode.
2395 @end defvar
2397 Although these hooks are variables defined in @ccmode{}, you can give
2398 them values before @ccmode{}'s code is loaded---indeed, this is the
2399 only way to use @code{c-initialization-hook}.  Their values aren't
2400 overwritten when @ccmode{} gets loaded.
2402 Here's a simplified example of what you can add to your @file{.emacs}
2403 file to do things whenever any @ccmode{} language is edited.  See the
2404 Emacs manuals for more information on customizing Emacs via hooks.
2405 @xref{Sample Init File}, for a more complete sample @file{.emacs}
2406 file.
2408 @example
2409 (defun my-c-mode-common-hook ()
2410   ;; my customizations for all of c-mode and related modes
2411   (no-case-fold-search)
2412   )
2413 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
2414 @end example
2416 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2417 @node    Style Variables, Styles, CC Hooks, Config Basics
2418 @comment node-name, next, previous, up
2419 @section Style Variables
2420 @cindex styles
2421 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2423 @cindex style variables
2424 The variables that @ccmode{}'s style system control are called
2425 @dfn{style variables}.  Note that style variables are ordinary Lisp
2426 variables, which the style system initializes; you can change their
2427 values at any time (e.g., in a hook function).  The style system can
2428 also set other variables, to some extent.  @xref{Styles}.
2430 @dfn{Style variables} are handled specially in several ways:
2432 @itemize @bullet
2433 @item
2434 Style variables are by default buffer-local variables.  However, they
2435 can instead be made global by setting
2436 @code{c-style-variables-are-local-p} to @code{nil} before @ccmode{} is
2437 initialized.
2439 @item
2440 @vindex c-old-style-variable-behavior
2441 @vindex old-style-variable-behavior (c-)
2442 The default global binding of any style variable (with two exceptions
2443 - see below) is the special symbol @code{set-from-style}.  When the
2444 style system initializes a buffer-local copy of a style variable for a
2445 @ccmode{} buffer, if its global binding is still that symbol then it
2446 will be set from the current style.  Otherwise it will retain its
2447 global default@footnote{This is a big change from versions of
2448 @ccmode{} earlier than 5.26, where such settings would get overridden
2449 by the style system unless special precautions were taken.  That was
2450 changed since it was counterintuitive and confusing, especially to
2451 novice users.  If your configuration depends on the old overriding
2452 behavior, you can set the variable
2453 @code{c-old-style-variable-behavior} to non-@code{nil}.}.  This
2454 ``otherwise'' happens, for example, when you've set the variable with
2455 @code{setq} at the top level of your @file{.emacs} (@pxref{Config
2456 Basics}).
2458 @item
2459 The style variable @code{c-offsets-alist} (@pxref{c-offsets-alist}) is
2460 an association list with an element for each syntactic symbol.  It's
2461 handled a little differently from the other style variables.  It's
2462 default global binding is the empty list @code{nil}, rather than
2463 @code{set-from-style}.  Before the style system is initialized, you
2464 can add individual elements to @code{c-offsets-alist} by calling
2465 @code{c-set-offset} (@pxref{c-offsets-alist}) just like you would set
2466 other style variables with @code{setq}.  Those elements will then
2467 prevail when the style system later initializes a buffer-local copy of
2468 @code{c-offsets-alist}.
2470 @item
2471 The style variable @code{c-special-indent-hook} is also handled in a
2472 special way.  Styles can only add functions to this hook, not remove
2473 them, so any global settings you put on it are always
2474 preserved@footnote{This did not change in version 5.26.}.  The value
2475 you give this variable in a style definition can be either a function
2476 or a list of functions.
2478 @item
2479 The global bindings of the style variables get captured in the special
2480 @code{user} style when the style system is first initialized.
2481 @xref{Built-in Styles}, for details.
2482 @end itemize
2484 The style variables are:@*
2485 @code{c-indent-comment-alist},
2486 @code{c-indent-comments-syntactically-p} (@pxref{Indentation
2487 Commands});@*
2488 @code{c-doc-comment-style} (@pxref{Doc Comments});@*
2489 @code{c-block-comment-prefix}, @code{c-comment-prefix-regexp}
2490 (@pxref{Custom Filling and Breaking});@*
2491 @code{c-hanging-braces-alist} (@pxref{Hanging Braces});@*
2492 @code{c-hanging-colons-alist} (@pxref{Hanging Colons});@*
2493 @code{c-hanging-semi&comma-criteria} (@pxref{Hanging Semicolons and
2494 Commas});@*
2495 @code{c-cleanup-list} (@pxref{Clean-ups});@*
2496 @code{c-basic-offset} (@pxref{Customizing Indentation});@*
2497 @code{c-offsets-alist} (@pxref{c-offsets-alist});@*
2498 @code{c-comment-only-line-offset} (@pxref{Comment Line-Up});@*
2499 @code{c-special-indent-hook}, @code{c-label-minimum-indentation}
2500 (@pxref{Other Indentation});@*
2501 @code{c-backslash-column}, @code{c-backslash-max-column}
2502 (@pxref{Custom Macros}).
2504 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2505 @node    Styles,  , Style Variables, Config Basics
2506 @comment node-name, next, previous, up
2507 @section Styles
2508 @cindex styles
2509 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2511 By @dfn{style} we mean the layout of the code---things like how many
2512 columns to indent a block of code, whether an opening brace gets
2513 indented to the level of the code it encloses, or of the construct
2514 that introduces it, or ``hangs'' at the end of a line.
2516 Most people only need to edit code formatted in just a few well-defined
2517 and consistent styles.  For example, their organization might impose a
2518 ``blessed'' style that all its programmers must conform to.  Similarly,
2519 people who work on GNU software will have to use the GNU coding style.
2520 Some shops are more lenient, allowing a variety of coding styles, and as
2521 programmers come and go, there could be a number of styles in use.  For
2522 this reason, @ccmode{} makes it convenient for you to set up logical
2523 groupings of customizations called @dfn{styles}, associate a single name
2524 for any particular style, and pretty easily start editing new or
2525 existing code using these styles.
2527 As an alternative to writing a style definition yourself, you can have
2528 @ccmode{} @dfn{guess} (at least part of) your style by looking at an
2529 already formatted piece of your code, @ref{Guessing the Style}.
2531 @menu
2532 * Built-in Styles::
2533 * Choosing a Style::
2534 * Adding Styles::
2535 * Guessing the Style::
2536 * File Styles::
2537 @end menu
2539 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2540 @node    Built-in Styles, Choosing a Style, Styles, Styles
2541 @comment node-name, next, previous, up
2542 @subsection Built-in Styles
2543 @cindex styles, built-in
2544 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2546 If you're lucky, one of @ccmode{}'s built-in styles might be just
2547 what you're looking for.  These are:
2549 @table @code
2550 @item gnu
2551 @cindex GNU style
2552 Coding style blessed by the Free Software Foundation
2553 for C code in GNU programs.
2555 @item k&r
2556 @cindex K&R style
2557 The classic Kernighan and Ritchie style for C code. If you're looking
2558 for the style used in the 2nd edition of their book ``The C
2559 Programming Language'', then check out the @code{stroustrup} style.
2561 @item bsd
2562 @cindex BSD style
2563 Also known as ``Allman style'' after Eric Allman.
2565 @item whitesmith
2566 @cindex Whitesmith style
2567 Popularized by the examples that came with Whitesmiths C, an early
2568 commercial C compiler.
2570 @item stroustrup
2571 @cindex Stroustrup style
2572 The classic Stroustrup style for C++ code.
2574 @item ellemtel
2575 @cindex Ellemtel style
2576 Popular C++ coding standards as defined by ``Programming in C++, Rules
2577 and Recommendations,'' Erik Nyquist and Mats Henricson,
2578 Ellemtel@footnote{This document is available at
2579 @uref{http://www.doc.ic.ac.uk/lab/cplus/c++.rules/} among other
2580 places.}.
2581 @c N.B.  This URL was still valid at 2005/8/28  (ACM).
2583 @item linux
2584 @cindex Linux style
2585 C coding standard for Linux (the kernel).
2587 @item python
2588 @cindex Python style
2589 C coding standard for Python extension modules@footnote{Python is a
2590 high level scripting language with a C/C++ foreign function interface.
2591 For more information, see @uref{http://www.python.org/}.}.
2593 @item java
2594 @cindex Java style
2595 The style for editing Java code.  Note that the default
2596 value for @code{c-default-style} installs this style when you enter
2597 @code{java-mode}.
2599 @item awk
2600 @cindex AWK style
2601 The style for editing AWK code.  Note that the default value for
2602 @code{c-default-style} installs this style when you enter
2603 @code{awk-mode}.
2605 @item user
2606 @cindex User style
2607 This is a special style created by you.  It consists of the factory
2608 defaults for all the style variables as modified by the customizations
2609 you do either with the Customization interface or by writing
2610 @code{setq}s and @code{c-set-offset}s at the top level of your
2611 @file{.emacs} file (@pxref{Config Basics}).  The style system creates
2612 this style as part of its initialization and doesn't modify it
2613 afterwards.
2614 @end table
2617 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2618 @node    Choosing a Style, Adding Styles, Built-in Styles, Styles
2619 @comment node-name, next, previous, up
2620 @subsection Choosing a Style
2621 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2623 When you create a new buffer, its style will be set from
2624 @code{c-default-style}.  The factory default is the style @code{gnu},
2625 except in Java and AWK modes where it's @code{java} and @code{awk}.
2627 Remember that if you set a style variable with the Customization
2628 interface or at the top level of your @file{.emacs} file before the
2629 style system is initialized (@pxref{Config Basics}), this setting will
2630 override the one that the style system would have given the variable.
2632 To set a buffer's style interactively, use the command @kbd{C-c .}
2633 (@pxref{Other Commands}).  To set it from a file's local variable
2634 list, @ref{File Styles}.
2636 @defopt c-default-style
2637 @vindex default-style (c-)
2638 This variable specifies which style to install by default in new
2639 buffers.  It takes either a style name string, or an association list
2640 of major mode symbols to style names:
2642 @enumerate
2643 @item
2644 When @code{c-default-style} is a string, it must be an existing style
2645 name.  This style is then used for all modes.
2647 @item
2648 When @code{c-default-style} is an association list, the mode language
2649 is looked up to find a style name string.
2651 @item
2652 If @code{c-default-style} is an association list where the mode
2653 language mode isn't found then the special symbol @samp{other} is
2654 looked up.  If it's found then the associated style is used.
2656 @item
2657 If @samp{other} is not found then the @samp{gnu} style is used.
2658 @end enumerate
2660 In all cases, the style described in @code{c-default-style} is installed
2661 @emph{before} the language hooks are run, so you can always override
2662 this setting by including an explicit call to @code{c-set-style} in your
2663 language mode hook, or in @code{c-mode-common-hook}.
2665 The standard value of @code{c-default-style} is @w{@code{((java-mode
2666 . "java") (awk-mode . "awk") (other . "gnu"))}}.
2667 @end defopt
2669 @defvar c-indentation-style
2670 @vindex indentation-style (c-)
2671 This variable always contains the buffer's current style name, as a
2672 string.
2673 @end defvar
2675 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2676 @node    Adding Styles, Guessing the Style, Choosing a Style, Styles
2677 @comment node-name, next, previous, up
2678 @subsection Adding and Amending Styles
2679 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2681 If none of the built-in styles is appropriate, you'll probably want to
2682 create a new @dfn{style definition}, possibly based on an existing
2683 style.  To do this, put the new style's settings into a list with the
2684 following format; the list can then be passed as an argument to the
2685 function @code{c-add-style}.  You can see an example of a style
2686 definition in @ref{Sample Init File}.
2688 @cindex style definition
2689 @c @defvr {List} style definition
2690 @table @asis
2691 @item Structure of a Style Definition List
2692 ([@var{base-style}] [(@var{variable} . @var{value}) @dots{}])
2694 Optional @var{base-style}, if present, must be a string which is the
2695 name of the @dfn{base style} from which this style inherits.  At most
2696 one @var{base-style} is allowed in a style definition.  If
2697 @var{base-style} is not specified, the style inherits from the table
2698 of factory default values@footnote{This table is stored internally in
2699 the variable c-fallback-style.} instead.  All styles eventually
2700 inherit from this internal table.  Style loops generate errors.  The
2701 list of pre-existing styles can be seen in @ref{Built-in Styles}.
2703 The dotted pairs (@var{variable} . @var{value}) each consist of a
2704 variable and the value it is to be set to when the style is later
2705 activated.@footnote{Note that if the variable has been given a value
2706 by the Customization interface or a @code{setq} at the top level of
2707 your @file{.emacs}, this value will override the one the style system
2708 tries to give it. @xref{Config Basics}.} The variable can be either a
2709 @ccmode{} style variable or an arbitrary Emacs variable.  In the
2710 latter case, it is @emph{not} made buffer-local by the @ccmode{} style
2711 system.
2712 @c @end defvr
2714 Two variables are treated specially in the dotted pair list:
2716 @table @code
2717 @item c-offsets-alist
2718 The value is in turn a list of dotted pairs of the form
2720 @example
2721 (@r{@var{syntactic-symbol}} . @r{@var{offset}})
2722 @end example
2724 as described in @ref{c-offsets-alist}.  These are passed to
2725 @code{c-set-offset} so there is no need to set every syntactic symbol
2726 in your style, only those that are different from the inherited style.
2728 @item c-special-indent-hook
2729 The value is added to @code{c-special-indent-hook} using
2730 @code{add-hook}, so any functions already on it are kept.  If the value
2731 is a list, each element of the list is added with @code{add-hook}.
2732 @end table
2733 @end table
2735 Styles are kept in the @code{c-style-alist} variable, but you
2736 should never modify this variable directly.  Instead, @ccmode{}
2737 provides the function @code{c-add-style} for this purpose.
2739 @defun c-add-style stylename description &optional set-p
2740 @findex add-style (c-)
2741 Add or update a style called @var{stylename}, a string.
2742 @var{description} is the new style definition in the form described
2743 above.  If @var{stylename} already exists in @code{c-style-alist} then
2744 it is replaced by @var{description}.  (Note, this replacement is
2745 total.  The old style is @emph{not} merged into the new one.)
2746 Otherwise, a new style is added.
2748 If the optional @var{set-p} is non-@code{nil} then the new style is
2749 applied to the current buffer as well.  The use of this facility is
2750 deprecated and it might be removed from @ccmode{} in a future release.
2751 You should use @code{c-set-style} instead.
2753 The sample @file{.emacs} file provides a concrete example of how a new
2754 style can be added and automatically set.  @xref{Sample Init File}.
2755 @end defun
2757 @defvar c-style-alist
2758 @vindex style-alist (c-)
2759 This is the variable that holds the definitions for the styles.  It
2760 should not be changed directly; use @code{c-add-style} instead.
2761 @end defvar
2763 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2764 @node    Guessing the Style, File Styles, Adding Styles, Styles
2765 @comment node-name, next, previous, up
2766 @subsection Guessing the Style
2767 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2769 Instead of specifying a style, you can get @ccmode{} to @dfn{guess}
2770 your style by examining an already formatted code buffer.  @ccmode{}
2771 then determines the ''most frequent'' offset (@pxref{c-offsets-alist})
2772 for each of the syntactic symbols (@pxref{Indentation Engine Basics})
2773 encountered in the buffer, and the ''most frequent'' value of
2774 c-basic-offset (@pxref{Customizing Indentation}), then merges the
2775 current style with these ''guesses'' to form a new style.  This
2776 combined style is known as the @dfn{guessed style}.
2778 To do this, call @code{c-guess} (or one of the other 5 guessing
2779 commands) on your sample buffer.  The analysis of your code may take
2780 some time.
2782 You can then set the guessed style in any @ccmode{} buffer with
2783 @code{c-guess-install}.  You can display the style with
2784 @code{c-guess-view}, and preserve it by copying it into your
2785 @file{.emacs} for future use, preferably after editing it.
2787 @table @asis
2788 @item @kbd{M-x c-guess-no-install}
2789 @itemx @kbd{M-x c-guess-buffer-no-install}
2790 @itemx @kbd{M-x c-guess-region-no-install}
2791 @findex c-guess-no-install
2792 @findex c-guess-buffer-no-install
2793 @findex c-guess-region-no-install
2794 @findex guess-no-install (c-)
2795 @findex guess-buffer-no-install (c-)
2796 @findex guess-region-no-install (c-)
2797 These commands analyze a part of the current buffer and guess the
2798 style from it.
2800 The part of the buffer examined is either the region
2801 (@code{c-guess-region-no-install}), the entire buffer
2802 (@code{c-guess-buffer-no-install}), or the first
2803 @code{c-guess-region-max} bytes (@code{c-guess-no-install}).
2805 Each of these commands can be given an optional prefix argument.  This
2806 instructs @ccmode{} to combine the new guesses with the current
2807 guesses before forming the guessed style.
2808 @end table
2810 @table @asis
2811 @item @kbd{M-x c-guess}
2812 @itemx @kbd{M-x c-guess-buffer}
2813 @itemx @kbd{M-x c-guess-region}
2814 @findex c-guess
2815 @findex c-guess-buffer
2816 @findex c-guess-region
2817 @findex guess (c-)
2818 @findex guess-buffer (c-)
2819 @findex guess-region (c-)
2820 These commands analyze a part of the current buffer, guess the style
2821 from it, then install the guessed style on the buffer.  The guessed
2822 style is given a name based on the buffer's absolute file name, and
2823 you can then set this style on any @ccmode{} buffer with @kbd{C-c .}.
2825 The part of the buffer examined is either the region
2826 (@code{c-guess-region}), the entire buffer (@code{c-guess-buffer}), or
2827 the first @code{c-guess-region-max} bytes (@code{c-guess}).
2829 Each of these commands can be given an optional prefix argument.  This
2830 instructs @ccmode{} to combine the new guesses with the current
2831 guesses before forming the guessed style.
2832 @end table
2834 @defopt c-guess-region-max
2835 @vindex guess-region-max (c-)
2836 This variable, default 50000, is the size in bytes of the buffer
2837 portion examined by c-guess and c-guess-no-install.  If set to
2838 @code{nil}, the entire buffer is examined.
2839 @end defopt
2841 @defopt c-guess-offset-threshold
2842 @vindex guess-offset-threshold (c-)
2843 This variable, default 10, is the maximum offset, either outwards or
2844 inwards, which will be taken into account by the analysis process.
2845 Any offset bigger than this will be ignored.  For no limit, set this
2846 variable to a large number.
2847 @end defopt
2849 @table @asis
2850 @item  @kbd{M-x c-guess-install}
2851 @findex c-guess-install
2852 @findex guess-install (c-)
2854 Set the current buffer's style to the guessed style.  This prompts you
2855 to enter an optional new style name to give to the guessed style.  By
2856 default, this name is based on the buffer's absolute file name.  You
2857 can then use this style like any other.
2859 @item  @kbd{M-x c-guess-view}
2860 @findex c-guess-view
2861 @findex guess-view (c-)
2862 Display the most recently guessed style in a temporary buffer.  This
2863 display is in the form of a @code{c-add-style} form (@pxref{Adding
2864 Styles}) which can be easily copied to your @file{.emacs}.  You will
2865 probably want to edit it first.
2867 The display of the guessed style contains these elements:
2869 @table @asis
2870 @item Placeholder Name
2871 You should replace this with a style name of your own.
2872 @item Parent Style
2873 The style current when the guessing began, from which the guessed
2874 style inherits (@pxref{Config Basics}) the settings which weren't
2875 guessed.
2876 @item Guessed Offsets
2877 These are the core result of the guessing process.  Each of them is
2878 marked by a comment.
2879 @item Inherited Offsets
2880 These are syntactic offsets which have been taken over from the parent
2881 style.  To avoid possible future conflicts, you should remove either
2882 these offsets or the parent style name.
2883 @end table
2884 @end table
2886 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2887 @node    File Styles,  , Guessing the Style, Styles
2888 @comment node-name, next, previous, up
2889 @subsection File Styles
2890 @cindex styles, file local
2891 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2893 @cindex file local variables
2895 The Emacs manual describes how you can customize certain variables on a
2896 per-file basis by including a @dfn{file local variable} block at the end
2897 of the file (@pxref{File Variables,, Local Variables in Files,@emacsman{},
2898 @emacsmantitle{}}).
2900 So far, you've only seen a functional interface for setting styles in
2901 @ccmode{}, and this can't be used here.  @ccmode{} fills the gap by
2902 providing two variables for use in a file's local variable list.
2903 Don't use them anywhere else!  These allow you to customize the style
2904 on a per-file basis:
2906 @defvar c-file-style
2907 @vindex file-style (c-)
2908 Set this variable to a style name string in the Local Variables list.
2909 From now on, when you visit the file, @ccmode{} will automatically set
2910 the file's style to this one using @code{c-set-style}.
2911 @end defvar
2913 @defvar c-file-offsets
2914 @vindex file-offsets (c-)
2915 Set this variable (in the Local Variables list) to an association list
2916 of the same format as @code{c-offsets-alist}.  From now on, when you
2917 visit the file, @ccmode{} will automatically institute these offsets
2918 using @code{c-set-offset}.
2919 @end defvar
2921 Note that file style settings (i.e., @code{c-file-style}) are applied
2922 before file offset settings
2923 (i.e., @code{c-file-offsets})@footnote{Also, if either of these are set
2924 in a file's local variable section, all the style variable values are
2925 made local to that buffer, even if
2926 @code{c-style-variables-are-local-p} is @code{nil}.  Since this
2927 variable is virtually always non-@code{nil} anyhow, you're unlikely to
2928 notice this effect.}.
2930 If you set any variable by the file local variables mechanism, that
2931 setting takes priority over all other settings, even those in your
2932 mode hooks (@pxref{CC Hooks}).  Any individual setting of a variable
2933 will override one made through @code{c-file-style} or
2934 @code{c-file-offsets}.
2935 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2936 @node    Custom Filling and Breaking, Custom Auto-newlines, Config Basics, Top
2937 @comment node-name, next, previous, up
2938 @chapter Customizing Filling and Line Breaking
2939 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2941 Since there's a lot of normal text in comments and string literals,
2942 @ccmode{} provides features to edit these like in text mode.  It does
2943 this by hooking in on the different line breaking functions and tuning
2944 relevant variables as necessary.
2946 @vindex c-comment-prefix-regexp
2947 @vindex comment-prefix-regexp (c-)
2948 @cindex comment line prefix
2949 @vindex comment-start
2950 @vindex comment-end
2951 @vindex comment-start-skip
2952 @vindex paragraph-start
2953 @vindex paragraph-separate
2954 @vindex paragraph-ignore-fill-prefix
2955 @vindex adaptive-fill-mode
2956 @vindex adaptive-fill-regexp
2957 @vindex adaptive-fill-first-line-regexp
2958 To make Emacs recognize comments and treat text in them as normal
2959 paragraphs, @ccmode{} makes several standard
2960 variables@footnote{@code{comment-start}, @code{comment-end},
2961 @code{comment-start-skip}, @code{paragraph-start},
2962 @code{paragraph-separate}, @code{paragraph-ignore-fill-prefix},
2963 @code{adaptive-fill-mode}, @code{adaptive-fill-regexp}, and
2964 @code{adaptive-fill-first-line-regexp}.} buffer-local and modifies them
2965 according to the language syntax and the comment line prefix.
2967 @defopt c-comment-prefix-regexp
2968 @vindex comment-prefix-regexp (c-)
2969 This style variable contains the regexp used to recognize the
2970 @dfn{comment line prefix}, which is the line decoration that starts
2971 every line in a comment.  The variable is either the comment line
2972 prefix itself, or (more usually) an association list with different
2973 values for different languages.  The symbol for the major mode is
2974 looked up in the alist to get the regexp for the language, and if it
2975 isn't found then the special symbol @samp{other} is looked up instead.
2977 When a comment line gets divided by @kbd{M-j} or the like, @ccmode{}
2978 inserts the comment line prefix from a neighboring line at the start
2979 of the new line.  The default value of c-comment-prefix-regexp is
2980 @samp{//+\\|\\**}, which matches C++ style line comments like
2982 @example
2983 // blah blah
2984 @end example
2986 @noindent
2987 with two or more slashes in front of them, and the second and
2988 subsequent lines of C style block comments like
2990 @example
2991 @group
2993  * blah blah
2994  */
2995 @end group
2996 @end example
2998 @noindent
2999 with zero or more stars at the beginning of every line.  If you change
3000 this variable, please make sure it still matches the comment starter
3001 (i.e., @code{//}) of line comments @emph{and} the line prefix inside
3002 block comments.
3004 @findex c-setup-paragraph-variables
3005 @findex setup-paragraph-variables (c-)
3006 Also note that since @ccmode{} uses the value of
3007 @code{c-comment-prefix-regexp} to set up several other variables at
3008 mode initialization, there won't be any effect if you just change it
3009 inside a @ccmode{} buffer.  You need to call the command
3010 @code{c-setup-paragraph-variables} too, to update those other
3011 variables.  That's also the case if you modify
3012 @code{c-comment-prefix-regexp} in a mode hook, since @ccmode{} will
3013 already have set up these variables before calling the hook.
3014 @end defopt
3016 In comments, @ccmode{} uses @code{c-comment-prefix-regexp} to adapt
3017 the line prefix from the other lines in the comment.
3019 @vindex adaptive-fill-mode
3020 @cindex Adaptive Fill mode
3021 @ccmode{} uses adaptive fill mode (@pxref{Adaptive Fill,,, emacs, GNU
3022 Emacs Manual}) to make Emacs correctly keep the line prefix when
3023 filling paragraphs.  That also makes Emacs preserve the text
3024 indentation @emph{inside} the comment line prefix.  E.g., in the
3025 following comment, both paragraphs will be filled with the left
3026 margins of the texts kept intact:
3028 @example
3029 @group
3030 /* Make a balanced b-tree of the nodes in the incoming
3031  * stream.  But, to quote the famous words of Donald E.
3032  * Knuth,
3034  *     Beware of bugs in the above code; I have only
3035  *     proved it correct, not tried it.
3036  */
3037 @end group
3038 @end example
3040 @findex c-setup-filladapt
3041 @findex setup-filladapt (c-)
3042 @findex filladapt-mode
3043 @vindex filladapt-mode
3044 @cindex Filladapt mode
3045 It's also possible to use other adaptive filling packages, notably Kyle
3046 E. Jones' Filladapt package@footnote{It's available from
3047 @uref{http://www.wonderworks.com/}.  As of version 2.12, it does however
3048 lack a feature that makes it work suboptimally when
3049 @code{c-comment-prefix-regexp} matches the empty string (which it does
3050 by default).  A patch for that is available from
3051 @uref{http://cc-mode.sourceforge.net/,, the CC Mode web site}.},
3052 @c 2005/11/22:  The above is still believed to be the case.
3053 which handles things like bulleted lists nicely.  There's a convenience
3054 function @code{c-setup-filladapt} that tunes the relevant variables in
3055 Filladapt for use in @ccmode{}.  Call it from a mode hook, e.g., with
3056 something like this in your @file{.emacs}:
3058 @example
3059 (defun my-c-mode-common-hook ()
3060   (c-setup-filladapt)
3061   (filladapt-mode 1))
3062 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
3063 @end example
3065 @defopt c-block-comment-prefix
3066 @vindex block-comment-prefix (c-)
3067 @vindex c-comment-continuation-stars
3068 @vindex comment-continuation-stars (c-)
3069 Normally the comment line prefix inserted for a new line inside a
3070 comment is deduced from other lines in it.  However there's one
3071 situation when there's no hint about what the prefix should look like,
3072 namely when a block comment is broken for the first time.  This style
3073 variable@footnote{In versions before 5.26, this variable was called
3074 @code{c-comment-continuation-stars}.  As a compatibility measure,
3075 @ccmode{} still uses the value on that variable if it's set.} is used
3076 then as the comment prefix.  It defaults to @samp{*
3077 }@footnote{Actually, this default setting of
3078 @code{c-block-comment-prefix} typically gets overridden by the default
3079 style @code{gnu}, which sets it to blank.  You can see the line
3080 splitting effect described here by setting a different style,
3081 e.g., @code{k&r} @xref{Choosing a Style}.}, which makes a comment
3083 @example
3084 /* Got O(n^2) here, which is a Bad Thing. */
3085 @end example
3087 @noindent
3088 break into
3090 @example
3091 @group
3092 /* Got O(n^2) here, which
3093  * is a Bad Thing. */
3094 @end group
3095 @end example
3097 Note that it won't work to adjust the indentation by putting leading
3098 spaces in @code{c-block-comment-prefix}, since @ccmode{} still uses the
3099 normal indentation engine to indent the line.  Thus, the right way to
3100 fix the indentation is by customizing the @code{c} syntactic symbol.  It
3101 defaults to @code{c-lineup-C-comments}, which handles the indentation of
3102 most common comment styles, see @ref{Line-Up Functions}.
3103 @end defopt
3105 @defopt c-ignore-auto-fill
3106 @vindex ignore-auto-fill (c-)
3107 When auto fill mode is enabled, @ccmode{} can selectively ignore it
3108 depending on the context the line break would occur in, e.g., to never
3109 break a line automatically inside a string literal.  This variable
3110 takes a list of symbols for the different contexts where auto-filling
3111 never should occur:
3113 @table @code
3114 @item string
3115 Inside a string or character literal.
3116 @item c
3117 Inside a C style block comment.
3118 @item c++
3119 Inside a C++ style line comment.
3120 @item cpp
3121 Inside a preprocessor directive.
3122 @item code
3123 Anywhere else, i.e., in normal code.
3124 @end table
3126 By default, @code{c-ignore-auto-fill} is set to @code{(string cpp
3127 code)}, which means that when auto-fill mode is activated,
3128 auto-filling only occurs in comments.  In literals, it's often
3129 desirable to have explicit control over newlines.  In preprocessor
3130 directives, the necessary @samp{\} escape character before the newline
3131 is not automatically inserted, so an automatic line break would
3132 produce invalid code.  In normal code, line breaks are normally
3133 dictated by some logical structure in the code rather than the last
3134 whitespace character, so automatic line breaks there will produce poor
3135 results in the current implementation.
3136 @end defopt
3138 @vindex comment-multi-line
3139 If inside a comment and @code{comment-multi-line} (@pxref{Auto
3140 Fill,,,@emacsman{}, @emacsmantitle{}} is non-@code{nil}, the
3141 indentation and
3142 line prefix are preserved.  If inside a comment and
3143 @code{comment-multi-line} is @code{nil}, a new comment of the same
3144 type is started on the next line and indented as appropriate for
3145 comments.
3147 Note that @ccmode{} sets @code{comment-multi-line} to @code{t} at
3148 startup.  The reason is that @kbd{M-j} could otherwise produce sequences
3149 of single line block comments for texts that should logically be treated
3150 as one comment, and the rest of the paragraph handling code
3151 (e.g., @kbd{M-q} and @kbd{M-a}) can't cope with that, which would lead to
3152 inconsistent behavior.
3154 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3155 @node    Custom Auto-newlines, Clean-ups, Custom Filling and Breaking, Top
3156 @comment node-name, next, previous, up
3157 @chapter Customizing Auto-newlines
3158 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3160 @ccmode{} determines whether to insert auto-newlines in two basically
3161 different ways, depending on the character just typed:
3163 @table @asis
3164 @item Braces and Colons
3165 @ccmode{} first determines the syntactic context of the brace or colon
3166 (@pxref{Syntactic Symbols}), then looks for a corresponding element in
3167 an alist.  This element specifies where to put newlines: this is any
3168 combination of before and after the brace or colon.  If no alist
3169 element is found, newlines are inserted both before and after a brace,
3170 but none are inserted around a colon.  See @ref{Hanging Braces} and
3171 @ref{Hanging Colons}.
3173 @item Semicolons and Commas
3174 The variable @code{c-hanging-semi&comma-criteria} contains a list of
3175 functions which determine whether to insert a newline after a newly
3176 typed semicolon or comma.  @xref{Hanging Semicolons and Commas}.
3177 @end table
3179 The names of these configuration variables contain @samp{hanging}
3180 because they let you @dfn{hang} the pertinent characters.  A character
3181 which introduces a C construct is said to @dfn{hang on the right} when
3182 it appears at the end of a line after other code, being separated by a
3183 line break from the construct it introduces, like the opening brace in:
3185 @example
3186 @group
3187 while (i < MAX) @{
3188     total += entry[i];
3189     entry [i++] = 0;
3191 @end group
3192 @end example
3194 @noindent
3195 A character @dfn{hangs on the left} when it appears at the start of
3196 the line after the construct it closes off, like the above closing
3197 brace.
3199 The next chapter, ``Clean-ups'', describes how to configure @ccmode{}
3200 to remove these automatically added newlines in certain specific
3201 circumstances.  @xref{Clean-ups}.
3203 @menu
3204 * Hanging Braces::
3205 * Hanging Colons::
3206 * Hanging Semicolons and Commas::
3207 @end menu
3210 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3211 @node    Hanging Braces, Hanging Colons, Custom Auto-newlines, Custom Auto-newlines
3212 @comment node-name, next, previous, up
3213 @section Hanging Braces
3214 @cindex hanging braces
3215 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3217 To specify which kinds of braces you want auto-newlines put around,
3218 you set the style variable @code{c-hanging-braces-alist}.  Its
3219 structure and semantics are described in this section.  Details of how
3220 to set it up, and its relationship to CC Mode's style system are given
3221 in @ref{Style Variables}.
3223 Say you wanted an auto-newline after (but not before) the following
3224 @samp{@{}:
3226 @example
3227 if (foo < 17) @{
3228 @end example
3230 @noindent
3231 First you need to find the @dfn{syntactic context} of the brace---type
3232 a @key{RET} before the brace to get it on a line of its
3233 own@footnote{Also insert a @samp{\} at the end of the previous line if
3234 you're in AWK Mode.}, then type @kbd{C-c C-s}.  That will tell you
3235 something like:
3237 @example
3238 ((substatement-open 1061))
3239 @end example
3241 @noindent
3242 So here you need to put the entry @code{(substatement-open . (after))}
3243 into @code{c-hanging-braces-alist}.
3245 If you don't want any auto-newlines for a particular syntactic symbol,
3246 put this into @code{c-hanging-braces-alist}:
3248 @example
3249 (brace-entry-open)
3250 @end example
3252 If some brace syntactic symbol is not in @code{c-hanging-brace-alist},
3253 its entry is taken by default as @code{(before after)}---insert a
3254 newline both before and after the brace.  In place of a
3255 ``before/after'' list you can specify a function in this alist---this
3256 is useful when the auto newlines depend on the code around the brace.
3258 @defopt c-hanging-braces-alist
3259 @vindex hanging-braces-alist (c-)
3261 This variable is an association list which maps syntactic symbols to
3262 lists of places to insert a newline.  @xref{Association
3263 Lists,,,@lispref{}, @lispreftitle{}}.  The key of each element is the
3264 syntactic symbol, the associated value is either @code{nil}, a list,
3265 or a function.
3267 @table @asis
3268 @item The Key: the syntactic symbol
3269 The syntactic symbols that are useful as keys in this list are
3270 @code{brace-list-intro}, @code{statement-cont},
3271 @code{inexpr-class-open}, @code{inexpr-class-close}, and all the
3272 @code{*-open} and @code{*-close} symbols.  @xref{Syntactic Symbols},
3273 for a more detailed description of these syntactic symbols, except for
3274 @code{inexpr-class-open} and @code{inexpr-class-close}, which aren't
3275 actual syntactic symbols.  Elements with any other value as a key get
3276 ignored.
3278 The braces of anonymous inner classes in Java are given the special
3279 symbols @code{inexpr-class-open} and @code{inexpr-class-close}, so that
3280 they can be distinguished from the braces of normal classes@footnote{The
3281 braces of anonymous classes produce a combination of
3282 @code{inexpr-class}, and @code{class-open} or @code{class-close} in
3283 normal indentation analysis.}.
3285 Note that the aggregate constructs in Pike mode, @samp{(@{}, @samp{@})},
3286 @samp{([}, @samp{])}, and @samp{(<}, @samp{>)}, do not count as brace
3287 lists in this regard, even though they do for normal indentation
3288 purposes.  It's currently not possible to set automatic newlines on
3289 these constructs.
3291 @item The associated value: the ``ACTION'' list or function
3292 The value associated with each syntactic symbol in this association
3293 list is called an @var{action}, which can be either a list or a
3294 function which returns a list.  @xref{Custom Braces}, for how to use
3295 a function as a brace hanging @var{action}.
3297 The list @var{action} (or the list returned by @var{action} when it's
3298 a function) contains some combination of the symbols @code{before} and
3299 @code{after}, directing @ccmode{} where to put newlines in
3300 relationship to the brace being inserted.  Thus, if the list contains
3301 only the symbol @code{after}, then the brace hangs on the right side
3302 of the line, as in:
3304 @example
3305 // here, open braces always 'hang'
3306 void spam( int i ) @{
3307     if( i == 7 ) @{
3308         dosomething(i);
3309     @}
3311 @end example
3313 When the list contains both @code{after} and @code{before}, the braces
3314 will appear on a line by themselves, as shown by the close braces in
3315 the above example.  The list can also be empty, in which case newlines
3316 are added neither before nor after the brace.
3317 @end table
3319 If a syntactic symbol is missing entirely from
3320 @code{c-hanging-braces-alist}, it's treated in the same way as an
3321 @var{action} with a list containing @code{before} and @code{after}, so
3322 that braces by default end up on their own line.
3324 For example, the default value of @code{c-hanging-braces-alist} is:
3326 @example
3327 ((brace-list-open)
3328  (brace-entry-open)
3329  (statement-cont)
3330  (substatement-open after)
3331  (block-close . c-snug-do-while)
3332  (extern-lang-open after)
3333  (namespace-open after)
3334  (module-open after)
3335  (composition-open after)
3336  (inexpr-class-open after)
3337  (inexpr-class-close before))
3338 @end example
3340 @noindent which says that @code{brace-list-open},
3341 @code{brace-entry-open} and @code{statement-cont}@footnote{Brace lists
3342 inside statements, such as initializers for static array variables
3343 inside functions in C, are recognized as @code{statement-cont}.  All
3344 normal substatement blocks are recognized with other symbols.} braces
3345 should both hang on the right side and allow subsequent text to follow
3346 on the same line as the brace.  Also, @code{substatement-open},
3347 @code{extern-lang-open}, and @code{inexpr-class-open} braces should hang
3348 on the right side, but subsequent text should follow on the next line.
3349 The opposite holds for @code{inexpr-class-close} braces; they won't
3350 hang, but the following text continues on the same line.  Here, in the
3351 @code{block-close} entry, you also see an example of using a function as
3352 an @var{action}.  In all other cases, braces are put on a line by
3353 themselves.
3354 @end defopt
3356 @menu
3357 * Custom Braces::
3358 @end menu
3360 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3361 @node    Custom Braces,  , Hanging Braces, Hanging Braces
3362 @comment node-name, next, previous, up
3363 @subsection Custom Brace Hanging
3364 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3366 @vindex c-hanging-braces-alist
3367 @vindex hanging-braces-alist (c-)
3368 @cindex action functions
3369 Syntactic symbols aren't the only place where you can customize
3370 @ccmode{} with the lisp equivalent of callback functions.  Remember
3371 that @var{action}s are usually a list containing some combination of
3372 the symbols @code{before} and @code{after} (@pxref{Hanging Braces}).
3373 For more flexibility, you can instead specify brace ``hanginess'' by
3374 giving a syntactic symbol an @dfn{action function} in
3375 @code{c-hanging-braces-alist}; this function determines the
3376 ``hanginess'' of a brace, usually by looking at the code near it.
3378 @cindex customization, brace hanging
3379 An action function is called with two arguments: the syntactic symbol
3380 for the brace (e.g., @code{substatement-open}), and the buffer position
3381 where the brace has been inserted.  Point is undefined on entry to an
3382 action function, but the function must preserve it (e.g., by using
3383 @code{save-excursion}).  The return value should be a list containing
3384 some combination of @code{before} and @code{after}, including neither
3385 of them (i.e., @code{nil}).
3387 @defvar c-syntactic-context
3388 @vindex syntactic-context (c-)
3389 During the call to the indentation or brace hanging @var{action}
3390 function, this variable is bound to the full syntactic analysis list.
3391 This might be, for example, @samp{((block-close 73))}.  Don't ever
3392 give @code{c-syntactic-context} a value yourself---this would disrupt
3393 the proper functioning of @ccmode{}.
3395 This variable is also bound in three other circumstances:
3396 (i)@w{ }when calling a c-hanging-semi&comma-criteria function
3397 (@pxref{Hanging Semicolons and Commas}); (ii)@w{ }when calling a
3398 line-up function (@pxref{Custom Line-Up}); (iii)@w{ }when calling a
3399 c-special-indent-hook function (@pxref{Other Indentation}).
3400 @end defvar
3402 As an example, @ccmode{} itself uses this feature to dynamically
3403 determine the hanginess of braces which close ``do-while''
3404 constructs:
3406 @example
3407 void do_list( int count, char** atleast_one_string )
3409     int i=0;
3410     do @{
3411         handle_string( atleast_one_string[i] );
3412         i++;
3413     @} while( i < count );
3415 @end example
3417 @ccmode{} assigns the @code{block-close} syntactic symbol to the
3418 brace that closes the @code{do} construct, and normally we'd like the
3419 line that follows a @code{block-close} brace to begin on a separate
3420 line.  However, with ``do-while'' constructs, we want the
3421 @code{while} clause to follow the closing brace.  To do this, we
3422 associate the @code{block-close} symbol with the @var{action} function
3423 @code{c-snug-do-while}:
3425 @example
3426 (defun c-snug-do-while (syntax pos)
3427   "Dynamically calculate brace hanginess for do-while statements."
3428   (save-excursion
3429     (let (langelem)
3430       (if (and (eq syntax 'block-close)
3431                (setq langelem (assq 'block-close c-syntactic-context))
3432                (progn (goto-char (cdr langelem))
3433                       (if (= (following-char) ?@{)
3434                           (forward-sexp -1))
3435                       (looking-at "\\<do\\>[^_]")))
3436           '(before)
3437         '(before after)))))
3438 @end example
3440 @findex c-snug-do-while
3441 @findex snug-do-while (c-)
3442 This function simply looks to see if the brace closes a ``do-while''
3443 clause and if so, returns the list @samp{(before)} indicating
3444 that a newline should be inserted before the brace, but not after it.
3445 In all other cases, it returns the list @samp{(before after)} so
3446 that the brace appears on a line by itself.
3448 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3449 @node    Hanging Colons, Hanging Semicolons and Commas, Hanging Braces, Custom Auto-newlines
3450 @comment node-name, next, previous, up
3451 @section Hanging Colons
3452 @cindex hanging colons
3453 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3455 @cindex customization, colon hanging
3456 @vindex c-hanging-colons-alist
3457 @vindex hanging-colons-alist (c-)
3459 Using a mechanism similar to brace hanging (@pxref{Hanging Braces}),
3460 colons can also be made to hang using the style variable
3461 @code{c-hanging-colons-alist}: when a colon is typed, @ccmode
3462 determines its syntactic context, looks this up in the alist
3463 @code{c-changing-colons-alist} and inserts up to two newlines
3464 accordingly.  Here, however, If @ccmode fails to find an entry for a
3465 syntactic symbol in the alist, no newlines are inserted around the
3466 newly typed colon.
3468 @defopt c-hanging-colons-alist
3469 @vindex hanging-colons-alist (c-)
3471 @table @asis
3472 @item The Key: the syntactic symbol
3473 The syntactic symbols appropriate as keys in this association list
3474 are: @code{case-label}, @code{label}, @code{access-label},
3475 @code{member-init-intro}, and @code{inher-intro}.  @xref{Syntactic
3476 Symbols}.  Elements with any other value as a key get ignored.
3478 @item The associated value: the ``ACTION'' list
3479 The @var{action} here is simply a list containing a combination of the
3480 symbols @code{before} and @code{after}.  Unlike in
3481 @code{c-hanging-braces-alist}, functions as @var{actions} are not
3482 supported; there doesn't seem to be any need for them.
3483 @end table
3484 @end defopt
3486 In C++, double-colons are used as a scope operator but because these
3487 colons always appear right next to each other, newlines before and after
3488 them are controlled by a different mechanism, called @dfn{clean-ups} in
3489 @ccmode{}.  @xref{Clean-ups}, for details.
3491 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3492 @node    Hanging Semicolons and Commas,  , Hanging Colons, Custom Auto-newlines
3493 @comment node-name, next, previous, up
3494 @section Hanging Semicolons and Commas
3495 @cindex hanging semicolons
3496 @cindex hanging commas
3497 @cindex customization, semicolon newlines
3498 @cindex customization, comma newlines
3499 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3501 @defopt c-hanging-semi&comma-criteria
3502 @vindex hanging-semi&comma-criteria (c-)
3503 This style variable takes a list of functions; these get called when
3504 you type a semicolon or comma.  The functions are called in order
3505 without arguments.  When these functions are entered, point is just
3506 after the newly inserted @samp{;} or @samp{,} and they must preserve
3507 point (e.g., by using @code{save-excursion}).  During the call, the
3508 variable @code{c-syntactic-context} is bound to the syntactic context
3509 of the current line@footnote{This was first introduced in @ccmode{}
3510 5.31.} @pxref{Custom Braces}.  These functions don't insert newlines
3511 themselves, rather they direct @ccmode{} whether or not to do so.
3512 They should return one of the following values:
3514 @table @code
3515 @item t
3516 A newline is to be inserted after the @samp{;} or @samp{,}, and no
3517 more functions from the list are to be called.
3518 @item stop
3519 No more functions from the list are to be called, and no newline is to
3520 be inserted.
3521 @item nil
3522 No determination has been made, and the next function in the list is
3523 to be called.
3524 @end table
3526 Note that auto-newlines are never inserted @emph{before} a semicolon
3527 or comma.  If every function in the list is called without a
3528 determination being made, then no newline is added.
3530 In AWK mode, this variable is set by default to @code{nil}.  In the
3531 other modes, the default value is a list containing a single function,
3532 @code{c-semi&comma-inside-parenlist}.  This inserts newlines after all
3533 semicolons, apart from those separating @code{for}-clause statements.
3534 @end defopt
3536 @defun c-semi&comma-no-newlines-before-nonblanks
3537 @findex semi&comma-no-newlines-before-nonblanks (c-)
3538 This is an example of a criteria function, provided by @ccmode{}.  It
3539 prevents newlines from being inserted after semicolons when there is a
3540 non-blank following line.  Otherwise, it makes no determination.  To
3541 use, add this function to the front of the
3542 @code{c-hanging-semi&comma-criteria} list.
3544 @example
3545 (defun c-semi&comma-no-newlines-before-nonblanks ()
3546   (save-excursion
3547     (if (and (= (c-last-command-char) ?\;)
3548              (zerop (forward-line 1))
3549              (bolp)      ; forward-line has funny behavior at eob.
3550              (not (looking-at "^[ \t]*$")))
3551         'stop
3552       nil)))
3553 @end example
3554 @end defun
3556 @defun c-semi&comma-inside-parenlist
3557 @findex semi&comma-inside-parenlist (c-)
3558 @defunx c-semi&comma-no-newlines-for-oneline-inliners
3559 @findex semi&comma-no-newlines-for-oneline-inliners (c-)
3560 The function @code{c-semi&comma-inside-parenlist} is what prevents
3561 newlines from being inserted inside the parenthesis list of @code{for}
3562 statements.  In addition to
3563 @code{c-semi&comma-no-newlines-before-nonblanks} described above,
3564 @ccmode{} also comes with the criteria function
3565 @code{c-semi&comma-no-newlines-for-oneline-inliners}, which suppresses
3566 newlines after semicolons inside one-line inline method definitions
3567 (e.g., in C++ or Java).
3568 @end defun
3571 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3572 @node    Clean-ups, Indentation Engine Basics, Custom Auto-newlines, Top
3573 @comment node-name, next, previous, up
3574 @chapter Clean-ups
3575 @cindex clean-ups
3576 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3578 @dfn{Clean-ups} are mechanisms which remove (or exceptionally, add)
3579 whitespace in specific circumstances and are complementary to colon
3580 and brace hanging.  You enable a clean-up by adding its symbol into
3581 @code{c-cleanup-list}, e.g., like this:
3583 @example
3584 (add-to-list 'c-cleanup-list 'space-before-funcall)
3585 @end example
3587 On the surface, it would seem that clean-ups overlap the functionality
3588 provided by the @code{c-hanging-*-alist} variables.  Clean-ups,
3589 however, are used to adjust code ``after-the-fact'', i.e., to adjust
3590 the whitespace in constructs later than when they were typed.
3592 Most of the clean-ups remove automatically inserted newlines, and are
3593 only active when auto-newline minor mode is turned on.  Others will
3594 work all the time.  Note that clean-ups are only performed when there
3595 is nothing but whitespace appearing between the individual components
3596 of the construct, and (apart from @code{comment-close-slash}) when the
3597 construct does not occur within a literal (@pxref{Auto-newlines}).
3599 @defopt c-cleanup-list
3600 @vindex cleanup-list (c-)
3601 @cindex literal
3603 You configure @ccmode{}'s clean-ups by setting the style variable
3604 @code{c-cleanup-list}, which is a list of clean-up symbols.  By
3605 default, @ccmode{} cleans up only the @code{scope-operator} construct,
3606 which is necessary for proper C++ support.
3607 @end defopt
3609 These are the clean-ups that are only active when electric and
3610 auto-newline minor modes are enabled:
3612 @c TBD: Would like to use some sort of @deffoo here; @table indents a
3613 @c bit too much in dvi output.
3614 @table @code
3615 @item brace-else-brace
3616 Clean up @samp{@} else @{} constructs by placing the entire construct on
3617 a single line.  Clean up occurs when the open brace after the
3618 @samp{else} is typed.  So for example, this:
3620 @example
3621 @group
3622 void spam(int i)
3624     if( i==7 ) @{
3625         dosomething();
3626     @}
3627     else
3628     @{
3629 @end group
3630 @end example
3632 @noindent
3633 appears like this after the last open brace is typed:
3635 @example
3636 @group
3637 void spam(int i)
3639     if( i==7 ) @{
3640         dosomething();
3641     @} else @{
3642 @end group
3643 @end example
3645 @item brace-elseif-brace
3646 Similar to the @code{brace-else-brace} clean-up, but this cleans up
3647 @samp{@} else if (...) @{} constructs.  For example:
3649 @example
3650 @group
3651 void spam(int i)
3653     if( i==7 ) @{
3654         dosomething();
3655     @}
3656     else if( i==3 )
3657     @{
3658 @end group
3659 @end example
3661 @noindent
3662 appears like this after the last open parenthesis is typed:
3664 @example
3665 @group
3666 void spam(int i)
3668     if( i==7 ) @{
3669         dosomething();
3670     @} else if(
3671 @end group
3672 @end example
3674 @noindent
3675 and like this after the last open brace is typed:
3677 @example
3678 @group
3679 void spam(int i)
3681     if( i==7 ) @{
3682         dosomething();
3683     @} else if( i==3 ) @{
3684 @end group
3685 @end example
3687 @item brace-catch-brace
3688 Analogous to @code{brace-elseif-brace}, but cleans up @samp{@} catch
3689 (...) @{} in C++ and Java mode.
3691 @item empty-defun-braces
3692 Clean up braces following a top-level function or class definition that
3693 contains no body.  Clean up occurs when the closing brace is typed.
3694 Thus the following:
3696 @example
3697 @group
3698 class Spam
3701 @end group
3702 @end example
3704 @noindent
3705 is transformed into this when the close brace is typed:
3707 @example
3708 @group
3709 class Spam
3710 @{@}
3711 @end group
3712 @end example
3714 @item defun-close-semi
3715 Clean up the terminating semicolon on top-level function or class
3716 definitions when they follow a close brace.  Clean up occurs when the
3717 semicolon is typed.  So for example, the following:
3719 @example
3720 @group
3721 class Spam
3726 @end group
3727 @end example
3729 @noindent
3730 is transformed into this when the semicolon is typed:
3732 @example
3733 @group
3734 class Spam
3738 @end group
3739 @end example
3741 @item list-close-comma
3742 Clean up commas following braces in array and aggregate initializers.
3743 Clean up occurs when the comma is typed.  The space before the comma
3744 is zapped just like the space before the semicolon in
3745 @code{defun-close-semi}.
3747 @item scope-operator
3748 Clean up double colons which might designate a C++ scope operator split
3749 across multiple lines@footnote{Certain C++ constructs introduce
3750 ambiguous situations, so @code{scope-operator} clean-ups might not
3751 always be correct.  This usually only occurs when scoped identifiers
3752 appear in switch label tags.}.  Clean up occurs when the second colon is
3753 typed.  You will always want @code{scope-operator} in the
3754 @code{c-cleanup-list} when you are editing C++ code.
3756 @item one-liner-defun
3757 Clean up a single line of code enclosed by defun braces by removing
3758 the whitespace before and after the code.  The clean-up happens when
3759 the closing brace is typed.  If the variable
3760 @code{c-max-one-liner-length} is set, the cleanup is only done if the
3761 resulting line would be no longer than the value of that variable.
3763 For example, consider this AWK code:
3765 @example
3766 @group
3767 BEGIN @{
3768     FS = "\t" # use <TAB> as a field separator
3770 @end group
3771 @end example
3773 @noindent
3774 It gets compacted to the following when the closing brace is typed:
3776 @example
3777 @group
3778 BEGIN @{FS = "\t"@} # use <TAB> as a field separator
3779 @end group
3780 @end example
3782 @defopt c-max-one-liner-length
3783 @vindex max-one-liner-length (c-)
3784 The maximum length of the resulting line for which the clean-up
3785 @code{one-liner-defun} will be triggered.  This length is that of the entire
3786 line, including any leading whitespace and any trailing comment.  Its
3787 default value is 80.  If the value is zero or @code{nil}, no limit
3788 applies.
3789 @end defopt
3790 @end table
3792 The following clean-ups are always active when they occur on
3793 @code{c-cleanup-list}, regardless of whether Electric minor mode or
3794 Auto-newline minor mode are enabled:
3796 @table @code
3797 @item space-before-funcall
3798 Insert a space between the function name and the opening parenthesis
3799 of a function call.  This produces function calls in the style
3800 mandated by the GNU coding standards, e.g., @samp{signal@w{ }(SIGINT,
3801 SIG_IGN)} and @samp{abort@w{ }()}.  Clean up occurs when the opening
3802 parenthesis is typed.  This clean-up should never be active in AWK
3803 Mode, since such a space is syntactically invalid for user defined
3804 functions.
3806 @item compact-empty-funcall
3807 Clean up any space between the function name and the opening parenthesis
3808 of a function call that has no arguments.  This is typically used
3809 together with @code{space-before-funcall} if you prefer the GNU function
3810 call style for functions with arguments but think it looks ugly when
3811 it's only an empty parenthesis pair.  I.e., you will get @samp{signal
3812 (SIGINT, SIG_IGN)}, but @samp{abort()}.  Clean up occurs when the
3813 closing parenthesis is typed.
3815 @item comment-close-slash
3816 When inside a block comment, terminate the comment when you type a slash
3817 at the beginning of a line (i.e., immediately after the comment prefix).
3818 This clean-up removes whitespace preceding the slash and if needed,
3819 inserts a star to complete the token @samp{*/}.  Type @kbd{C-q /} in this
3820 situation if you just want a literal @samp{/} inserted.
3821 @end table
3824 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3825 @node    Indentation Engine Basics, Customizing Indentation, Clean-ups, Top
3826 @comment node-name, next, previous, up
3827 @chapter Indentation Engine Basics
3828 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3830 This chapter will briefly cover how @ccmode{} indents lines of code.
3831 It is helpful to understand the indentation model being used so that
3832 you will know how to customize @ccmode{} for your personal coding
3833 style.  All the details are in @ref{Customizing Indentation}.
3835 @ccmode{} has an indentation engine that provides a flexible and
3836 general mechanism for customizing indentation.  When @ccmode{} indents
3837 a line of code, it separates its calculations into two steps:
3839 @enumerate
3840 @item
3841 @cindex syntactic symbol
3842 @cindex anchor position
3843 It analyzes the line to determine its @dfn{syntactic symbol(s)} (the
3844 kind of language construct it's looking at) and its @dfn{anchor
3845 position} (the position earlier in the file that @ccmode{} will indent
3846 the line relative to).  The anchor position might be the location of
3847 an opening brace in the previous line, for example.  @xref{Syntactic
3848 Analysis}.
3849 @item
3850 @cindex offsets
3851 @cindex indentation offset specifications
3852 It looks up the syntactic symbol(s) in the configuration to get the
3853 corresponding @dfn{offset(s)}.  The symbol @code{+}, which means
3854 ``indent this line one more level'' is a typical offset.  @ccmode{}
3855 then applies these offset(s) to the anchor position, giving the
3856 indentation for the line.  The different sorts of offsets are
3857 described in @ref{c-offsets-alist}.
3858 @end enumerate
3860 In exceptional circumstances, the syntax directed indentation
3861 described here may be a nuisance rather than a help.  You can disable
3862 it by setting @code{c-syntactic-indentation} to @code{nil}.  (To set
3863 the variable interactively, @ref{Minor Modes}).
3865 @defopt c-syntactic-indentation
3866 @vindex syntactic-indentation (c-)
3867 When this is non-@code{nil} (which it is by default), the indentation
3868 of code is done according to its syntactic structure.  When it's
3869 @code{nil}, every line is just indented to the same level as the
3870 previous one, and @kbd{TAB} (@code{c-indent-command}) adjusts the
3871 indentation in steps of @code{c-basic-offset}.  The current style
3872 (@pxref{Config Basics}) then has no effect on indentation, nor do any
3873 of the variables associated with indentation, not even
3874 @code{c-special-indent-hook}.
3875 @end defopt
3877 @menu
3878 * Syntactic Analysis::
3879 * Syntactic Symbols::
3880 * Indentation Calculation::
3881 @end menu
3884 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3885 @node    Syntactic Analysis, Syntactic Symbols, Indentation Engine Basics, Indentation Engine Basics
3886 @comment node-name, next, previous, up
3887 @section Syntactic Analysis
3888 @cindex syntactic analysis
3889 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3891 @cindex syntactic element
3892 @cindex syntactic context
3893 The first thing @ccmode{} does when indenting a line of code, is to
3894 analyze the line by calling @code{c-guess-basic-syntax}, determining
3895 the syntactic context of the (first) construct on that line.  Although
3896 this function is mainly used internally, it can sometimes be useful in
3897 Line-up functions (@pxref{Custom Line-Up}) or in functions on
3898 @code{c-special-indent-hook} (@pxref{Other Indentation}).
3900 @defun c-guess-basic-syntax
3901 @findex guess-basic-syntax (c-)
3902 Determine the syntactic context of the current line.
3903 @end defun
3905 The @dfn{syntactic context} is a list of @dfn{syntactic elements},
3906 where each syntactic element in turn is a list@footnote{In
3907 @ccmode 5.28 and earlier, a syntactic element was a dotted pair; the
3908 cons was the syntactic symbol and the cdr was the anchor position.
3909 For compatibility's sake, the parameter passed to a line-up function
3910 still has this dotted pair form (@pxref{Custom Line-Up}).}  Here is a
3911 brief and typical example:
3913 @example
3914 ((defun-block-intro 1959))
3915 @end example
3917 @cindex syntactic symbol
3918 @noindent
3919 The first thing inside each syntactic element is always a
3920 @dfn{syntactic symbol}.  It describes the kind of construct that was
3921 recognized, e.g., @code{statement}, @code{substatement},
3922 @code{class-open}, @code{class-close}, etc.  @xref{Syntactic Symbols},
3923 for a complete list of currently recognized syntactic symbols and
3924 their semantics.  The remaining entries are various data associated
3925 with the recognized construct; there might be zero or more.
3927 @cindex anchor position
3928 Conceptually, a line of code is always indented relative to some
3929 position higher up in the buffer (typically the indentation of the
3930 previous line).  That position is the @dfn{anchor position} in the
3931 syntactic element.  If there is an entry after the syntactic symbol in
3932 the syntactic element list then it's either @code{nil} or that anchor position.
3934 Here is an example.  Suppose we had the following code as the only thing
3935 in a C++ buffer @footnote{The line numbers in this and future examples
3936 don't actually appear in the buffer, of course!}:
3938 @example
3939  1: void swap( int& a, int& b )
3940  2: @{
3941  3:     int tmp = a;
3942  4:     a = b;
3943  5:     b = tmp;
3944  6: @}
3945 @end example
3947 @noindent
3948 We can use @kbd{C-c C-s} (@code{c-show-syntactic-information}) to
3949 report what the syntactic analysis is for the current line:
3951 @table @asis
3952 @item @kbd{C-c C-s} (@code{c-show-syntactic-information})
3953 @kindex C-c C-s
3954 @findex c-show-syntactic-information
3955 @findex show-syntactic-information (c-)
3956 This command calculates the syntactic analysis of the current line and
3957 displays it in the minibuffer.  The command also highlights the anchor
3958 position(s).
3959 @end table
3961   Running this command on line 4 of this example, we'd see in the echo
3962 area@footnote{With a universal argument (i.e., @kbd{C-u C-c C-s}) the
3963 analysis is inserted into the buffer as a comment on the current
3964 line.}:
3966 @example
3967 ((statement 35))
3968 @end example
3970 @noindent
3971 and the @samp{i} of @code{int} on line 3 would be highlighted.  This
3972 tells us that the line is a statement and it is indented relative to
3973 buffer position 35, the highlighted position.  If you were to move
3974 point to line 3 and hit @kbd{C-c C-s}, you would see:
3976 @example
3977 ((defun-block-intro 29))
3978 @end example
3980 @noindent
3981 This indicates that the @samp{int} line is the first statement in a top
3982 level function block, and is indented relative to buffer position 29,
3983 which is the brace just after the function header.
3985 Here's another example:
3987 @example
3988  1: int add( int val, int incr, int doit )
3989  2: @{
3990  3:     if( doit )
3991  4:         @{
3992  5:             return( val + incr );
3993  6:         @}
3994  7:     return( val );
3995  8: @}
3996 @end example
3998 @noindent
3999 Hitting @kbd{C-c C-s} on line 4 gives us:
4001 @example
4002 ((substatement-open 46))
4003 @end example
4005 @cindex substatement
4006 @cindex substatement block
4007 @noindent
4008 which tells us that this is a brace that @emph{opens} a substatement
4009 block.@footnote{A @dfn{substatement} is the line after a
4010 conditional statement, such as @code{if}, @code{else}, @code{while},
4011 @code{do}, @code{switch}, etc.  A @dfn{substatement
4012 block} is a brace block following one of these conditional statements.}
4014 @cindex comment-only line
4015 Syntactic contexts can contain more than one element, and syntactic
4016 elements need not have anchor positions.  The most common example of
4017 this is a @dfn{comment-only line}:
4019 @example
4020  1: void draw_list( List<Drawables>& drawables )
4021  2: @{
4022  3:         // call the virtual draw() method on each element in list
4023  4:     for( int i=0; i < drawables.count(), ++i )
4024  5:     @{
4025  6:         drawables[i].draw();
4026  7:     @}
4027  8: @}
4028 @end example
4030 @noindent
4031 Hitting @kbd{C-c C-s} on line 3 of this example gives:
4033 @example
4034 ((comment-intro) (defun-block-intro 46))
4035 @end example
4037 @noindent
4038 and you can see that the syntactic context contains two syntactic
4039 elements.  Notice that the first element, @samp{(comment-intro)}, has no
4040 anchor position.
4043 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4044 @node    Syntactic Symbols, Indentation Calculation, Syntactic Analysis, Indentation Engine Basics
4045 @comment node-name, next, previous, up
4046 @section Syntactic Symbols
4047 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4049 @cindex syntactic symbols, brief list
4050 @vindex c-offsets-alist
4051 @vindex offsets-alist (c-)
4052 This section is a complete list of the syntactic symbols which appear
4053 in the @code{c-offsets-alist} style variable, along with brief
4054 descriptions.  The previous section (@pxref{Syntactic Analysis})
4055 states what syntactic symbols are and how the indentation engine uses
4056 them.
4058 More detailed descriptions of these symbols, together with snippets of
4059 source code to which they apply, appear in the examples in the
4060 subsections below.  Note that, in the interests of brevity, the anchor
4061 position associated with most syntactic symbols is @emph{not}
4062 specified.  In cases of doubt, type @kbd{C-c C-s} on a pertinent
4063 line---this highlights the anchor position.
4065 @ssindex -open symbols
4066 @ssindex -close symbols
4067 @ssindex -block-intro symbols
4068 The syntactic symbols which indicate brace constructs follow a general
4069 naming convention.  When a line begins with an open or close brace,
4070 its syntactic symbol will contain the suffix @code{-open} or
4071 @code{-close} respectively.  The first line within the brace block
4072 construct will contain the suffix @code{-block-intro}.
4074 @ssindex -intro symbols
4075 @ssindex -cont symbols
4076 In constructs which can span several lines, a distinction is usually
4077 made between the first line that introduces the construct and the
4078 lines that continue it.  The syntactic symbols that indicate these
4079 lines will contain the suffixes @code{-intro} or @code{-cont}
4080 respectively.
4082 The best way to understand how all this works is by looking at some
4083 examples.  Remember that you can see the syntax of any source code
4084 line by using @kbd{C-c C-s}.
4086 @table @code
4087 @item string
4088 Inside a multiline string.  @ref{Literal Symbols}.
4089 @item c
4090 Inside a multiline C style block comment.  @ref{Literal Symbols}.
4091 @item defun-open
4092 Brace that opens a top-level function definition.  @ref{Function
4093 Symbols}.
4094 @item defun-close
4095 Brace that closes a top-level function definition.  @ref{Function
4096 Symbols}.
4097 @item defun-block-intro
4098 The first line in a top-level defun.  @ref{Function Symbols}.
4099 @item class-open
4100 Brace that opens a class definition.  @ref{Class Symbols}.
4101 @item class-close
4102 Brace that closes a class definition.  @ref{Class Symbols}.
4103 @item inline-open
4104 Brace that opens an in-class inline method.  @ref{Class Symbols}.
4105 @item inline-close
4106 Brace that closes an in-class inline method.  @ref{Class Symbols}.
4107 @item func-decl-cont
4108 The region between a function definition's argument list and the
4109 function opening brace (excluding K&R argument declarations).  In C,
4110 you cannot put anything but whitespace and comments in this region,
4111 however in C++ and Java, @code{throws} declarations and other things
4112 can appear here.  @ref{Literal Symbols}. @c @emph{FIXME!!!  Can it not
4113 @c go somewhere better?}
4114 @item knr-argdecl-intro
4115 First line of a K&R C argument declaration.  @ref{K&R Symbols}.
4116 @item knr-argdecl
4117 Subsequent lines in a K&R C argument declaration.  @ref{K&R Symbols}.
4118 @item topmost-intro
4119 The first line in a ``topmost'' definition.  @ref{Function Symbols}.
4120 @item topmost-intro-cont
4121 Topmost definition continuation lines.  This is only used in the parts
4122 that aren't covered by other symbols such as @code{func-decl-cont} and
4123 @code{knr-argdecl}.  @ref{Function Symbols}.
4124 @item annotation-top-cont
4125 Topmost definition continuation lines where all previous items are
4126 annotations.  @ref{Java Symbols}.
4127 @item member-init-intro
4128 First line in a member initialization list.  @ref{Class Symbols}.
4129 @item member-init-cont
4130 Subsequent member initialization list lines.  @ref{Class Symbols}.
4131 @item inher-intro
4132 First line of a multiple inheritance list.  @ref{Class Symbols}.
4133 @item inher-cont
4134 Subsequent multiple inheritance lines.  @ref{Class Symbols}.
4135 @item block-open
4136 Statement block open brace.  @ref{Literal Symbols}.
4137 @item block-close
4138 Statement block close brace.  @ref{Conditional Construct Symbols}.
4139 @item brace-list-open
4140 Open brace of an enum or static array list.  @ref{Brace List Symbols}.
4141 @item brace-list-close
4142 Close brace of an enum or static array list.  @ref{Brace List Symbols}.
4143 @item brace-list-intro
4144 First line after the opening @samp{@{} in an enum or static array
4145 list.  @ref{Brace List Symbols}.
4146 @item brace-list-entry
4147 Subsequent lines in an enum or static array list.  @ref{Brace List
4148 Symbols}.
4149 @item brace-entry-open
4150 Subsequent lines in an enum or static array list where the line begins
4151 with an open brace.  @ref{Brace List Symbols}.
4152 @item statement
4153 A statement.  @ref{Function Symbols}.
4154 @item statement-cont
4155 A continuation of a statement.  @ref{Function Symbols}.
4156 @item annotation-var-cont
4157 A continuation of a statement where all previous items are
4158 annotations.  @ref{Java Symbols}.
4159 @item statement-block-intro
4160 The first line in a new statement block.  @ref{Conditional Construct
4161 Symbols}.
4162 @item statement-case-intro
4163 The first line in a case block.  @ref{Switch Statement Symbols}.
4164 @item statement-case-open
4165 The first line in a case block that starts with a brace.  @ref{Switch
4166 Statement Symbols}.
4167 @item substatement
4168 The first line after a conditional or loop construct.
4169 @ref{Conditional Construct Symbols}.
4170 @item substatement-open
4171 The brace that opens a substatement block.  @ref{Conditional Construct
4172 Symbols}.
4173 @item substatement-label
4174 The first line after a conditional or loop construct if it's a label.
4175 @ref{Conditional Construct Symbols}.
4176 @item case-label
4177 A label in a @code{switch} block.  @ref{Switch Statement Symbols}.
4178 @item access-label
4179 C++ access control label.  @ref{Class Symbols}.
4180 @item label
4181 Any other label.  @ref{Literal Symbols}.
4182 @item do-while-closure
4183 The @code{while} line that ends a @code{do}-@code{while} construct.
4184 @ref{Conditional Construct Symbols}.
4185 @item else-clause
4186 The @code{else} line of an @code{if}-@code{else} construct.
4187 @ref{Conditional Construct Symbols}.
4188 @item catch-clause
4189 The @code{catch} or @code{finally} (in Java) line of a
4190 @code{try}-@code{catch} construct.  @ref{Conditional Construct
4191 Symbols}.
4192 @item comment-intro
4193 A line containing only a comment introduction.  @ref{Literal Symbols}.
4194 @item arglist-intro
4195 The first line in an argument list.  @ref{Paren List Symbols}.
4196 @item arglist-cont
4197 Subsequent argument list lines when no arguments follow on the same
4198 line as the arglist opening paren.  @ref{Paren List Symbols}.
4199 @item arglist-cont-nonempty
4200 Subsequent argument list lines when at least one argument follows on
4201 the same line as the arglist opening paren.  @ref{Paren List Symbols}.
4202 @item arglist-close
4203 The solo close paren of an argument list.  @ref{Paren List Symbols}.
4204 @item stream-op
4205 Lines continuing a stream operator (C++ only).  @ref{Literal
4206 Symbols}. @c @emph{FIXME!!!  Can this not be moved somewhere better?}
4207 @item inclass
4208 The line is nested inside a class definition.  @ref{Class Symbols}.
4209 @item cpp-macro
4210 The start of a preprocessor macro definition.  @ref{Literal Symbols}.
4211 @item cpp-define-intro
4212 The first line inside a multiline preprocessor macro if
4213 @code{c-syntactic-indentation-in-macros} is set.  @ref{Multiline Macro
4214 Symbols}.
4215 @item cpp-macro-cont
4216 All lines inside multiline preprocessor macros if
4217 @code{c-syntactic-indentation-in-macros} is @code{nil}.
4218 @ref{Multiline Macro Symbols}.
4219 @item friend
4220 A C++ friend declaration.  @ref{Class Symbols}.
4221 @item objc-method-intro
4222 The first line of an Objective-C method definition.  @ref{Objective-C
4223 Method Symbols}.
4224 @item objc-method-args-cont
4225 Lines continuing an Objective-C method definition.  @ref{Objective-C
4226 Method Symbols}.
4227 @item objc-method-call-cont
4228 Lines continuing an Objective-C method call.  @ref{Objective-C Method
4229 Symbols}.
4230 @item extern-lang-open
4231 Brace that opens an @code{extern} block (e.g., @code{extern "C"
4232 @{...@}}).  @ref{External Scope Symbols}.
4233 @item extern-lang-close
4234 Brace that closes an @code{extern} block.  @ref{External Scope
4235 Symbols}.
4236 @item inextern-lang
4237 Analogous to @code{inclass} syntactic symbol, but used inside
4238 @code{extern} blocks.  @ref{External Scope Symbols}.
4239 @item namespace-open
4240 @itemx namespace-close
4241 @itemx innamespace
4242 These are analogous to the three @code{extern-lang} symbols above, but
4243 are returned for C++ namespace blocks.  @ref{External Scope Symbols}.
4244 @item module-open
4245 @itemx module-close
4246 @itemx inmodule
4247 Analogous to the above, but for CORBA IDL @code{module} blocks.
4248 @ref{External Scope Symbols}.
4249 @item composition-open
4250 @itemx composition-close
4251 @itemx incomposition
4252 Analogous to the above, but for CORBA CIDL @code{composition} blocks.
4253 @ref{External Scope Symbols}.
4254 @item template-args-cont
4255 C++ template argument list continuations.  @ref{Class Symbols}.
4256 @item inlambda
4257 Analogous to @code{inclass} syntactic symbol, but used inside lambda
4258 (i.e., anonymous) functions.  Only used in Pike mode.  @ref{Statement
4259 Block Symbols}.
4260 @item lambda-intro-cont
4261 Lines continuing the header of a lambda function, i.e., between the
4262 @code{lambda} keyword and the function body.  Only used in Pike mode.
4263 @ref{Statement Block Symbols}.
4264 @item inexpr-statement
4265 A statement block inside an expression.  The gcc C and C++ extension
4266 for this is recognized.  It's also used for the special functions that
4267 take a statement block as an argument in Pike.  @ref{Statement Block
4268 Symbols}.
4269 @item inexpr-class
4270 A class definition inside an expression.  This is used for anonymous
4271 classes in Java.  It's also used for anonymous array initializers in
4272 Java.  @ref{Java Symbols}.
4273 @end table
4275 @menu
4276 * Function Symbols::
4277 * Class Symbols::
4278 * Conditional Construct Symbols::
4279 * Switch Statement Symbols::
4280 * Brace List Symbols::
4281 * External Scope Symbols::
4282 * Paren List Symbols::
4283 * Literal Symbols::
4284 * Multiline Macro Symbols::
4285 * Objective-C Method Symbols::
4286 * Java Symbols::
4287 * Statement Block Symbols::
4288 * K&R Symbols::
4289 @end menu
4291 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4292 @node    Function Symbols, Class Symbols, Syntactic Symbols, Syntactic Symbols
4293 @comment node-name, next, previous, up
4294 @subsection Function Symbols
4295 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4297 This example shows a typical function declaration.
4299 @example
4300  1: void
4301  2: swap( int& a, int& b )
4302  3: @{
4303  4:     int tmp = a;
4304  5:     a = b;
4305  6:     b = tmp;
4306  7:     int ignored =
4307  8:         a + b;
4308  9: @}
4309 @end example
4311 @ssindex topmost-intro
4312 @ssindex topmost-intro-cont
4313 @ssindex defun-open
4314 @ssindex defun-close
4315 @ssindex defun-block-intro
4316 Line 1 shows a @code{topmost-intro} since it is the first line that
4317 introduces a top-level construct.  Line 2 is a continuation of the
4318 top-level construct introduction so it has the syntax
4319 @code{topmost-intro-cont}.  Line 3 shows a @code{defun-open} since it is
4320 the brace that opens a top-level function definition.  Line 9 is the
4321 corresponding
4322 @code{defun-close} since it contains the brace that closes the top-level
4323 function definition.  Line 4 is a @code{defun-block-intro}, i.e., it is
4324 the first line of a brace-block, enclosed in a
4325 top-level function definition.
4327 @ssindex statement
4328 @ssindex statement-cont
4329 Lines 5, 6, and 7 are all given @code{statement} syntax since there
4330 isn't much special about them.  Note however that line 8 is given
4331 @code{statement-cont} syntax since it continues the statement begun
4332 on the previous line.
4334 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4335 @node    Class Symbols, Conditional Construct Symbols, Function Symbols, Syntactic Symbols
4336 @comment node-name, next, previous, up
4337 @subsection Class related Symbols
4338 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4340 Here's an example which illustrates some C++ class syntactic symbols:
4342 @example
4343  1: class Bass
4344  2:     : public Guitar,
4345  3:       public Amplifiable
4346  4: @{
4347  5: public:
4348  6:     Bass()
4349  7:         : eString( new BassString( 0.105 )),
4350  8:           aString( new BassString( 0.085 )),
4351  9:           dString( new BassString( 0.065 )),
4352 10:           gString( new BassString( 0.045 ))
4353 11:     @{
4354 12:         eString.tune( 'E' );
4355 13:         aString.tune( 'A' );
4356 14:         dString.tune( 'D' );
4357 15:         gString.tune( 'G' );
4358 16:     @}
4359 17:     friend class Luthier;
4360 18: @};
4361 @end example
4363 @ssindex class-open
4364 @ssindex class-close
4365 As in the previous example, line 1 has the @code{topmost-intro} syntax.
4366 Here however, the brace that opens a C++ class definition on line 4 is
4367 assigned the @code{class-open} syntax.  Note that in C++, classes,
4368 structs, and unions are essentially equivalent syntactically (and are
4369 very similar semantically), so replacing the @code{class} keyword in the
4370 example above with @code{struct} or @code{union} would still result in a
4371 syntax of @code{class-open} for line 4 @footnote{This is the case even
4372 for C and Objective-C@.  For consistency, structs in all supported
4373 languages are syntactically equivalent to classes.  Note however that
4374 the keyword @code{class} is meaningless in C and Objective-C.}.
4375 Similarly, line 18 is assigned @code{class-close} syntax.
4377 @ssindex inher-intro
4378 @ssindex inher-cont
4379 Line 2 introduces the inheritance list for the class so it is assigned
4380 the @code{inher-intro} syntax, and line 3, which continues the
4381 inheritance list is given @code{inher-cont} syntax.
4383 @ssindex access-label
4384 @ssindex inclass
4385 Hitting @kbd{C-c C-s} on line 5 shows the following analysis:
4387 @example
4388 ((inclass 58) (access-label 58))
4389 @end example
4391 @noindent
4392 The primary syntactic symbol for this line is @code{access-label} as
4393 this is a label keyword that specifies access protection in C++.  However,
4394 because this line is also a top-level construct inside a class
4395 definition, the analysis actually shows two syntactic symbols.  The
4396 other syntactic symbol assigned to this line is @code{inclass}.
4397 Similarly, line 6 is given both @code{inclass} and @code{topmost-intro}
4398 syntax:
4400 @example
4401 ((inclass 58) (topmost-intro 60))
4402 @end example
4404 @ssindex member-init-intro
4405 @ssindex member-init-cont
4406 Line 7 introduces a C++ member initialization list and as such is given
4407 @code{member-init-intro} syntax.  Note that in this case it is
4408 @emph{not} assigned @code{inclass} since this is not considered a
4409 top-level construct.  Lines 8 through 10 are all assigned
4410 @code{member-init-cont} since they continue the member initialization
4411 list started on line 7.
4413 @cindex in-class inline methods
4414 @ssindex inline-open
4415 @ssindex inline-close
4416 Line 11's analysis is a bit more complicated:
4418 @example
4419 ((inclass 58) (inline-open))
4420 @end example
4422 This line is assigned a syntax of both @code{inline-open} and
4423 @code{inclass} because it opens an @dfn{in-class} C++ inline method
4424 definition.  This is distinct from, but related to, the C++ notion of an
4425 inline function in that its definition occurs inside an enclosing class
4426 definition, which in C++ implies that the function should be inlined.
4427 However, if the definition of the @code{Bass} constructor appeared
4428 outside the class definition, the construct would be given the
4429 @code{defun-open} syntax, even if the keyword @code{inline} appeared
4430 before the method name, as in:
4432 @example
4433  1: class Bass
4434  2:     : public Guitar,
4435  3:       public Amplifiable
4436  4: @{
4437  5: public:
4438  6:     Bass();
4439  7: @};
4440  8:
4441  9: inline
4442 10: Bass::Bass()
4443 11:     : eString( new BassString( 0.105 )),
4444 12:       aString( new BassString( 0.085 )),
4445 13:       dString( new BassString( 0.065 )),
4446 14:       gString( new BassString( 0.045 ))
4447 15: @{
4448 16:     eString.tune( 'E' );
4449 17:     aString.tune( 'A' );
4450 18:     dString.tune( 'D' );
4451 19:     gString.tune( 'G' );
4452 20: @}
4453 @end example
4455 @ssindex friend
4456 Returning to the previous example, line 16 is given @code{inline-close}
4457 syntax, while line 12 is given @code{defun-block-open} syntax, and lines
4458 13 through 15 are all given @code{statement} syntax.  Line 17 is
4459 interesting in that its syntactic analysis list contains three
4460 elements:
4462 @example
4463 ((inclass 58) (topmost-intro 380) (friend))
4464 @end example
4466 The @code{friend} and @code{inline-open} syntactic symbols are
4467 modifiers that do not have anchor positions.
4469 @ssindex template-args-cont
4470 Template definitions introduce yet another syntactic symbol:
4472 @example
4473  1: ThingManager <int,
4474  2:    Framework::Callback *,
4475  3:    Mutex> framework_callbacks;
4476 @end example
4478 Here, line 1 is analyzed as a @code{topmost-intro}, but lines 2 and 3
4479 are both analyzed as @code{template-args-cont} lines.
4481 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4482 @node    Conditional Construct Symbols, Switch Statement Symbols, Class Symbols, Syntactic Symbols
4483 @comment node-name, next, previous, up
4484 @subsection Conditional Construct Symbols
4485 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4487 Here is a (totally contrived) example which illustrates how syntax is
4488 assigned to various conditional constructs:
4490 @example
4491  1: void spam( int index )
4492  2: @{
4493  3:     for( int i=0; i<index; i++ )
4494  4:     @{
4495  5:         if( i == 10 )
4496  6:             do_something_special();
4497  7:         else
4498  8:           silly_label:
4499  9:             do_something( i );
4500 10:     @}
4501 11:     do @{
4502 12:         another_thing( i-- );
4503 13:     @}
4504 14:     while( i > 0 );
4505 15: @}
4506 @end example
4508 Only the lines that illustrate new syntactic symbols will be discussed.
4510 @ssindex substatement-open
4511 @ssindex statement-block-intro
4512 @ssindex block-close
4513 Line 4 has a brace which opens a conditional's substatement block.  It
4514 is thus assigned @code{substatement-open} syntax, and since line 5 is
4515 the first line in the substatement block, it is assigned
4516 @code{statement-block-intro} syntax.  Line 10 contains the brace
4517 that closes the inner substatement block, and is therefore given the
4518 syntax @code{block-close}@footnote{@code{block-open} is used only for
4519 ``free-standing'' blocks, and is somewhat rare (@pxref{Literal
4520 Symbols} for an example.)}.  Line 13 is treated the same way.
4522 @ssindex substatement
4523 Lines 6 and 9 are also substatements of conditionals, but since they
4524 don't start blocks they are given @code{substatement} syntax
4525 instead of @code{substatement-open}.
4527 @ssindex substatement-label
4528 Line 8 contains a label, which is normally given @code{label} syntax.
4529 This one is however a bit special since it's between a conditional and
4530 its substatement.  It's analyzed as @code{substatement-label} to let you
4531 handle this rather odd case differently from normal labels.
4533 @ssindex else-clause
4534 @ssindex catch-clause
4535 Line 7 start with an @code{else} that matches the @code{if} statement on
4536 line 5.  It is therefore given the @code{else-clause} syntax and is
4537 anchored on the matching @code{if}.  The @code{try}-@code{catch}
4538 constructs in C++ and Java are treated this way too, except that
4539 @code{catch} and (in Java) @code{finally}, are marked with
4540 @code{catch-clause}.
4542 @ssindex do-while-closure
4543 The @code{while} construct on line 14 that closes a @code{do}
4544 conditional is given the special syntax @code{do-while-closure} if it
4545 appears on a line by itself.  Note that if the @code{while} appeared on
4546 the same line as the preceding close brace, that line would still have
4547 @code{block-close} syntax.
4549 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4550 @node    Switch Statement Symbols, Brace List Symbols, Conditional Construct Symbols, Syntactic Symbols
4551 @comment node-name, next, previous, up
4552 @subsection Switch Statement Symbols
4553 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4555 Switch statements have their own set of syntactic symbols.  Here's an
4556 example:
4558 @example
4559  1: void spam( enum Ingredient i )
4560  2: @{
4561  3:     switch( i ) @{
4562  4:     case Ham:
4563  5:         be_a_pig();
4564  6:         break;
4565  7:     case Salt:
4566  8:         drink_some_water();
4567  9:         break;
4568 10:     default:
4569 11:         @{
4570 12:             what_is_it();
4571 13:             break;
4572 14:         @}
4573 15:     @}
4574 14: @}
4575 @end example
4577 @ssindex case-label
4578 @ssindex statement-case-intro
4579 @ssindex statement-case-open
4580 Here, lines 4, 7, and 10 are all assigned @code{case-label} syntax,
4581 while lines 5 and 8 are assigned @code{statement-case-intro}.  Line 11
4582 is treated slightly differently since it contains a brace that opens a
4583 block; it is given @code{statement-case-open} syntax.
4585 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4586 @node    Brace List Symbols, External Scope Symbols, Switch Statement Symbols, Syntactic Symbols
4587 @comment node-name, next, previous, up
4588 @subsection Brace List Symbols
4589 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4591 @cindex brace lists
4592 There are a set of syntactic symbols that are used to recognize
4593 constructs inside of brace lists.  A brace list is defined as an
4594 @code{enum} or aggregate initializer list, such as might statically
4595 initialize an array of structs.  The three special aggregate constructs
4596 in Pike, @code{(@{ @})}, @code{([ ])} and @code{(< >)}, are treated as
4597 brace lists too.  An example:
4599 @example
4600  1: static char* ingredients[] =
4601  2: @{
4602  3:     "Ham",
4603  4:     "Salt",
4604  5:     NULL
4605  6: @};
4606 @end example
4608 @ssindex brace-list-open
4609 @ssindex brace-list-intro
4610 @ssindex brace-list-close
4611 @ssindex brace-list-entry
4612 Following convention, line 2 in this example is assigned
4613 @code{brace-list-open} syntax, and line 3 is assigned
4614 @code{brace-list-intro} syntax.  Likewise, line 6 is assigned
4615 @code{brace-list-close} syntax.  Lines 4 and 5 however, are assigned
4616 @code{brace-list-entry} syntax, as would all subsequent lines in this
4617 initializer list.
4619 @ssindex brace-entry-open
4620 Your static initializer might be initializing nested structures, for
4621 example:
4623 @example
4624  1: struct intpairs[] =
4625  2: @{
4626  3:     @{ 1, 2 @},
4627  4:     @{
4628  5:         3,
4629  6:         4
4630  7:     @}
4631  8:     @{ 1,
4632  9:       2 @},
4633 10:     @{ 3, 4 @}
4634 11: @};
4635 @end example
4637 Here, you've already seen the analysis of lines 1, 2, 3, and 11.  On
4638 line 4, things get interesting; this line is assigned
4639 @code{brace-entry-open} syntactic symbol because it's a bracelist
4640 entry line that starts with an open brace.  Lines 5 and 6 are pretty
4641 standard, and line 7 is a @code{brace-list-close} as you'd expect.
4642 Once again, line 8 is assigned as @code{brace-entry-open} as is line
4643 10.  Line 9 is assigned two syntactic elements, @code{brace-list-intro}
4644 with anchor point at the @samp{@{} of line 8@footnote{This extra
4645 syntactic element was introduced in @ccmode{} 5.33.1 to allow extra
4646 flexibility in indenting the second line of such a construct.  You can
4647 preserve the behaviour resulting from the former syntactic analysis by
4648 giving @code{brace-list-entry} an offset of
4649 @code{c-lineup-under-anchor} (@pxref{Misc Line-Up}).}, and
4650 @code{brace-list-entry} anchored on the @samp{1} of line 8.
4652 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4653 @node    External Scope Symbols, Paren List Symbols, Brace List Symbols, Syntactic Symbols
4654 @comment node-name, next, previous, up
4655 @subsection External Scope Symbols
4656 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4658 External language definition blocks also have their own syntactic
4659 symbols.  In this example:
4661 @example
4662  1: extern "C"
4663  2: @{
4664  3:     int thing_one( int );
4665  4:     int thing_two( double );
4666  5: @}
4667 @end example
4669 @ssindex extern-lang-open
4670 @ssindex extern-lang-close
4671 @ssindex inextern-lang
4672 @ssindex inclass
4673 @noindent
4674 line 2 is given the @code{extern-lang-open} syntax, while line 5 is given
4675 the @code{extern-lang-close} syntax.  The analysis for line 3 yields:
4677 @example
4678 ((inextern-lang) (topmost-intro 14))
4679 @end example
4681 @noindent
4682 where @code{inextern-lang} is a modifier similar in purpose to
4683 @code{inclass}.
4685 There are various other top level blocks like @code{extern}, and they
4686 are all treated in the same way except that the symbols are named after
4687 the keyword that introduces the block.  E.g., C++ namespace blocks get
4688 the three symbols @code{namespace-open}, @code{namespace-close} and
4689 @code{innamespace}.  The currently recognized top level blocks are:
4691 @table @asis
4692 @item @code{extern-lang-open}, @code{extern-lang-close}, @code{inextern-lang}
4693 @code{extern} blocks in C and C++.@footnote{These should logically be
4694 named @code{extern-open}, @code{extern-close} and @code{inextern}, but
4695 that isn't the case for historical reasons.}
4697 @item @code{namespace-open}, @code{namespace-close}, @code{innamespace}
4698 @ssindex namespace-open
4699 @ssindex namespace-close
4700 @ssindex innamespace
4701 @code{namespace} blocks in C++.
4703 @item @code{module-open}, @code{module-close}, @code{inmodule}
4704 @ssindex module-open
4705 @ssindex module-close
4706 @ssindex inmodule
4707 @code{module} blocks in CORBA IDL.
4709 @item @code{composition-open}, @code{composition-close}, @code{incomposition}
4710 @ssindex composition-open
4711 @ssindex composition-close
4712 @ssindex incomposition
4713 @code{composition} blocks in CORBA CIDL.
4714 @end table
4716 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4717 @node    Paren List Symbols, Literal Symbols, External Scope Symbols, Syntactic Symbols
4718 @comment node-name, next, previous, up
4719 @subsection Parenthesis (Argument) List Symbols
4720 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4722 A number of syntactic symbols are associated with parenthesis lists,
4723 a.k.a argument lists, as found in function declarations and function
4724 calls.  This example illustrates these:
4726 @example
4727  1: void a_function( int line1,
4728  2:                  int line2 );
4729  3:
4730  4: void a_longer_function(
4731  5:     int line1,
4732  6:     int line2
4733  7:     );
4734  8:
4735  9: void call_them( int line1, int line2 )
4736 10: @{
4737 11:     a_function(
4738 12:         line1,
4739 13:         line2
4740 14:         );
4742 16:     a_longer_function( line1,
4743 17:                        line2 );
4744 18: @}
4745 @end example
4747 @ssindex arglist-intro
4748 @ssindex arglist-close
4749 Lines 5 and 12 are assigned @code{arglist-intro} syntax since they are
4750 the first line following the open parenthesis, and lines 7 and 14 are
4751 assigned @code{arglist-close} syntax since they contain the parenthesis
4752 that closes the argument list.
4754 @ssindex arglist-cont-nonempty
4755 @ssindex arglist-cont
4756 Lines that continue argument lists can be assigned one of two syntactic
4757 symbols.  For example, Lines 2 and 17
4758 are assigned @code{arglist-cont-nonempty} syntax.  What this means
4759 is that they continue an argument list, but that the line containing the
4760 parenthesis that opens the list is @emph{not empty} following the open
4761 parenthesis.  Contrast this against lines 6 and 13 which are assigned
4762 @code{arglist-cont} syntax.  This is because the parenthesis that opens
4763 their argument lists is the last character on that line.
4765 Syntactic elements with @code{arglist-intro},
4766 @code{arglist-cont-nonempty}, and @code{arglist-close} contain two
4767 buffer positions: the anchor position (the beginning of the
4768 declaration or statement) and the position of the open parenthesis.
4769 The latter position can be used in a line-up function (@pxref{Line-Up
4770 Functions}).
4772 Note that there is no @code{arglist-open} syntax.  This is because any
4773 parenthesis that opens an argument list, appearing on a separate line,
4774 is assigned the @code{statement-cont} syntax instead.
4776 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4777 @node    Literal Symbols, Multiline Macro Symbols, Paren List Symbols, Syntactic Symbols
4778 @comment node-name, next, previous, up
4779 @subsection Comment String Label and Macro Symbols
4780 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4782 A few miscellaneous syntactic symbols that haven't been previously
4783 covered are illustrated by this C++ example:
4785 @example
4786  1: void Bass::play( int volume )
4787  2: const
4788  3: @{
4789  4:     /* this line starts a multiline
4790  5:      * comment.  This line should get 'c' syntax */
4791  6:
4792  7:     char* a_multiline_string = "This line starts a multiline \
4793  8: string.  This line should get 'string' syntax.";
4794  9:
4795 10:   note:
4796 11:     @{
4797 12: #ifdef LOCK
4798 13:         Lock acquire();
4799 14: #endif // LOCK
4800 15:         slap_pop();
4801 16:         cout << "I played "
4802 17:              << "a note\n";
4803 18:     @}
4804 19: @}
4805 @end example
4807 The lines to note in this example include:
4809 @itemize @bullet
4810 @item
4811 @ssindex func-decl-cont
4812 Line 2 is assigned the @code{func-decl-cont} syntax.
4814 @item
4815 @ssindex comment-intro
4816 Line 4 is assigned both @code{defun-block-intro} @emph{and}
4817 @code{comment-intro} syntax.  A syntactic element with
4818 @code{comment-intro} has no anchor point.  It is always accompanied
4819 by another syntactic element which does have one.
4821 @item
4822 @ssindex c
4823 Line 5 is assigned @code{c} syntax.
4825 @item
4826 @cindex syntactic whitespace
4827 Line 6 which, even though it contains nothing but whitespace, is
4828 assigned @code{defun-block-intro}.  Note that the appearance of the
4829 comment on lines 4 and 5 do not cause line 6 to be assigned
4830 @code{statement} syntax because comments are considered to be
4831 @dfn{syntactic whitespace}, which are ignored when analyzing
4832 code.
4834 @item
4835 @ssindex string
4836 Line 8 is assigned @code{string} syntax.
4838 @item
4839 @ssindex label
4840 Line 10 is assigned @code{label} syntax.
4842 @item
4843 @ssindex block-open
4844 Line 11 is assigned @code{block-open} as well as @code{statement}
4845 syntax.  A @code{block-open} syntactic element doesn't have an anchor
4846 position, since it always appears with another syntactic element which
4847 does have one.
4849 @item
4850 @ssindex cpp-macro
4851 Lines 12 and 14 are assigned @code{cpp-macro} syntax in addition to the
4852 normal syntactic symbols (@code{statement-block-intro} and
4853 @code{statement}, respectively).  Normally @code{cpp-macro} is
4854 configured to cancel out the normal syntactic context to make all
4855 preprocessor directives stick to the first column, but that's easily
4856 changed if you want preprocessor directives to be indented like the rest
4857 of the code.  Like @code{comment-intro}, a syntactic element with
4858 @code{cpp-macro} doesn't contain an anchor position.
4860 @item
4861 @ssindex stream-op
4862 Line 17 is assigned @code{stream-op} syntax.
4863 @end itemize
4865 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4866 @node    Multiline Macro Symbols, Objective-C Method Symbols, Literal Symbols, Syntactic Symbols
4867 @comment node-name, next, previous, up
4868 @subsection Multiline Macro Symbols
4869 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4871 @cindex multiline macros
4872 @cindex syntactic whitespace
4873 @ssindex cpp-define-intro
4874 @ssindex cpp-macro-cont
4875 Multiline preprocessor macro definitions are normally handled just like
4876 other code, i.e., the lines inside them are indented according to the
4877 syntactic analysis of the preceding lines inside the macro.  The first
4878 line inside a macro definition (i.e., the line after the starting line of
4879 the cpp directive itself) gets @code{cpp-define-intro}.  In this example:
4881 @example
4882  1: #define LIST_LOOP(cons, listp)                         \
4883  2:   for (cons = listp; !NILP (cons); cons = XCDR (cons)) \
4884  3:     if (!CONSP (cons))                                 \
4885  4:       signal_error ("Invalid list format", listp);     \
4886  5:     else
4887 @end example
4889 @noindent
4890 line 1 is given the syntactic symbol @code{cpp-macro}.  The first line
4891 of a cpp directive is always given that symbol.  Line 2 is given
4892 @code{cpp-define-intro}, so that you can give the macro body as a whole
4893 some extra indentation.  Lines 3 through 5 are then analyzed as normal
4894 code, i.e., @code{substatement} on lines 3 and 4, and @code{else-clause}
4895 on line 5.
4897 The syntactic analysis inside macros can be turned off with
4898 @code{c-syntactic-indentation-in-macros} (@pxref{Custom Macros}).  In
4899 that case, lines 2 through 5 would all be given @code{cpp-macro-cont}
4900 with an anchor position pointing to the @code{#} which starts the cpp
4901 directive@footnote{This is how @ccmode{} 5.28 and earlier analyzed
4902 macros.}.
4904 @xref{Custom Macros}, for more info about the treatment of macros.
4906 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4907 @node    Objective-C Method Symbols, Java Symbols, Multiline Macro Symbols, Syntactic Symbols
4908 @comment node-name, next, previous, up
4909 @subsection Objective-C Method Symbols
4910 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4912 In Objective-C buffers, there are three additional syntactic symbols
4913 assigned to various message calling constructs.  Here's an example
4914 illustrating these:
4916 @example
4917  1: - (void)setDelegate:anObject
4918  2:           withStuff:stuff
4919  3: @{
4920  4:     [delegate masterWillRebind:self
4921  5:               toDelegate:anObject
4922  6:               withExtraStuff:stuff];
4923  7: @}
4924 @end example
4926 @ssindex objc-method-intro
4927 @ssindex objc-method-args-cont
4928 @ssindex objc-method-call-cont
4929 Here, line 1 is assigned @code{objc-method-intro} syntax, and line 2 is
4930 assigned @code{objc-method-args-cont} syntax.  Lines 5 and 6 are both
4931 assigned @code{objc-method-call-cont} syntax.
4933 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4934 @node    Java Symbols, Statement Block Symbols, Objective-C Method Symbols, Syntactic Symbols
4935 @comment node-name, next, previous, up
4936 @subsection Java Symbols
4937 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4939 Java has a concept of anonymous classes which can look something like
4940 this:
4942 @example
4943  1:  @@Test
4944  2:  public void watch(Observable o) @{
4945  3:      @@NonNull
4946  4:      Observer obs = new Observer() @{
4947  5:          public void update(Observable o, Object arg) @{
4948  6:              history.addElement(arg);
4949  7:          @}
4950  8:      @};
4951  9:      o.addObserver(obs);
4952  10: @}
4953 @end example
4955 @ssindex inexpr-class
4956 The brace following the @code{new} operator opens the anonymous class.
4957 Lines 5 and 8 are assigned the @code{inexpr-class} syntax, besides the
4958 @code{inclass} symbol used in normal classes.  Thus, the class will be
4959 indented just like a normal class, with the added indentation given to
4960 @code{inexpr-class}.  An @code{inexpr-class} syntactic element doesn't
4961 have an anchor position.
4963 @ssindex annotation-top-cont
4964 @ssindex annotation-var-cont
4965 Line 2 is assigned the @code{annotation-top-cont} syntax, due to it being a
4966 continuation of a topmost introduction with an annotation symbol preceding
4967 the current line.  Similarly, line 4 is assigned the @code{annotation-var-cont}
4968 syntax due to it being a continuation of a variable declaration where preceding
4969 the declaration is an annotation.
4971 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4972 @node    Statement Block Symbols, K&R Symbols, Java Symbols, Syntactic Symbols
4973 @comment node-name, next, previous, up
4974 @subsection Statement Block Symbols
4975 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4977 There are a few occasions where a statement block might be used inside
4978 an expression.  One is in C or C++ code using the gcc extension for
4979 this, e.g.:
4981 @example
4982  1: int res = (@{
4983  2:         int y = foo (); int z;
4984  3:         if (y > 0) z = y; else z = - y;
4985  4:         z;
4986  5:     @});
4987 @end example
4989 @ssindex inexpr-statement
4990 Lines 2 and 5 get the @code{inexpr-statement} syntax, besides the
4991 symbols they'd get in a normal block.  Therefore, the indentation put on
4992 @code{inexpr-statement} is added to the normal statement block
4993 indentation.  An @code{inexpr-statement} syntactic element doesn't
4994 contain an anchor position.
4996 In Pike code, there are a few other situations where blocks occur inside
4997 statements, as illustrated here:
4999 @example
5000  1: array itgob()
5001  2: @{
5002  3:     string s = map (backtrace()[-2][3..],
5003  4:                     lambda
5004  5:                         (mixed arg)
5005  6:                     @{
5006  7:                         return sprintf ("%t", arg);
5007  8:                     @}) * ", " + "\n";
5008  9:     return catch @{
5009 10:             write (s + "\n");
5010 11:         @};
5011 12: @}
5012 @end example
5014 @ssindex inlambda
5015 @ssindex lambda-intro-cont
5016 Lines 4 through 8 contain a lambda function, which @ccmode{} recognizes
5017 by the @code{lambda} keyword.  If the function argument list is put
5018 on a line of its own, as in line 5, it gets the @code{lambda-intro-cont}
5019 syntax.  The function body is handled as an inline method body, with the
5020 addition of the @code{inlambda} syntactic symbol.  This means that line
5021 6 gets @code{inlambda} and @code{inline-open}, and line 8 gets
5022 @code{inline-close}@footnote{You might wonder why it doesn't get
5023 @code{inlambda} too.  It's because the closing brace is relative to the
5024 opening brace, which stands on its own line in this example.  If the
5025 opening brace was hanging on the previous line, then the closing brace
5026 would get the @code{inlambda} syntax too to be indented correctly.}.
5028 @ssindex inexpr-statement
5029 On line 9, @code{catch} is a special function taking a statement block
5030 as its argument.  The block is handled as an in-expression statement
5031 with the @code{inexpr-statement} syntax, just like the gcc extended C
5032 example above.  The other similar special function, @code{gauge}, is
5033 handled like this too.
5035 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5036 @node    K&R Symbols,  , Statement Block Symbols, Syntactic Symbols
5037 @comment node-name, next, previous, up
5038 @subsection K&R Symbols
5039 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5041 @ssindex knr-argdecl-intro
5042 @ssindex knr-argdecl
5043 Two other syntactic symbols can appear in old style, non-prototyped C
5044 code @footnote{a.k.a.@: K&R C, or Kernighan & Ritchie C}:
5046 @example
5047  1: int add_three_integers(a, b, c)
5048  2:      int a;
5049  3:      int b;
5050  4:      int c;
5051  5: @{
5052  6:     return a + b + c;
5053  7: @}
5054 @end example
5056 Here, line 2 is the first line in an argument declaration list and so is
5057 given the @code{knr-argdecl-intro} syntactic symbol.  Subsequent lines
5058 (i.e., lines 3 and 4 in this example), are given @code{knr-argdecl}
5059 syntax.
5062 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5063 @node    Indentation Calculation,  , Syntactic Symbols, Indentation Engine Basics
5064 @comment node-name, next, previous, up
5065 @section Indentation Calculation
5066 @cindex indentation
5067 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5069 Indentation for a line is calculated from the syntactic context
5070 (@pxref{Syntactic Analysis}).
5072 First, a buffer position is found whose column will be the base for the
5073 indentation calculation.  It's the anchor position in the first
5074 syntactic element that provides one that is used.  If no syntactic
5075 element has an anchor position then column zero is used.
5077 Second, the syntactic symbols in each syntactic element are looked up
5078 in the @code{c-offsets-alist} style variable
5079 (@pxref{c-offsets-alist}), which is an association list of syntactic
5080 symbols and the offsets to apply for those symbols.  These offsets are
5081 added together with the base column to produce the new indentation
5082 column.
5084 Let's use our two code examples above to see how this works.  Here is
5085 our first example again:
5087 @example
5088  1: void swap( int& a, int& b )
5089  2: @{
5090  3:     int tmp = a;
5091  4:     a = b;
5092  5:     b = tmp;
5093  6: @}
5094 @end example
5096 Let's say point is on line 3 and we hit the @key{TAB} key to reindent
5097 the line.  The syntactic context for that line is:
5099 @example
5100 ((defun-block-intro 29))
5101 @end example
5103 @noindent
5104 Since buffer position 29 is the first and only anchor position in the
5105 list, @ccmode{} goes there and asks for the current column.  This brace
5106 is in column zero, so @ccmode{} uses @samp{0} as the base column.
5108 Next, @ccmode{} looks up @code{defun-block-intro} in the
5109 @code{c-offsets-alist} style variable.  Let's say it finds the value
5110 @samp{4}; it adds this to the base column @samp{0}, yielding a running
5111 total indentation of 4 spaces.
5113 Since there is only one syntactic element on the list for this line,
5114 indentation calculation is complete, and the total indentation for the
5115 line is 4 spaces.
5117 Here's another example:
5119 @example
5120  1: int add( int val, int incr, int doit )
5121  2: @{
5122  3:     if( doit )
5123  4:         @{
5124  5:             return( val + incr );
5125  6:         @}
5126  7:     return( val );
5127  8: @}
5128 @end example
5130 If we were to hit @kbd{TAB} on line 4 in the above example, the same
5131 basic process is performed, despite the differences in the syntactic
5132 context.  The context for this line is:
5134 @example
5135 ((substatement-open 46))
5136 @end example
5138 Here, @ccmode{} goes to buffer position 46, which is the @samp{i} in
5139 @code{if} on line 3.  This character is in the fourth column on that
5140 line so the base column is @samp{4}.  Then @ccmode{} looks up the
5141 @code{substatement-open} symbol in @code{c-offsets-alist}.  Let's say it
5142 finds the value @samp{4}.  It's added with the base column and yields an
5143 indentation for the line of 8 spaces.
5145 Simple, huh?
5147 Actually, it's a bit more complicated than that since the entries on
5148 @code{c-offsets-alist} can be much more than plain offsets.
5149 @xref{c-offsets-alist}, for the full story.
5151 Anyway, the mode usually just does The Right Thing without you having to
5152 think about it in this much detail.  But when customizing indentation,
5153 it's helpful to understand the general indentation model being used.
5155 As you configure @ccmode{}, you might want to set the variable
5156 @code{c-echo-syntactic-information-p} to non-@code{nil} so that the
5157 syntactic context and calculated offset always is echoed in the
5158 minibuffer when you hit @kbd{TAB}.
5161 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5162 @node    Customizing Indentation, Custom Macros, Indentation Engine Basics, Top
5163 @comment node-name, next, previous, up
5164 @chapter Customizing Indentation
5165 @cindex customization, indentation
5166 @cindex indentation
5167 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5169 The principal variable for customizing indentation is the style
5170 variable @code{c-offsets-alist}, which gives an @dfn{offset} (an
5171 indentation rule) for each syntactic symbol.  Its structure and
5172 semantics are completely described in @ref{c-offsets-alist}.  The
5173 various ways you can set the variable, including the use of the
5174 @ccmode{} style system, are described in @ref{Config Basics} and its
5175 sections, in particular @ref{Style Variables}.
5177 The simplest and most used kind of ``offset'' setting in
5178 @code{c-offsets-alist} is in terms of multiples of
5179 @code{c-basic-offset}:
5181 @defopt c-basic-offset
5182 @vindex basic-offset (c-)
5183 This style variable holds the basic offset between indentation levels.
5184 It's factory default is 4, but all the built-in styles set it
5185 themselves, to some value between 2 (for @code{gnu} style) and 8 (for
5186 @code{bsd}, @code{linux}, and @code{python} styles).
5187 @end defopt
5189 The most flexible ``offset'' setting you can make in
5190 @code{c-offsets-alist} is a line-up function (or even a list of them),
5191 either one supplied by @ccmode{} (@pxref{Line-Up Functions}) or one
5192 you write yourself (@pxref{Custom Line-Up}).
5194 Finally, in @ref{Other Indentation} you'll find the tool of last
5195 resort: a hook which is called after a line has been indented.  You
5196 can install functions here to make ad-hoc adjustments to any line's
5197 indentation.
5199 @menu
5200 * c-offsets-alist::
5201 * Interactive Customization::
5202 * Line-Up Functions::
5203 * Custom Line-Up::
5204 * Other Indentation::
5205 @end menu
5208 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5209 @node    c-offsets-alist, Interactive Customization, Customizing Indentation, Customizing Indentation
5210 @comment node-name, next, previous, up
5211 @section c-offsets-alist
5212 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5214 This section explains the structure and semantics of the style
5215 variable @code{c-offsets-alist}, the principal variable for configuring
5216 indentation.  Details of how to set it up, and its relationship to
5217 @ccmode{}'s style system are given in @ref{Style Variables}.
5219 @defopt c-offsets-alist
5220 @vindex offsets-alist (c-)
5221 This is an alist which associates an offset with each syntactic
5222 symbol.  This @dfn{offset} is a rule specifying how to indent a line
5223 whose syntactic context matches the symbol.  @xref{Syntactic
5224 Analysis}.
5226 Note that the buffer-local binding of this alist in a @ccmode{} buffer
5227 contains an entry for @emph{every} syntactic symbol.  Its global
5228 binding and its settings within style specifications usually contain
5229 only a few entries.  @xref{Style Variables}.
5231 The offset specification associated with any particular syntactic
5232 symbol can be an integer, a variable name, a vector, a function or
5233 lambda expression, a list, or one of the following special symbols:
5234 @code{+}, @code{-}, @code{++}, @code{--}, @code{*}, or @code{/}.  The
5235 meanings of these values are described in detail below.
5237 Here is an example fragment of a @code{c-offsets-alist}, showing some
5238 of these kinds of offsets:
5240 @example
5241 ((statement . 0)
5242  (substatement . +)
5243  (cpp-macro . [0])
5244  (topmost-intro-cont . c-lineup-topmost-intro-cont)
5245  (statement-block-intro . (add c-lineup-whitesmith-in-block
5246                                c-indent-multi-line-block))
5247  @dots{}
5249 @end example
5250 @end defopt
5252 @deffn Command c-set-offset (@kbd{C-c C-o})
5253 @findex set-offset (c-)
5254 @kindex C-c C-o
5255 This command changes the entry for a syntactic symbol in the current
5256 binding of @code{c-offsets-alist}, or it inserts a new entry if there
5257 isn't already one for that syntactic symbol.
5259 You can use @code{c-set-offset} interactively within a @ccmode{}
5260 buffer to make experimental changes to your indentation settings.
5261 @kbd{C-c C-o} prompts you for the syntactic symbol to change
5262 (defaulting to that of the current line) and the new offset
5263 (defaulting to the current offset).
5265 @code{c-set-offset} takes two arguments when used programmatically:
5266 @var{symbol}, the syntactic element symbol to change and @var{offset},
5267 the new offset for that syntactic element.  You can call the command
5268 in your @file{.emacs} to change the global binding of
5269 @code{c-offsets-alist} (@pxref{Style Variables}); you can use it in a
5270 hook function to make changes from the current style.  @ccmode{}
5271 itself uses this function when initializing styles.
5272 @end deffn
5274 @cindex offset specification
5275 The ``offset specifications'' in @code{c-offsets-alist} can be any of
5276 the following:
5278 @table @asis
5279 @item An integer
5280 The integer specifies a relative offset.  All relative
5281 offsets@footnote{The syntactic context @code{@w{((defun-block-intro
5282 2724) (comment-intro))}} would likely have two relative offsets.} will
5283 be added together and used to calculate the indentation relative to an
5284 anchor position earlier in the buffer.  @xref{Indentation
5285 Calculation}, for details.  Most of the time, it's probably better to
5286 use one of the special symbols like @code{+} than an integer (apart
5287 from zero).
5289 @item One of the symbols @code{+}, @code{-}, @code{++}, @code{--}, @code{*}, or @code{/}
5290 These special symbols describe a relative offset in multiples of
5291 @code{c-basic-offset}:
5293 By defining a style's indentation in terms of @code{c-basic-offset},
5294 you can change the amount of whitespace given to an indentation level
5295 while maintaining the same basic shape of your code.  Here are the
5296 values that the special symbols correspond to:
5298 @table @code
5299 @item +
5300 @code{c-basic-offset} times 1
5301 @item -
5302 @code{c-basic-offset} times @minus{}1
5303 @item ++
5304 @code{c-basic-offset} times 2
5305 @item --
5306 @code{c-basic-offset} times @minus{}2
5307 @item *
5308 @code{c-basic-offset} times 0.5
5309 @item /
5310 @code{c-basic-offset} times @minus{}0.5
5311 @end table
5313 @item A vector
5314 The first element of the vector, an integer, sets the absolute
5315 indentation column.  This will override any previously calculated
5316 indentation, but won't override relative indentation calculated from
5317 syntactic elements later on in the syntactic context of the line being
5318 indented.  @xref{Indentation Calculation}.  Any elements in the vector
5319 beyond the first will be ignored.
5321 @item A function or lambda expression
5322 The function will be called and its return value will in turn be
5323 evaluated as an offset specification.  Functions are useful when more
5324 context than just the syntactic symbol is needed to get the desired
5325 indentation.  @xref{Line-Up Functions}, and @ref{Custom Line-Up}, for
5326 details about them.
5328 @item A symbol with a variable binding
5329 If the symbol also has a function binding, the function takes
5330 precedence over the variable.  Otherwise the value of the variable is
5331 used.  It must be an integer (which is used as relative offset) or a
5332 vector (an absolute offset).
5334 @item A list
5335 The offset can also be a list containing several offset
5336 specifications; these are evaluated recursively and combined.  A list
5337 is typically only useful when some of the offsets are line-up
5338 functions.  A common strategy is calling a sequence of functions in
5339 turn until one of them recognizes that it is appropriate for the
5340 source line and returns a non-@code{nil} value.
5342 @code{nil} values are always ignored when the offsets are combined.
5343 The first element of the list specifies the method of combining the
5344 non-@code{nil} offsets from the remaining elements:
5346 @table @code
5347 @item first
5348 Use the first offset that doesn't evaluate to @code{nil}.  Subsequent
5349 elements of the list don't get evaluated.
5350 @item min
5351 Use the minimum of all the offsets.  All must be either relative or
5352 absolute; they can't be mixed.
5353 @item max
5354 Use the maximum of all the offsets.  All must be either relative or
5355 absolute; they can't be mixed.
5356 @item add
5357 Add all the evaluated offsets together.  Exactly one of them may be
5358 absolute, in which case the result is absolute.  Any relative offsets
5359 that preceded the absolute one in the list will be ignored in that case.
5360 @end table
5362 As a compatibility measure, if the first element is none of the above
5363 then it too will be taken as an offset specification and the whole list
5364 will be combined according to the method @code{first}.
5365 @end table
5367 @vindex c-strict-syntax-p
5368 @vindex strict-syntax-p (c-)
5369 If an offset specification evaluates to @code{nil}, then a relative
5370 offset of 0 (zero) is used@footnote{There is however a variable
5371 @code{c-strict-syntax-p} that when set to non-@code{nil} will cause an
5372 error to be signaled in that case.  It's now considered obsolete since
5373 it doesn't work well with some of the alignment functions that return
5374 @code{nil} instead of zero.  You should therefore leave
5375 @code{c-strict-syntax-p} set to @code{nil}.}.
5377 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5378 @node    Interactive Customization, Line-Up Functions, c-offsets-alist, Customizing Indentation
5379 @comment node-name, next, previous, up
5380 @section Interactive Customization
5381 @cindex customization, interactive
5382 @cindex interactive customization
5383 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5385 As an example of how to customize indentation, let's change the
5386 style of this example@footnote{In this and subsequent examples, the
5387 original code is formatted using the @samp{gnu} style unless otherwise
5388 indicated.  @xref{Styles}.}:
5390 @example
5391 @group
5392  1: int add( int val, int incr, int doit )
5393  2: @{
5394  3:   if( doit )
5395  4:     @{
5396  5:       return( val + incr );
5397  6:     @}
5398  7:   return( val );
5399  8: @}
5400 @end group
5401 @end example
5403 @noindent
5406 @example
5407 @group
5408  1: int add( int val, int incr, int doit )
5409  2: @{
5410  3:   if( doit )
5411  4:   @{
5412  5:     return( val + incr );
5413  6:   @}
5414  7:   return( val );
5415  8: @}
5416 @end group
5417 @end example
5419 In other words, we want to change the indentation of braces that open a
5420 block following a condition so that the braces line up under the
5421 conditional, instead of being indented.  Notice that the construct we
5422 want to change starts on line 4.  To change the indentation of a line,
5423 we need to see which syntactic symbols affect the offset calculations
5424 for that line.  Hitting @kbd{C-c C-s} on line 4 yields:
5426 @example
5427 ((substatement-open 44))
5428 @end example
5430 @noindent
5431 so we know that to change the offset of the open brace, we need to
5432 change the indentation for the @code{substatement-open} syntactic
5433 symbol.
5435 To do this interactively, just hit @kbd{C-c C-o}.  This prompts
5436 you for the syntactic symbol to change, providing a reasonable default.
5437 In this case, the default is @code{substatement-open}, which is just the
5438 syntactic symbol we want to change!
5440 After you hit return, @ccmode{} will then prompt you for the new
5441 offset value, with the old value as the default.  The default in this
5442 case is @samp{+}, but we want no extra indentation so enter
5443 @samp{0} and @kbd{RET}.  This will associate the offset 0 with the
5444 syntactic symbol @code{substatement-open}.
5446 To check your changes quickly, just hit @kbd{C-c C-q}
5447 (@code{c-indent-defun}) to reindent the entire function.  The example
5448 should now look like:
5450 @example
5451 @group
5452  1: int add( int val, int incr, int doit )
5453  2: @{
5454  3:   if( doit )
5455  4:   @{
5456  5:     return( val + incr );
5457  6:   @}
5458  7:   return( val );
5459  8: @}
5460 @end group
5461 @end example
5463 Notice how just changing the open brace offset on line 4 is all we
5464 needed to do.  Since the other affected lines are indented relative to
5465 line 4, they are automatically indented the way you'd expect.  For more
5466 complicated examples, this might not always work.  The general approach
5467 to take is to always start adjusting offsets for lines higher up in the
5468 file, then reindent and see if any following lines need further
5469 adjustments.
5471 @c Move this bit to "Styles" (2005/10/7)
5472 @deffn Command c-set-offset symbol offset
5473 @findex set-offset (c-)
5474 @kindex C-c C-o
5475 This is the command bound to @kbd{C-c C-o}.  It provides a convenient
5476 way to set offsets on @code{c-offsets-alist} both interactively (see
5477 the example above) and from your mode hook.
5479 It takes two arguments when used programmatically: @var{symbol} is the
5480 syntactic element symbol to change and @var{offset} is the new offset
5481 for that syntactic element.
5482 @end deffn
5483 @c End of MOVE THIS BIT.
5485 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5486 @node    Line-Up Functions, Custom Line-Up, Interactive Customization, Customizing Indentation
5487 @comment node-name, next, previous, up
5488 @section Line-Up Functions
5489 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5491 @cindex line-up function
5492 @cindex indentation function
5493 Often there are cases when a simple offset setting on a syntactic
5494 symbol isn't enough to get the desired indentation---for example, you
5495 might want to line up a closing parenthesis with the matching opening
5496 one rather than indenting relative to its ``anchor point''.  @ccmode{}
5497 provides this flexibility with @dfn{line-up functions}.
5499 The way you associate a line-up function with a syntactic symbol is
5500 described in @ref{c-offsets-alist}.  @ccmode{} comes with many
5501 predefined line-up functions for common situations.  If none of these
5502 does what you want, you can write your own.  @xref{Custom Line-Up}.
5503 Sometimes, it is easier to tweak the standard indentation by adding a
5504 function to @code{c-special-indent-hook} (@pxref{Other Indentation}).
5506 The line-up functions haven't been adapted for AWK buffers or tested
5507 with them.  Some of them might work serendipitously.  There shouldn't be
5508 any problems writing custom line-up functions for AWK mode.
5510 The calling convention for line-up functions is described fully in
5511 @ref{Custom Line-Up}.  Roughly speaking, the return value is either an
5512 offset itself (such as @code{+} or @code{[0]}) or it's @code{nil},
5513 meaning ``this function is inappropriate in this case; try a
5514 different one''.  @xref{c-offsets-alist}.
5516 The subsections below describe all the standard line-up functions,
5517 categorized by the sort of token the lining-up centers around.  For
5518 each of these functions there is a ``works with'' list that indicates
5519 which syntactic symbols the function is intended to be used with.
5521 @macro workswith
5522 @emph{Works with:@ }
5523 @end macro
5524 @ifinfo
5525 @unmacro workswith
5526 @macro workswith
5527 Works with:
5528 @end macro
5529 @end ifinfo
5531 @macro sssTBasicOffset
5532 <--> @i{c-basic-offset}@c
5533 @end macro
5535 @macro sssTsssTBasicOffset
5536 <--><--> @i{c-basic-offset}@c
5537 @end macro
5539 @macro hereFn{func}
5540 <- @i{\func\}@c
5541 @end macro
5543 @c The TeX backend seems to insert extra spaces around the argument. :P
5544 @iftex
5545 @unmacro hereFn
5546 @macro hereFn{func}
5547 <-@i{\func\}@c
5548 @end macro
5549 @end iftex
5551 @menu
5552 * Brace/Paren Line-Up::
5553 * List Line-Up::
5554 * Operator Line-Up::
5555 * Comment Line-Up::
5556 * Misc Line-Up::
5557 @end menu
5559 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5560 @node    Brace/Paren Line-Up, List Line-Up, Line-Up Functions, Line-Up Functions
5561 @comment node-name, next, previous, up
5562 @subsection Brace and Parenthesis Line-Up Functions
5563 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5565 The line-up functions here calculate the indentation for braces,
5566 parentheses and statements within brace blocks.
5568 @defun c-lineup-close-paren
5569 @findex lineup-close-paren (c-)
5570 Line up the closing paren under its corresponding open paren if the
5571 open paren is followed by code.  If the open paren ends its line, no
5572 indentation is added.  E.g.:
5574 @example
5575 @group
5576 main (int,
5577       char **
5578      )                @hereFn{c-lineup-close-paren}
5579 @end group
5580 @end example
5582 @noindent
5585 @example
5586 @group
5587 main (
5588     int, char **
5589 )                     @hereFn{c-lineup-close-paren}
5590 @end group
5591 @end example
5593 As a special case, if a brace block is opened at the same line as the
5594 open parenthesis of the argument list, the indentation is
5595 @code{c-basic-offset} instead of the open paren column.  See
5596 @code{c-lineup-arglist} for further discussion of this ``DWIM'' measure.
5598 @workswith All @code{*-close} symbols.
5599 @end defun
5601 @comment ------------------------------------------------------------
5603 @anchor{c-lineup-arglist-close-under-paren}
5604 @defun c-lineup-arglist-close-under-paren
5605 @findex lineup-arglist-close-under-paren (c-)
5606 Set your @code{arglist-close} syntactic symbol to this line-up function
5607 so that parentheses that close argument lists will line up under the
5608 parenthesis that opened the argument list.  It can also be used with
5609 @code{arglist-cont} and @code{arglist-cont-nonempty} to line up all
5610 lines inside a parenthesis under the open paren.
5612 As a special case, if a brace block is opened at the same line as the
5613 open parenthesis of the argument list, the indentation is
5614 @code{c-basic-offset} only.  See @code{c-lineup-arglist} for further
5615 discussion of this ``DWIM'' measure.
5617 @workswith Almost all symbols, but are typically most useful on
5618 @code{arglist-close}, @code{brace-list-close}, @code{arglist-cont} and
5619 @code{arglist-cont-nonempty}.
5620 @end defun
5622 @comment ------------------------------------------------------------
5624 @defun c-indent-one-line-block
5625 @findex indent-one-line-block (c-)
5626 Indent a one line block @code{c-basic-offset} extra.  E.g.:
5628 @example
5629 @group
5630 if (n > 0)
5631     @{m+=n; n=0;@}      @hereFn{c-indent-one-line-block}
5632 @sssTBasicOffset{}
5633 @end group
5634 @end example
5636 @noindent
5639 @example
5640 @group
5641 if (n > 0)
5642 @{                     @hereFn{c-indent-one-line-block}
5643     m+=n; n=0;
5645 @end group
5646 @end example
5648 The block may be surrounded by any kind of parenthesis characters.
5649 @code{nil} is returned if the line doesn't start with a one line block,
5650 which makes the function usable in list expressions.
5652 @workswith Almost all syntactic symbols, but most useful on the
5653 @code{-open} symbols.
5654 @end defun
5656 @comment ------------------------------------------------------------
5658 @defun c-indent-multi-line-block
5659 @findex indent-multi-line-block (c-)
5660 Indent a multiline block @code{c-basic-offset} extra.  E.g.:
5662 @example
5663 @group
5664 int *foo[] = @{
5665     NULL,
5666     @{17@},             @hereFn{c-indent-multi-line-block}
5667 @end group
5668 @end example
5670 @noindent
5673 @example
5674 @group
5675 int *foo[] = @{
5676     NULL,
5677         @{             @hereFn{c-indent-multi-line-block}
5678         17
5679         @},
5680     @sssTBasicOffset{}
5681 @end group
5682 @end example
5684 The block may be surrounded by any kind of parenthesis characters.
5685 @code{nil} is returned if the line doesn't start with a multiline
5686 block, which makes the function usable in list expressions.
5688 @workswith Almost all syntactic symbols, but most useful on the
5689 @code{-open} symbols.
5690 @end defun
5692 @comment ------------------------------------------------------------
5694 @defun c-lineup-runin-statements
5695 @findex lineup-runin-statements (c-)
5696 Line up statements for coding standards which place the first statement
5697 in a block on the same line as the block opening brace@footnote{Run-in
5698 style doesn't really work too well.  You might need to write your own
5699 custom line-up functions to better support this style.}.  E.g.:
5701 @example
5702 @group
5703 int main()
5704 @{ puts ("Hello!");
5705   return 0;           @hereFn{c-lineup-runin-statements}
5707 @end group
5708 @end example
5710 If there is no statement after the opening brace to align with,
5711 @code{nil} is returned.  This makes the function usable in list
5712 expressions.
5714 @workswith The @code{statement} syntactic symbol.
5715 @end defun
5717 @comment ------------------------------------------------------------
5719 @defun c-lineup-inexpr-block
5720 @findex lineup-inexpr-block (c-)
5721 This can be used with the in-expression block symbols to indent the
5722 whole block to the column where the construct is started.  E.g., for Java
5723 anonymous classes, this lines up the class under the @samp{new} keyword,
5724 and in Pike it lines up the lambda function body under the @samp{lambda}
5725 keyword.  Returns @code{nil} if the block isn't part of such a
5726 construct.
5728 @workswith @code{inlambda}, @code{inexpr-statement},
5729 @code{inexpr-class}.
5730 @end defun
5732 @comment ------------------------------------------------------------
5734 @defun c-lineup-after-whitesmith-blocks
5735 @findex lineup-after-whitesmith-blocks (c-)
5736 Compensate for Whitesmith style indentation of blocks.  Due to the way
5737 @ccmode{} calculates anchor positions for normal lines inside blocks,
5738 this function is necessary for those lines to get correct Whitesmith
5739 style indentation.  Consider the following examples:
5741 @example
5742 @group
5743 int foo()
5744     @{
5745     a;
5746     x;                 @hereFn{c-lineup-after-whitesmith-blocks}
5747 @end group
5748 @end example
5750 @example
5751 @group
5752 int foo()
5753     @{
5754         @{
5755         a;
5756         @}
5757     x;                 @hereFn{c-lineup-after-whitesmith-blocks}
5758 @end group
5759 @end example
5761 The fact that the line with @code{x} is preceded by a Whitesmith style
5762 indented block in the latter case and not the first should not affect
5763 its indentation.  But since CC Mode in cases like this uses the
5764 indentation of the preceding statement as anchor position, the @code{x}
5765 would in the second case be indented too much if the offset for
5766 @code{statement} was set simply to zero.
5768 This lineup function corrects for this situation by detecting if the
5769 anchor position is at an open paren character.  In that case, it instead
5770 indents relative to the surrounding block just like
5771 @code{c-lineup-whitesmith-in-block}.
5773 @workswith @code{brace-list-entry}, @code{brace-entry-open},
5774 @code{statement}, @code{arglist-cont}.
5775 @end defun
5777 @comment ------------------------------------------------------------
5779 @defun c-lineup-whitesmith-in-block
5780 @findex lineup-whitesmith-in-block (c-)
5781 Line up lines inside a block in Whitesmith style.  It's done in a way
5782 that works both when the opening brace hangs and when it doesn't.  E.g.:
5784 @example
5785 @group
5786 something
5787     @{
5788     foo;              @hereFn{c-lineup-whitesmith-in-block}
5789     @}
5790 @end group
5791 @end example
5793 @noindent
5796 @example
5797 @group
5798 something @{
5799     foo;              @hereFn{c-lineup-whitesmith-in-block}
5800     @}
5801 @sssTBasicOffset{}
5802 @end group
5803 @end example
5805 In the first case the indentation is kept unchanged, in the second
5806 @code{c-basic-offset} is added.
5808 @workswith @code{defun-close}, @code{defun-block-intro},
5809 @code{inline-close}, @code{block-close}, @code{brace-list-close},
5810 @code{brace-list-intro}, @code{statement-block-intro},
5811 @code{arglist-intro}, @code{arglist-cont-nonempty},
5812 @code{arglist-close}, and all @code{in*} symbols, e.g., @code{inclass}
5813 and @code{inextern-lang}.
5814 @end defun
5816 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5817 @node    List Line-Up, Operator Line-Up, Brace/Paren Line-Up, Line-Up Functions
5818 @comment node-name, next, previous, up
5819 @subsection List Line-Up Functions
5820 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5822 The line-up functions here calculate the indentation for lines which
5823 form lists of items, usually separated by commas.
5825 The function @ref{c-lineup-arglist-close-under-paren}, which is mainly
5826 for indenting a close parenthesis, is also useful for the lines
5827 contained within parentheses.
5829 @defun c-lineup-arglist
5830 @findex lineup-arglist (c-)
5831 Line up the current argument line under the first argument.
5833 As a special case, if an argument on the same line as the open
5834 parenthesis starts with a brace block opener, the indentation is
5835 @code{c-basic-offset} only.  This is intended as a ``DWIM'' measure in
5836 cases like macros that contain statement blocks, e.g.:
5838 @example
5839 @group
5840 A_VERY_LONG_MACRO_NAME (@{
5841         some (code, with + long, lines * in[it]);
5842     @});
5843 @sssTBasicOffset{}
5844 @end group
5845 @end example
5847 This is motivated partly because it's more in line with how code
5848 blocks are handled, and partly since it approximates the behavior of
5849 earlier CC Mode versions, which due to inaccurate analysis tended to
5850 indent such cases this way.
5852 @workswith @code{arglist-cont-nonempty}, @code{arglist-close}.
5853 @end defun
5855 @comment ------------------------------------------------------------
5857 @defun c-lineup-arglist-intro-after-paren
5858 @findex lineup-arglist-intro-after-paren (c-)
5859 Line up a line to just after the open paren of the surrounding paren or
5860 brace block.
5862 @workswith @code{defun-block-intro}, @code{brace-list-intro},
5863 @code{statement-block-intro}, @code{statement-case-intro},
5864 @code{arglist-intro}.
5865 @end defun
5867 @comment ------------------------------------------------------------
5869 @defun c-lineup-multi-inher
5870 @findex lineup-multi-inher (c-)
5871 Line up the classes in C++ multiple inheritance clauses and member
5872 initializers under each other.  E.g.:
5874 @example
5875 @group
5876 Foo::Foo (int a, int b):
5877     Cyphr (a),
5878     Bar (b)           @hereFn{c-lineup-multi-inher}
5879 @end group
5880 @end example
5882 @noindent
5885 @example
5886 @group
5887 class Foo
5888     : public Cyphr,
5889       public Bar      @hereFn{c-lineup-multi-inher}
5890 @end group
5891 @end example
5893 @noindent
5896 @example
5897 @group
5898 Foo::Foo (int a, int b)
5899     : Cyphr (a)
5900     , Bar (b)         @hereFn{c-lineup-multi-inher}
5901 @end group
5902 @end example
5904 @workswith @code{inher-cont}, @code{member-init-cont}.
5905 @end defun
5907 @comment ------------------------------------------------------------
5909 @defun c-lineup-java-inher
5910 @findex lineup-java-inher (c-)
5911 Line up Java implements and extends declarations.  If class names
5912 follow on the same line as the @samp{implements}/@samp{extends}
5913 keyword, they are lined up under each other.  Otherwise, they are
5914 indented by adding @code{c-basic-offset} to the column of the keyword.
5915 E.g.:
5917 @example
5918 @group
5919 class Foo
5920     extends
5921         Bar           @hereFn{c-lineup-java-inher}
5922     @sssTBasicOffset{}
5923 @end group
5924 @end example
5926 @noindent
5929 @example
5930 @group
5931 class Foo
5932     extends Cyphr,
5933             Bar       @hereFn{c-lineup-java-inher}
5934 @end group
5935 @end example
5937 @workswith @code{inher-cont}.
5938 @end defun
5940 @comment ------------------------------------------------------------
5942 @defun c-lineup-java-throws
5943 @findex lineup-java-throws (c-)
5944 Line up Java throws declarations.  If exception names follow on the
5945 same line as the throws keyword, they are lined up under each other.
5946 Otherwise, they are indented by adding @code{c-basic-offset} to the
5947 column of the @samp{throws} keyword.  The @samp{throws} keyword itself
5948 is also indented by @code{c-basic-offset} from the function declaration
5949 start if it doesn't hang.  E.g.:
5951 @example
5952 @group
5953 int foo()
5954     throws            @hereFn{c-lineup-java-throws}
5955         Bar           @hereFn{c-lineup-java-throws}
5956 @sssTsssTBasicOffset{}
5957 @end group
5958 @end example
5960 @noindent
5963 @example
5964 @group
5965 int foo() throws Cyphr,
5966                  Bar,    @hereFn{c-lineup-java-throws}
5967                  Vlod    @hereFn{c-lineup-java-throws}
5968 @end group
5969 @end example
5971 @workswith @code{func-decl-cont}.
5972 @end defun
5974 @comment ------------------------------------------------------------
5976 @defun c-lineup-template-args
5977 @findex lineup-template-args (c-)
5978 Line up the arguments of a template argument list under each other, but
5979 only in the case where the first argument is on the same line as the
5980 opening @samp{<}.
5982 To allow this function to be used in a list expression, @code{nil} is
5983 returned if there's no template argument on the first line.
5985 @workswith @code{template-args-cont}.
5986 @end defun
5988 @comment ------------------------------------------------------------
5990 @defun c-lineup-ObjC-method-call
5991 @findex lineup-ObjC-method-call (c-)
5992 For Objective-C code, line up selector args as Emacs Lisp mode does
5993 with function args: go to the position right after the message receiver,
5994 and if you are at the end of the line, indent the current line
5995 c-basic-offset columns from the opening bracket; otherwise you are
5996 looking at the first character of the first method call argument, so
5997 lineup the current line with it.
5999 @workswith @code{objc-method-call-cont}.
6000 @end defun
6002 @comment ------------------------------------------------------------
6004 @defun c-lineup-ObjC-method-args
6005 @findex lineup-ObjC-method-args (c-)
6006 For Objective-C code, line up the colons that separate args.  The colon
6007 on the current line is aligned with the one on the first line.
6009 @workswith @code{objc-method-args-cont}.
6010 @end defun
6012 @comment ------------------------------------------------------------
6014 @defun c-lineup-ObjC-method-args-2
6015 @findex lineup-ObjC-method-args-2 (c-)
6016 Similar to @code{c-lineup-ObjC-method-args} but lines up the colon on
6017 the current line with the colon on the previous line.
6019 @workswith @code{objc-method-args-cont}.
6020 @end defun
6022 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6023 @node    Operator Line-Up, Comment Line-Up, List Line-Up, Line-Up Functions
6024 @comment node-name, next, previous, up
6025 @subsection Operator Line-Up Functions
6026 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6028 The line-up functions here calculate the indentation for lines which
6029 start with an operator, by lining it up with something on the previous
6030 line.
6032 @defun c-lineup-argcont
6033 @findex lineup-argcont (c-)
6034 Line up a continued argument.  E.g.:
6036 @example
6037 @group
6038 foo (xyz, aaa + bbb + ccc
6039           + ddd + eee + fff);  @hereFn{c-lineup-argcont}
6040 @end group
6041 @end example
6043 Only continuation lines like this are touched, @code{nil} is returned on
6044 lines which are the start of an argument.
6046 Within a gcc @code{asm} block, @code{:} is recognized as an argument
6047 separator, but of course only between operand specifications, not in the
6048 expressions for the operands.
6050 @workswith @code{arglist-cont}, @code{arglist-cont-nonempty}.
6051 @end defun
6053 @comment ------------------------------------------------------------
6055 @defun c-lineup-arglist-operators
6056 @findex lineup-arglist-operators (c-)
6057 Line up lines starting with an infix operator under the open paren.
6058 Return @code{nil} on lines that don't start with an operator, to leave
6059 those cases to other line-up functions.  Example:
6061 @example
6062 @group
6063 if (  x < 10
6064    || at_limit (x,     @hereFn{c-lineup-arglist-operators}
6065                 list)  @hereFn{c-lineup-arglist-operators@r{ returns nil}}
6066    )
6067 @end group
6068 @end example
6070 Since this function doesn't do anything for lines without an infix
6071 operator you typically want to use it together with some other lineup
6072 settings, e.g., as follows (the @code{arglist-close} setting is just a
6073 suggestion to get a consistent style):
6075 @example
6076 (c-set-offset 'arglist-cont
6077               '(c-lineup-arglist-operators 0))
6078 (c-set-offset 'arglist-cont-nonempty
6079               '(c-lineup-arglist-operators c-lineup-arglist))
6080 (c-set-offset 'arglist-close
6081               '(c-lineup-arglist-close-under-paren))
6082 @end example
6084 @workswith @code{arglist-cont}, @code{arglist-cont-nonempty}.
6085 @end defun
6087 @comment ------------------------------------------------------------
6089 @defun c-lineup-assignments
6090 @findex lineup-assignments (c-)
6091 Line up the current line after the assignment operator on the first line
6092 in the statement.  If there isn't any, return @code{nil} to allow stacking with
6093 other line-up functions.  If the current line contains an assignment
6094 operator too, try to align it with the first one.
6096 @workswith @code{topmost-intro-cont}, @code{statement-cont},
6097 @code{arglist-cont}, @code{arglist-cont-nonempty}.
6099 @end defun
6101 @comment ------------------------------------------------------------
6103 @defun c-lineup-math
6104 @findex lineup-math (c-)
6105 Like @code{c-lineup-assignments} but indent with @code{c-basic-offset}
6106 if no assignment operator was found on the first line.  I.e., this
6107 function is the same as specifying a list @code{(c-lineup-assignments
6108 +)}.  It's provided for compatibility with old configurations.
6110 @workswith @code{topmost-intro-cont}, @code{statement-cont},
6111 @code{arglist-cont}, @code{arglist-cont-nonempty}.
6112 @end defun
6114 @comment ------------------------------------------------------------
6116 @defun c-lineup-cascaded-calls
6117 @findex lineup-cascaded-calls (c-)
6118 Line up ``cascaded calls'' under each other.  If the line begins with
6119 @code{->} or @code{.} and the preceding line ends with one or more
6120 function calls preceded by the same token, then the arrow is lined up
6121 with the first of those tokens.  E.g.:
6123 @example
6124 @group
6125 r = proc->add(17)->add(18)
6126         ->add(19) +         @hereFn{c-lineup-cascaded-calls}
6127   offset;                   @hereFn{c-lineup-cascaded-calls@r{ (inactive)}}
6128 @end group
6129 @end example
6131 In any other situation @code{nil} is returned to allow use in list
6132 expressions.
6134 @workswith @code{topmost-intro-cont}, @code{statement-cont},
6135 @code{arglist-cont}, @code{arglist-cont-nonempty}.
6136 @end defun
6138 @comment ------------------------------------------------------------
6140 @defun c-lineup-streamop
6141 @findex lineup-streamop (c-)
6142 Line up C++ stream operators (i.e., @samp{<<} and @samp{>>}).
6144 @workswith @code{stream-op}.
6145 @end defun
6147 @comment ------------------------------------------------------------
6149 @defun c-lineup-string-cont
6150 @findex lineup-string-cont (c-)
6151 Line up a continued string under the one it continues.  A continued
6152 string in this sense is where a string literal follows directly after
6153 another one.  E.g.:
6155 @example
6156 @group
6157 result = prefix + "A message "
6158                   "string.";    @hereFn{c-lineup-string-cont}
6159 @end group
6160 @end example
6162 @code{nil} is returned in other situations, to allow stacking with other
6163 lineup functions.
6165 @workswith @code{topmost-intro-cont}, @code{statement-cont},
6166 @code{arglist-cont}, @code{arglist-cont-nonempty}.
6167 @end defun
6170 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6171 @node    Comment Line-Up, Misc Line-Up, Operator Line-Up, Line-Up Functions
6172 @comment node-name, next, previous, up
6173 @subsection Comment Line-Up Functions
6174 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6176 The lineup functions here calculate the indentation for several types
6177 of comment structure.
6179 @defun c-lineup-C-comments
6180 @findex lineup-C-comments (c-)
6181 Line up C block comment continuation lines.  Various heuristics are used
6182 to handle most of the common comment styles.  Some examples:
6184 @example
6185 @group
6186 /*                 /**               /*
6187  * text             * text             text
6188  */                 */               */
6189 @end group
6190 @end example
6192 @example
6193 @group
6194 /* text            /*                /**
6195    text            ** text            ** text
6196 */                 */                 */
6197 @end group
6198 @end example
6200 @example
6201 @group
6202 /**************************************************
6203  * text
6204  *************************************************/
6205 @end group
6206 @end example
6208 @vindex comment-start-skip
6209 @example
6210 @group
6211 /**************************************************
6212     Free form text comments:
6213  In comments with a long delimiter line at the
6214  start, the indentation is kept unchanged for lines
6215  that start with an empty comment line prefix.  The
6216  delimiter line is whatever matches the
6217  @code{comment-start-skip} regexp.
6218 **************************************************/
6219 @end group
6220 @end example
6222 The style variable @code{c-comment-prefix-regexp} is used to recognize
6223 the comment line prefix, e.g., the @samp{*} that usually starts every
6224 line inside a comment.
6226 @workswith The @code{c} syntactic symbol.
6227 @end defun
6229 @comment ------------------------------------------------------------
6231 @defun c-lineup-comment
6232 @findex lineup-comment (c-)
6233 Line up a comment-only line according to the style variable
6234 @code{c-comment-only-line-offset}.  If the comment is lined up with a
6235 comment starter on the previous line, that alignment is preserved.
6237 @defopt c-comment-only-line-offset
6238 @vindex comment-only-line-offset (c-)
6239 This style variable specifies the extra offset for the line.  It can
6240 contain an integer or a cons cell of the form
6242 @example
6243 (@r{@var{non-anchored-offset}} . @r{@var{anchored-offset}})
6244 @end example
6246 @noindent
6247 where @var{non-anchored-offset} is the amount of offset given to
6248 non-column-zero anchored lines, and @var{anchored-offset} is the amount
6249 of offset to give column-zero anchored lines.  Just an integer as value
6250 is equivalent to @code{(@r{@var{value}} . -1000)}.
6251 @end defopt
6253 @workswith @code{comment-intro}.
6254 @end defun
6256 @comment ------------------------------------------------------------
6258 @defun c-lineup-knr-region-comment
6259 @findex lineup-knr-region-comment (c-)
6260 Line up a comment in the ``K&R region'' with the declaration.  That is
6261 the region between the function or class header and the beginning of the
6262 block.  E.g.:
6264 @example
6265 @group
6266 int main()
6267 /* Called at startup. */  @hereFn{c-lineup-knr-region-comment}
6269   return 0;
6271 @end group
6272 @end example
6274 Return @code{nil} if called in any other situation, to be useful in list
6275 expressions.
6277 @workswith @code{comment-intro}.
6278 @end defun
6280 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6281 @node    Misc Line-Up,  , Comment Line-Up, Line-Up Functions
6282 @comment node-name, next, previous, up
6283 @subsection Miscellaneous Line-Up Functions
6284 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6286 The line-up functions here are the odds and ends which didn't fit into
6287 any earlier category.
6289 @defun c-lineup-dont-change
6290 @findex lineup-dont-change (c-)
6291 This lineup function makes the line stay at whatever indentation it
6292 already has; think of it as an identity function for lineups.
6294 @workswith Any syntactic symbol.
6295 @end defun
6297 @comment ------------------------------------------------------------
6299 @defun c-lineup-under-anchor
6301 Line up a line directly underneath its anchor point.  This is like
6302 @samp{0}, except any previously calculated offset contributions are
6303 disregarded.
6305 @workswith Any syntactic symbol which has an anchor point.
6306 @end defun
6308 @comment ------------------------------------------------------------
6310 @defun c-lineup-cpp-define
6311 @findex lineup-cpp-define (c-)
6312 Line up macro continuation lines according to the indentation of the
6313 construct preceding the macro.  E.g.:
6315 @example
6316 @group
6317 const char msg[] =    @hereFn{@r{The beginning of the preceding construct.}}
6318   \"Some text.\";
6320 #define X(A, B)  \
6321 do @{             \    @hereFn{c-lineup-cpp-define}
6322   printf (A, B); \
6323 @} while (0)
6324 @end group
6325 @end example
6327 @noindent
6328 and:
6330 @example
6331 @group
6332 int dribble() @{
6333   if (!running)       @hereFn{@r{The beginning of the preceding construct.}}
6334     error(\"Not running!\");
6336 #define X(A, B)    \
6337   do @{             \  @hereFn{c-lineup-cpp-define}
6338     printf (A, B); \
6339   @} while (0)
6340 @end group
6341 @end example
6343 If @code{c-syntactic-indentation-in-macros} is non-@code{nil}, the
6344 function returns the relative indentation to the macro start line to
6345 allow accumulation with other offsets.  E.g., in the following cases,
6346 @code{cpp-define-intro} is combined with the
6347 @code{statement-block-intro} that comes from the @samp{do @{} that hangs
6348 on the @samp{#define} line:
6350 @example
6351 @group
6352 const char msg[] =
6353   \"Some text.\";
6355 #define X(A, B) do @{ \
6356   printf (A, B);     \  @hereFn{c-lineup-cpp-define}
6357   this->refs++;      \
6358 @} while (0)             @hereFn{c-lineup-cpp-define}
6359 @end group
6360 @end example
6362 @noindent
6363 and:
6365 @example
6366 @group
6367 int dribble() @{
6368   if (!running)
6369     error(\"Not running!\");
6371 #define X(A, B) do @{ \
6372     printf (A, B);   \  @hereFn{c-lineup-cpp-define}
6373     this->refs++;    \
6374   @} while (0)           @hereFn{c-lineup-cpp-define}
6375 @end group
6376 @end example
6378 The relative indentation returned by @code{c-lineup-cpp-define} is zero
6379 and two, respectively, on the two lines in each of these examples.  They
6380 are then added to the two column indentation that
6381 @code{statement-block-intro} gives in both cases here.
6383 If the relative indentation is zero, then @code{nil} is returned
6384 instead.  That is useful in a list expression to specify the default
6385 indentation on the top level.
6387 If @code{c-syntactic-indentation-in-macros} is @code{nil} then this
6388 function keeps the current indentation, except for empty lines (ignoring
6389 the ending backslash) where it takes the indentation from the closest
6390 preceding nonempty line in the macro.  If there's no such line in the
6391 macro then the indentation is taken from the construct preceding it, as
6392 described above.
6394 @workswith @code{cpp-define-intro}.
6395 @end defun
6397 @comment ------------------------------------------------------------
6399 @defun c-lineup-gcc-asm-reg
6400 @findex lineup-gcc-asm-reg (c-)
6401 Line up a gcc asm register under one on a previous line.
6403 @example
6404 @group
6405     asm ("foo %1, %0\n"
6406          "bar %0, %1"
6407          : "=r" (w),
6408            "=r" (x)
6409          :  "0" (y),
6410             "1" (z));
6411 @end group
6412 @end example
6414 The @samp{x} line is aligned to the text after the @samp{:} on the
6415 @samp{w} line, and similarly @samp{z} under @samp{y}.
6417 This is done only in an @samp{asm} or @samp{__asm__} block, and only to
6418 those lines mentioned.  Anywhere else @code{nil} is returned.  The usual
6419 arrangement is to have this routine as an extra feature at the start of
6420 arglist lineups, e.g.:
6422 @example
6423 (c-lineup-gcc-asm-reg c-lineup-arglist)
6424 @end example
6426 @workswith @code{arglist-cont}, @code{arglist-cont-nonempty}.
6427 @end defun
6429 @comment ------------------------------------------------------------
6431 @defun c-lineup-topmost-intro-cont
6432 @findex lineup-topmost-intro-cont (c-)
6433 Line up declaration continuation lines zero or one indentation
6434 step@footnote{This function is mainly provided to mimic the behavior of
6435 CC Mode 5.28 and earlier where this case wasn't handled consistently so
6436 that those lines could be analyzed as either topmost-intro-cont or
6437 statement-cont.  It's used for @code{topmost-intro-cont} by default, but
6438 you might consider using @code{+} instead.}.  For lines preceding a
6439 definition, zero is used.  For other lines, @code{c-basic-offset} is
6440 added to the indentation.  E.g.:
6442 @example
6443 @group
6445 neg (int i)           @hereFn{c-lineup-topmost-intro-cont}
6447     return -i;
6449 @end group
6450 @end example
6452 @noindent
6455 @example
6456 @group
6457 struct
6458 larch                 @hereFn{c-lineup-topmost-intro-cont}
6460     double height;
6462     the_larch,        @hereFn{c-lineup-topmost-intro-cont}
6463     another_larch;    @hereFn{c-lineup-topmost-intro-cont}
6464 @sssTBasicOffset{}
6465 @end group
6466 @end example
6468 @noindent
6471 @example
6472 @group
6473 struct larch
6474 the_larch,            @hereFn{c-lineup-topmost-intro-cont}
6475     another_larch;    @hereFn{c-lineup-topmost-intro-cont}
6476 @end group
6477 @end example
6479 @workswith @code{topmost-intro-cont}.
6480 @end defun
6482 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6483 @node    Custom Line-Up, Other Indentation, Line-Up Functions, Customizing Indentation
6484 @comment node-name, next, previous, up
6485 @section Custom Line-Up Functions
6486 @cindex customization, indentation functions
6487 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6489 The most flexible way to customize indentation is by writing custom
6490 line-up functions, and associating them with specific syntactic
6491 symbols (@pxref{c-offsets-alist}).  Depending on the effect you want,
6492 it might be better to write a @code{c-special-indent-hook} function
6493 rather than a line-up function (@pxref{Other Indentation}).
6495 @ccmode{} comes with an extensive set of predefined line-up functions,
6496 not all of which are used by the default styles.  So there's a good
6497 chance the function you want already exists.  @xref{Line-Up
6498 Functions}, for a list of them.  If you write your own line-up
6499 function, it's probably a good idea to start working from one of these
6500 predefined functions, which can be found in the file
6501 @file{cc-align.el}.  If you have written a line-up function that you
6502 think is generally useful, you're very welcome to contribute it;
6503 please contact @email{bug-cc-mode@@gnu.org}.
6505    Line-up functions are passed a single argument, the syntactic
6506 element (see below).  At the time of the call, point will be somewhere
6507 on the line being indented.  The return value is a
6508 @code{c-offsets-alist} offset specification: for example, an integer,
6509 a symbol such as @code{+}, a vector, @code{nil}@footnote{Returning
6510 @code{nil} is useful when the offset specification for a syntactic
6511 element is a list containing the line-up function
6512 (@pxref{c-offsets-alist}).}, or even another line-up function.  Full
6513 details of these are in @ref{c-offsets-alist}.
6515 Line-up functions must not move point or change the content of the
6516 buffer (except temporarily).  They are however allowed to do
6517 @dfn{hidden buffer changes}, i.e., setting text properties for caching
6518 purposes etc.  Buffer undo recording is disabled while they run.
6520 The syntactic element passed as the parameter to a line-up function is
6521 a cons cell of the form
6523 @example
6524 (@r{@var{syntactic-symbol}} . @r{@var{anchor-position}})
6525 @end example
6527 @noindent
6528 @c FIXME!!! The following sentence might be better omitted, since the
6529 @c information is in the cross reference "Syntactic Analysis".  2005/10/2.
6530 where @var{syntactic-symbol} is the symbol that the function was
6531 called for, and @var{anchor-position} is the anchor position (if any)
6532 for the construct that triggered the syntactic symbol
6533 (@pxref{Syntactic Analysis}).  This cons cell is how the syntactic
6534 element of a line used to be represented in @ccmode{} 5.28 and
6535 earlier.  Line-up functions are still passed this cons cell, so as to
6536 preserve compatibility with older configurations.  In the future, we
6537 may decide to convert to using the full list format---you can prepare
6538 your setup for this by using the access functions
6539 (@code{c-langelem-sym}, etc.)@: described below.
6541 @vindex c-syntactic-element
6542 @vindex syntactic-element (c-)
6543 @vindex c-syntactic-context
6544 @vindex syntactic-context (c-)
6545 Some syntactic symbols, e.g., @code{arglist-cont-nonempty}, have more
6546 info in the syntactic element: typically other positions that can be
6547 interesting besides the anchor position.  That info can't be accessed
6548 through the passed argument, which is a cons cell.  Instead, you can
6549 get this information from the variable @code{c-syntactic-element},
6550 which is dynamically bound to the complete syntactic element.  The
6551 variable @code{c-syntactic-context} might also be useful: it gets
6552 dynamically bound to the complete syntactic context.  @xref{Custom
6553 Braces}.
6555 @ccmode{} provides a few functions to access parts of syntactic
6556 elements in a more abstract way.  Besides making the code easier to
6557 read, they also hide the difference between the old cons cell form
6558 used in the line-up function argument and the new list form used in
6559 @code{c-syntactic-element} and everywhere else.  The functions are:
6561 @defun c-langelem-sym langelem
6562 @findex langelem-sym (c-)
6563 Return the syntactic symbol in @var{langelem}.
6564 @end defun
6566 @defun c-langelem-pos langelem
6567 @findex langelem-pos (c-)
6568 Return the anchor position in @var{langelem}, or @code{nil} if there is none.
6569 @end defun
6571 @defun c-langelem-col langelem &optional preserve-point
6572 @findex langelem-col (c-)
6573 Return the column of the anchor position in @var{langelem}.  Also move
6574 the point to that position unless @var{preserve-point} is
6575 non-@code{nil}.
6576 @end defun
6578 @defun c-langelem-2nd-pos langelem
6579 @findex langelem-2nd-pos (c-)
6580 Return the secondary position in @var{langelem}, or @code{nil} if there
6581 is none.
6583 Note that the return value of this function is always @code{nil} if
6584 @var{langelem} is in the old cons cell form.  Thus this function is
6585 only meaningful when used on syntactic elements taken from
6586 @code{c-syntactic-element} or @code{c-syntactic-context}.
6587 @end defun
6589 Sometimes you may need to use the syntactic context of a line other
6590 than the one being indented.  You can determine this by (temporarily)
6591 moving point onto this line and calling @code{c-guess-basic-syntax}
6592 (@pxref{Syntactic Analysis}).
6594 Custom line-up functions can be as simple or as complex as you like, and
6595 any syntactic symbol that appears in @code{c-offsets-alist} can have a
6596 custom line-up function associated with it.
6598 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6599 @node    Other Indentation,  , Custom Line-Up, Customizing Indentation
6600 @comment node-name, next, previous, up
6601 @section Other Special Indentations
6602 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6604 To configure macros which you invoke without a terminating @samp{;},
6605 see @xref{Macros with ;}.
6607 Here are the remaining odds and ends regarding indentation:
6609 @defopt c-label-minimum-indentation
6610 @vindex label-minimum-indentation (c-)
6611 In @samp{gnu} style (@pxref{Built-in Styles}), a minimum indentation is
6612 imposed on lines inside code blocks.  This minimum indentation is
6613 controlled by this style variable.  The default value is 1.
6615 @findex c-gnu-impose-minimum
6616 @findex gnu-impose-minimum (c-)
6617 It's the function @code{c-gnu-impose-minimum} that enforces this minimum
6618 indentation.  It must be present on @code{c-special-indent-hook} to
6619 work.
6620 @end defopt
6622 @defopt c-special-indent-hook
6623 @vindex special-indent-hook (c-)
6624 This style variable is a standard hook variable that is called after
6625 every line is indented by @ccmode{}.  It is called only if
6626 @code{c-syntactic-indentation} is non-@code{nil} (which it is by
6627 default (@pxref{Indentation Engine Basics})).  You can put a function
6628 on this hook to do any special indentation or ad hoc line adjustments
6629 your style dictates, such as adding extra indentation to constructors
6630 or destructor declarations in a class definition, etc.  Sometimes it
6631 is better to write a custom Line-up Function instead (@pxref{Custom
6632 Line-Up}).
6634 When the indentation engine calls this hook, the variable
6635 @code{c-syntactic-context} is bound to the current syntactic context
6636 (i.e., what you would get by typing @kbd{C-c C-s} on the source line.
6637 @xref{Custom Braces}.).  Note that you should not change point or mark
6638 inside a @code{c-special-indent-hook} function, i.e., you'll probably
6639 want to wrap your function in a @code{save-excursion}@footnote{The
6640 numerical value returned by @code{point} will change if you change the
6641 indentation of the line within a @code{save-excursion} form, but point
6642 itself will still be over the same piece of text.}.
6644 Setting @code{c-special-indent-hook} in style definitions is handled
6645 slightly differently from other variables---A style can only add
6646 functions to this hook, not remove them.  @xref{Style Variables}.
6647 @end defopt
6650 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6651 @node    Custom Macros, Odds and Ends, Customizing Indentation, Top
6652 @comment node-name, next, previous, up
6653 @chapter Customizing Macros
6654 @cindex macros
6655 @cindex preprocessor directives
6656 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6658 Preprocessor macros in C, C++, and Objective C (introduced by
6659 @code{#define}) have a syntax different from the main language---for
6660 example, a macro declaration is not terminated by a semicolon, and if
6661 it is more than a line long, line breaks in it must be escaped with
6662 backslashes.  @ccmode{} has some commands to manipulate these, see
6663 @ref{Macro Backslashes}.
6665 Normally, the lines in a multi-line macro are indented relative to
6666 each other as though they were code.  You can suppress this behavior
6667 by setting the following user option:
6669 @defopt c-syntactic-indentation-in-macros
6670 @vindex syntactic-indentation-in-macros (c-)
6671 Enable syntactic analysis inside macros, which is the default.  If this
6672 is @code{nil}, all lines inside macro definitions are analyzed as
6673 @code{cpp-macro-cont}.
6674 @end defopt
6676 Because a macro can expand into anything at all, near where one is
6677 invoked @ccmode{} can only indent and fontify code heuristically.
6678 Sometimes it gets it wrong.  Usually you should try to design your
6679 macros so that they ''look like ordinary code'' when you invoke them.
6680 However, two situations are so common that @ccmode{} handles them
6681 specially: that is when certain macros needn't (or mustn't) be
6682 followed by a @samp{;}, and when certain macros (or compiler
6683 directives) expand to nothing.  You need to configure @ccmode{} to
6684 handle these macros properly, see @ref{Macros with ;} and @ref{Noise
6685 Macros}.
6687 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6688 @menu
6689 * Macro Backslashes::
6690 * Macros with ;::
6691 * Noise Macros::
6692 @end menu
6694 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6695 @node     Macro Backslashes, Macros with ;, Custom Macros, Custom Macros
6696 @comment  node-name,  next,  previous,  up
6697 @section Customizing Macro Backslashes
6698 @cindex @code{#define}
6699 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6701 @ccmode{} provides some tools to help keep the line continuation
6702 backslashes in macros neat and tidy.  Their precise action is
6703 customized with these variables:
6705 @defopt c-backslash-column
6706 @vindex backslash-column (c-)
6707 @defoptx c-backslash-max-column
6708 @vindex backslash-max-column (c-)
6709 These variables control the alignment columns for line continuation
6710 backslashes in multiline macros.  They are used by the functions that
6711 automatically insert or align such backslashes,
6712 e.g., @code{c-backslash-region} and @code{c-context-line-break}.
6714 @code{c-backslash-column} specifies the minimum column for the
6715 backslashes.  If any line in the macro goes past this column, then the
6716 next tab stop (i.e., next multiple of @code{tab-width}) in that line is
6717 used as the alignment column for all the backslashes, so that they
6718 remain in a single column.  However, if any lines go past
6719 @code{c-backslash-max-column} then the backslashes in the rest of the
6720 macro will be kept at that column, so that the lines which are too
6721 long ``stick out'' instead.
6723 Don't ever set these variables to @code{nil}.  If you want to disable
6724 the automatic alignment of backslashes, use
6725 @code{c-auto-align-backslashes}.
6726 @end defopt
6728 @defopt c-auto-align-backslashes
6729 @vindex auto-align-backslashes (c-)
6730 Align automatically inserted line continuation backslashes if
6731 non-@code{nil}.  When line continuation backslashes are inserted
6732 automatically for line breaks in multiline macros, e.g., by
6733 @code{c-context-line-break}, they are aligned with the other
6734 backslashes in the same macro if this flag is set.
6736 If @code{c-auto-align-backslashes} is @code{nil}, automatically
6737 inserted backslashes are preceded by a single space, and backslashes
6738 get aligned only when you explicitly invoke the command
6739 @code{c-backslash-region} (@kbd{C-c C-\}).
6740 @end defopt
6742 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6743 @node Macros with ;, Noise Macros, Macro Backslashes, Custom Macros
6744 @comment  node-name,  next,  previous,  up
6745 @section Macros with semicolons
6746 @cindex macros with semicolons
6747 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6748 Macros which needn't (or mustn't) be followed by a semicolon when you
6749 invoke them, @dfn{macros with semicolons}, are very common.  These can
6750 cause @ccmode{} to parse the next line wrongly as a
6751 @code{statement-cont} (@pxref{Function Symbols}) and thus mis-indent
6752 it.  At the top level, a macro invocation before a defun start can
6753 cause, for example, @code{c-beginning-of-defun} (@kbd{C-M-a}) not to
6754 find the correct start of the current function.
6756 You can prevent these by specifying which macros have semicolons.  It
6757 doesn't matter whether or not such a macro has a parameter list:
6759 @defopt c-macro-names-with-semicolon
6760 @vindex macro-names-with-semicolon (c-)
6761 This buffer-local variable specifies which macros have semicolons.
6762 After setting its value, you need to call
6763 @code{c-make-macro-with-semi-re} for it to take effect.  It should be
6764 set to one of these values:
6766 @table @asis
6767 @item nil
6768 There are no macros with semicolons.
6769 @item a list of strings
6770 Each string is the name of a macro with a semicolon.  Only valid
6771 @code{#define} names are allowed here.  For example, to set the
6772 default value, you could write the following into your @file{.emacs}:
6774 @example
6775 (setq c-macro-names-with-semicolon
6776       '("Q_OBJECT" "Q_PROPERTY" "Q_DECLARE" "Q_ENUMS"))
6777 @end example
6779 @item a regular expression
6780 This matches each symbol which is a macro with a semicolon.  It must
6781 not match any string which isn't a valid @code{#define} name.  For
6782 example:
6784 @example
6785 (setq c-macro-names-with-semicolon
6786       "\\<\\(CLEAN_UP_AND_RETURN\\|Q_[[:upper:]]+\\)\\>")
6787 @end example
6788 @end table
6789 @end defopt
6791 @defun c-make-macro-with-semi-re
6792 @findex make-macro-with-semi-re (c-)
6793 Call this (non-interactive) function, which sets internal variables,
6794 each time you change the value of @code{c-macro-names-with-semicolon}
6795 after the major mode function has run.  It takes no arguments, and its
6796 return value has no meaning.  This function is called by @ccmode{}'s
6797 initialization code, after the mode hooks have run.
6798 @end defun
6800 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6801 @node    Noise Macros,  , Macros with ;, Custom Macros
6802 @comment node-name, next, previous, up
6803 @section Noise Macros
6804 @cindex noise macros
6805 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6807 In @ccmode{}, @dfn{noise macros} are macros which expand to nothing,
6808 or compiler directives (such as GCC's @code{__attribute__}) which play
6809 no part in the syntax of the C (etc.) language.  Some noise macros are
6810 followed by arguments in parentheses (possibly optionally), others
6811 are not.
6813 Noise macros can easily confuse @ccmode{}'s analysis of function
6814 headers, causing them to be mis-fontified, or even mis-indented.  You
6815 can prevent this confusion by specifying the identifiers which
6816 constitute noise macros.
6818 @defopt c-noise-macro-names
6819 @vindex noise-macro-names (c-)
6820 This variable is a list of names of noise macros which never have
6821 parenthesized arguments.  Each element is a string, and must be a
6822 valid identifier.  An element in @code{c-noise-macro-names} must not
6823 also be in @code{c-noise-macro-with-parens-names}.  Such an element is
6824 treated as whitespace by @ccmode{}.
6825 @end defopt
6827 @defopt c-noise-macro-with-parens-names
6828 @vindex noise-macro-with-parens-names (c-)
6829 This variable is a list of names of noise macros which optionally have
6830 arguments in parentheses.  Each element of the list is a string, and
6831 must be a valid identifier.  An element in
6832 @code{c-noise-macro-with-parens-names} must not also be in
6833 @code{c-noise-macro-names}.  For performance reasons, such an element,
6834 together with the optional parenthesized arguments, is specially
6835 handled, but it is only handled when used in declaration
6836 contexts@footnote{If this restriction causes your project
6837 difficulties, please get in touch with @email{bug-cc-mode@@gnu.org}.}.
6839 The two compiler directives @code{__attribute__} and @code{__declspec}
6840 have traditionally been handled specially in @ccmode{}; for example
6841 they are fontified with font-lock-keyword-face.  You don't need to
6842 include these directives in @code{c-noise-macro-with-parens-names},
6843 but doing so is OK.
6844 @end defopt
6846 @defun c-make-noise-macro-regexps
6847 @findex make-noise-macro-regexps (c-)
6848 Call this (non-interactive) function, which sets internal variables,
6849 on changing the value of @code{c-noise-macro-names} or
6850 @code{c-noise-macro-with-parens-names} after the major mode's function
6851 has run.  This function is called by @ccmode{}'s initialization code,
6852 after the mode hooks have run.
6853 @end defun
6855 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6856 @node    Odds and Ends, Sample Init File, Custom Macros, Top
6857 @comment node-name, next, previous, up
6858 @chapter Odds and Ends
6859 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6861 The stuff that didn't fit in anywhere else is documented here.
6863 @defopt c-require-final-newline
6864 @vindex require-final-newline (c-)
6865 Controls whether a final newline is enforced when the file is saved.
6866 The value is an association list that for each language mode specifies
6867 the value to give to @code{require-final-newline} (@pxref{Saving
6868 Buffers,,,@lispref{}, @lispreftitle{}}) at mode initialization.  If a
6869 language isn't present on the association list, CC Mode won't touch
6870 @code{require-final-newline} in buffers for that language.
6872 The default is to set @code{require-final-newline} to @code{t} in the
6873 languages that mandate that source files should end with newlines.
6874 These are C, C++ and Objective-C.
6875 @end defopt
6877 @defopt c-echo-syntactic-information-p
6878 @vindex echo-syntactic-information-p (c-)
6879 If non-@code{nil}, the syntactic analysis for the current line is shown
6880 in the echo area when it's indented (unless
6881 @code{c-syntactic-indentation} is @code{nil}).  That's useful when
6882 finding out which syntactic symbols to modify to get the indentation you
6883 want.
6884 @end defopt
6886 @defopt c-report-syntactic-errors
6887 @vindex report-syntactic-errors (c-)
6888 If non-@code{nil}, certain syntactic errors are reported with a ding and
6889 a message, for example when an @code{else} is indented for which there
6890 is no corresponding @code{if}.
6892 Note however that @ccmode{} doesn't make any special effort to check for
6893 syntactic errors; that's the job of the compiler.  The reason it can
6894 report cases like the one above is that it can't find the correct
6895 anchoring position to indent the line in that case.
6896 @end defopt
6899 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6900 @node    Sample Init File, Performance Issues, Odds and Ends, Top
6901 @comment node-name, next, previous, up
6902 @appendix Sample Init File
6903 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6905 Here's a sample .emacs file fragment that might help you along the way.
6906 Just copy this region and paste it into your .emacs file.  You might want
6907 to change some of the actual values.
6909 @verbatim
6910 ;; Make a non-standard key binding.  We can put this in
6911 ;; c-mode-base-map because c-mode-map, c++-mode-map, and so on,
6912 ;; inherit from it.
6913 (defun my-c-initialization-hook ()
6914   (define-key c-mode-base-map "\C-m" 'c-context-line-break))
6915 (add-hook 'c-initialization-hook 'my-c-initialization-hook)
6917 ;; offset customizations not in my-c-style
6918 ;; This will take precedence over any setting of the syntactic symbol
6919 ;; made by a style.
6920 (setq c-offsets-alist '((member-init-intro . ++)))
6922 ;; Create my personal style.
6923 (defconst my-c-style
6924   '((c-tab-always-indent        . t)
6925     (c-comment-only-line-offset . 4)
6926     (c-hanging-braces-alist     . ((substatement-open after)
6927                                    (brace-list-open)))
6928     (c-hanging-colons-alist     . ((member-init-intro before)
6929                                    (inher-intro)
6930                                    (case-label after)
6931                                    (label after)
6932                                    (access-label after)))
6933     (c-cleanup-list             . (scope-operator
6934                                    empty-defun-braces
6935                                    defun-close-semi))
6936     (c-offsets-alist            . ((arglist-close . c-lineup-arglist)
6937                                    (substatement-open . 0)
6938                                    (case-label        . 4)
6939                                    (block-open        . 0)
6940                                    (knr-argdecl-intro . -)))
6941     (c-echo-syntactic-information-p . t))
6942   "My C Programming Style")
6943 (c-add-style "PERSONAL" my-c-style)
6945 ;; Customizations for all modes in CC Mode.
6946 (defun my-c-mode-common-hook ()
6947   ;; set my personal style for the current buffer
6948   (c-set-style "PERSONAL")
6949   ;; other customizations
6950   (setq tab-width 8
6951         ;; this will make sure spaces are used instead of tabs
6952         indent-tabs-mode nil)
6953   ;; we like auto-newline, but not hungry-delete
6954   (c-toggle-auto-newline 1))
6955 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
6956 @end verbatim
6958 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6959 @node    Performance Issues, Limitations and Known Bugs, Sample Init File, Top
6960 @comment node-name, next, previous, up
6961 @appendix Performance Issues
6962 @cindex performance
6963 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6965 @comment FIXME: (ACM, 2003/5/24).  Check whether AWK needs mentioning here.
6967 C and its derivative languages are highly complex creatures.  Often,
6968 ambiguous code situations arise that require @ccmode{} to scan large
6969 portions of the buffer to determine syntactic context.  Such
6970 pathological code can cause @ccmode{} to perform fairly badly.  This
6971 section gives some insight in how @ccmode{} operates, how that interacts
6972 with some coding styles, and what you can use to improve performance.
6974 The overall goal is that @ccmode{} shouldn't be overly slow (i.e., take
6975 more than a fraction of a second) in any interactive operation.
6976 I.e., it's tuned to limit the maximum response time in single operations,
6977 which is sometimes at the expense of batch-like operations like
6978 reindenting whole blocks.  If you find that @ccmode{} gradually gets
6979 slower and slower in certain situations, perhaps as the file grows in
6980 size or as the macro or comment you're editing gets bigger, then chances
6981 are that something isn't working right.  You should consider reporting
6982 it, unless it's something that's mentioned in this section.
6984 Because @ccmode{} has to scan the buffer backwards from the current
6985 insertion point, and because C's syntax is fairly difficult to parse in
6986 the backwards direction, @ccmode{} often tries to find the nearest
6987 position higher up in the buffer from which to begin a forward scan
6988 (it's typically an opening or closing parenthesis of some kind).  The
6989 farther this position is from the current insertion point, the slower it
6990 gets.
6992 @findex beginning-of-defun
6993 In earlier versions of @ccmode{}, we used to recommend putting the
6994 opening brace of a top-level construct@footnote{E.g., a function in C,
6995 or outermost class definition in C++ or Java.} into the leftmost
6996 column.  Earlier still, this used to be a rigid Emacs constraint, as
6997 embodied in the @code{beginning-of-defun} function.  @ccmode now
6998 caches syntactic information much better, so that the delay caused by
6999 searching for such a brace when it's not in column 0 is minimal,
7000 except perhaps when you've just moved a long way inside the file.
7002 @findex defun-prompt-regexp
7003 @vindex c-Java-defun-prompt-regexp
7004 @vindex Java-defun-prompt-regexp (c-)
7005 A special note about @code{defun-prompt-regexp} in Java mode: The common
7006 style is to hang the opening braces of functions and classes on the
7007 right side of the line, and that doesn't work well with the Emacs
7008 approach.  @ccmode{} comes with a constant
7009 @code{c-Java-defun-prompt-regexp} which tries to define a regular
7010 expression usable for this style, but there are problems with it.  In
7011 some cases it can cause @code{beginning-of-defun} to hang@footnote{This
7012 has been observed in Emacs 19.34 and XEmacs 19.15.}.  For this reason,
7013 it is not used by default, but if you feel adventurous, you can set
7014 @code{defun-prompt-regexp} to it in your mode hook.  In any event,
7015 setting and relying on @code{defun-prompt-regexp} will definitely slow
7016 things down because (X)Emacs will be doing regular expression searches a
7017 lot, so you'll probably be taking a hit either way!
7019 @ccmode{} maintains a cache of the opening parentheses of the blocks
7020 surrounding the point, and it adapts that cache as the point is moved
7021 around.  That means that in bad cases it can take noticeable time to
7022 indent a line in a new surrounding, but after that it gets fast as long
7023 as the point isn't moved far off.  The farther the point is moved, the
7024 less useful is the cache.  Since editing typically is done in ``chunks''
7025 rather than on single lines far apart from each other, the cache
7026 typically gives good performance even when the code doesn't fit the
7027 Emacs approach to finding the defun starts.
7029 @vindex c-enable-xemacs-performance-kludge-p
7030 @vindex enable-xemacs-performance-kludge-p (c-)
7031 XEmacs users can set the variable
7032 @code{c-enable-xemacs-performance-kludge-p} to non-@code{nil}.  This
7033 tells @ccmode{} to use XEmacs-specific built-in functions which, in some
7034 circumstances, can locate the top-most opening brace much more quickly than
7035 @code{beginning-of-defun}.  Preliminary testing has shown that for
7036 styles where these braces are hung (e.g., most JDK-derived Java styles),
7037 this hack can improve performance of the core syntax parsing routines
7038 from 3 to 60 times.  However, for styles which @emph{do} conform to
7039 Emacs's recommended style of putting top-level braces in column zero,
7040 this hack can degrade performance by about as much.  Thus this variable
7041 is set to @code{nil} by default, since the Emacs-friendly styles should
7042 be more common (and encouraged!).  Note that this variable has no effect
7043 in Emacs since the necessary built-in functions don't exist (in Emacs
7044 22.1 as of this writing in February 2007).
7046 Text properties are used to speed up skipping over syntactic whitespace,
7047 i.e., comments and preprocessor directives.  Indenting a line after a
7048 huge macro definition can be slow the first time, but after that the
7049 text properties are in place and it should be fast (even after you've
7050 edited other parts of the file and then moved back).
7052 Font locking can be a CPU hog, especially the font locking done on
7053 decoration level 3 which tries to be very accurate.  Note that that
7054 level is designed to be used with a font lock support mode that only
7055 fontifies the text that's actually shown, i.e., Lazy Lock or Just-in-time
7056 Lock mode, so make sure you use one of them.  Fontification of a whole
7057 buffer with some thousand lines can often take over a minute.  That is
7058 a known weakness; the idea is that it never should happen.
7060 The most effective way to speed up font locking is to reduce the
7061 decoration level to 2 by setting @code{font-lock-maximum-decoration}
7062 appropriately.  That level is designed to be as pretty as possible
7063 without sacrificing performance.  @xref{Font Locking Preliminaries}, for
7064 more info.
7067 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7068 @node    Limitations and Known Bugs, FAQ, Performance Issues, Top
7069 @comment node-name, next, previous, up
7070 @appendix Limitations and Known Bugs
7071 @cindex limitations
7072 @cindex bugs
7073 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7075 @itemize @bullet
7076 @item
7077 @ccmode{} doesn't support trigraphs.  (These are character sequences
7078 such as @samp{??(}, which represents @samp{[}.  They date from a time
7079 when some character sets didn't have all the characters that C needs,
7080 and are now utterly obsolete.)
7082 @item
7083 There is no way to apply auto newline settings (@pxref{Auto-newlines})
7084 on already typed lines.  That's only a feature to ease interactive
7085 editing.
7087 To generalize this issue a bit: @ccmode{} is not intended to be used as
7088 a reformatter for old code in some more or less batch-like way.  With
7089 the exception of some functions like @code{c-indent-region}, it's only
7090 geared to be used interactively to edit new code.  There's currently no
7091 intention to change this goal.
7093 If you want to reformat old code, you're probably better off using some
7094 other tool instead, e.g., @ref{Top, , GNU indent, indent, The `indent'
7095 Manual}, which has more powerful reformatting capabilities than
7096 @ccmode{}.
7098 @item
7099 The support for C++ templates (in angle brackets) is not yet complete.
7100 When a non-nested template is used in a declaration, @ccmode{} indents
7101 it and font-locks it OK@.  Templates used in expressions, and nested
7102 templates do not fare so well.  Sometimes a workaround is to refontify
7103 the expression after typing the closing @samp{>}.
7105 @item
7106 In a @dfn{k&r region} (the part of an old-fashioned C function
7107 declaration which specifies the types of its parameters, coming
7108 between the parameter list and the opening brace), there should be at
7109 most 20 top-level parenthesis and bracket pairs.  This limit has been
7110 imposed for performance reasons.  If it is violated, the source file
7111 might be incorrectly indented or fontified.
7113 @item
7114 On loading @ccmode{}, sometimes this error message appears:
7116 @example
7117 File mode specification error: (void-variable c-font-lock-keywords-3)
7118 @end example
7120 This is due to a bug in the function @code{eval-after-load} in some
7121 versions of (X)Emacs.  It can manifest itself when there is a symbolic
7122 link in the path of the directory which contains (X)Emacs.  As a
7123 workaround, put the following into your @file{.emacs} file, fairly
7124 early on:
7126 @example
7127 (defun my-load-cc-fonts ()
7128   (require "cc-fonts"))
7129 (add-hook 'c-initialization-hook 'my-load-cc-fonts)
7130 @end example
7131 @end itemize
7133 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7134 @node    FAQ, Updating CC Mode, Limitations and Known Bugs, Top
7135 @comment node-name, next, previous, up
7136 @appendix Frequently Asked Questions
7137 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7139 @itemize @bullet
7140 @item
7141 @emph{How can I change the indent level from 4 spaces to 2 spaces?}
7143 Set the variable @code{c-basic-offset}.  @xref{Getting Started}.
7145 @item
7146 @kindex RET
7147 @kindex C-j
7148 @emph{Why does/doesn't the @kbd{RET} key indent the new line?}
7150 Emacs's convention used to be that @kbd{RET} just adds a newline, and that
7151 @kbd{C-j} adds a newline and indents it.  In Emacs-24.4, this convention was
7152 reversed.
7154 If you use an older Emacs and you want @kbd{RET} do this
7155 too, add this to your @code{c-initialization-hook}:
7157 @example
7158 (define-key c-mode-base-map "\C-m" 'c-context-line-break)
7159 @end example
7161 @xref{Getting Started}.  This was a very common question.
7163 @item
7164 @emph{How do I stop my code jumping all over the place when I type?}
7166 Deactivate ``electric minor mode'' with @kbd{C-c C-l}.  @xref{Getting
7167 Started}.
7169 @item
7170 @kindex C-x h
7171 @kindex C-M-\
7172 @emph{How do I reindent the whole file?}
7174 Visit the file and hit @kbd{C-x h} to mark the whole buffer. Then hit
7175 @kbd{C-M-\}.  @xref{Indentation Commands}.
7177 @item
7178 @kindex C-M-q
7179 @kindex C-M-u
7180 @emph{How do I reindent the current block?}
7182 First move to the brace which opens the block with @kbd{C-M-u}, then
7183 reindent that expression with @kbd{C-M-q}.  @xref{Indentation
7184 Commands}.
7186 @item
7187 @emph{I put @code{(c-set-offset 'substatement-open 0)} in my
7188 @file{.emacs} file but I get an error saying that @code{c-set-offset}'s
7189 function definition is void.  What's wrong?}
7191 This means that @ccmode{} hasn't yet been loaded into your Emacs
7192 session by the time the @code{c-set-offset} call is reached, most
7193 likely because @ccmode{} is being autoloaded.  Instead of putting the
7194 @code{c-set-offset} line in your top-level @file{.emacs} file, put it
7195 in your @code{c-initialization-hook} (@pxref{CC Hooks}), or simply
7196 modify @code{c-offsets-alist} directly:
7198 @example
7199 (setq c-offsets-alist '((substatement-open . 0)))
7200 @end example
7202 @item
7203 @cindex open paren in column zero
7204 @emph{I have an open paren character at column zero inside a comment or
7205 multiline string literal, and it causes the fontification and/or
7206 indentation to go haywire.  What gives?}
7208 It's due to the ad-hoc rule in (X)Emacs that such open parens always
7209 start defuns (which translates to functions, classes, namespaces or any
7210 other top-level block constructs in the @ccmode{} languages).
7211 @ifset XEMACS
7212 @xref{Defuns,,, xemacs, XEmacs User's Manual}, for details.
7213 @end ifset
7214 @ifclear XEMACS
7215 @xref{Left Margin Paren,,, emacs, GNU Emacs Manual}, for details
7216 (@xref{Defuns,,, emacs, GNU Emacs Manual}, in the Emacs 20 manual).
7217 @end ifclear
7219 This heuristic is built into the core syntax analysis routines in
7220 (X)Emacs, so it's not really a @ccmode{} issue.  However, in Emacs
7221 21.1 it became possible to turn it off@footnote{Using the variable
7222 @code{open-paren-in-column-0-is-defun-start}.} and @ccmode{} does so
7223 there since it's got its own system to keep track of blocks.
7225 @end itemize
7228 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7229 @node    Updating CC Mode, Mailing Lists and Bug Reports, FAQ, Top
7230 @comment node-name, next, previous, up
7231 @appendix Getting the Latest CC Mode Release
7232 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7234 @ccmode{} has been standard with all versions of Emacs since 19.34 and
7235 of XEmacs since 19.16.
7237 @cindex web site
7238 Due to release schedule skew, it is likely that all of these Emacsen
7239 have old versions of @ccmode{} and so should be upgraded.  Access to the
7240 @ccmode{} source code, as well as more detailed information on Emacsen
7241 compatibility, etc.@: are all available on the web site:
7243 @quotation
7244 @uref{http://cc-mode.sourceforge.net/}
7245 @end quotation
7248 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7249 @node    Mailing Lists and Bug Reports, GNU Free Documentation License, Updating CC Mode, Top
7250 @comment node-name, next, previous, up
7251 @appendix Mailing Lists and Submitting Bug Reports
7252 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7254 @kindex C-c C-b
7255 @findex c-submit-bug-report
7256 @findex submit-bug-report (c-)
7257 To report bugs, use the @kbd{C-c C-b} (bound to
7258 @code{c-submit-bug-report}) command.  This provides vital information
7259 we need to reproduce your problem.  Make sure you include a concise,
7260 but complete code example.  Please try to boil your example down to
7261 just the essential code needed to reproduce the problem, and include
7262 an exact recipe of steps needed to expose the bug.  Be especially sure
7263 to include any code that appears @emph{before} your bug example, if
7264 you think it might affect our ability to reproduce it.
7266 Please try to produce the problem in an Emacs instance without any
7267 customizations loaded (i.e., start it with the @samp{-q --no-site-file}
7268 arguments).  If it works correctly there, the problem might be caused
7269 by faulty customizations in either your own or your site
7270 configuration.  In that case, we'd appreciate it if you isolate the
7271 Emacs Lisp code that triggers the bug and include it in your report.
7273 @cindex bug report mailing list
7274 Reporting a bug using @code{c-submit-bug-report} files it in
7275 the GNU Bug Tracker at @url{http://debbugs.gnu.org}, then sends it on
7276 to @email{bug-cc-mode@@gnu.org}.  You can also send reports, other
7277 questions, and suggestions (kudos?@: @t{;-)} to that address.  It's a
7278 mailing list which you can join or browse an archive of; see the web site at
7279 @uref{http://cc-mode.sourceforge.net/} for further details.
7281 @cindex announcement mailing list
7282 If you want to get announcements of new @ccmode{} releases, send the
7283 word @emph{subscribe} in the body of a message to
7284 @email{cc-mode-announce-request@@lists.sourceforge.net}.  It's possible
7285 to subscribe from the web site too.  Announcements will also be posted
7286 to the Usenet newsgroups @code{gnu.emacs.sources}, @code{comp.emacs},
7287 @code{comp.emacs.xemacs}, @code{comp.lang.c}, @code{comp.lang.c++},
7288 @code{comp.lang.objective-c}, @code{comp.lang.java.softwaretools},
7289 @code{comp.lang.idl}, and @code{comp.lang.awk}.
7290 @c There is no newsgroup for Pike.  :-(
7293 @node GNU Free Documentation License, Command and Function Index, Mailing Lists and Bug Reports, Top
7294 @appendix GNU Free Documentation License
7295 @include doclicense.texi
7298 @c Removed the tentative node "Mode Initialization" from here, 2005/8/27.
7299 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7300 @node    Command and Function Index, Variable Index, GNU Free Documentation License, Top
7301 @comment node-name, next, previous, up
7302 @unnumbered Command and Function Index
7303 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7305 Since most @ccmode{} commands are prepended with the string
7306 @samp{c-}, each appears under its @code{c-@var{thing}} name and its
7307 @code{@var{thing} (c-)} name.
7308 @iftex
7309 @sp 2
7310 @end iftex
7311 @printindex fn
7314 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7315 @node    Variable Index, Concept and Key Index, Command and Function Index, Top
7316 @comment node-name, next, previous, up
7317 @unnumbered Variable Index
7318 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7320 Since most @ccmode{} variables are prepended with the string
7321 @samp{c-}, each appears under its @code{c-@var{thing}} name and its
7322 @code{@var{thing} (c-)} name.
7323 @iftex
7324 @sp 2
7325 @end iftex
7326 @printindex vr
7329 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7330 @node    Concept and Key Index,  , Variable Index, Top
7331 @comment node-name, next, previous, up
7332 @unnumbered Concept and Key Index
7333 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7335 @printindex cp
7338 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7339 @comment Epilogue.
7340 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7342 @bye