]> code.delx.au - gnu-emacs/blob - man/cc-mode.texi
Trailing whitespace deleted.
[gnu-emacs] / man / cc-mode.texi
1 \input texinfo
2
3 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4 @comment %**start of header (This is for running Texinfo on a region)
5 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6
7 @comment No overfull hbox marks in the dvi file.
8 @finalout
9
10 @setfilename ../info/ccmode
11 @settitle CC Mode Manual
12 @footnotestyle end
13
14 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
15 @comment @setchapternewpage odd !! we don't want blank pages !!
16 @comment %**end of header (This is for running Texinfo on a region)
17 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
18
19
20 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
21 @comment
22 @comment Texinfo manual for CC Mode
23 @comment Generated from the original README file by Krishna Padmasola
24 @comment <krishna@earth-gw.njit.edu>
25 @comment
26 @comment Authors:
27 @comment Barry A. Warsaw
28 @comment Martin Stjernholm
29 @comment
30 @comment Maintained by Martin Stjernholm <bug-cc-mode@gnu.org>
31 @comment
32 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
33
34 @copying
35 This manual is for CC Mode in Emacs.
36
37 Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free
38 Software Foundation, Inc.
39
40 @quotation
41 Permission is granted to copy, distribute and/or modify this document
42 under the terms of the GNU Free Documentation License, Version 1.1 or
43 any later version published by the Free Software Foundation; with the
44 Invariant Sections being ``The GNU Manifesto'', ``Distribution'' and
45 ``GNU GENERAL PUBLIC LICENSE'', with the Front-Cover texts being ``A GNU
46 Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
47 license is included in the section entitled ``GNU Free Documentation
48 License'' in the Emacs manual.
49
50 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
51 this GNU Manual, like GNU software. Copies published by the Free
52 Software Foundation raise funds for GNU development.''
53
54 This document is part of a collection distributed under the GNU Free
55 Documentation License. If you want to distribute this document
56 separately from the collection, you can do so by adding a copy of the
57 license to the document, as described in section 6 of the license.
58 @end quotation
59 @end copying
60
61
62 @comment Info directory entry for use by install-info. The indentation
63 @comment here is by request from the FSF folks.
64 @dircategory Emacs
65 @direntry
66 * CC Mode: (ccmode). Emacs mode for editing C, C++, Objective-C,
67 Java, Pike, and IDL code.
68 @end direntry
69
70 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
71 @comment TeX title page
72 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
73
74 @titlepage
75 @sp 10
76
77 @center @titlefont{CC Mode 5.28}
78 @sp 2
79 @center @subtitlefont{A GNU Emacs mode for editing C and C-like languages}
80 @sp 2
81 @center Barry A. Warsaw, Martin Stjernholm
82
83 @page
84 @vskip 0pt plus 1filll
85 @insertcopying
86 @end titlepage
87
88 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
89 @comment The Top node contains the master menu for the Info file.
90 @comment This appears only in the Info file, not the printed manual.
91 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
92
93 @node Top, Introduction, (dir), (dir)
94 @comment node-name, next, previous, up
95
96 @macro ccmode
97 CC Mode
98 @end macro
99
100 @ifinfo
101 @top @ccmode{}
102
103 @ccmode{} is a GNU Emacs mode for editing files containing C, C++,
104 Objective-C, Java, CORBA IDL, and Pike code. It provides syntax-based
105 indentation and has several handy commands and some minor modes to make
106 the editing easier. Note that @ccmode{} does @emph{not} provide
107 font-locking; there are other Emacs packages for that.
108 @end ifinfo
109
110 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
111 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
112
113 @menu
114 * Introduction::
115 * Getting Connected::
116 * New Indentation Engine::
117 * Minor Modes::
118 * Text Filling and Line Breaking::
119 * Commands::
120 * Customizing Indentation::
121 * Syntactic Symbols::
122 * Indentation Functions::
123 * Performance Issues::
124 * Limitations and Known Bugs::
125 * Frequently Asked Questions::
126 * Getting the Latest CC Mode Release::
127 * Mailing Lists and Submitting Bug Reports::
128 * Sample .emacs File::
129
130 --- Indices ---
131
132 * Concept Index::
133 * Command Index::
134 * Key Index::
135 * Variable Index::
136
137 --- The Detailed Node Listing ---
138
139 New Indentation Engine
140
141 * Syntactic Analysis::
142 * Indentation Calculation::
143
144 Minor Modes
145
146 * Auto-newline Insertion::
147 * Hungry-deletion of Whitespace::
148
149 Auto-newline Insertion
150
151 * Hanging Braces::
152 * Hanging Colons::
153 * Hanging Semi-colons and Commas::
154 * Other Electric Commands::
155 * Clean-ups::
156
157 Commands
158
159 * Indentation Commands::
160 * Movement Commands::
161 * Other Commands::
162
163 Customizing Indentation
164
165 * Interactive Customization::
166 * Permanent Customization::
167 * Hooks::
168 * Styles::
169 * Advanced Customizations::
170
171 Styles
172
173 * Built-in Styles::
174 * Adding Styles::
175 * File Styles::
176
177 Advanced Customizations
178
179 * Custom Indentation Functions::
180 * Custom Brace and Colon Hanging::
181 * Customizing Semi-colons and Commas::
182 * Other Special Indentations::
183 @end menu
184
185
186 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
187 @node Introduction, Getting Connected, Top, Top
188 @comment node-name, next, previous, up
189 @chapter Introduction
190 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
191
192 @cindex BOCM
193
194 Welcome to @ccmode{}, a GNU Emacs mode for editing files containing C,
195 C++, Objective-C, Java, CORBA IDL, and Pike code. This incarnation of
196 the mode is descendant from @file{c-mode.el} (also called "Boring Old C
197 Mode" or BOCM @t{:-)}, and @file{c++-mode.el} version 2, which Barry has
198 been maintaining since 1992. @ccmode{} represents a significant
199 milestone in the mode's life. It has been fully merged back with Emacs
200 19's @file{c-mode.el}. Also a new, more intuitive and flexible mechanism
201 for controlling indentation has been developed. Late in 1997, Martin
202 joined the @ccmode{} Maintainers Team, and implemented the Pike support.
203 As of 2000 Martin has taken over as the sole maintainer.
204
205 This manual describes @ccmode{}
206 @comment The following line must appear on its own, so that the automated
207 version 5.28.
208 @comment Release.py script can update the version number automatically
209
210 @ccmode{} supports the editing of K&R and ANSI C, @dfn{ARM}
211 @footnote{@cite{The Annotated C++ Reference Manual}, by Ellis and
212 Stroustrup.} C++, Objective-C, Java, CORBA's Interface Definition
213 Language, and Pike@footnote{A C-like scripting language with its roots
214 in the LPC language used in some MUD engines. See
215 @uref{http://pike.idonex.se/}.} files. In this way, you can easily set
216 up consistent coding styles for use in editing all of these languages.
217 @ccmode{} does @emph{not} handle font-locking (a.k.a. syntax coloring,
218 keyword highlighting) or anything of that nature, for any of these
219 modes. Font-locking is handled by other Emacs packages.
220
221 This manual will describe the following:
222
223 @itemize @bullet
224 @item
225 How to get started using @ccmode{}.
226
227 @item
228 How the new indentation engine works.
229
230 @item
231 How to customize the new indentation engine.
232
233 @end itemize
234
235 @findex c-mode
236 @findex c++-mode
237 @findex objc-mode
238 @findex java-mode
239 @findex idl-mode
240 @findex pike-mode
241 Note that the name of this package is ``@ccmode{},'' but there is no top
242 level @code{cc-mode} entry point. All of the variables, commands, and
243 functions in @ccmode{} are prefixed with @code{c-@var{<thing>}}, and
244 @code{c-mode}, @code{c++-mode}, @code{objc-mode}, @code{java-mode},
245 @code{idl-mode}, and @code{pike-mode} entry points are provided. This
246 package is intended to be a replacement for @file{c-mode.el} and
247 @file{c++-mode.el}.
248
249 @cindex @file{cc-compat.el} file
250 This distribution also contains a file
251 called @file{cc-compat.el} which should ease your transition from BOCM
252 to @ccmode{}. If you have a BOCM configuration you are really happy
253 with, and want to postpone learning how to configure @ccmode{}, take a
254 look at that file. It maps BOCM configuration variables to @ccmode{}'s
255 new indentation model. It is not actively supported so for the long
256 run, you should learn how to customize @ccmode{} to support your coding
257 style.
258
259 A special word of thanks goes to Krishna Padmasola for his work in
260 converting the original @file{README} file to Texinfo format. I'd also
261 like to thank all the @ccmode{} victims who help enormously during the
262 early beta stages of @ccmode{}'s development.
263
264
265 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
266 @node Getting Connected, New Indentation Engine, Introduction, Top
267 @comment node-name, next, previous, up
268 @chapter Getting Connected
269 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
270
271 If you got this version of @ccmode{} with Emacs or XEmacs, it should
272 work just fine right out of the box. Note however that you may not have
273 the latest @ccmode{} release and may want to upgrade your copy.
274
275 If you are upgrading an existing @ccmode{} installation, please see the
276 @file{README} file for installation details. @ccmode{} may not work
277 with older versions of Emacs or XEmacs. See the @ccmode{} release notes
278 Web pages for the latest information on Emacs version and package
279 compatibility (@pxref{Getting the Latest CC Mode Release}).
280
281 @cindex @file{cc-mode-18.el} file
282 @emph{Note that @ccmode{} no longer
283 works with Emacs 18!}, so if you haven't upgraded from Emacs 18 by now,
284 you are out of luck.
285
286 @findex c-version
287 @findex version (c-)
288 You can find out what version of @ccmode{} you are using by visiting a C
289 file and entering @kbd{M-x c-version RET}. You should see this message in
290 the echo area:
291 @example
292
293 Using CC Mode version 5.XX
294
295 @end example
296
297 @noindent
298 where @samp{XX} is the minor release number.
299
300
301 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
302 @node New Indentation Engine, Minor Modes, Getting Connected, Top
303 @comment node-name, next, previous, up
304 @chapter New Indentation Engine
305 @cindex indentation engine
306 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
307
308 @ccmode{} has a new indentation engine, providing a simplified, yet
309 flexible and general mechanism for customizing indentation. It separates
310 indentation calculation into two steps: first, @ccmode{} analyzes the
311 line of code being indented to determine the kind of language construct
312 it's looking at, then it applies user defined offsets to the current
313 line based on this analysis.
314
315 This section will briefly cover how indentation is calculated in
316 @ccmode{}. It is important to understand the indentation model
317 being used so that you will know how to customize @ccmode{} for
318 your personal coding style.
319
320 @menu
321 * Syntactic Analysis::
322 * Indentation Calculation::
323 @end menu
324
325
326 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
327 @node Syntactic Analysis, Indentation Calculation, , New Indentation Engine
328 @comment node-name, next, previous, up
329 @section Syntactic Analysis
330 @cindex syntactic analysis
331 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
332
333 @cindex relative buffer position
334 @cindex syntactic symbol
335 @cindex syntactic component
336 @cindex syntactic component list
337 The first thing @ccmode{} does when indenting a line of code, is to
338 analyze the line, determining the @dfn{syntactic component list} of the
339 construct on that line. A syntactic component consists of a pair of
340 information (in lisp parlance, a @emph{cons cell}), where the first part
341 is a @dfn{syntactic symbol}, and the second part is a @dfn{relative
342 buffer position}. Syntactic symbols describe elements of C code
343 @footnote{Unless otherwise noted, the term ``C code'' to refers to all
344 the C-like languages.}, e.g. @code{statement}, @code{substatement},
345 @code{class-open}, @code{class-close}, etc. @xref{Syntactic Symbols},
346 for a complete list of currently recognized syntactic symbols and their
347 semantics. The style variable @code{c-offsets-alist} also contains the
348 list of currently supported syntactic symbols.
349
350 Conceptually, a line of C code is always indented relative to the
351 indentation of some line higher up in the buffer. This is represented
352 by the relative buffer position in the syntactic component.
353
354 Here is an example. Suppose we had the following code as the only thing
355 in a C++ buffer @footnote{The line numbers in this and future examples
356 don't actually appear in the buffer, of course!}:
357 @example
358 @group
359
360 1: void swap( int& a, int& b )
361 2: @{
362 3: int tmp = a;
363 4: a = b;
364 5: b = tmp;
365 6: @}
366
367 @end group
368 @end example
369
370 @kindex C-c C-s
371 @findex c-show-syntactic-information
372 @findex show-syntactic-information (c-)
373 We can use the command @kbd{C-c C-s}
374 (@code{c-show-syntactic-information}) to simply report what the
375 syntactic analysis is for the current line. Running this command on
376 line 4 of this example, we'd see in the echo area@footnote{With a universal
377 argument (i.e. @kbd{C-u C-c C-s}) the analysis is inserted into the
378 buffer as a comment
379 on the current line.}:
380 @example
381
382 ((statement . 35))
383
384 @end example
385
386 This tells us that the line is a statement and it is indented relative
387 to buffer position 35, which happens to be the @samp{i} in @code{int} on
388 line 3. If you were to move point to line 3 and hit @kbd{C-c C-s}, you
389 would see:
390 @example
391
392 ((defun-block-intro . 29))
393
394 @end example
395
396 This indicates that the @samp{int} line is the first statement in a top
397 level function block, and is indented relative to buffer position 29,
398 which is the brace just after the function header.
399
400 Here's another example:
401 @example
402 @group
403
404 1: int add( int val, int incr, int doit )
405 2: @{
406 3: if( doit )
407 4: @{
408 5: return( val + incr );
409 6: @}
410 7: return( val );
411 8: @}
412
413 @end group
414 @end example
415
416 @noindent
417 Hitting @kbd{C-c C-s} on line 4 gives us:
418 @example
419
420 ((substatement-open . 46))
421
422 @end example
423
424 @cindex substatement
425 @cindex substatement block
426 @noindent
427 which tells us that this is a brace that @emph{opens} a substatement
428 block. @footnote{A @dfn{substatement} is the line after a
429 conditional statement, such as @code{if}, @code{else}, @code{while},
430 @code{do}, @code{switch}, etc. A @dfn{substatement
431 block} is a brace block following one of these conditional statements.}
432
433 @cindex comment-only line
434 Syntactic component lists can contain more than one component, and
435 individual syntactic components need not have relative buffer positions.
436 The most common example of this is a line that contains a @dfn{comment
437 only line}.
438 @example
439 @group
440
441 1: void draw_list( List<Drawables>& drawables )
442 2: @{
443 3: // call the virtual draw() method on each element in list
444 4: for( int i=0; i < drawables.count(), ++i )
445 5: @{
446 6: drawables[i].draw();
447 7: @}
448 8: @}
449
450 @end group
451 @end example
452
453 @noindent
454 Hitting @kbd{C-c C-s} on line 3 of this example gives:
455 @example
456
457 ((comment-intro) (defun-block-intro . 46))
458
459 @end example
460
461 @noindent
462 and you can see that the syntactic component list contains two syntactic
463 components. Also notice that the first component,
464 @samp{(comment-intro)} has no relative buffer position.
465
466
467 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
468 @node Indentation Calculation, , Syntactic Analysis, New Indentation Engine
469 @comment node-name, next, previous, up
470 @section Indentation Calculation
471 @cindex indentation calculation
472 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
473
474 Indentation for a line is calculated using the syntactic
475 component list derived in step 1 above (@pxref{Syntactic Analysis}).
476 Each component contributes to the final total indentation of the line in
477 two ways.
478
479 First, the syntactic symbols are looked up in the @code{c-offsets-alist}
480 style variable, which is an association list of syntactic symbols and
481 the offsets to apply for those symbols. These offsets are added to a
482 running total.
483
484 Second, if the component has a relative buffer position, @ccmode{}
485 adds the column number of that position to the running total. By adding
486 up the offsets and columns for every syntactic component on the list,
487 the final total indentation for the current line is computed.
488
489 Let's use our two code examples above to see how this works. Here is
490 our first example again:
491 @example
492 @group
493
494 1: void swap( int& a, int& b )
495 2: @{
496 3: int tmp = a;
497 4: a = b;
498 5: b = tmp;
499 6: @}
500
501 @end group
502 @end example
503
504 Let's say point is on line 3 and we hit the @kbd{TAB} key to re-indent
505 the line. Remember that the syntactic component list for that
506 line is:
507 @example
508
509 ((defun-block-intro . 29))
510
511 @end example
512
513 @noindent
514 @ccmode{} looks up @code{defun-block-intro} in the
515 @code{c-offsets-alist} style variable. Let's say it finds the value
516 @samp{4}; it adds this to the running total (initialized to zero),
517 yielding a running total indentation of 4 spaces.
518
519 Next @ccmode{} goes to buffer position 29 and asks for the current
520 column. This brace is in column zero, so @ccmode{}
521 adds @samp{0} to the running total. Since there is only one syntactic
522 component on the list for this line, indentation calculation is
523 complete, and the total indentation for the line
524 is 4 spaces.
525
526 Here's another example:
527 @example
528 @group
529
530 1: int add( int val, int incr, int doit )
531 2: @{
532 3: if( doit )
533 4: @{
534 5: return( val + incr );
535 6: @}
536 7: return( val );
537 8: @}
538
539 @end group
540 @end example
541
542 If we were to hit @kbd{TAB} on line 4 in the above example, the same
543 basic process is performed, despite the differences in the syntactic
544 component list. Remember that the list for this line is:
545 @example
546
547 ((substatement-open . 46))
548
549 @end example
550
551 Here, @ccmode{} first looks up the @code{substatement-open} symbol
552 in @code{c-offsets-alist}. Let's say it finds the value @samp{4}. This
553 yields a running total of 4. @ccmode{} then goes to
554 buffer position 46, which is the @samp{i} in @code{if} on line 3. This
555 character is in the fourth column on that line so adding this to the
556 running total yields an indentation for the line of 8 spaces.
557
558 Simple, huh?
559
560 Actually, the mode usually just does The Right Thing without you having
561 to think about it in this much detail. But when customizing
562 indentation, it's helpful to understand the general indentation model
563 being used.
564
565 @vindex c-echo-syntactic-information-p
566 @vindex echo-syntactic-information-p (c-)
567 As you configure @ccmode{}, you might want to set the variable
568 @code{c-echo-syntactic-information-p} to non-@code{nil} so that the
569 syntactic component list and calculated offset will always be echoed in
570 the minibuffer when you hit @kbd{TAB}.
571
572
573 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
574 @node Minor Modes, Text Filling and Line Breaking, New Indentation Engine, Top
575 @comment node-name, next, previous, up
576 @chapter Minor Modes
577 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
578
579 @ccmode{} contains two minor-mode-like features that you should
580 find useful while you enter new C code. The first is called
581 @dfn{auto-newline} mode, and the second is called @dfn{hungry-delete}
582 mode. These minor modes can be toggled on and off independently, and
583 @ccmode{} can be configured so that it starts up with any
584 combination of these minor modes. By default, both of these minor modes
585 are turned off.
586
587 The state of the minor modes is always reflected in the minor mode list
588 on the modeline of the @ccmode{} buffer. When auto-newline mode is
589 enabled, you will see @samp{C/a} on the mode line @footnote{The @samp{C}
590 would be replaced with @samp{C++}, @samp{ObjC}, @samp{Java}, @samp{IDL},
591 or @samp{Pike} for the respective languages.}. When hungry delete mode
592 is enabled you would see @samp{C/h} and when both modes are enabled,
593 you'd see @samp{C/ah}.
594
595 @kindex C-c C-a
596 @kindex C-c C-d
597 @kindex C-c C-t
598 @findex c-toggle-hungry-state
599 @findex c-toggle-auto-state
600 @findex c-toggle-auto-hungry-state
601 @findex toggle-hungry-state (c-)
602 @findex toggle-auto-state (c-)
603 @findex toggle-auto-hungry-state (c-)
604 @ccmode{} provides key bindings which allow you to toggle the minor
605 modes on the fly while editing code. To toggle just the auto-newline
606 state, hit @kbd{C-c C-a} (@code{c-toggle-auto-state}). When you do
607 this, you should see the @samp{a} indicator either appear or disappear
608 on the modeline. Similarly, to toggle just the hungry-delete state, use
609 @kbd{C-c C-d} (@code{c-toggle-hungry-state}), and to toggle both states,
610 use @kbd{C-c C-t} (@code{c-toggle-auto-hungry-state}).
611
612 To set up the auto-newline and hungry-delete states to your preferred
613 values, you would need to add some lisp to your @file{.emacs} file that
614 called one of the @code{c-toggle-*-state} functions directly. When
615 called programmatically, each function takes a numeric value, where
616 a positive number enables the minor mode, a negative number disables the
617 mode, and zero toggles the current state of the mode.
618
619 So for example, if you wanted to enable both auto-newline and
620 hungry-delete for all your C file editing, you could add the following
621 to your @file{.emacs} file:
622 @example
623
624 (add-hook 'c-mode-common-hook
625 (lambda () (c-toggle-auto-hungry-state 1)))
626
627 @end example
628
629
630 @cindex electric characters
631
632 @menu
633 * Auto-newline Insertion::
634 * Hungry-deletion of Whitespace::
635 @end menu
636
637
638 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
639 @node Auto-newline Insertion, Hungry-deletion of Whitespace, , Minor Modes
640 @comment node-name, next, previous, up
641 @section Auto-newline Insertion
642 @cindex auto-newline insertion
643 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
644
645 @cindex electric commands
646 Auto-newline minor mode works by enabling certain @dfn{electric
647 commands}. Electric commands are typically bound to special characters
648 such as the left and right braces, colons, semi-colons, etc., which when
649 typed, perform some magic formatting in addition to inserting the typed
650 character. As a general rule, electric commands are only electric when
651 the following conditions apply:
652
653 @itemize @bullet
654 @item
655 Auto-newline minor mode is enabled, as evidenced by a @samp{C/a} or
656 @samp{C/ah} indicator on the modeline.
657
658 @cindex literal
659 @cindex syntactic whitespace
660 @item
661 The character was not typed inside of a literal @footnote{A
662 @dfn{literal} is defined as any comment, string, or C preprocessor macro
663 definition. These constructs are also known as @dfn{syntactic
664 whitespace} since they are usually ignored when scanning C code.}.
665
666 @item
667 @kindex C-u
668 No numeric argument was supplied to the command (i.e. it was typed as
669 normal, with no @kbd{C-u} prefix).
670
671 @end itemize
672
673 @menu
674 * Hanging Braces::
675 * Hanging Colons::
676 * Hanging Semi-colons and Commas::
677 * Other Electric Commands::
678 * Clean-ups::
679 @end menu
680
681
682 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
683 @node Hanging Braces, Hanging Colons, , Auto-newline Insertion
684 @comment node-name, next, previous, up
685 @subsection Hanging Braces
686 @cindex hanging braces
687 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
688
689 @findex c-electric-brace
690 @findex electric-brace (c-)
691 @vindex c-hanging-braces-alist
692 @vindex hanging-braces-alist (c-)
693 When you type either an open or close brace (i.e. @kbd{@{} or @kbd{@}}),
694 the electric command @code{c-electric-brace} gets run. This command has
695 two electric formatting behaviors. First, it will perform some
696 re-indentation of the line the brace was typed on, and second, it will
697 add various newlines before and/or after the typed brace.
698 Re-indentation occurs automatically whenever the electric behavior is
699 enabled. If the brace ends up on a line other than the one it was typed
700 on, then that line is also re-indented.
701
702 @cindex class-open syntactic symbol
703 @cindex class-close syntactic symbol
704 @cindex defun-open syntactic symbol
705 @cindex defun-close syntactic symbol
706 @cindex inline-open syntactic symbol
707 @cindex inline-close syntactic symbol
708 @cindex brace-list-open syntactic symbol
709 @cindex brace-list-close syntactic symbol
710 @cindex brace-list-intro syntactic symbol
711 @cindex brace-entry-open syntactic symbol
712 @cindex block-open syntactic symbol
713 @cindex block-close syntactic symbol
714 @cindex substatement-open syntactic symbol
715 @cindex statement-case-open syntactic symbol
716 @cindex extern-lang-open syntactic symbol
717 @cindex extern-lang-close syntactic symbol
718 @cindex namespace-open syntactic symbol
719 @cindex namespace-close syntactic symbol
720 @cindex inexpr-class-open symbol
721 @cindex inexpr-class-close symbol
722
723 The default in auto-newline mode is to insert newlines both before and
724 after a brace, but that can be controlled by the
725 @code{c-hanging-braces-alist} style variable. This variable contains a
726 mapping between syntactic symbols related to braces, and a list of
727 places to insert a newline. The syntactic symbols that are useful for
728 this list are: @code{class-open}, @code{class-close}, @code{defun-open},
729 @code{defun-close}, @code{inline-open}, @code{inline-close},
730 @code{brace-list-open}, @code{brace-list-close},
731 @code{brace-list-intro}, @code{brace-entry-open}, @code{block-open},
732 @code{block-close}, @code{substatement-open},
733 @code{statement-case-open}, @code{extern-lang-open},
734 @code{extern-lang-close}, @code{namespace-open}, @code{namespace-close},
735 @code{inexpr-class-open}, and @code{inexpr-class-close}@footnote{Note
736 that the aggregate constructs in Pike mode, @samp{(@{}, @samp{@})},
737 @samp{([}, @samp{])}, and @samp{(<}, @samp{>)}, do not count as brace
738 lists in this regard, even though they do for normal indentation
739 purposes. It's currently not possible to set automatic newlines on
740 these constructs.}. @xref{Syntactic Symbols}, for a more detailed
741 description of these syntactic symbols, except for
742 @code{inexpr-class-open} and @code{inexpr-class-close}, which aren't
743 actual syntactic symbols.
744
745 The braces of anonymous inner classes in Java are given the special
746 symbols @code{inexpr-class-open} and @code{inexpr-class-close}, so that
747 they can be distinguished from the braces of normal classes@footnote{The
748 braces of anonymous classes produces a combination of
749 @code{inexpr-class}, and @code{class-open} or @code{class-close} in
750 normal indentation analysis.}.
751
752 The value associated with each syntactic symbol in this association list
753 is called an @var{ACTION} which can be either a function or a list.
754 @xref{Custom Brace and Colon Hanging}, for a more detailed discussion of
755 using a function as a brace hanging @var{ACTION}.
756
757 When the @var{ACTION} is a list, it can contain any combination of the
758 symbols @code{before} and @code{after}, directing @ccmode{} where to
759 put newlines in relationship to the brace being inserted. Thus, if the
760 list contains only the symbol @code{after}, then the brace is said to
761 @dfn{hang} on the right side of the line, as in:
762 @example
763 @group
764
765 // here, open braces always `hang'
766 void spam( int i ) @{
767 if( i == 7 ) @{
768 dosomething(i);
769 @}
770 @}
771
772
773 @end group
774 @end example
775
776 When the list contains both @code{after} and @code{before}, the braces
777 will appear on a line by themselves, as shown by the close braces in the
778 above example. The list can also be empty, in which case no newlines
779 are added either before or after the brace.
780
781 If a syntactic symbol is missing entirely from
782 @code{c-hanging-braces-alist}, it's treated in the same way as an
783 @var{ACTION} with a list containing @code{before} and @code{after}, so
784 that braces by default end up on their own line.
785
786 For example, the default value of @code{c-hanging-braces-alist} is:
787 @example
788 @group
789
790 ((brace-list-open)
791 (brace-entry-open)
792 (substatement-open after)
793 (block-close . c-snug-do-while)
794 (extern-lang-open after)
795 (inexpr-class-open after)
796 (inexpr-class-close before))
797
798 @end group
799 @end example
800
801 @noindent which says that @code{brace-list-open} and
802 @code{brace-entry-open} braces should both hang on the right side, and
803 allow subsequent text to follow on the same line as the brace. Also,
804 @code{substatement-open}, @code{extern-lang-open}, and
805 @code{inexpr-class-open} braces should hang on the right side, but
806 subsequent text should follow on the next line. The opposite holds for
807 @code{inexpr-class-close} braces; they won't hang, but the following
808 text continues on the same line. Here, in the @code{block-close} entry,
809 you also see an example of using a function as an @var{ACTION}. In all
810 other cases, braces are put on a line by themselves.
811
812 A word of caution: it is not a good idea to hang top-level construct
813 introducing braces, such as @code{class-open} or @code{defun-open}.
814 Emacs makes an assumption that such braces will always appear in column
815 zero, hanging them can introduce performance problems.
816 @xref{Performance Issues}, for more information.
817
818
819 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
820 @node Hanging Colons, Hanging Semi-colons and Commas, Hanging Braces, Auto-newline Insertion
821 @comment node-name, next, previous, up
822 @subsection Hanging Colons
823 @cindex hanging colons
824 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
825
826 @vindex hanging-colons-alist (c-)
827 @vindex c-hanging-colons-alist
828 Using a mechanism similar to brace hanging (@pxref{Hanging Braces}),
829 colons can also be made to hang using the style variable
830 @code{c-hanging-colons-alist}. The syntactic symbols appropriate for
831 this association list are: @code{case-label}, @code{label},
832 @code{access-label}, @code{member-init-intro}, and @code{inher-intro}.
833 Note however that for @code{c-hanging-colons-alist}, @var{ACTION}s as
834 functions are not supported. See also @ref{Custom Brace and Colon
835 Hanging} for details.
836
837 In C++, double-colons are used as a scope operator but because these
838 colons always appear right next to each other, newlines before and after
839 them are controlled by a different mechanism, called @dfn{clean-ups} in
840 @ccmode{}. @xref{Clean-ups}, for details.
841
842
843 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
844 @node Hanging Semi-colons and Commas, Other Electric Commands, Hanging Colons, Auto-newline Insertion
845 @comment node-name, next, previous, up
846 @subsection Hanging Semi-colons and Commas
847 @cindex hanging semi-colons
848 @cindex hanging commas
849 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
850
851 Semicolons and commas are also electric in @ccmode{}, but since
852 these characters do not correspond directly to syntactic symbols, a
853 different mechanism is used to determine whether newlines should be
854 automatically inserted after these characters. @xref{Customizing
855 Semi-colons and Commas}, for details.
856
857
858 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
859 @node Other Electric Commands, Clean-ups, Hanging Semi-colons and Commas, Auto-newline Insertion
860 @comment node-name, next, previous, up
861 @subsection Other Electric Commands
862 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
863
864 @kindex #
865 @findex c-electric-pound
866 @vindex c-electric-pound-behavior
867 @findex electric-pound (c-)
868 @vindex electric-pound-behavior (c-)
869 A few other keys also provide electric behavior. For example
870 @kbd{#} (@code{c-electric-pound}) is electric when typed as
871 the first non-whitespace character on a line. In this case, the
872 variable @code{c-electric-pound-behavior} is consulted for the electric
873 behavior. This variable takes a list value, although the only element
874 currently defined is @code{alignleft}, which tells this command to force
875 the @samp{#} character into column zero. This is useful for entering
876 C preprocessor macro definitions.
877
878 @findex c-electric-star
879 @findex c-electric-slash
880 @findex electric-star (c-)
881 @findex electric-slash (c-)
882 Stars and slashes (i.e. @kbd{*} and @kbd{/}, @code{c-electric-star} and
883 @code{c-electric-slash} respectively) are also electric under
884 certain circumstances. If a star is inserted as the second character of
885 a C style block comment on a comment-only line, then the comment
886 delimiter is indented as defined by @code{c-offsets-alist}. A
887 comment-only line is defined as a line which contains only a comment, as
888 in:
889 @example
890 @group
891
892 void spam( int i )
893 @{
894 // this is a comment-only line...
895 if( i == 7 ) // but this is not
896 @{
897 dosomething(i);
898 @}
899 @}
900
901 @end group
902 @end example
903
904 Likewise, if a slash is inserted as the second slash in a C++ style line
905 comment (also only on a comment-only line), then the line is indented as
906 defined by @code{c-offsets-alist}.
907
908 @findex c-electric-lt-gt
909 @findex electric-lt-gt (c-)
910 @kindex <
911 @kindex >
912 Less-than and greater-than signs (@code{c-electric-lt-gt}) are also
913 electric, but only in C++ mode. Hitting the second of two @kbd{<} or
914 @kbd{>} keys re-indents the line if it is a C++ style stream operator.
915
916 @findex c-electric-paren
917 @findex electric-paren (c-)
918 @kindex (
919 @kindex )
920 The normal parenthesis characters @samp{(} and @samp{)} also reindent
921 the current line if they are used in normal code. This is useful for
922 getting the closing parenthesis of an argument list aligned
923 automatically.
924
925
926 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
927 @node Clean-ups, , Other Electric Commands, Auto-newline Insertion
928 @comment node-name, next, previous, up
929 @subsection Clean-ups
930 @cindex clean-ups
931 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
932
933 @dfn{Clean-ups} are mechanisms complementary to colon and brace hanging.
934 On the surface, it would seem that clean-ups overlap the functionality
935 provided by the @code{c-hanging-*-alist} variables. Clean-ups are
936 however used to adjust code ``after-the-fact,'' i.e. to adjust the
937 whitespace in constructs after they are typed.
938
939 Most of the clean-ups are only applicable to counteract automatically
940 inserted newlines, and will therefore only have any effect if the
941 auto-newline minor mode is turned on. Others will work all the time.
942
943 @vindex c-cleanup-list
944 @vindex cleanup-list (c-)
945 @cindex literal
946 You can configure @ccmode{}'s clean-ups by setting the style variable
947 @code{c-cleanup-list}, which is a list of clean-up symbols. By default,
948 @ccmode{} cleans up only the @code{scope-operator} construct, which is
949 necessary for proper C++ support. Note that clean-ups are only
950 performed when the construct does not occur within a literal
951 (@pxref{Auto-newline Insertion}), and when there is nothing but
952 whitespace appearing between the individual components of the construct.
953
954 These are the clean-ups that only are active in the auto-newline minor
955 mode:
956
957 @itemize @bullet
958 @item
959 @code{brace-else-brace} --- Clean up @samp{@} else @{} constructs by
960 placing the entire construct on a single line. Clean-up occurs when the
961 open brace after the @samp{else} is typed. So for example, this:
962 @example
963 @group
964
965 void spam(int i)
966 @{
967 if( i==7 )
968 @{
969 dosomething();
970 @}
971 else
972 @{
973
974 @end group
975 @end example
976 @noindent
977 appears like this after the open brace is typed:
978 @example
979 @group
980
981 void spam(int i)
982 @{
983 if( i==7 ) @{
984 dosomething();
985 @} else @{
986
987 @end group
988 @end example
989
990 @item
991 @code{brace-elseif-brace} --- Similar to the @code{brace-else-brace}
992 clean-up, but this cleans up @samp{@} else if (...) @{} constructs. For
993 example:
994 @example
995 @group
996
997 void spam(int i)
998 @{
999 if( i==7 )
1000 @{
1001 dosomething();
1002 @}
1003 else if( i==3 )
1004 @{
1005
1006 @end group
1007 @end example
1008 @noindent
1009 appears like this after the open parenthesis is typed:
1010 @example
1011 @group
1012
1013 void spam(int i)
1014 @{
1015 if( i==7 ) @{
1016 dosomething();
1017 @} else if( i==3 )
1018 @{
1019
1020 @end group
1021 @end example
1022 @noindent
1023 and like this after the open brace is typed:
1024 @example
1025 @group
1026
1027 void spam(int i)
1028 @{
1029 if( i==7 ) @{
1030 dosomething();
1031 @} else if( i==3 ) @{
1032
1033 @end group
1034 @end example
1035
1036 @item
1037 @code{brace-catch-brace} --- Analogous to @code{brace-elseif-brace}, but
1038 cleans up @samp{@} catch (...) @{} in C++ and Java mode.
1039
1040 @item
1041 @code{empty-defun-braces} --- Clean up braces following a top-level
1042 function or class definition that contains no body. Clean up occurs
1043 when the closing brace is typed. Thus the following:
1044 @example
1045 @group
1046
1047 class Spam
1048 @{
1049 @}
1050
1051 @end group
1052 @end example
1053 @noindent
1054 is transformed into this when the close brace is typed:
1055 @example
1056 @group
1057
1058 class Spam
1059 @{@}
1060
1061 @end group
1062 @end example
1063
1064 @item
1065 @code{defun-close-semi} --- Clean up the terminating semi-colon on
1066 top-level function or class definitions when they follow a close
1067 brace. Clean up occurs when the semi-colon is typed.
1068 So for example, the following:
1069 @example
1070 @group
1071
1072 class Spam
1073 @{
1074 @}
1075 ;
1076
1077 @end group
1078 @end example
1079 @noindent
1080 is transformed into this when the semi-colon is typed:
1081
1082 @example
1083 @group
1084
1085 class Spam
1086 @{
1087 @};
1088
1089 @end group
1090 @end example
1091
1092 @item
1093 @code{list-close-comma} --- Clean up commas following braces in array
1094 and aggregate initializers. Clean up occurs when the comma is typed.
1095
1096 @item
1097 @code{scope-operator} --- Clean up double colons which may designate a
1098 C++ scope operator split across multiple lines@footnote{Certain C++
1099 constructs introduce ambiguous situations, so @code{scope-operator}
1100 clean-ups may not always be correct. This usually only occurs when
1101 scoped identifiers appear in switch label tags.}. Clean up occurs when
1102 the second colon is typed. You will always want @code{scope-operator}
1103 in the @code{c-cleanup-list} when you are editing C++ code.
1104
1105 @end itemize
1106
1107 The following clean-ups are always active when they occur on
1108 @code{c-cleanup-list}, and are thus not affected by the auto-newline
1109 minor mode:
1110
1111 @itemize @bullet
1112 @item
1113 @code{space-before-funcall} --- Insert a space between the function name
1114 and the opening parenthesis of a function call. This produces function
1115 calls in the style mandated by the GNU coding standards,
1116 e.g. @samp{signal (SIGINT, SIG_IGN)} and @samp{abort ()}. Clean up
1117 occurs when the opening parenthesis is typed.
1118
1119 @item
1120 @code{compact-empty-funcall} --- Clean up any space between the function
1121 name and the opening parenthesis of a function call that have no
1122 arguments. This is typically used together with
1123 @code{space-before-funcall} if you prefer the GNU function call style
1124 for functions with arguments but think it looks ugly when it's only an
1125 empty parenthesis pair. I.e. you will get @samp{signal (SIGINT,
1126 SIG_IGN)}, but @samp{abort()}. Clean up occurs when the closing
1127 parenthesis is typed.
1128
1129 @end itemize
1130
1131
1132 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1133 @node Hungry-deletion of Whitespace, , Auto-newline Insertion, Minor Modes
1134 @comment node-name, next, previous, up
1135 @section Hungry-deletion of Whitespace
1136 @cindex hungry-deletion of whitespace
1137 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1138
1139 Hungry deletion of whitespace, or as it more commonly called,
1140 @dfn{hungry-delete mode}, is a simple feature that some people find
1141 extremely useful. In fact, you might find yourself wanting
1142 hungry-delete in @strong{all} your editing modes!
1143
1144 @kindex DEL
1145 @kindex Backspace
1146 In a nutshell, when hungry-delete mode is enabled, hitting the
1147 @key{Backspace} key@footnote{I say ``hit the @key{Backspace} key'' but
1148 what I really mean is ``when Emacs receives the @code{BackSpace} key
1149 event.'' The difference usually isn't significant to most users, but
1150 advanced users will realize that under window systems such as X, any
1151 physical key (keycap) on the keyboard can be configured to generate any
1152 keysym, and thus any Emacs key event. Also, the use of Emacs on TTYs
1153 will affect which keycap generates which key event. From a pedantic
1154 point of view, here we are only concerned with the key event that
1155 Emacs receives.} will consume all preceding whitespace, including
1156 newlines and tabs. This can really cut down on the number of
1157 @key{Backspace}'s you have to type if, for example you made a mistake on
1158 the preceding line.
1159
1160 @findex c-electric-backspace
1161 @findex electric-backspace (c-)
1162 @vindex c-backspace-function
1163 @vindex backspace-function (c-)
1164
1165 @findex c-electric-delete
1166 @findex electric-delete (c-)
1167 @vindex c-delete-function
1168 @vindex delete-function (c-)
1169 @cindex literal
1170
1171 @findex backward-delete-char-untabify
1172
1173 By default, when you hit the @key{Backspace} key @ccmode{} runs the
1174 command @code{c-electric-backspace}, which deletes text in the backwards
1175 direction. When deleting a single character, or when @key{Backspace} is
1176 hit in a literal (@pxref{Auto-newline Insertion}), or when hungry-delete
1177 mode is disabled, the function contained in the
1178 @code{c-backspace-function} variable is called with one argument (the
1179 number of characters to delete). This variable is set to
1180 @code{backward-delete-char-untabify} by default.
1181
1182 @vindex delete-key-deletes-forward
1183 @findex delete-char
1184
1185 The default behavior of the @key{Delete} key depends on the flavor of
1186 Emacs you are using. By default in XEmacs 20.3 and beyond, the
1187 @key{Delete} key is bound to @code{c-electric-delete}. You control the
1188 direction that the @key{Delete} key deletes by setting the variable
1189 @code{delete-key-deletes-forward}, a standard XEmacs variable. When
1190 this variable is non-@code{nil} and hungry-delete mode is enabled,
1191 @code{c-electric-delete} will consume all whitespace @emph{following}
1192 point. When @code{delete-key-deletes-forward} is @code{nil}, it deletes
1193 all whitespace @emph{preceding} point@footnote{i.e. it literally calls
1194 @code{c-electric-backspace}.} When deleting a single character, or if
1195 @key{Delete} is hit in a literal, or hungry-delete mode is disabled, the
1196 function contained in @code{c-delete-function} is called with one
1197 argument: the number of characters to delete. This variable is set to
1198 @code{delete-char} by default.
1199
1200 In Emacs 19 or Emacs 20, both the @key{Delete} and @key{Backspace} keys
1201 are bound to @code{c-electric-backspace}, however you can change this by
1202 explicitly binding @code{[delete]}@footnote{E.g. to
1203 @code{c-electric-delete} in your @file{.emacs} file. Note however, that
1204 Emacs 20 does not have a standard variable such as
1205 @code{delete-key-deletes-forward}.}.
1206
1207 XEmacsen older than 20.3 behave similar to Emacs 19 and Emacs 20.
1208
1209
1210 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1211 @node Text Filling and Line Breaking, Commands, Minor Modes, Top
1212 @comment node-name, next, previous, up
1213 @chapter Text Filling and Line Breaking
1214 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1215
1216 Since there's a lot of normal text in comments and string literals,
1217 @ccmode{} provides features to edit these like in text mode. The goal
1218 is to do it as seamlessly as possible, i.e. you can use auto fill mode,
1219 sentence and paragraph movement, paragraph filling, adaptive filling etc
1220 wherever there's a piece of normal text without having to think much
1221 about it. @ccmode{} should keep the indentation, fix the comment line
1222 decorations, and so on, for you. It does that by hooking in on the
1223 different line breaking functions and tuning relevant variables as
1224 necessary.
1225
1226 @vindex c-comment-prefix-regexp
1227 @vindex comment-prefix-regexp (c-)
1228 @cindex comment line prefix
1229 @vindex comment-start
1230 @vindex comment-end
1231 @vindex comment-start-skip
1232 @vindex paragraph-start
1233 @vindex paragraph-separate
1234 @vindex paragraph-ignore-fill-prefix
1235 @vindex adaptive-fill-mode
1236 @vindex adaptive-fill-regexp
1237 @vindex adaptive-fill-first-line-regexp
1238 To make Emacs recognize comments and treat text in them as normal
1239 paragraphs, @ccmode{} makes several standard
1240 variables@footnote{@code{comment-start}, @code{comment-end},
1241 @code{comment-start-skip}, @code{paragraph-start},
1242 @code{paragraph-separate}, @code{paragraph-ignore-fill-prefix},
1243 @code{adaptive-fill-mode}, @code{adaptive-fill-regexp}, and
1244 @code{adaptive-fill-first-line-regexp}.} buffer local and modifies them
1245 according to the language syntax and the style of line decoration that
1246 starts every line in a comment. The style variable
1247 @code{c-comment-prefix-regexp} contains the regexp used to recognize
1248 this @dfn{comment line prefix}. The default is @samp{//+\\|\\**}, which
1249 matches C++ style line comments like
1250 @example
1251
1252 // blah blah
1253
1254 @end example
1255
1256 @noindent
1257 with two or more slashes in front of them, and C style block comments
1258 like
1259 @example
1260 @group
1261
1262 /*
1263 * blah blah
1264 */
1265
1266 @end group
1267 @end example
1268
1269 @noindent
1270 with zero or more stars at the beginning of every line. If you change
1271 that variable, please make sure it still matches the comment starter
1272 (i.e. @code{//}) of line comments @emph{and} the line prefix inside
1273 block comments. Also note that since @ccmode{} uses the value of
1274 @code{c-comment-prefix-regexp} to set up several other variables at mode
1275 initialization, you need to reinitialize the program mode if you change
1276 it inside a @ccmode{} buffer.
1277
1278 @findex auto-fill-mode
1279 @cindex auto fill mode
1280 @cindex paragraph fill
1281 Line breaks are by default handled (almost) the same regardless whether
1282 they are made by auto fill mode (@pxref{Auto Fill,,, emacs, The Emacs
1283 Editor}), paragraph filling (e.g. with @kbd{M-q}), or explicitly with
1284 @kbd{M-j} or similar methods. In string literals, the new line gets the
1285 same indentation as the previous nonempty line (may be changed with the
1286 @code{string} syntactic symbol). In comments, @ccmode{} uses
1287 @code{c-comment-prefix-regexp} to adapt the line prefix from the other
1288 lines in the comment.
1289
1290 @vindex adaptive-fill-mode
1291 @cindex adaptive fill mode
1292 @ccmode{} uses adaptive fill mode (@pxref{Adaptive Fill,,, emacs, The
1293 Emacs Editor}) to make Emacs correctly keep the line prefix when filling
1294 paragraphs. That also makes Emacs preserve the text indentation
1295 @emph{inside} the comment line prefix. E.g. in the following comment,
1296 both paragraphs will be filled with the left margins kept intact:
1297 @example
1298 @group
1299
1300 /* Make a balanced b-tree of the nodes in the incoming
1301 * stream. But, to quote the famous words of Donald E.
1302 * Knuth,
1303 *
1304 * Beware of bugs in the above code; I have only
1305 * proved it correct, not tried it.
1306 */
1307
1308 @end group
1309 @end example
1310
1311 @findex c-setup-filladapt
1312 @findex setup-filladapt (c-)
1313 @findex filladapt-mode
1314 @vindex filladapt-mode
1315 @cindex Filladapt mode
1316 It's also possible to use other adaptive filling packages, notably Kyle
1317 E. Jones' Filladapt package@footnote{It's available from
1318 @uref{http://www.wonderworks.com/}. As of version 2.12, it does however
1319 lack a feature that makes it work suboptimally when
1320 @code{c-comment-prefix-regexp} matches the empty string (which it does
1321 by default). A patch for that is available from
1322 @uref{http://cc-mode.sourceforge.net/,, the CC Mode site}.},
1323 which handles things like bulleted lists nicely. There's a convenience
1324 function @code{c-setup-filladapt} that tunes the relevant variables in
1325 Filladapt for use in @ccmode{}. Call it from a mode hook, e.g. with
1326 something like this in your @file{.emacs}:
1327 @example
1328 @group
1329
1330 (defun my-c-mode-common-hook ()
1331 (c-setup-filladapt)
1332 (filladapt-mode 1))
1333 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
1334
1335 @end group
1336 @end example
1337
1338 @vindex c-block-comment-prefix
1339 @vindex block-comment-prefix (c-)
1340 @vindex c-comment-continuation-stars
1341 @vindex comment-continuation-stars (c-)
1342 Normally the comment line prefix inserted for a new line inside a
1343 comment is deduced from other lines in it. However there's one
1344 situation when there's no clue about how the prefix should look, namely
1345 when a block comment is broken for the first time. The string in the
1346 style variable @code{c-block-comment-prefix}@footnote{In versions before
1347 5.26, this variable was called @code{c-comment-continuation-stars}. As
1348 a compatibility measure, @ccmode{} still uses the value on that variable
1349 if it's set.} is used in that case. It defaults to @samp{* }, which
1350 makes a comment
1351 @example
1352
1353 /* Got O(n^2) here, which is a Bad Thing. */
1354
1355 @end example
1356
1357 @noindent
1358 break into
1359 @example
1360 @group
1361
1362 /* Got O(n^2) here,
1363 * which is a Bad Thing. */
1364
1365 @end group
1366 @end example
1367
1368 Note that it won't work to justify the indentation by putting leading
1369 spaces in the @code{c-block-comment-prefix} string, since @ccmode{}
1370 still uses the normal indentation engine to indent the line. Thus, the
1371 right way to fix the indentation is by setting the @code{c} syntactic
1372 symbol. It defaults to @code{c-lineup-C-comments}, which handles the
1373 indentation of most common comment styles, see @ref{Indentation
1374 Functions}.
1375
1376 @vindex c-ignore-auto-fill
1377 @vindex ignore-auto-fill (c-)
1378 When auto fill mode is enabled, @ccmode{} can selectively ignore it
1379 depending on the context the line break would occur in, e.g. to never
1380 break a line automatically inside a string literal. This behavior can
1381 be controlled with the @code{c-ignore-auto-fill} variable. It takes a
1382 list of symbols for the different contexts where auto-filling never
1383 should occur:
1384
1385 @itemize @bullet
1386 @item @code{string} --- Inside a string or character literal.
1387 @item @code{c} --- Inside a C style block comment.
1388 @item @code{c++} --- Inside a C++ style line comment.
1389 @item @code{cpp} --- Inside a preprocessor directive.
1390 @item @code{code} --- Anywhere else, i.e. in normal code.
1391 @end itemize
1392
1393 By default, @code{c-ignore-auto-fill} is set to @code{'(string cpp
1394 code)}, which means that auto-filling only occurs in comments when
1395 auto-fill mode is activated. In literals, it's often desirable to have
1396 explicit control over newlines. In preprocessor directives, the
1397 necessary @samp{\} escape character before the newline is not
1398 automatically inserted, so an automatic line break would produce invalid
1399 code. In normal code, line breaks are normally dictated by some logical
1400 structure in the code rather than the last whitespace character, so
1401 automatic line breaks there will produce poor results in the current
1402 implementation.
1403
1404 The commands that does the actual work follows.
1405
1406 @table @asis
1407
1408 @kindex M-q
1409 @findex c-fill-paragraph
1410 @findex fill-paragraph (c-)
1411 @cindex Javadoc markup
1412 @cindex Pike autodoc markup
1413 @item @kbd{M-q} (@code{c-fill-paragraph})
1414 This is the replacement for @code{fill-paragraph} in @ccmode{}
1415 buffers. It's used to fill multiline string literals and both block and
1416 line style comments. In Java buffers, the Javadoc markup words are
1417 recognized as paragraph starters. The line oriented Pike autodoc markup
1418 words are recognized in the same way in Pike mode.
1419
1420 The function keeps the comment starters and enders of block comments as
1421 they were before the filling. This means that a comment ender on the
1422 same line as the paragraph being filled will be filled with the
1423 paragraph, and one on a line by itself will stay as it is. The comment
1424 starter is handled similarly@footnote{This means that the variables
1425 @code{c-hanging-comment-starter-p} and @code{c-hanging-comment-ender-p},
1426 which controlled this behavior in earlier versions of @ccmode{}, are now
1427 obsolete.}.
1428
1429 @kindex M-j
1430 @findex c-indent-new-comment-line
1431 @findex indent-new-comment-line (c-)
1432 @item @kbd{M-j} (@code{c-indent-new-comment-line})
1433 This is the replacement for @code{indent-new-comment-line}. It breaks
1434 the line at point and indents the new line like the current one.
1435
1436 @vindex comment-multi-line
1437 If inside a comment and @code{comment-multi-line} is non-@code{nil}, the
1438 indentation and line prefix are preserved. If inside a comment and
1439 @code{comment-multi-line} is @code{nil}, a new comment of the same type
1440 is started on the next line and indented as appropriate for comments.
1441
1442 @findex c-context-line-break
1443 @findex context-line-break (c-)
1444 @item @kbd{M-x c-context-line-break}
1445 This is a function that works like @code{indent-new-comment-line} in
1446 comments and @code{newline-and-indent} elsewhere, thus combining those
1447 two in a way that uses each one in the context it's best suited for.
1448 I.e. in comments the comment line prefix and indentation is kept for the
1449 new line, and in normal code it's indented according to context by the
1450 indentation engine.
1451
1452 It's not bound to a key by default, but it's intended to be used on the
1453 @kbd{RET} key. If you like the behavior of @code{newline-and-indent} on
1454 @kbd{RET}, you might consider switching to this function.
1455
1456 @end table
1457
1458
1459 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1460 @node Commands, Customizing Indentation, Text Filling and Line Breaking, Top
1461 @comment node-name, next, previous, up
1462 @chapter Commands
1463 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1464
1465 @menu
1466 * Indentation Commands::
1467 * Movement Commands::
1468 * Other Commands::
1469 @end menu
1470
1471 See also @ref{Text Filling and Line Breaking}, for commands concerning
1472 that bit.
1473
1474
1475 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1476 @node Indentation Commands, Movement Commands, , Commands
1477 @comment node-name, next, previous,up
1478 @section Indentation Commands
1479 @cindex indentation commands
1480 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1481
1482 The following list of commands re-indent C constructs. Note that when
1483 you change your coding style, either interactively or through some other
1484 means, your file does @emph{not} automatically get re-indented. You
1485 will need to execute one of the following commands to see the effects of
1486 your changes.
1487
1488 @cindex GNU indent program
1489 Also, variables like @code{c-hanging-*} and @code{c-cleanup-list}
1490 only affect how on-the-fly code is formatted. Changing the
1491 ``hanginess'' of a brace and then re-indenting, will not move the brace
1492 to a different line. For this, you're better off getting an external
1493 program like GNU @code{indent}, which will re-arrange brace location,
1494 among other things.
1495
1496 Re-indenting large sections of code can take a long time. When
1497 @ccmode{} reindents a region of code, it is essentially equivalent to
1498 hitting @kbd{TAB} on every line of the region. Especially vulnerable is
1499 code generator output@footnote{In particular, I have had people
1500 complain about the speed with which @code{lex(1)} output is re-indented.
1501 Lex, yacc, and other code generators usually output some pretty
1502 perversely formatted code. Re-indenting such code will be slow.}.
1503
1504 These commands are useful when indenting code:
1505
1506 @table @asis
1507
1508 @kindex TAB
1509 @findex c-indent-command
1510 @findex indent-command (c-)
1511 @item @kbd{TAB} (@code{c-indent-command})
1512 Indents the current line. The actual behavior is controlled by several
1513 variables, described below. See @code{c-tab-always-indent},
1514 @code{c-insert-tab-function}, and @code{indent-tabs-mode}. With a
1515 numeric argument, this command rigidly indents the region, preserving
1516 the relative indentation among the lines.
1517
1518 @kindex C-M-q
1519 @findex c-indent-exp
1520 @findex indent-exp (c-)
1521 @item @kbd{C-M-q} (@code{c-indent-exp})
1522 Indent an entire balanced brace or parenthesis expression. Note that
1523 point must be on the opening brace or parenthesis of the expression you
1524 want to indent.
1525
1526 @kindex C-c C-q
1527 @findex c-indent-defun
1528 @findex indent-defun (c-)
1529 @item @kbd{C-c C-q} (@code{c-indent-defun})
1530 Indents the entire top-level function or class definition encompassing
1531 point. It leaves point unchanged. This function can't be used to
1532 re-indent a nested brace construct, such as a nested class or function,
1533 or a Java method. The top-level construct being re-indented must be
1534 complete, i.e. it must have both a beginning brace and an ending brace.
1535
1536 @kindex C-M-\
1537 @findex indent-region
1538 @item @kbd{C-M-\} (@code{indent-region})
1539 Indents an arbitrary region of code. This is a standard Emacs command,
1540 tailored for C code in a @ccmode{} buffer. Note that of course, point
1541 and mark must delineate the region you want to indent.
1542
1543 @kindex C-M-h
1544 @findex c-mark-function
1545 @findex mark-function (c-)
1546 @item @kbd{C-M-h} (@code{c-mark-function})
1547 While not strictly an indentation command, this is useful for marking
1548 the current top-level function or class definition as the current
1549 region. As with @code{c-indent-defun}, this command operates on
1550 top-level constructs, and can't be used to mark say, a Java method.
1551
1552 @end table
1553
1554 These variables are also useful when indenting code:
1555
1556 @table @code
1557
1558 @vindex c-tab-always-indent
1559 @vindex tab-always-indent (c-)
1560 @kindex TAB
1561 @cindex literal
1562 @item c-tab-always-indent
1563 This variable controls how @kbd{TAB} @code{c-indent-command} operates.
1564 When this variable is @code{t}, @kbd{TAB} always just indents the
1565 current line. When it is @code{nil}, the line is indented only if point
1566 is at the left margin, or on or before the first non-whitespace
1567 character on the line, otherwise some whitespace is inserted. If this
1568 variable is the symbol @code{other}, then some whitespace is inserted
1569 only within strings and comments (literals), an inside preprocessor
1570 directives, but the line is always reindented.
1571
1572 @vindex c-insert-tab-function
1573 @vindex insert-tab-function (c-)
1574 @findex tab-to-tab-stop
1575 @item c-insert-tab-function
1576 When ``some whitespace'' is inserted as described above, what actually
1577 happens is that the function stored in @code{c-insert-tab-function} is
1578 called. Normally, this just inserts a real tab character, or the
1579 equivalent number of spaces, depending on @code{indent-tabs-mode}.
1580 Some people, however, set @code{c-insert-tab-function} to
1581 @code{tab-to-tab-stop} so as to get hard tab stops when indenting.
1582
1583 @vindex indent-tabs-mode
1584 @item indent-tabs-mode
1585 This is a standard Emacs variable that controls how line indentation is
1586 composed. When this variable is non-@code{nil}, then tabs can be used
1587 in a line's indentation, otherwise only spaces can be used.
1588
1589 @vindex c-progress-interval
1590 @vindex progress-interval (c-)
1591 @item c-progress-interval
1592 When indenting large regions of code, this variable controls how often a
1593 progress message is displayed. Set this variable to @code{nil} to
1594 inhibit the progress messages, or set it to an integer which is the
1595 interval in seconds that progress messages are displayed.
1596
1597 @end table
1598
1599
1600 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1601 @node Movement Commands, Other Commands, Indentation Commands, Commands
1602 @comment node-name, next, previous, up
1603 @section Movement Commands
1604 @cindex movement commands
1605 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1606
1607 @ccmode{} contains some useful command for moving around in C
1608 code.
1609
1610 @table @asis
1611
1612 @findex c-beginning-of-defun
1613 @findex beginning-of-defun (c-)
1614 @findex beginning-of-defun
1615 @item @kbd{M-x c-beginning-of-defun}
1616 Moves point back to the least-enclosing brace. This function is
1617 analogous to the Emacs built-in command @code{beginning-of-defun},
1618 except it eliminates the constraint that the top-level opening brace
1619 must be in column zero. See @code{beginning-of-defun} for more
1620 information.
1621
1622 Depending on the coding style being used, you might prefer
1623 @code{c-beginning-of-defun} to @code{beginning-of-defun}. If so,
1624 consider binding @kbd{C-M-a} to the former instead. For backwards
1625 compatibility reasons, the default binding remains in effect.
1626
1627 @findex c-end-of-defun
1628 @findex end-of-defun (c-)
1629 @findex end-of-defun
1630 @item @kbd{M-x c-end-of-defun}
1631 Moves point to the end of the current top-level definition. This
1632 function is analogous to the Emacs built-in command @code{end-of-defun},
1633 except it eliminates the constraint that the top-level opening brace of
1634 the defun must be in column zero. See @code{beginning-of-defun} for more
1635 information.
1636
1637 Depending on the coding style being used, you might prefer
1638 @code{c-end-of-defun} to @code{end-of-defun}. If so,
1639 consider binding @kbd{C-M-e} to the former instead. For backwards
1640 compatibility reasons, the default binding remains in effect.
1641
1642 @kindex C-c C-u
1643 @findex c-up-conditional
1644 @findex up-conditional (c-)
1645 @item @kbd{C-c C-u} (@code{c-up-conditional})
1646 Move point back to the containing preprocessor conditional, leaving the
1647 mark behind. A prefix argument acts as a repeat count. With a negative
1648 argument, move point forward to the end of the containing
1649 preprocessor conditional.
1650
1651 @samp{#elif} is treated like @samp{#else} followed by @samp{#if}, so the
1652 function stops at them when going backward, but not when going forward.
1653
1654 @findex c-up-conditional-with-else
1655 @findex up-conditional-with-else (c-)
1656 @item @kbd{M-x c-up-conditional-with-else}
1657 A variety of @code{c-up-conditional} that also stops at @samp{#else}
1658 lines. Normally those lines are ignored.
1659
1660 @findex c-down-conditional
1661 @findex down-conditional (c-)
1662 @item @kbd{M-x c-down-conditional}
1663 Move point forward into the next nested preprocessor conditional,
1664 leaving the mark behind. A prefix argument acts as a repeat count.
1665 With a negative argument, move point backward into the previous
1666 nested preprocessor conditional.
1667
1668 @samp{#elif} is treated like @samp{#else} followed by @samp{#if}, so the
1669 function stops at them when going forward, but not when going backward.
1670
1671 @findex c-down-conditional-with-else
1672 @findex down-conditional-with-else (c-)
1673 @item @kbd{M-x c-down-conditional-with-else}
1674 A variety of @code{c-down-conditional} that also stops at @samp{#else}
1675 lines. Normally those lines are ignored.
1676
1677 @kindex C-c C-p
1678 @findex c-backward-conditional
1679 @findex backward-conditional (c-)
1680 @item @kbd{C-c C-p} (@code{c-backward-conditional})
1681 Move point back over a preprocessor conditional, leaving the mark
1682 behind. A prefix argument acts as a repeat count. With a negative
1683 argument, move forward.
1684
1685 @kindex C-c C-n
1686 @findex c-forward-conditional
1687 @findex forward-conditional (c-)
1688 @item @kbd{C-c C-n} (@code{c-forward-conditional})
1689 Move point forward across a preprocessor conditional, leaving the mark
1690 behind. A prefix argument acts as a repeat count. With a negative
1691 argument, move backward.
1692
1693 @kindex M-a
1694 @findex c-beginning-of-statement
1695 @findex beginning-of-statement (c-)
1696 @item @kbd{M-a} (@code{c-beginning-of-statement})
1697 Move point to the beginning of the innermost C statement. If point is
1698 already at the beginning of a statement, move to the beginning of the
1699 closest preceding statement, even if that means moving into a block (you
1700 can use @kbd{C-M-b} to move over a balanced block). With prefix
1701 argument @var{n}, move back @var{n} @minus{} 1 statements.
1702
1703 If point is within or next to a comment or a string which spans more
1704 than one line, this command moves by sentences instead of statements.
1705
1706 When called from a program, this function takes three optional
1707 arguments: the repetition count, a buffer position limit which is the
1708 farthest back to search for the syntactic context, and a flag saying
1709 whether to do sentence motion in or near comments and multiline strings.
1710
1711 @kindex M-e
1712 @findex c-end-of-statement
1713 @findex end-of-statement (c-)
1714 @item @kbd{M-e} (@code{c-end-of-statement})
1715 Move point to the end of the innermost C statement. If point is at the
1716 end of a statement, move to the end of the next statement, even if it's
1717 inside a nested block (use @kbd{C-M-f} to move to the other side of the
1718 block). With prefix argument @var{n}, move forward @var{n} @minus{} 1
1719 statements.
1720
1721 If point is within or next to a comment or a string which spans more
1722 than one line, this command moves by sentences instead of statements.
1723
1724 When called from a program, this function takes three optional
1725 arguments: the repetition count, a buffer position limit which is the
1726 farthest back to search for the syntactic context, and a flag saying
1727 whether to do sentence motion in or near comments and multiline strings.
1728
1729 @findex c-forward-into-nomenclature
1730 @findex forward-into-nomenclature (c-)
1731 @item @kbd{M-x c-forward-into-nomenclature}
1732 A popular programming style, especially for object-oriented languages
1733 such as C++ is to write symbols in a mixed case format, where the first
1734 letter of each word is capitalized, and not separated by underscores.
1735 E.g. @samp{SymbolsWithMixedCaseAndNoUnderlines}.
1736
1737 This command moves point forward to next capitalized word. With prefix
1738 argument @var{n}, move @var{n} times.
1739
1740 @findex c-backward-into-nomenclature
1741 @findex backward-into-nomenclature (c-)
1742 @item @kbd{M-x c-backward-into-nomenclature}
1743 Move point backward to beginning of the next capitalized
1744 word. With prefix argument @var{n}, move @var{n} times. If
1745 @var{n} is negative, move forward.
1746
1747 @end table
1748
1749
1750 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1751 @node Other Commands, , Movement Commands, Commands
1752 @comment node-name, next, previous, up
1753 @section Other Commands
1754 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1755
1756 @ccmode{} contains a few other useful commands:
1757
1758 @table @asis
1759
1760 @kindex C-c :
1761 @findex c-scope-operator
1762 @findex scope-operator (c-)
1763 @item @kbd{C-c :} (@code{c-scope-operator})
1764 In C++, it is also sometimes desirable to insert the double-colon scope
1765 operator without performing the electric behavior of colon insertion.
1766 @kbd{C-c :} does just this.
1767
1768 @kindex C-c C-\
1769 @findex c-backslash-region
1770 @findex backslash-region (c-)
1771 @item @kbd{C-c C-\} (@code{c-backslash-region})
1772 This function is handy when editing macros split over several lines by
1773 ending each line with a backslash. It inserts and aligns, or deletes
1774 these end-of-line backslashes in the current region.
1775
1776 @vindex c-backslash-column
1777 @vindex backslash-column (c-)
1778 With no prefix argument, it inserts any missing backslashes and aligns
1779 them to the column specified by the @code{c-backslash-column} style
1780 variable. With a prefix argument, it deletes any backslashes.
1781
1782 The function does not modify blank lines at the start of the region. If
1783 the region ends at the start of a line, it always deletes the backslash
1784 (if any) at the end of the previous line.
1785
1786 @end table
1787
1788
1789 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1790 @node Customizing Indentation, Syntactic Symbols, Commands, Top
1791 @comment node-name, next, previous, up
1792 @chapter Customizing Indentation
1793 @cindex customizing indentation
1794 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1795
1796 @vindex c-offsets-alist
1797 @vindex offsets-alist (c-)
1798 The style variable @code{c-offsets-alist} contains the mappings between
1799 syntactic symbols and the offsets to apply for those symbols. It's set
1800 at mode initialization from a @emph{style} you may specify. Styles are
1801 groupings of syntactic symbol offsets and other style variable values.
1802 Most likely, you'll find that one of the pre-defined styles will suit
1803 your needs. @xref{Styles}, for an explanation of how to set up named
1804 styles.
1805
1806 Only syntactic symbols not already bound on @code{c-offsets-alist} will
1807 be set from styles. This means that any association you set on it, be
1808 it before or after mode initialization, will not be changed. The
1809 @code{c-offsets-alist} variable may therefore be used from e.g. the
1810 Customization interface@footnote{Available in Emacs 20 and later, and
1811 XEmacs 19.15 and later.} to easily change indentation offsets without
1812 having to bother about styles. Initially @code{c-offsets-alist} is
1813 empty, so that all syntactic symbols are set by the style system.
1814
1815 @kindex C-c C-o
1816 @findex c-set-offset
1817 @findex set-offset (c-)
1818 You can use the command @kbd{C-c C-o} (@code{c-set-offset}) as the way
1819 to set offsets, both interactively and from your mode
1820 hook@footnote{Obviously, you use the key binding interactively, and the
1821 function call programmatically!}.
1822
1823 @vindex c-basic-offset
1824 @vindex basic-offset (c-)
1825 The offset associated with any particular syntactic symbol can be any of
1826 an integer, a function or lambda expression, a variable name, a vector,
1827 a list, or one of the following symbols: @code{+}, @code{-}, @code{++},
1828 @code{--}, @code{*}, or @code{/}.
1829
1830 Those last special symbols describe an offset in multiples of the value
1831 of the style variable @code{c-basic-offset}. By defining a style's
1832 indentation in terms of this fundamental variable, you can change the
1833 amount of whitespace given to an indentation level while maintaining the
1834 same basic shape of your code. Here are the values that the special
1835 symbols correspond to:
1836
1837 @table @code
1838
1839 @item +
1840 @code{c-basic-offset} times 1
1841 @item -
1842 @code{c-basic-offset} times -1
1843 @item ++
1844 @code{c-basic-offset} times 2
1845 @item --
1846 @code{c-basic-offset} times -2
1847 @item *
1848 @code{c-basic-offset} times 0.5
1849 @item /
1850 @code{c-basic-offset} times -0.5
1851
1852 @end table
1853
1854 @cindex indentation functions
1855
1856 When a function is used as offset, it's called an @dfn{indentation
1857 function}. Such functions are useful when more context than just the
1858 syntactic symbol is needed to get the desired indentation.
1859 @xref{Indentation Functions}, and @ref{Custom Indentation Functions},
1860 for details about them.
1861
1862 If the offset is a vector, its first element sets the absolute
1863 indentation column, which will override any relative indentation.
1864
1865 @vindex c-strict-syntax-p
1866 @vindex strict-syntax-p (c-)
1867 The offset can also be a list, in which case it is evaluated recursively
1868 using the semantics described above. The first element of the list that
1869 returns a non-@code{nil} value succeeds and the evaluation stops. If
1870 none of the list elements return a non-@code{nil} value, then an offset
1871 of 0 (zero) is used@footnote{There is however a variable
1872 @code{c-strict-syntax-p} that, when set to non-@code{nil}, will cause an
1873 error to be signaled in that case. It's now considered obsolete since
1874 it doesn't work well with some of the alignment functions that now
1875 returns @code{nil} instead of zero to be more usable in lists. You
1876 should therefore leave @code{c-strict-syntax-p} set to @code{nil}.}.
1877
1878 So, for example, because most of the default offsets are defined in
1879 terms of @code{+}, @code{-}, and @code{0}, if you like the general
1880 indentation style, but you use 4 spaces instead of 2 spaces per level,
1881 you can probably achieve your style just by changing
1882 @code{c-basic-offset} like so@footnote{You can try this interactively in
1883 a C buffer by typing the text that appears in italics.}:
1884 @example
1885
1886 @emph{M-x set-variable RET}
1887 Set variable: @emph{c-basic-offset RET}
1888 Set c-basic-offset to value: @emph{4 RET}
1889
1890 @end example
1891
1892 @noindent
1893 This would change
1894 @example
1895 @group
1896
1897 int add( int val, int incr, int doit )
1898 @{
1899 if( doit )
1900 @{
1901 return( val + incr );
1902 @}
1903 return( val );
1904 @}
1905
1906 @end group
1907 @end example
1908 @noindent
1909 to
1910 @example
1911 @group
1912
1913 int add( int val, int incr, int doit )
1914 @{
1915 if( doit )
1916 @{
1917 return( val + incr );
1918 @}
1919 return( val );
1920 @}
1921
1922 @end group
1923 @end example
1924
1925 To change indentation styles more radically, you will want to change the
1926 offsets associated with other syntactic symbols. First, I'll show you
1927 how to do that interactively, then I'll describe how to make changes to
1928 your @file{.emacs} file so that your changes are more permanent.
1929
1930 @menu
1931 * Interactive Customization::
1932 * Permanent Customization::
1933 * Hooks::
1934 * Styles::
1935 * Advanced Customizations::
1936 @end menu
1937
1938
1939 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1940 @node Interactive Customization, Permanent Customization, , Customizing Indentation
1941 @comment node-name, next, previous, up
1942 @section Interactive Customization
1943 @cindex interactive customization
1944 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1945
1946 As an example of how to customize indentation, let's change the
1947 style of this example@footnote{In this an subsequent examples, the
1948 original code is formatted using the @samp{gnu} style unless otherwise
1949 indicated. @xref{Styles}.}:
1950 @example
1951 @group
1952
1953 1: int add( int val, int incr, int doit )
1954 2: @{
1955 3: if( doit )
1956 4: @{
1957 5: return( val + incr );
1958 6: @}
1959 7: return( val );
1960 8: @}
1961
1962 @end group
1963 @end example
1964 @noindent
1965 to:
1966 @example
1967 @group
1968
1969 1: int add( int val, int incr, int doit )
1970 2: @{
1971 3: if( doit )
1972 4: @{
1973 5: return( val + incr );
1974 6: @}
1975 7: return( val );
1976 8: @}
1977
1978 @end group
1979 @end example
1980
1981 In other words, we want to change the indentation of braces that open a
1982 block following a condition so that the braces line up under the
1983 conditional, instead of being indented. Notice that the construct we
1984 want to change starts on line 4. To change the indentation of a line,
1985 we need to see which syntactic components affect the offset calculations
1986 for that line. Hitting @kbd{C-c C-s} on line 4 yields:
1987 @example
1988
1989 ((substatement-open . 44))
1990
1991 @end example
1992
1993 @noindent
1994 so we know that to change the offset of the open brace, we need to
1995 change the indentation for the @code{substatement-open} syntactic
1996 symbol. To do this interactively, just hit @kbd{C-c C-o}. This prompts
1997 you for the syntactic symbol to change, providing a reasonable default.
1998 In this case, the default is @code{substatement-open}, which is just the
1999 syntactic symbol we want to change!
2000
2001 After you hit return, @ccmode{} will then prompt you for the new
2002 offset value, with the old value as the default. The default in this
2003 case is @samp{+}, but we want no extra indentation so enter
2004 @samp{0} and @kbd{RET}. This will associate the offset 0 with the
2005 syntactic symbol @code{substatement-open}.
2006
2007 To check your changes quickly, just hit @kbd{C-c C-q}
2008 (@code{c-indent-defun}) to reindent the entire function. The example
2009 should now look like:
2010 @example
2011 @group
2012
2013 1: int add( int val, int incr, int doit )
2014 2: @{
2015 3: if( doit )
2016 4: @{
2017 5: return( val + incr );
2018 6: @}
2019 7: return( val );
2020 8: @}
2021
2022 @end group
2023 @end example
2024
2025 Notice how just changing the open brace offset on line 4 is all we
2026 needed to do. Since the other affected lines are indented relative to
2027 line 4, they are automatically indented the way you'd expect. For more
2028 complicated examples, this may not always work. The general approach to
2029 take is to always start adjusting offsets for lines higher up in the
2030 file, then re-indent and see if any following lines need further
2031 adjustments.
2032
2033
2034 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2035 @node Permanent Customization, Hooks, Interactive Customization, Customizing Indentation
2036 @comment node-name, next, previous, up
2037 @section Permanent Customization
2038 @cindex permanent customization
2039 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2040
2041 To make your changes permanent, you need to add some lisp code to your
2042 @file{.emacs} file. @ccmode{} supports many different ways to be
2043 configured, from the straightforward way by setting variables globally
2044 in @file{.emacs} or in the Customization interface, to the complex and
2045 precisely controlled way by using styles and hook functions.
2046
2047 The simplest way of customizing @ccmode{} permanently is to set the
2048 variables in your @file{.emacs} with @code{setq} and similar commands.
2049 So to make the setting of @code{substatement-open} permanent, add this
2050 to the @file{.emacs} file:
2051 @example
2052 @group
2053
2054 (require 'cc-mode)
2055 (c-set-offset 'substatement-open 0)
2056
2057 @end group
2058 @end example
2059
2060 The @code{require} line is only needed once in the beginning to make
2061 sure @ccmode{} is loaded so that the @code{c-set-offset} function is
2062 defined.
2063
2064 You can also use the more user friendly Customization interface, but
2065 this manual does not cover how that works.
2066
2067 Variables set like this at the top level in @file{.emacs} take effect in
2068 all @ccmode{} buffers, regardless of language. The indentation style
2069 related variables, e.g. @code{c-basic-offset}, that you don't set this
2070 way get their value from the style system (@pxref{Styles}), and they
2071 therefore depend on the setting of @code{c-default-style}. Note that if
2072 you use Customize, this means that the greyed-out default values
2073 presented there might not be the ones you actually get, since the actual
2074 values depend on the style, which may very well be different for
2075 different languages.
2076
2077 If you want to make more advanced configurations, e.g. language-specific
2078 customization, global variable settings isn't enough. For that you can
2079 use the language hooks, see @ref{Hooks}, and/or the style system, see
2080 @ref{Styles}.
2081
2082 @vindex c-style-variables-are-local-p
2083 @vindex style-variables-are-local-p (c-)
2084 By default, all style variables are global, so that every buffer will
2085 share the same style settings. This is fine if you primarily edit one
2086 style of code, but if you edit several languages and want to use
2087 different styles for them, you need finer control by making the style
2088 variables buffer local. The recommended way to do this is to set the
2089 variable @code{c-style-variables-are-local-p} to @code{t}. The
2090 variables will be made buffer local when @ccmode{} is activated in a
2091 buffer for the first time in the Emacs session. Note that once the
2092 style variables are made buffer local, they cannot be made global again,
2093 without restarting Emacs.
2094
2095
2096 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2097 @node Hooks, Styles, Permanent Customization, Customizing Indentation
2098 @comment node-name, next, previous, up
2099 @section Hooks
2100 @cindex hooks
2101 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2102
2103 @vindex c-mode-common-hook
2104 @vindex mode-common-hook (c-)
2105 @vindex c-mode-hook
2106 @vindex c++-mode-hook
2107 @vindex objc-mode-hook
2108 @vindex java-mode-hook
2109 @vindex idl-mode-hook
2110 @vindex pike-mode-hook
2111 @vindex c-initialization-hook
2112 @vindex initialization-hook (c-)
2113 @ccmode{} provides several hooks that you can use to customize the mode
2114 according to your coding style. Each language mode has its own hook,
2115 adhering to standard Emacs major mode conventions. There is also one
2116 general hook and one package initialization hook:
2117
2118 @itemize @bullet
2119
2120 @item
2121 @code{c-mode-hook} --- For C buffers only.
2122 @item
2123 @code{c++-mode-hook} --- For C++ buffers only.
2124 @item
2125 @code{objc-mode-hook} --- For Objective-C buffers only.
2126 @item
2127 @code{java-mode-hook} --- For Java buffers only.
2128 @item
2129 @code{idl-mode-hook} --- For CORBA IDL buffers only.
2130 @item
2131 @code{pike-mode-hook} --- For Pike buffers only.
2132 @item
2133 @code{c-mode-common-hook} --- Common across all languages.
2134 @item
2135 @code{c-initialization-hook} --- Hook run only once per Emacs session,
2136 when @ccmode{} is initialized.
2137
2138 @end itemize
2139
2140 The language hooks get run as the last thing when you enter that
2141 language mode. The @code{c-mode-common-hook} is run by all supported
2142 modes @emph{before} the language specific hook, and thus can contain
2143 customizations that are common across all languages. Most of the
2144 examples in this section will assume you are using the common hook.
2145
2146 Note that all the language-specific mode setup that CC Mode does is done
2147 prior to both @code{c-mode-common-hook} and the language specific hook.
2148 That includes installing the indentation style, which can be mode
2149 specific (and also is by default for Java mode). Thus, any style
2150 settings done in @code{c-mode-common-hook} will override whatever
2151 language-specific style is chosen by @code{c-default-style}.
2152
2153 Here's a simplified example of what you can add to your @file{.emacs}
2154 file to do things whenever any @ccmode{} language is edited. See the
2155 Emacs manuals for more information on customizing Emacs via hooks.
2156 @xref{Sample .emacs File}, for a more complete sample @file{.emacs}
2157 file.
2158 @example
2159 @group
2160
2161 (defun my-c-mode-common-hook ()
2162 ;; my customizations for all of c-mode and related modes
2163 (no-case-fold-search)
2164 )
2165 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
2166
2167 @end group
2168 @end example
2169
2170
2171 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2172 @node Styles, Advanced Customizations, Hooks, Customizing Indentation
2173 @comment node-name, next, previous, up
2174 @section Styles
2175 @cindex styles
2176 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2177
2178 Most people only need to edit code formatted in just a few well-defined
2179 and consistent styles. For example, their organization might impose a
2180 ``blessed'' style that all its programmers must conform to. Similarly,
2181 people who work on GNU software will have to use the GNU coding style.
2182 Some shops are more lenient, allowing a variety of coding styles, and as
2183 programmers come and go, there could be a number of styles in use. For
2184 this reason, @ccmode{} makes it convenient for you to set up logical
2185 groupings of customizations called @dfn{styles}, associate a single name
2186 for any particular style, and pretty easily start editing new or
2187 existing code using these styles.
2188
2189 @cindex style variables
2190 The variables that the style system affect are called @dfn{style
2191 variables}. They are handled specially in several ways:
2192
2193 @itemize @bullet
2194 @item
2195 Style variables are by default global variables, i.e. they have the same
2196 value in all Emacs buffers. However, they can instead be made always
2197 buffer local by setting @code{c-style-variables-are-local-p} to
2198 non-@code{nil} before @ccmode{} is initialized.
2199
2200 @vindex c-old-style-variable-behavior
2201 @vindex old-style-variable-behavior (c-)
2202 @item
2203 The default value of any style variable (with two exceptions --- see
2204 below) is the special symbol @code{set-from-style}. Variables that are
2205 still set to that symbol when a @ccmode{} buffer is initialized will be
2206 set according to the current style, otherwise they will keep their
2207 current value@footnote{This is a big change from versions of @ccmode{}
2208 earlier than 5.26, where such settings would get overridden by the style
2209 system unless special precautions were taken. That was changed since it
2210 was counterintuitive and confusing, especially to novice users. If your
2211 configuration depends on the old overriding behavior, you can set the
2212 variable @code{c-old-style-variable-behavior} to non-@code{nil}.}.
2213
2214 Note that when we talk about the ``default value'' for a style variable,
2215 we don't mean the @code{set-from-style} symbol that all style variables
2216 are set to initially, but instead the value it will get at mode
2217 initialization when neither a style nor a global setting has set its
2218 value.
2219
2220 The style variable @code{c-offsets-alist} is handled a little
2221 differently from the other style variables. It's an association list,
2222 and is thus by default set to the empty list, @code{nil}. When the
2223 style system is initialized, any syntactic symbols already on it are
2224 kept --- only the missing ones are filled in from the chosen style.
2225
2226 The style variable @code{c-special-indent-hook} is also handled in a
2227 special way. Styles may only add more functions on this hook, so the
2228 global settings on it are always preserved@footnote{This did not change
2229 in version 5.26.}.
2230
2231 @item
2232 The global settings of style variables get captured in the special
2233 @code{user} style, which is used as the base for all the other styles.
2234 @xref{Built-in Styles}, for details.
2235
2236 @end itemize
2237
2238 The style variables are:
2239 @code{c-basic-offset},
2240 @code{c-comment-only-line-offset},
2241 @code{c-block-comment-prefix},
2242 @code{c-comment-prefix-regexp},
2243 @code{c-cleanup-list},
2244 @code{c-hanging-braces-alist},
2245 @code{c-hanging-colons-alist},
2246 @code{c-hanging-semi&comma-criteria},
2247 @code{c-backslash-column},
2248 @code{c-special-indent-hook},
2249 @code{c-label-minimum-indentation}, and
2250 @code{c-offsets-alist}.
2251
2252 @menu
2253 * Built-in Styles::
2254 * Adding Styles::
2255 * File Styles::
2256 @end menu
2257
2258
2259 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2260 @node Built-in Styles, Adding Styles, , Styles
2261 @comment node-name, next, previous, up
2262 @subsection Built-in Styles
2263 @cindex built-in styles
2264 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2265
2266 If you're lucky, one of @ccmode{}'s built-in styles might be just
2267 what you're looking for. These include:
2268
2269 @itemize @bullet
2270 @cindex GNU style
2271 @item
2272 @code{gnu} --- Coding style blessed by the Free Software Foundation
2273 for C code in GNU programs.
2274
2275 @cindex K&R style
2276 @item
2277 @code{k&r} --- The classic Kernighan and Ritchie style for C code.
2278
2279 @cindex BSD style
2280 @item
2281 @code{bsd} --- Also known as ``Allman style'' after Eric Allman.
2282
2283 @cindex Whitesmiths style
2284 @item
2285 @code{whitesmith} --- Popularized by the examples that came with
2286 Whitesmiths C, an early commercial C compiler.
2287
2288 @cindex Stroustrup style
2289 @item
2290 @code{stroustrup} --- The classic Stroustrup style for C++ code.
2291
2292 @cindex Ellemtel style
2293 @item
2294 @code{ellemtel} --- Popular C++ coding standards as defined by
2295 ``Programming in C++, Rules and Recommendations,'' Erik Nyquist and Mats
2296 Henricson, Ellemtel@footnote{This document is available at
2297 @uref{http://www.doc.ic.ac.uk/lab/cplus/c++.rules/} among other
2298 places.}.
2299
2300 @cindex Linux style
2301 @item
2302 @code{linux} --- C coding standard for Linux (the kernel).
2303
2304 @cindex Python style
2305 @item
2306 @code{python} --- C coding standard for Python extension
2307 modules@footnote{Python is a high level scripting language with a C/C++
2308 foreign function interface. For more information, see
2309 @uref{http://www.python.org/}.}.
2310
2311 @cindex Java style
2312 @findex java-mode
2313 @item
2314 @code{java} --- The style for editing Java code. Note that the default
2315 value for @code{c-default-style} installs this style when you enter
2316 @code{java-mode}.
2317
2318 @cindex User style
2319 @item
2320 @code{user} --- This is a special style for several reasons. First, the
2321 @ccmode{} customizations you do by using either the Customization
2322 interface, or by writing @code{setq}'s at the top level of your
2323 @file{.emacs} file, will be captured in the @code{user} style. Also,
2324 all other styles implicitly inherit their settings from @code{user}
2325 style. This means that for any styles you add via @code{c-add-style}
2326 (@pxref{Adding Styles}) you need only define the differences between
2327 your new style and @code{user} style.
2328
2329 @end itemize
2330
2331 @vindex c-default-style
2332 @vindex default-style (c-)
2333 The default style in all newly created buffers is @code{gnu}, but you
2334 can change this by setting variable @code{c-default-style}. Although
2335 the @code{user} style is not the default style, any style variable
2336 settings you do with the Customization interface or on the top level in
2337 your @file{.emacs} file will by default override the style system, so
2338 you don't need to set @code{c-default-style} to @code{user} to see the
2339 effect of these settings.
2340
2341 @code{c-default-style} takes either a style name string, or an
2342 association list of major mode symbols to style names. Thus you can
2343 control exactly which default style is used for which @ccmode{} language
2344 mode. Here are the rules:
2345
2346 @vindex c-style-alist
2347 @vindex style-alist (c-)
2348 @vindex c-mode-common-hook
2349 @vindex mode-common-hook (c-)
2350 @enumerate
2351 @item
2352 When @code{c-default-style} is a string, it must be an existing style
2353 name as found in @code{c-style-alist}. This style is then used for all
2354 modes.
2355
2356 @item
2357 When @code{c-default-style} is an association list, the current major
2358 mode is looked up to find a style name string. In this case, this style
2359 is always used exactly as specified and an error will occur if the named
2360 style does not exist.
2361
2362 @item
2363 If @code{c-default-style} is an association list, but the current major
2364 mode isn't found, then the special symbol @samp{other} is looked up. If
2365 this value is found, the associated style is used.
2366
2367 @item
2368 If @samp{other} is not found, then the @samp{gnu} style is used.
2369
2370 @item
2371 In all cases, the style described in @code{c-default-style} is installed
2372 @emph{before} the language hooks are run, so you can always override
2373 this setting by including an explicit call to @code{c-set-style} in your
2374 language mode hook, or in @code{c-mode-common-hook}.
2375
2376 @end enumerate
2377
2378 @findex c-set-style
2379 @findex set-style (c-)
2380 @kindex C-c .
2381 If you'd like to experiment with these built-in styles you can simply
2382 type the following in a @ccmode{} buffer:
2383 @example
2384 @group
2385
2386 @kbd{C-c . @var{STYLE-NAME} RET}
2387
2388 @end group
2389 @end example
2390 @noindent
2391 @kbd{C-c .} runs the command @code{c-set-style}. Note that all style
2392 names are case insensitive, even the ones you define.
2393
2394 Setting a style in this way does @emph{not} automatically re-indent your
2395 file. For commands that you can use to view the effect of your changes,
2396 see @ref{Commands}.
2397
2398 @vindex c-indentation-style
2399 @vindex indentation-style (c-)
2400 Note that for BOCM compatibility, @samp{gnu} is the default style, and
2401 any non-style based customizations you make (i.e. in
2402 @code{c-mode-common-hook} in your @file{.emacs} file) will be based on
2403 @samp{gnu} style unless you set @code{c-default-style} or do a
2404 @code{c-set-style} as the first thing in your hook. The variable
2405 @code{c-indentation-style} always contains the buffer's current style
2406 name, as a string.
2407
2408
2409 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2410 @node Adding Styles, File Styles, Built-in Styles, Styles
2411 @comment node-name, next, previous, up
2412 @subsection Adding Styles
2413 @cindex adding styles
2414 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2415
2416 @vindex c-style-alist
2417 @vindex style-alist (c-)
2418 @findex c-add-style
2419 @findex add-style (c-)
2420 If none of the built-in styles is appropriate, you'll probably want to
2421 add a new @dfn{style definition}. Styles are kept in the
2422 @code{c-style-alist} variable, but you should never modify this variable
2423 directly. Instead, @ccmode{} provides the function
2424 @code{c-add-style} that you can use to easily add new styles or change
2425 existing styles. This function takes two arguments, a @var{stylename}
2426 string, and an association list @var{description} of style
2427 customizations. If @var{stylename} is not already in
2428 @code{c-style-alist}, the new style is added, otherwise the style is
2429 changed to the new @var{description}.
2430 This function also takes an optional third argument, which if
2431 non-@code{nil}, automatically applies the new style to the current
2432 buffer.
2433
2434 @comment TBD: The next paragraph is bogus. I really need to better
2435 @comment document adding styles, including setting up inherited styles.
2436
2437 The sample @file{.emacs} file provides a concrete example of how a new
2438 style can be added and automatically set. @xref{Sample .emacs File}.
2439
2440
2441 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2442 @node File Styles, , Adding Styles, Styles
2443 @comment node-name, next, previous, up
2444 @subsection File Styles
2445 @cindex file styles
2446 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2447
2448 @cindex local variables
2449
2450 The Emacs manual describes how you can customize certain variables on a
2451 per-file basis by including a @dfn{Local Variable} block at the end of
2452 the file. So far, you've only seen a functional interface to @ccmode{}
2453 customization, which is highly inconvenient for use in a Local Variable
2454 block. @ccmode{} provides two variables that make it easier for you to
2455 customize your style on a per-file basis.
2456
2457 @vindex c-file-style
2458 @vindex file-style (c-)
2459 @vindex c-file-offsets
2460 @vindex file-offsets (c-)
2461
2462 The variable @code{c-file-style} can be set to a style name string.
2463 When the file is visited, @ccmode{} will automatically set the
2464 file's style to this style using @code{c-set-style}.
2465
2466 Another variable, @code{c-file-offsets}, takes an association list
2467 similar to what is allowed in @code{c-offsets-alist}. When the file is
2468 visited, @ccmode{} will automatically institute these offsets using
2469 @code{c-set-offset}.
2470
2471 Note that file style settings (i.e. @code{c-file-style}) are applied
2472 before file offset settings (i.e. @code{c-file-offsets}). Also, if
2473 either of these are set in a file's local variable section, all the
2474 style variable values are made local to that buffer.
2475
2476
2477 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2478 @node Advanced Customizations, , Styles, Customizing Indentation
2479 @comment node-name, next, previous, up
2480 @section Advanced Customizations
2481 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2482
2483 @vindex c-style-alist
2484 @vindex style-alist (c-)
2485 For most users, @ccmode{} will support their coding styles with
2486 very little need for more advanced customizations. Usually, one of the
2487 standard styles defined in @code{c-style-alist} will do the trick. At
2488 most, perhaps one of the syntactic symbol offsets will need to be
2489 tweaked slightly, or maybe @code{c-basic-offset} will need to be
2490 changed. However, some styles require a more flexible framework for
2491 customization, and one of the real strengths of @ccmode{} is that
2492 the syntactic analysis model provides just such a framework. This allows
2493 you to implement custom indentation calculations for situations not
2494 handled by the mode directly.
2495
2496 @menu
2497 * Custom Indentation Functions::
2498 * Custom Brace and Colon Hanging::
2499 * Customizing Semi-colons and Commas::
2500 * Other Special Indentations::
2501 @end menu
2502
2503 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2504 @node Custom Indentation Functions, Custom Brace and Colon Hanging, , Advanced Customizations
2505 @comment node-name, next, previous, up
2506 @subsection Custom Indentation Functions
2507 @cindex custom indentation functions
2508 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2509
2510 The most flexible way to customize @ccmode{} is by writing custom
2511 indentation functions, and associating them with specific syntactic
2512 symbols (@pxref{Syntactic Symbols}). @ccmode{} itself uses indentation
2513 functions to provide more sophisticated indentation, for example when
2514 lining up C++ stream operator blocks:
2515 @example
2516 @group
2517
2518 1: void main(int argc, char**)
2519 2: @{
2520 3: cout << "There were "
2521 4: << argc
2522 5: << "arguments passed to the program"
2523 6: << endl;
2524 7: @}
2525
2526 @end group
2527 @end example
2528
2529 In this example, lines 4 through 6 are assigned the @code{stream-op}
2530 syntactic symbol. Here, @code{stream-op} has an offset of @code{+}, and
2531 with a @code{c-basic-offset} of 2, you can see that lines 4 through 6
2532 are simply indented two spaces to the right of line 3. But perhaps we'd
2533 like @ccmode{} to be a little more intelligent so that it aligns
2534 all the @samp{<<} symbols in lines 3 through 6. To do this, we have
2535 to write a custom indentation function which finds the column of first
2536 stream operator on the first line of the statement. Here is sample
2537 lisp code implementing this:
2538 @example
2539 @group
2540
2541 (defun c-lineup-streamop (langelem)
2542 ;; lineup stream operators
2543 (save-excursion
2544 (let* ((relpos (cdr langelem))
2545 (curcol (progn (goto-char relpos)
2546 (current-column))))
2547 (re-search-forward "<<\\|>>" (c-point 'eol) 'move)
2548 (goto-char (match-beginning 0))
2549 (- (current-column) curcol))))
2550
2551 @end group
2552 @end example
2553 @noindent
2554 Indentation functions take a single argument, which is a syntactic
2555 component cons cell (@pxref{Syntactic Analysis}). The function returns
2556 an integer offset value that will be added to the running total
2557 indentation for the line. Note that what actually gets returned is the
2558 difference between the column that the first stream operator is on, and
2559 the column of the buffer relative position passed in the function's
2560 argument. Remember that @ccmode{} automatically adds in the column of
2561 the component's relative buffer position and we don't the column offset
2562 added in twice.
2563
2564 The function should return @code{nil} if it's used in a situation where
2565 it doesn't want to do any decision. If the function is used in a list
2566 expression (@pxref{Customizing Indentation}), that will cause @ccmode{}
2567 to go on and check the next entry in the list.
2568
2569 @cindex stream-op syntactic symbol
2570 @findex c-lineup-streamop
2571 @findex lineup-streamop (c-)
2572 Now, to associate the function @code{c-lineup-streamop} with the
2573 @code{stream-op} syntactic symbol, we can add something like the
2574 following to our @code{c++-mode-hook}@footnote{It probably makes more
2575 sense to add this to @code{c++-mode-hook} than @code{c-mode-common-hook}
2576 since stream operators are only relevant for C++.}:
2577 @example
2578
2579 (c-set-offset 'stream-op 'c-lineup-streamop)
2580
2581 @end example
2582
2583 Now the function looks like this after re-indenting (using @kbd{C-c
2584 C-q}):
2585 @example
2586 @group
2587
2588 1: void main(int argc, char**)
2589 2: @{
2590 3: cout << "There were "
2591 4: << argc
2592 5: << " arguments passed to the program"
2593 6: << endl;
2594 7: @}
2595
2596 @end group
2597 @end example
2598
2599 Custom indentation functions can be as simple or as complex as you like,
2600 and any syntactic symbol that appears in @code{c-offsets-alist} can have
2601 a custom indentation function associated with it.
2602
2603 @ccmode{} comes with an extensive set of predefined indentation
2604 functions, not all of which are used by the default styles. So there's
2605 a good chance the function you want already exists. @xref{Indentation
2606 Functions}, for a list of them. If you have written an indentation
2607 function that you think is generally useful, you're very welcome to
2608 contribute it; please contact @email{bug-cc-mode@@gnu.org}.
2609
2610
2611 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2612 @node Custom Brace and Colon Hanging, Customizing Semi-colons and Commas, Custom Indentation Functions, Advanced Customizations
2613 @comment node-name, next, previous, up
2614 @subsection Custom Brace and Colon Hanging
2615 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2616
2617 @vindex c-hanging-braces-alist
2618 @vindex hanging-braces-alist (c-)
2619 Syntactic symbols aren't the only place where you can customize
2620 @ccmode{} with the lisp equivalent of callback functions. Brace
2621 ``hanginess'' can also be determined by custom functions associated with
2622 syntactic symbols on the @code{c-hanging-braces-alist} style variable.
2623 Remember that @var{ACTION}'s are typically a list containing some
2624 combination of the symbols @code{before} and @code{after}
2625 (@pxref{Hanging Braces}). However, an @var{ACTION} can also be a
2626 function which gets called when a brace matching that syntactic symbol
2627 is entered.
2628
2629 @cindex customizing brace hanging
2630 These @var{ACTION} functions are called with two arguments: the
2631 syntactic symbol for the brace, and the buffer position at which the
2632 brace was inserted. The @var{ACTION} function is expected to return a
2633 list containing some combination of @code{before} and @code{after},
2634 including neither of them (i.e. @code{nil}). This return value has the
2635 normal brace hanging semantics.
2636
2637 As an example, @ccmode{} itself uses this feature to dynamically
2638 determine the hanginess of braces which close ``do-while''
2639 constructs:
2640 @example
2641 @group
2642
2643 void do_list( int count, char** atleast_one_string )
2644 @{
2645 int i=0;
2646 do @{
2647 handle_string( atleast_one_string[i] );
2648 i++;
2649 @} while( i < count );
2650 @}
2651
2652 @end group
2653 @end example
2654
2655 @findex c-snug-do-while
2656 @findex snug-do-while (c-)
2657 @ccmode{} assigns the @code{block-close} syntactic symbol to the
2658 brace that closes the @code{do} construct, and normally we'd like the
2659 line that follows a @code{block-close} brace to begin on a separate
2660 line. However, with ``do-while'' constructs, we want the
2661 @code{while} clause to follow the closing brace. To do this, we
2662 associate the @code{block-close} symbol with the @var{ACTION} function
2663 @code{c-snug-do-while}:
2664 @example
2665
2666 (defun c-snug-do-while (syntax pos)
2667 "Dynamically calculate brace hanginess for do-while statements.
2668 Using this function, `while' clauses that end a `do-while' block will
2669 remain on the same line as the brace that closes that block.
2670
2671 See `c-hanging-braces-alist' for how to utilize this function as an
2672 ACTION associated with `block-close' syntax."
2673 (save-excursion
2674 (let (langelem)
2675 (if (and (eq syntax 'block-close)
2676 (setq langelem (assq 'block-close c-syntactic-context))
2677 (progn (goto-char (cdr langelem))
2678 (if (= (following-char) ?@{)
2679 (forward-sexp -1))
2680 (looking-at "\\<do\\>[^_]")))
2681 '(before)
2682 '(before after)))))
2683
2684 @end example
2685
2686 This function simply looks to see if the brace closes a ``do-while''
2687 clause and if so, returns the list @samp{(before)} indicating
2688 that a newline should be inserted before the brace, but not after it.
2689 In all other cases, it returns the list @samp{(before after)} so
2690 that the brace appears on a line by itself.
2691
2692 @vindex c-syntactic-context
2693 @vindex syntactic-context (c-)
2694 During the call to the brace hanging @var{ACTION} function, the variable
2695 @code{c-syntactic-context} is bound to the full syntactic analysis list.
2696
2697 @cindex customizing colon hanging
2698 @vindex c-hanging-colon-alist
2699 @vindex hanging-colon-alist (c-)
2700 Note that for symmetry, colon hanginess should be customizable by
2701 allowing function symbols as @var{ACTION}s on the
2702 @code{c-hanging-colon-alist} style variable. Since no use has actually
2703 been found for this feature, it isn't currently implemented!
2704
2705
2706 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2707 @node Customizing Semi-colons and Commas, Other Special Indentations, Custom Brace and Colon Hanging, Advanced Customizations
2708 @comment node-name, next, previous, up
2709 @subsection Customizing Semi-colons and Commas
2710 @cindex customizing semi-colons and commas
2711 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2712
2713 @vindex c-hanging-semi&comma-criteria
2714 @vindex hanging-semi&comma-criteria (c-)
2715 You can also customize the insertion of newlines after semi-colons and
2716 commas, when the auto-newline minor mode is enabled (@pxref{Minor
2717 Modes}). This is controlled by the style variable
2718 @code{c-hanging-semi&comma-criteria}, which contains a list of functions
2719 that are called in the order they appear. Each function is called with
2720 zero arguments, and is expected to return one of the following values:
2721
2722 @itemize @bullet
2723 @item
2724 non-@code{nil} --- A newline is inserted, and no more functions from the
2725 list are called.
2726
2727 @item
2728 @code{stop} --- No more functions from the list are called, but no
2729 newline is inserted.
2730
2731 @item
2732 @code{nil} --- No determination is made, and the next function in the
2733 list is called.
2734
2735 @end itemize
2736
2737 If every function in the list is called without a determination being
2738 made, then no newline is added. The default value for this variable is a
2739 list containing a single function which inserts newlines only after
2740 semi-colons which do not appear inside parenthesis lists (i.e. those
2741 that separate @code{for}-clause statements).
2742
2743 @findex c-semi&comma-no-newlines-before-nonblanks
2744 @findex semi&comma-no-newlines-before-nonblanks (c-)
2745 Here's an example of a criteria function, provided by @ccmode{}, that
2746 will prevent newlines from being inserted after semicolons when there is
2747 a non-blank following line. Otherwise, it makes no determination. To
2748 use, add this to the front of the @code{c-hanging-semi&comma-criteria}
2749 list.
2750
2751 @example
2752 @group
2753
2754 (defun c-semi&comma-no-newlines-before-nonblanks ()
2755 (save-excursion
2756 (if (and (eq last-command-char ?\;)
2757 (zerop (forward-line 1))
2758 (not (looking-at "^[ \t]*$")))
2759 'stop
2760 nil)))
2761
2762 @end group
2763 @end example
2764
2765 @findex c-semi&comma-inside-parenlist
2766 @findex c-semi&comma-no-newlines-for-oneline-inliners
2767 @findex semi&comma-inside-parenlist (c-)
2768 @findex semi&comma-no-newlines-for-oneline-inliners (c-)
2769 The function @code{c-semi&comma-inside-parenlist} is what prevents
2770 newlines from being inserted inside the parenthesis list of @code{for}
2771 statements. In addition to
2772 @code{c-semi&comma-no-newlines-before-nonblanks} described above,
2773 @ccmode{} also comes with the criteria function
2774 @code{c-semi&comma-no-newlines-for-oneline-inliners}, which suppresses
2775 newlines after semicolons inside one-line inline method definitions
2776 (i.e. in C++ or Java).
2777
2778
2779 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2780 @node Other Special Indentations, , Customizing Semi-colons and Commas, Advanced Customizations
2781 @comment node-name, next, previous, up
2782 @subsection Other Special Indentations
2783 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2784
2785 @vindex c-label-minimum-indentation
2786 @vindex label-minimum-indentation (c-)
2787 In @samp{gnu} style (@pxref{Built-in Styles}), a minimum indentation
2788 is imposed on lines inside top-level constructs. This minimum
2789 indentation is controlled by the style variable
2790 @code{c-label-minimum-indentation}. The default value for this variable
2791 is 1.
2792
2793 @vindex c-special-indent-hook
2794 @vindex special-indent-hook (c-)
2795 One other customization variable is available in @ccmode{}: The style
2796 variable @code{c-special-indent-hook}. This is a standard hook variable
2797 that is called after every line is indented by @ccmode{}. You can use
2798 it to do any special indentation or line adjustments your style
2799 dictates, such as adding extra indentation to constructors or destructor
2800 declarations in a class definition, etc. Note however, that you should
2801 not change point or mark inside your @code{c-special-indent-hook}
2802 functions (i.e. you'll probably want to wrap your function in a
2803 @code{save-excursion}).
2804
2805 Setting @code{c-special-indent-hook} in your style definition is handled
2806 slightly differently than other variables. In your style definition,
2807 you should set the value for
2808 @code{c-special-indent-hook} to a function or list of functions, which
2809 will be appended to @code{c-special-indent-hook} using @code{add-hook}.
2810 That way, the current setting for the buffer local value of
2811 @code{c-special-indent-hook} won't be overridden.
2812
2813 @kindex M-;
2814 @findex indent-for-comment
2815 @vindex c-indent-comments-syntactically-p
2816 @vindex indent-comments-syntactically-p (c-)
2817 @vindex comment-column
2818 Normally, the standard Emacs command @kbd{M-;}
2819 (@code{indent-for-comment}) will indent comment only lines to
2820 @code{comment-column}. Some users however, prefer that @kbd{M-;} act
2821 just like @kbd{TAB} for purposes of indenting comment-only lines;
2822 i.e. they want the comments to always indent as they would for normal
2823 code, regardless of whether @kbd{TAB} or @kbd{M-;} were used. This
2824 behavior is controlled by the variable
2825 @code{c-indent-comments-syntactically-p}. When @code{nil} (the
2826 default), @kbd{M-;} indents comment-only lines to @code{comment-column},
2827 otherwise, they are indented just as they would be if @kbd{TAB} were
2828 typed.
2829
2830 Note that this has no effect for comment lines that are inserted with
2831 @kbd{M-;} at the end of regular code lines. These comments will always
2832 start at @code{comment-column}.
2833
2834
2835 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2836 @node Syntactic Symbols, Indentation Functions, Customizing Indentation, Top
2837 @comment node-name, next, previous, up
2838 @chapter Syntactic Symbols
2839 @cindex syntactic symbols
2840 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2841
2842 @vindex c-offsets-alist
2843 @vindex offsets-alist (c-)
2844 Here is a complete list of the recognized syntactic symbols as described
2845 in the @code{c-offsets-alist} style variable, along with a brief
2846 description. More detailed descriptions follow.
2847
2848 @table @code
2849 @item string
2850 Inside a multi-line string.
2851 @item c
2852 Inside a multi-line C style block comment.
2853 @item defun-open
2854 Brace that opens a top-level function definition.
2855 @item defun-close
2856 Brace that closes a top-level function definition.
2857 @item defun-block-intro
2858 The first line in a top-level defun.
2859 @item class-open
2860 Brace that opens a class definition.
2861 @item class-close
2862 Brace that closes a class definition.
2863 @item inline-open
2864 Brace that opens an in-class inline method.
2865 @item inline-close
2866 Brace that closes an in-class inline method.
2867 @item func-decl-cont
2868 The region between a function definition's argument list and the
2869 function opening brace (excluding K&R argument declarations). In C, you
2870 cannot put anything but whitespace and comments in this region, however
2871 in C++ and Java, @code{throws} declarations and other things can appear
2872 here.
2873 @item knr-argdecl-intro
2874 First line of a K&R C argument declaration.
2875 @item knr-argdecl
2876 Subsequent lines in a K&R C argument declaration.
2877 @item topmost-intro
2878 The first line in a ``topmost'' definition.
2879 @item topmost-intro-cont
2880 Topmost definition continuation lines.
2881 @item member-init-intro
2882 First line in a member initialization list.
2883 @item member-init-cont
2884 Subsequent member initialization list lines.
2885 @item inher-intro
2886 First line of a multiple inheritance list.
2887 @item inher-cont
2888 Subsequent multiple inheritance lines.
2889 @item block-open
2890 Statement block open brace.
2891 @item block-close
2892 Statement block close brace.
2893 @item brace-list-open
2894 Open brace of an enum or static array list.
2895 @item brace-list-close
2896 Close brace of an enum or static array list.
2897 @item brace-list-intro
2898 First line in an enum or static array list.
2899 @item brace-list-entry
2900 Subsequent lines in an enum or static array list.
2901 @item brace-entry-open
2902 Subsequent lines in an enum or static array list where the line begins
2903 with an open brace.
2904 @item statement
2905 A statement.
2906 @item statement-cont
2907 A continuation of a statement.
2908 @item statement-block-intro
2909 The first line in a new statement block.
2910 @item statement-case-intro
2911 The first line in a case block.
2912 @item statement-case-open
2913 The first line in a case block that starts with a brace.
2914 @item substatement
2915 The first line after a conditional or loop construct.
2916 @item substatement-open
2917 The brace that opens a substatement block.
2918 @item case-label
2919 A @code{case} or @code{default} label.
2920 @item access-label
2921 C++ access control label.
2922 @item label
2923 Any non-special C label.
2924 @item do-while-closure
2925 The @code{while} line that ends a @code{do}-@code{while} construct.
2926 @item else-clause
2927 The @code{else} line of an @code{if}-@code{else} construct.
2928 @item catch-clause
2929 The @code{catch} or @code{finally} (in Java) line of a
2930 @code{try}-@code{catch} construct.
2931 @item comment-intro
2932 A line containing only a comment introduction.
2933 @item arglist-intro
2934 The first line in an argument list.
2935 @item arglist-cont
2936 Subsequent argument list lines when no arguments follow on the same line
2937 as the arglist opening paren.
2938 @item arglist-cont-nonempty
2939 Subsequent argument list lines when at least one argument follows on the
2940 same line as the arglist opening paren.
2941 @item arglist-close
2942 The solo close paren of an argument list.
2943 @item stream-op
2944 Lines continuing a stream operator (C++ only).
2945 @item inclass
2946 The line is nested inside a class definition.
2947 @item cpp-macro
2948 The start of a C preprocessor macro definition.
2949 @item cpp-macro-cont
2950 Subsequent lines of a multi-line C preprocessor macro definition.
2951 @item friend
2952 A C++ friend declaration.
2953 @item objc-method-intro
2954 The first line of an Objective-C method. definition.
2955 @item objc-method-args-cont
2956 Lines continuing an Objective-C method. definition
2957 @item objc-method-call-cont
2958 Lines continuing an Objective-C method call.
2959 @item extern-lang-open
2960 Brace that opens an external language block.
2961 @item extern-lang-close
2962 Brace that closes an external language block.
2963 @item inextern-lang
2964 Analogous to @code{inclass} syntactic symbol, but used inside external
2965 language blocks (e.g. @code{extern "C" @{}).
2966 @item namespace-open
2967 Brace that opens a C++ namespace block.
2968 @item namespace-close
2969 Brace that closes a C++ namespace block.
2970 @item innamespace
2971 Analogous to @code{inextern-lang} syntactic symbol, but used inside C++
2972 namespace blocks.
2973 @item template-args-cont
2974 C++ template argument list continuations.
2975 @item inlambda
2976 Analogous to @code{inclass} syntactic symbol, but used inside lambda
2977 (i.e. anonymous) functions. Only used in Pike mode.
2978 @item lambda-intro-cont
2979 Lines continuing the header of a lambda function, i.e. between the
2980 @code{lambda} keyword and the function body. Only used in Pike mode.
2981 @item inexpr-statement
2982 A statement block inside an expression. The gcc C extension of this is
2983 recognized. It's also used for the special functions that takes a
2984 statement block as an argument in Pike.
2985 @item inexpr-class
2986 A class definition inside an expression. This is used for anonymous
2987 classes in Java. It's also used for anonymous array initializers in
2988 Java.
2989 @end table
2990
2991 @cindex -open syntactic symbols
2992 @cindex -close syntactic symbols
2993 Most syntactic symbol names follow a general naming convention. When a
2994 line begins with an open or close brace, the syntactic symbol will
2995 contain the suffix @code{-open} or @code{-close} respectively.
2996
2997 @cindex -intro syntactic symbols
2998 @cindex -cont syntactic symbols
2999 @cindex -block-intro syntactic symbols
3000 Usually, a distinction is made between the first line that introduces a
3001 construct and lines that continue a construct, and the syntactic symbols
3002 that represent these lines will contain the suffix @code{-intro} or
3003 @code{-cont} respectively. As a sub-classification of this scheme, a
3004 line which is the first of a particular brace block construct will
3005 contain the suffix @code{-block-intro}.
3006
3007 Let's look at some examples to understand how this works. Remember that
3008 you can check the syntax of any line by using @kbd{C-c C-s}.
3009 @example
3010 @group
3011
3012 1: void
3013 2: swap( int& a, int& b )
3014 3: @{
3015 4: int tmp = a;
3016 5: a = b;
3017 6: b = tmp;
3018 7: int ignored =
3019 8: a + b;
3020 9: @}
3021
3022 @end group
3023 @end example
3024
3025 @cindex topmost-intro syntactic symbol
3026 @cindex topmost-intro-cont syntactic symbol
3027 @cindex defun-open syntactic symbol
3028 @cindex defun-close syntactic symbol
3029 @cindex defun-block-intro syntactic symbol
3030 Line 1 shows a @code{topmost-intro} since it is the first line that
3031 introduces a top-level construct. Line 2 is a continuation of the
3032 top-level construct introduction so it has the syntax
3033 @code{topmost-intro-cont}. Line 3 shows a @code{defun-open} since it is
3034 the brace that opens a top-level function definition. Line 9 is the
3035 corresponding
3036 @code{defun-close} since it contains the brace that closes the top-level
3037 function definition. Line 4 is a @code{defun-block-intro}, i.e. it is
3038 the first line of a brace-block, enclosed in a
3039 top-level function definition.
3040
3041 @cindex statement syntactic symbol
3042 @cindex statement-cont syntactic symbol
3043 Lines 5, 6, and 7 are all given @code{statement} syntax since there
3044 isn't much special about them. Note however that line 8 is given
3045 @code{statement-cont} syntax since it continues the statement begun
3046 on the previous line.
3047
3048 Here's another example, which illustrates some C++ class syntactic
3049 symbols:
3050 @example
3051 @group
3052
3053 1: class Bass
3054 2: : public Guitar,
3055 3: public Amplifiable
3056 4: @{
3057 5: public:
3058 6: Bass()
3059 7: : eString( new BassString( 0.105 )),
3060 8: aString( new BassString( 0.085 )),
3061 9: dString( new BassString( 0.065 )),
3062 10: gString( new BassString( 0.045 ))
3063 11: @{
3064 12: eString.tune( 'E' );
3065 13: aString.tune( 'A' );
3066 14: dString.tune( 'D' );
3067 15: gString.tune( 'G' );
3068 16: @}
3069 17: friend class Luthier;
3070 18: @}
3071
3072 @end group
3073 @end example
3074
3075 @cindex class-open syntactic symbol
3076 @cindex class-close syntactic symbol
3077 As in the previous example, line 1 has the @code{topmost-intro} syntax.
3078 Here however, the brace that opens a C++ class definition on line 4 is
3079 assigned the @code{class-open} syntax. Note that in C++, classes,
3080 structs, and unions are essentially equivalent syntactically (and are
3081 very similar semantically), so replacing the @code{class} keyword in the
3082 example above with @code{struct} or @code{union} would still result in a
3083 syntax of @code{class-open} for line 4 @footnote{This is the case even
3084 for C and Objective-C. For consistency, structs in all supported
3085 languages are syntactically equivalent to classes. Note however that
3086 the keyword @code{class} is meaningless in C and Objective-C.}.
3087 Similarly, line 18 is assigned @code{class-close} syntax.
3088
3089 @cindex inher-intro syntactic symbol
3090 @cindex inher-cont syntactic symbol
3091 Line 2 introduces the inheritance list for the class so it is assigned
3092 the @code{inher-intro} syntax, and line 3, which continues the
3093 inheritance list is given @code{inher-cont} syntax.
3094
3095 @cindex access-label syntactic symbol
3096 @cindex inclass syntactic symbol
3097 Hitting @kbd{C-c C-s} on line 5 shows the following analysis:
3098
3099 @example
3100 @group
3101
3102 @code{((inclass . 58) (access-label . 67))}
3103
3104 @end group
3105 @end example
3106
3107 @noindent
3108 The primary syntactic symbol for this line is @code{access-label} as
3109 this a label keyword that specifies access protection in C++. However,
3110 because this line is also a top-level construct inside a class
3111 definition, the analysis actually shows two syntactic symbols. The
3112 other syntactic symbol assigned to this line is @code{inclass}.
3113 Similarly, line 6 is given both @code{inclass} and @code{topmost-intro}
3114 syntax:
3115
3116 @example
3117 @group
3118
3119 @code{((inclass . 58) (topmost-intro . 60))}
3120
3121 @end group
3122 @end example
3123
3124 @cindex member-init-intro syntactic symbol
3125 @cindex member-init-cont syntactic symbol
3126 Line 7 introduces a C++ member initialization list and as such is given
3127 @code{member-init-intro} syntax. Note that in this case it is
3128 @emph{not} assigned @code{inclass} since this is not considered a
3129 top-level construct. Lines 8 through 10 are all assigned
3130 @code{member-init-cont} since they continue the member initialization
3131 list started on line 7.
3132
3133 @cindex in-class inline methods
3134 @cindex inline-open syntactic symbol
3135 @cindex inline-close syntactic symbol
3136 Line 11's analysis is a bit more complicated:
3137
3138 @example
3139 @group
3140
3141 @code{((inclass . 58) (inline-open))}
3142
3143 @end group
3144 @end example
3145
3146 This line is assigned a syntax of both @code{inline-open} and
3147 @code{inclass} because it opens an @dfn{in-class} C++ inline method
3148 definition. This is distinct from, but related to, the C++ notion of an
3149 inline function in that its definition occurs inside an enclosing class
3150 definition, which in C++ implies that the function should be inlined.
3151 If though, the definition of the @code{Bass} constructor appeared
3152 outside the class definition, the construct would be given the
3153 @code{defun-open} syntax, even if the keyword @code{inline} appeared
3154 before the method name, as in:
3155 @example
3156 @group
3157
3158 class Bass
3159 : public Guitar,
3160 public Amplifiable
3161 @{
3162 public:
3163 Bass();
3164 @}
3165
3166 inline
3167 Bass::Bass()
3168 : eString( new BassString( 0.105 )),
3169 aString( new BassString( 0.085 )),
3170 dString( new BassString( 0.065 )),
3171 gString( new BassString( 0.045 ))
3172 @{
3173 eString.tune( 'E' );
3174 aString.tune( 'A' );
3175 dString.tune( 'D' );
3176 gString.tune( 'G' );
3177 @}
3178
3179 @end group
3180 @end example
3181
3182 @cindex friend syntactic symbol
3183 Returning to the previous example, line 16 is given @code{inline-close}
3184 syntax, while line 12 is given @code{defun-block-open} syntax, and lines
3185 13 through 15 are all given @code{statement} syntax. Line 17 is
3186 interesting in that its syntactic analysis list contains three
3187 elements:
3188
3189 @example
3190
3191 @code{((friend) (inclass . 58) (topmost-intro . 380))}
3192
3193 @end example
3194
3195 The @code{friend} syntactic symbol is a modifier that typically does not
3196 have a relative buffer position.
3197
3198 Template definitions introduce yet another syntactic symbol:
3199
3200 @example
3201 @group
3202
3203 1: ThingManager <int,
3204 2: Framework::Callback *,
3205 3: Mutex> framework_callbacks;
3206
3207 @end group
3208 @end example
3209
3210 Here, line 1 is analyzed as a @code{topmost-intro}, but lines 2 and 3
3211 are both analyzed as @code{template-args-cont} lines.
3212
3213 Here is another (totally contrived) example which illustrates how syntax
3214 is assigned to various conditional constructs:
3215 @example
3216 @group
3217
3218 1: void spam( int index )
3219 2: @{
3220 3: for( int i=0; i<index; i++ )
3221 4: @{
3222 5: if( i == 10 )
3223 6: @{
3224 7: do_something_special();
3225 8: @}
3226 9: else
3227 10: do_something( i );
3228 11: @}
3229 12: do @{
3230 13: another_thing( i-- );
3231 14: @}
3232 15: while( i > 0 );
3233 16: @}
3234
3235
3236 @end group
3237 @end example
3238
3239 @noindent
3240 Only the lines that illustrate new syntactic symbols will be discussed.
3241
3242 @cindex substatement-open syntactic symbol
3243 @cindex substatement-block-intro syntactic symbol
3244 @cindex block-close syntactic symbol
3245 Line 4 has a brace which opens a conditional's substatement block. It
3246 is thus assigned @code{substatement-open} syntax, and since line 5 is
3247 the first line in the substatement block, it is assigned
3248 @code{substatement-block-intro} syntax. Lines 6 and 7 are assigned
3249 similar syntax. Line 8 contains the brace that closes the inner
3250 substatement block. It is given the syntax @code{block-close},
3251 as are lines 11 and 14.
3252
3253 @cindex else-clause syntactic symbol
3254 @cindex catch-clause syntactic symbol
3255 Line 9 is a little different --- since it contains the keyword
3256 @code{else} matching the @code{if} statement introduced on line 5, it is
3257 given the @code{else-clause} syntax. The @code{try}-@code{catch}
3258 constructs in C++ and Java are treated this way too, with the only
3259 difference that the @code{catch}, and in Java also @code{finally}, is
3260 marked with @code{catch-clause}.
3261
3262 @cindex substatement syntactic symbol
3263 Line 10 is also slightly different. Because @code{else} is considered a
3264 conditional introducing keyword @footnote{The list of conditional
3265 keywords are (in C, C++, Objective-C, Java, and Pike): @code{for},
3266 @code{if}, @code{do}, @code{else}, @code{while}, and @code{switch}. C++
3267 and Java have two additional conditional keywords: @code{try} and
3268 @code{catch}. Java also has the @code{finally} and @code{synchronized}
3269 keywords.}, and because the following substatement is not a brace block,
3270 line 10 is assigned the @code{substatement} syntax.
3271
3272 @cindex do-while-closure syntactic symbol
3273 One other difference is seen on line 15. The @code{while} construct
3274 that closes a @code{do} conditional is given the special syntax
3275 @code{do-while-closure} if it appears on a line by itself. Note that if
3276 the @code{while} appeared on the same line as the preceding close brace,
3277 that line would have been assigned @code{block-close} syntax instead.
3278
3279 Switch statements have their own set of syntactic symbols. Here's an
3280 example:
3281 @example
3282 @group
3283
3284 1: void spam( enum Ingredient i )
3285 2: @{
3286 3: switch( i ) @{
3287 4: case Ham:
3288 5: be_a_pig();
3289 6: break;
3290 7: case Salt:
3291 8: drink_some_water();
3292 9: break;
3293 10: default:
3294 11: @{
3295 12: what_is_it();
3296 13: break;
3297 14: @}
3298 15: @}
3299 14: @}
3300
3301 @end group
3302 @end example
3303
3304 @cindex case-label syntactic symbol
3305 @cindex statement-case-intro syntactic symbol
3306 @cindex statement-case-open syntactic symbol
3307 Here, lines 4, 7, and 10 are all assigned @code{case-label} syntax,
3308 while lines 5 and 8 are assigned @code{statement-case-intro}. Line 11
3309 is treated slightly differently since it contains a brace that opens a
3310 block --- it is given @code{statement-case-open} syntax.
3311
3312 @cindex brace lists
3313 There are a set of syntactic symbols that are used to recognize
3314 constructs inside of brace lists. A brace list is defined as an
3315 @code{enum} or aggregate initializer list, such as might statically
3316 initialize an array of structs. The three special aggregate constructs
3317 in Pike, @code{(@{ @})}, @code{([ ])} and @code{(< >)}, are treated as
3318 brace lists too. An example:
3319 @example
3320 @group
3321
3322 1: static char* ingredients[] =
3323 2: @{
3324 3: "Ham",
3325 4: "Salt",
3326 5: NULL
3327 6: @}
3328
3329 @end group
3330 @end example
3331
3332 @cindex brace-list-open syntactic symbol
3333 @cindex brace-list-intro syntactic symbol
3334 @cindex brace-list-close syntactic symbol
3335 @cindex brace-list-entry syntactic symbol
3336 Following convention, line 2 in this example is assigned
3337 @code{brace-list-open} syntax, and line 3 is assigned
3338 @code{brace-list-intro} syntax. Likewise, line 6 is assigned
3339 @code{brace-list-close} syntax. Lines 4 and 5 however, are assigned
3340 @code{brace-list-entry} syntax, as would all subsequent lines in this
3341 initializer list.
3342
3343 @cindex brace-entry-open syntactic symbol
3344 Your static initializer might be initializing nested structures, for
3345 example:
3346 @example
3347 @group
3348
3349 1: struct intpairs[] =
3350 2: @{
3351 3: @{ 1, 2 @},
3352 4: @{
3353 5: 3,
3354 6: 4
3355 7: @}
3356 8: @{ 1,
3357 9: 2 @},
3358 10: @{ 3, 4 @}
3359 11: @}
3360
3361 @end group
3362 @end example
3363
3364 Here, you've already seen the analysis of lines 1, 2, 3, and 11. On
3365 line 4, things get interesting; this line is assigned
3366 @code{brace-entry-open} syntactic symbol because it's a bracelist entry
3367 line that starts with an open brace. Lines 5 and 6 (and line 9) are
3368 pretty standard, and line 7 is a @code{brace-list-close} as you'd
3369 expect. Once again, line 8 is assigned as @code{brace-entry-open} as is
3370 line 10.
3371
3372 External language definition blocks also have their own syntactic
3373 symbols. In this example:
3374 @example
3375 @group
3376
3377 1: extern "C"
3378 2: @{
3379 3: int thing_one( int );
3380 4: int thing_two( double );
3381 5: @}
3382
3383 @end group
3384 @end example
3385
3386 @cindex extern-lang-open syntactic symbol
3387 @cindex extern-lang-close syntactic symbol
3388 @cindex inextern-lang syntactic symbol
3389 @cindex inclass syntactic symbol
3390 @noindent
3391 line 2 is given the @code{extern-lang-open} syntax, while line 5 is given
3392 the @code{extern-lang-close} syntax. The analysis for line 3 yields:
3393 @code{((inextern-lang) (topmost-intro . 14))}, where
3394 @code{inextern-lang} is a modifier similar in purpose to @code{inclass}.
3395
3396 Similarly, C++ namespace constructs have their own associated syntactic
3397 symbols. In this example:
3398 @example
3399 @group
3400
3401 1: namespace foo
3402 2: @{
3403 3: void xxx() @{@}
3404 4: @}
3405
3406 @end group
3407 @end example
3408
3409 @cindex namespace-open syntactic symbol
3410 @cindex namespace-close syntactic symbol
3411 @cindex innamespace syntactic symbol
3412 @noindent
3413 line 2 is given the @code{namespace-open} syntax, while line 4 is given
3414 the @code{namespace-close} syntax. The analysis for line 3 yields:
3415 @code{((innamespace) (topmost-intro . 17))}, where @code{innamespace} is
3416 a modifier similar in purpose to @code{inextern-lang} and @code{inclass}.
3417
3418 A number of syntactic symbols are associated with parenthesis lists,
3419 a.k.a argument lists, as found in function declarations and function
3420 calls. This example illustrates these:
3421 @example
3422 @group
3423
3424 1: void a_function( int line1,
3425 2: int line2 );
3426 3:
3427 4: void a_longer_function(
3428 5: int line1,
3429 6: int line2
3430 7: );
3431 8:
3432 9: void call_them( int line1, int line2 )
3433 10: @{
3434 11: a_function(
3435 12: line1,
3436 13: line2
3437 14: );
3438 15:
3439 16: a_longer_function( line1,
3440 17: line2 );
3441 18: @}
3442
3443 @end group
3444 @end example
3445
3446 @cindex arglist-intro syntactic symbol
3447 @cindex arglist-close syntactic symbol
3448 Lines 5 and 12 are assigned @code{arglist-intro} syntax since they are
3449 the first line following the open parenthesis, and lines 7 and 14 are
3450 assigned @code{arglist-close} syntax since they contain the parenthesis
3451 that closes the argument list.
3452
3453 @cindex arglist-cont-nonempty syntactic symbol
3454 @cindex arglist-cont syntactic symbol
3455 Lines that continue argument lists can be assigned one of two syntactic
3456 symbols. For example, Lines 2 and 17
3457 are assigned @code{arglist-cont-nonempty} syntax. What this means
3458 is that they continue an argument list, but that the line containing the
3459 parenthesis that opens the list is @emph{not empty} following the open
3460 parenthesis. Contrast this against lines 6 and 13 which are assigned
3461 @code{arglist-cont} syntax. This is because the parenthesis that opens
3462 their argument lists is the last character on that line.
3463
3464 Note that there is no @code{arglist-open} syntax. This is because any
3465 parenthesis that opens an argument list, appearing on a separate line,
3466 is assigned the @code{statement-cont} syntax instead.
3467
3468 A few miscellaneous syntactic symbols that haven't been previously
3469 covered are illustrated by this C++ example:
3470 @example
3471 @group
3472
3473 1: void Bass::play( int volume )
3474 2: const
3475 3: @{
3476 4: /* this line starts a multi-line
3477 5: * comment. This line should get `c' syntax */
3478 6:
3479 7: char* a_multiline_string = "This line starts a multi-line \
3480 8: string. This line should get `string' syntax.";
3481 9:
3482 10: note:
3483 11: @{
3484 12: #ifdef LOCK
3485 13: Lock acquire();
3486 14: #endif // LOCK
3487 15: slap_pop();
3488 16: cout << "I played "
3489 17: << "a note\n";
3490 18: @}
3491 19: @}
3492
3493 @end group
3494 @end example
3495
3496 The lines to note in this example include:
3497
3498 @itemize @bullet
3499
3500 @cindex func-decl-cont syntactic symbol
3501 @item
3502 Line 2 is assigned the @code{func-decl-cont} syntax.
3503
3504 @cindex comment-intro syntactic symbol
3505 @item
3506 Line 4 is assigned both @code{defun-block-intro} @emph{and}
3507 @code{comment-intro} syntax.
3508
3509 @cindex c syntactic symbol
3510 @item
3511 Line 5 is assigned @code{c} syntax.
3512
3513 @item
3514 @cindex syntactic whitespace
3515 Line 6 which, even though it contains nothing but whitespace, is
3516 assigned @code{defun-block-intro}. Note that the appearance of the
3517 comment on lines 4 and 5 do not cause line 6 to be assigned
3518 @code{statement} syntax because comments are considered to be
3519 @dfn{syntactic whitespace}, which are ignored when analyzing
3520 code.
3521
3522 @cindex string syntactic symbol
3523 @item
3524 Line 8 is assigned @code{string} syntax.
3525
3526 @cindex label syntactic symbol
3527 @item
3528 Line 10 is assigned @code{label} syntax.
3529
3530 @cindex block-open syntactic symbol
3531 @item
3532 Line 11 is assigned @code{block-open} syntax.
3533
3534 @cindex cpp-macro syntactic symbol
3535 @cindex cpp-macro-cont syntactic symbol
3536 @item
3537 Lines 12 and 14 are assigned @code{cpp-macro} syntax in addition to the
3538 normal syntactic symbols (@code{statement-block-intro} and
3539 @code{statement}, respectively). Normally @code{cpp-macro} is
3540 configured to cancel out the normal syntactic context to make all
3541 preprocessor directives stick to the first column, but that's easily
3542 changed if you want preprocessor directives to be indented like the rest
3543 of the code.
3544
3545 @cindex stream-op syntactic symbol
3546 @item
3547 Line 17 is assigned @code{stream-op} syntax.
3548
3549 @end itemize
3550
3551 @cindex multi-line macros
3552 @cindex syntactic whitespace
3553 Multi-line C preprocessor macros are now (somewhat) supported. At least
3554 @ccmode{} now recognizes the fact that it is inside a multi-line macro,
3555 and it properly skips such macros as syntactic whitespace. In this
3556 example:
3557 @example
3558 @group
3559
3560 1: #define LIST_LOOP(cons, listp) \
3561 2: for (cons = listp; !NILP (cons); cons = XCDR (cons)) \
3562 3: if (!CONSP (cons)) \
3563 4: signal_error ("Invalid list format", listp); \
3564 5: else
3565
3566 @end group
3567 @end example
3568 @noindent
3569 line 1 is given the syntactic symbol @code{cpp-macro}. This first line
3570 of a macro is always given this symbol. The second and subsequent lines
3571 (e.g. lines 2 through 5) are given the @code{cpp-macro-cont} syntactic
3572 symbol, with a relative buffer position pointing to the @code{#} which
3573 starts the macro definition.
3574
3575 In Objective-C buffers, there are three additional syntactic symbols
3576 assigned to various message calling constructs. Here's an example
3577 illustrating these:
3578 @example
3579 @group
3580
3581 1: - (void)setDelegate:anObject
3582 2: withStuff:stuff
3583 3: @{
3584 4: [delegate masterWillRebind:self
3585 5: toDelegate:anObject
3586 6: withExtraStuff:stuff];
3587 7: @}
3588
3589 @end group
3590 @end example
3591
3592 @cindex objc-method-intro syntactic symbol
3593 @cindex objc-method-args-cont syntactic symbol
3594 @cindex objc-method-call-cont syntactic symbol
3595 Here, line 1 is assigned @code{objc-method-intro} syntax, and line 2 is
3596 assigned @code{objc-method-args-cont} syntax. Lines 5 and 6 are both
3597 assigned @code{objc-method-call-cont} syntax.
3598
3599 Java has a concept of anonymous classes, which may look something like
3600 this:
3601 @example
3602 @group
3603
3604 1: public void watch(Observable o) @{
3605 2: o.addObserver(new Observer() @{
3606 3: public void update(Observable o, Object arg) @{
3607 4: history.addElement(arg);
3608 5: @}
3609 6: @});
3610 7: @}
3611
3612 @end group
3613 @end example
3614
3615 @cindex inexpr-class syntactic symbol
3616 The brace following the @code{new} operator opens the anonymous class.
3617 Lines 3 and 6 are assigned the @code{inexpr-class} syntax, besides the
3618 @code{inclass} symbol used in normal classes. Thus, the class will be
3619 indented just like a normal class, with the added indentation given to
3620 @code{inexpr-class}.
3621
3622 There are a few occasions where a statement block may be used inside an
3623 expression. One is in C code using the gcc extension for this, e.g:
3624 @example
3625 @group
3626
3627 1: int res = (@{
3628 2: int y = foo (); int z;
3629 3: if (y > 0) z = y; else z = - y;
3630 4: z;
3631 5: @});
3632
3633 @end group
3634 @end example
3635
3636 @cindex inexpr-statement syntactic symbol
3637 Lines 2 and 5 get the @code{inexpr-statement} syntax, besides the
3638 symbols they'd get in a normal block. Therefore, the indentation put on
3639 @code{inexpr-statement} is added to the normal statement block
3640 indentation.
3641
3642 In Pike code, there are a few other situations where blocks occur inside
3643 statements, as illustrated here:
3644 @example
3645 @group
3646
3647 1: array itgob()
3648 2: @{
3649 3: string s = map (backtrace()[-2][3..],
3650 4: lambda
3651 5: (mixed arg)
3652 6: @{
3653 7: return sprintf ("%t", arg);
3654 8: @}) * ", " + "\n";
3655 9: return catch @{
3656 10: write (s + "\n");
3657 11: @};
3658 12: @}
3659
3660 @end group
3661 @end example
3662
3663 @cindex inlambda syntactic symbol
3664 @cindex lambda-intro-cont syntactic symbol
3665 Lines 4 through 8 contain a lambda function, which @ccmode{} recognizes
3666 by the @code{lambda} keyword. If the function argument list is put
3667 on a line of its own, as in line 5, it gets the @code{lambda-intro-cont}
3668 syntax. The function body is handled as an inline method body, with the
3669 addition of the @code{inlambda} syntactic symbol. This means that line
3670 6 gets @code{inlambda} and @code{inline-open}, and line 8 gets
3671 @code{inline-close}@footnote{You might wonder why it doesn't get
3672 @code{inlambda} too. It's because the closing brace is relative to the
3673 opening brace, which stands on its own line in this example. If the
3674 opening brace was hanging on the previous line, then the closing brace
3675 would get the @code{inlambda} syntax too to be indented correctly.}.
3676
3677 @cindex inexpr-statement syntactic symbol
3678 On line 9, @code{catch} is a special function taking a statement block
3679 as its argument. The block is handled as an in-expression statement
3680 with the @code{inexpr-statement} syntax, just like the gcc extended C
3681 example above. The other similar special function, @code{gauge}, is
3682 handled like this too.
3683
3684 @cindex knr-argdecl-intro syntactic symbol
3685 @cindex knr-argdecl syntactic symbol
3686 Two other syntactic symbols can appear in old style, non-prototyped C
3687 code @footnote{a.k.a. K&R C, or Kernighan & Ritchie C}:
3688 @example
3689 @group
3690
3691 1: int add_three_integers(a, b, c)
3692 2: int a;
3693 3: int b;
3694 4: int c;
3695 5: @{
3696 6: return a + b + c;
3697 7: @}
3698
3699 @end group
3700 @end example
3701
3702 Here, line 2 is the first line in an argument declaration list and so is
3703 given the @code{knr-argdecl-intro} syntactic symbol. Subsequent lines
3704 (i.e. lines 3 and 4 in this example), are given @code{knr-argdecl}
3705 syntax.
3706
3707
3708 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3709 @node Indentation Functions, Performance Issues, Syntactic Symbols, Top
3710 @comment node-name, next, previous, up
3711 @chapter Indentation Functions
3712 @cindex indentation functions
3713 @cindex line-up functions
3714 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3715
3716 Often there are cases when a simple offset setting on a syntactic symbol
3717 isn't enough to get the desired indentation. Therefore, it's also
3718 possible to use a @dfn{indentation function} (a.k.a. line-up function)
3719 for a syntactic symbol.
3720
3721 @ccmode{} comes with many predefined indentation functions for common
3722 situations. If none of these does what you want, you can write your
3723 own, see @ref{Custom Indentation Functions}. If you do, it's probably a
3724 good idea to start working from one of these predefined functions, they
3725 can be found in the file @file{cc-align.el}.
3726
3727 For every function below there is a ``works with'' list that indicates
3728 which syntactic symbols the function is intended to be used with.
3729
3730 @macro workswith
3731 @emph{Works with:@ }
3732 @end macro
3733 @ifinfo
3734 @unmacro workswith
3735 @macro workswith
3736 Works with:
3737 @end macro
3738 @end ifinfo
3739
3740 @table @code
3741
3742 @findex c-lineup-arglist
3743 @findex lineup-arglist (c-)
3744 @item c-lineup-arglist
3745 Line up the current argument line under the first argument.
3746
3747 @workswith @code{arglist-cont-nonempty}.
3748
3749 @findex c-lineup-arglist-intro-after-paren
3750 @findex lineup-arglist-intro-after-paren (c-)
3751 @item c-lineup-arglist-intro-after-paren
3752 Line up a line just after the open paren of the surrounding paren or
3753 brace block.
3754
3755 @workswith @code{defun-block-intro}, @code{brace-list-intro},
3756 @code{statement-block-intro}, @code{statement-case-intro},
3757 @code{arglist-intro}.
3758
3759 @findex c-lineup-arglist-close-under-paren
3760 @findex lineup-arglist-close-under-paren (c-)
3761 @item c-lineup-arglist-close-under-paren
3762 Set e.g. your @code{arglist-close} syntactic symbol to this line-up
3763 function so that parentheses that close argument lists will line up
3764 under the parenthesis that opened the argument list.
3765
3766 @workswith @code{defun-close}, @code{class-close}, @code{inline-close},
3767 @code{block-close}, @code{brace-list-close}, @code{arglist-close},
3768 @code{extern-lang-close}, @code{namespace-close} (for most of these, a
3769 zero offset will normally produce the same result, though).
3770
3771 @findex c-lineup-close-paren
3772 @findex lineup-close-paren (c-)
3773 @item c-lineup-close-paren
3774 Line up the closing paren under its corresponding open paren if the
3775 open paren is followed by code. If the open paren ends its line, no
3776 indentation is added. E.g:
3777 @example
3778 @group
3779
3780 main (int,
3781 char **
3782 ) // c-lineup-close-paren
3783
3784 @end group
3785 @end example
3786 @noindent
3787 and
3788 @example
3789 @group
3790
3791 main (
3792 int, char **
3793 ) // c-lineup-close-paren
3794
3795 @end group
3796 @end example
3797
3798 @workswith @code{defun-close}, @code{class-close}, @code{inline-close},
3799 @code{block-close}, @code{brace-list-close}, @code{arglist-close},
3800 @code{extern-lang-close}, @code{namespace-close}.
3801
3802 @findex c-lineup-streamop
3803 @findex lineup-streamop (c-)
3804 @item c-lineup-streamop
3805 Line up C++ stream operators (i.e. @samp{<<} and @samp{>>}).
3806
3807 @workswith @code{stream-op}.
3808
3809 @findex c-lineup-multi-inher
3810 @findex lineup-multi-inher (c-)
3811 @item c-lineup-multi-inher
3812 Line up the classes in C++ multiple inheritance clauses and member
3813 initializers under each other. E.g:
3814 @example
3815 @group
3816
3817 Foo::Foo (int a, int b):
3818 Cyphr (a),
3819 Bar (b) // c-lineup-multi-inher
3820
3821 @end group
3822 @end example
3823 @noindent
3824 and
3825 @example
3826 @group
3827
3828 class Foo
3829 : public Cyphr,
3830 public Bar // c-lineup-multi-inher
3831
3832 @end group
3833 @end example
3834 @noindent
3835 and
3836 @example
3837 @group
3838
3839 Foo::Foo (int a, int b)
3840 : Cyphr (a)
3841 , Bar (b) // c-lineup-multi-inher
3842
3843 @end group
3844 @end example
3845
3846 @workswith @code{inher-cont}, @code{member-init-cont}.
3847
3848 @findex c-lineup-java-inher
3849 @findex lineup-java-inher (c-)
3850 @item c-lineup-java-inher
3851 Line up Java implements and extends declarations. If class names
3852 follows on the same line as the @samp{implements}/@samp{extends}
3853 keyword, they are lined up under each other. Otherwise, they are
3854 indented by adding @code{c-basic-offset} to the column of the keyword.
3855 E.g:
3856 @example
3857 @group
3858
3859 class Foo
3860 extends
3861 Bar // c-lineup-java-inher
3862
3863 <--> c-basic-offset
3864
3865 @end group
3866 @end example
3867 @noindent
3868 and
3869 @example
3870 @group
3871
3872 class Foo
3873 extends Cyphr,
3874 Bar // c-lineup-java-inher
3875
3876 @end group
3877 @end example
3878
3879 @workswith @code{inher-cont}.
3880
3881 @findex c-lineup-java-throws
3882 @findex lineup-java-throws (c-)
3883 @item c-lineup-java-throws
3884 Line up Java throws declarations. If exception names follows on the
3885 same line as the throws keyword, they are lined up under each other.
3886 Otherwise, they are indented by adding @code{c-basic-offset} to the
3887 column of the @samp{throws} keyword. The @samp{throws} keyword itself
3888 is also indented by @code{c-basic-offset} from the function declaration
3889 start if it doesn't hang. E.g:
3890 @example
3891 @group
3892
3893 int foo()
3894 throws // c-lineup-java-throws
3895 Bar // c-lineup-java-throws
3896
3897 <--><--> c-basic-offset
3898
3899 @end group
3900 @end example
3901 @noindent
3902 and
3903 @example
3904 @group
3905
3906 int foo() throws Cyphr,
3907 Bar, // c-lineup-java-throws
3908 Vlod // c-lineup-java-throws
3909
3910 @end group
3911 @end example
3912
3913 @workswith @code{func-decl-cont}.
3914
3915 @findex c-indent-one-line-block
3916 @findex indent-one-line-block (c-)
3917 @item c-indent-one-line-block
3918 Indent a one line block @code{c-basic-offset} extra. E.g:
3919 @example
3920 @group
3921
3922 if (n > 0)
3923 @{m+=n; n=0;@} // c-indent-one-line-block
3924
3925 <--> c-basic-offset
3926
3927 @end group
3928 @end example
3929 @noindent
3930 and
3931 @example
3932 @group
3933
3934 if (n > 0)
3935 @{ // c-indent-one-line-block
3936 m+=n; n=0;
3937 @}
3938
3939 @end group
3940 @end example
3941
3942 The block may be surrounded by any kind of parenthesis characters.
3943 @code{nil} is returned if the line doesn't start with a one line block,
3944 which makes the function usable in list expressions.
3945
3946 @workswith Almost all syntactic symbols, but most useful on the
3947 @code{-open} symbols.
3948
3949 @findex c-indent-multi-line-block
3950 @findex indent-multi-line-block (c-)
3951 @item c-indent-multi-line-block
3952 Indent a multi line block @code{c-basic-offset} extra. E.g:
3953 @example
3954 @group
3955
3956 int *foo[] = @{
3957 NULL,
3958 @{17@}, // c-indent-multi-line-block
3959
3960 @end group
3961 @end example
3962 @noindent
3963 and
3964 @example
3965 @group
3966
3967 int *foo[] = @{
3968 NULL,
3969 @{ // c-indent-multi-line-block
3970 17
3971 @},
3972
3973 <--> c-basic-offset
3974
3975 @end group
3976 @end example
3977
3978 The block may be surrounded by any kind of parenthesis characters.
3979 @code{nil} is returned if the line doesn't start with a multi line
3980 block, which makes the function usable in list expressions.
3981
3982 @workswith Almost all syntactic symbols, but most useful on the
3983 @code{-open} symbols.
3984
3985 @findex c-lineup-C-comments
3986 @findex lineup-C-comments (c-)
3987 @item c-lineup-C-comments
3988 Line up C block comment continuation lines. Various heuristics are used
3989 to handle most of the common comment styles. Some examples:
3990 @example
3991
3992 @group
3993 /* /** /*
3994 * text * text text
3995 */ */ */
3996 @end group
3997
3998 @group
3999 /* text /* /**
4000 text ** text ** text
4001 */ */ */
4002 @end group
4003
4004 @group
4005 /**************************************************
4006 * text
4007 *************************************************/
4008 @end group
4009
4010 @vindex comment-start-skip
4011 @group
4012 /**************************************************
4013 Free form text comments:
4014 In comments with a long delimiter line at the
4015 start, the indentation is kept unchanged for lines
4016 that start with an empty comment line prefix. The
4017 delimiter line is whatever matches the
4018 @code{comment-start-skip} regexp.
4019 **************************************************/
4020 @end group
4021
4022 @end example
4023
4024 The style variable @code{c-comment-prefix-regexp} is used to recognize
4025 the comment line prefix, e.g. the @samp{*} that usually starts every
4026 line inside a comment.
4027
4028 @workswith The @code{c} syntactic symbol.
4029
4030 @findex c-lineup-comment
4031 @findex lineup-comment (c-)
4032 @item c-lineup-comment
4033 Line up a comment-only line according to the style variable
4034 @code{c-comment-only-line-offset}. If the comment is lined up with a
4035 comment starter on the previous line, that alignment is preserved.
4036
4037 @vindex c-comment-only-line-offset
4038 @vindex comment-only-line-offset (c-)
4039 @code{c-comment-only-line-offset} specifies the extra offset for the
4040 line. It can contain an integer or a cons cell of the form
4041 @example
4042
4043 (@r{<non-anchored-offset>} . @r{<anchored-offset>})
4044
4045 @end example
4046
4047 @noindent
4048 where @var{non-anchored-offset} is the amount of offset given to
4049 non-column-zero anchored lines, and @var{anchored-offset} is the amount
4050 of offset to give column-zero anchored lines. Just an integer as value
4051 is equivalent to @code{(@r{<value>} . -1000)}.
4052
4053 @workswith @code{comment-intro}.
4054
4055 @findex c-lineup-runin-statements
4056 @findex lineup-runin-statements (c-)
4057 @item c-lineup-runin-statements
4058 Line up statements for coding standards which place the first statement
4059 in a block on the same line as the block opening brace@footnote{Run-in
4060 style doesn't really work too well. You might need to write your own
4061 custom indentation functions to better support this style.}. E.g:
4062 @example
4063 @group
4064
4065 int main()
4066 @{ puts (\"Hello world!\");
4067 return 0; // c-lineup-runin-statements
4068 @}
4069
4070 @end group
4071 @end example
4072
4073 If there is no statement after the opening brace to align with,
4074 @code{nil} is returned. This makes the function usable in list
4075 expressions.
4076
4077 @workswith The @code{statement} syntactic symbol.
4078
4079 @findex c-lineup-math
4080 @findex lineup-math (c-)
4081 @item c-lineup-math
4082 Line up the current line after the equal sign on the first line in the
4083 statement. If there isn't any, indent with @code{c-basic-offset}. If
4084 the current line contains an equal sign too, try to align it with the
4085 first one.
4086
4087 @workswith @code{statement-cont}.
4088
4089 @findex c-lineup-template-args
4090 @findex lineup-template-args (c-)
4091 @item c-lineup-template-args
4092 Line up the arguments of a template argument list under each other, but
4093 only in the case where the first argument is on the same line as the
4094 opening @samp{<}.
4095
4096 To allow this function to be used in a list expression, @code{nil} is
4097 returned if there's no template argument on the first line.
4098
4099 @workswith @code{template-args-cont}.
4100
4101 @findex c-lineup-ObjC-method-call
4102 @findex lineup-ObjC-method-call (c-)
4103 @item c-lineup-ObjC-method-call
4104 For Objective-C code, line up selector args as @code{elisp-mode} does
4105 with function args: go to the position right after the message receiver,
4106 and if you are at the end of the line, indent the current line
4107 c-basic-offset columns from the opening bracket; otherwise you are
4108 looking at the first character of the first method call argument, so
4109 lineup the current line with it.
4110
4111 @workswith @code{objc-method-call-cont}.
4112
4113 @findex c-lineup-ObjC-method-args
4114 @findex lineup-ObjC-method-args (c-)
4115 @item c-lineup-ObjC-method-args
4116 For Objective-C code, line up the colons that separate args. The colon
4117 on the current line is aligned with the one on the first line.
4118
4119 @workswith @code{objc-method-args-cont}.
4120
4121 @findex c-lineup-ObjC-method-args-2
4122 @findex lineup-ObjC-method-args-2 (c-)
4123 @item c-lineup-ObjC-method-args-2
4124 Similar to @code{c-lineup-ObjC-method-args} but lines up the colon on
4125 the current line with the colon on the previous line.
4126
4127 @workswith @code{objc-method-args-cont}.
4128
4129 @findex c-lineup-inexpr-block
4130 @findex lineup-inexpr-block (c-)
4131 @item c-lineup-inexpr-block
4132 This can be used with the in-expression block symbols to indent the
4133 whole block to the column where the construct is started. E.g. for Java
4134 anonymous classes, this lines up the class under the @samp{new} keyword,
4135 and in Pike it lines up the lambda function body under the @samp{lambda}
4136 keyword. Returns @code{nil} if the block isn't part of such a
4137 construct.
4138
4139 @workswith @code{inlambda}, @code{inexpr-statement},
4140 @code{inexpr-class}.
4141
4142 @findex c-lineup-whitesmith-in-block
4143 @findex lineup-whitesmith-in-block (c-)
4144 @item c-lineup-whitesmith-in-block
4145 Line up lines inside a block in Whitesmiths style. It's done in a way
4146 that works both when the opening brace hangs and when it doesn't. E.g:
4147 @example
4148 @group
4149
4150 something
4151 @{
4152 foo; // c-lineup-whitesmith-in-block
4153 @}
4154
4155 @end group
4156 @end example
4157 @noindent
4158 and
4159 @example
4160 @group
4161
4162 something @{
4163 foo; // c-lineup-whitesmith-in-block
4164 @}
4165
4166 <--> c-basic-offset
4167
4168 @end group
4169 @end example
4170
4171 In the first case the indentation is kept unchanged, in the second
4172 @code{c-basic-offset} is added.
4173
4174 @workswith @code{defun-close}, @code{defun-block-intro},
4175 @code{block-close}, @code{brace-list-close}, @code{brace-list-intro},
4176 @code{statement-block-intro}, @code{inclass}, @code{inextern-lang},
4177 @code{innamespace}.
4178
4179 @findex c-lineup-dont-change
4180 @findex lineup-dont-change (c-)
4181 @item c-lineup-dont-change
4182 This lineup function makes the line stay at whatever indentation it
4183 already has; think of it as an identity function for lineups. It is
4184 used for @code{cpp-macro-cont} lines.
4185
4186 @workswith Any syntactic symbol.
4187
4188 @end table
4189
4190
4191 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4192 @node Performance Issues, Limitations and Known Bugs, Indentation Functions, Top
4193 @comment node-name, next, previous, up
4194 @chapter Performance Issues
4195 @cindex performance issues
4196 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4197
4198 C and its derivative languages are highly complex creatures. Often,
4199 ambiguous code situations arise that require @ccmode{} to scan
4200 large portions of the buffer to determine syntactic context. Such
4201 pathological code@footnote{such as the output of @code{lex(1)}!}
4202 can cause @ccmode{} to perform fairly badly.
4203 This section identifies some of the coding styles to watch out for, and
4204 suggests some workarounds that you can use to improve performance.
4205
4206 Because @ccmode{} has to scan the buffer backwards from the current
4207 insertion point, and because C's syntax is fairly difficult to parse in
4208 the backwards direction, @ccmode{} often tries to find the nearest
4209 position higher up in the buffer from which to begin a forward scan.
4210 The farther this position is from the current insertion point, the
4211 slower the mode gets. Some coding styles can even force @ccmode{}
4212 to scan from the beginning of the buffer for every line of code!
4213
4214 @findex beginning-of-defun
4215 @findex defun-prompt-regexp
4216 One of the simplest things you can do to reduce scan time, is make sure
4217 any brace that opens a top-level construct@footnote{E.g. a function in
4218 C, or outermost class definition in C++ or Java.} always appears in the
4219 leftmost column. This is actually an Emacs constraint, as embodied in
4220 the @code{beginning-of-defun} function which @ccmode{} uses heavily. If
4221 you insist on hanging top-level open braces on the right side of the
4222 line, then you might want to set the variable @code{defun-prompt-regexp}
4223 to something reasonable, however that ``something reasonable'' is
4224 difficult to define, so @ccmode{} doesn't do it for you.
4225
4226 @vindex c-Java-defun-prompt-regexp
4227 @vindex Java-defun-prompt-regexp (c-)
4228 A special note about @code{defun-prompt-regexp} in Java mode: while much
4229 of the early sample Java code seems to encourage a style where the brace
4230 that opens a class is hung on the right side of the line, this is not a
4231 good style to pursue in Emacs. @ccmode{} comes with a variable
4232 @code{c-Java-defun-prompt-regexp} which tries to define a regular
4233 expression usable for this style, but there are problems with it. In
4234 some cases it can cause @code{beginning-of-defun} to hang@footnote{This
4235 has been observed in Emacs 19.34 and XEmacs 19.15.}. For this reason,
4236 it is not used by default, but if you feel adventurous, you can set
4237 @code{defun-prompt-regexp} to it in your mode hook. In any event,
4238 setting and rely on @code{defun-prompt-regexp} will definitely slow
4239 things down anyway because you'll be doing regular expression searches
4240 for every line you indent, so you're probably screwed either way!
4241
4242 @vindex c-enable-xemacs-performance-kludge-p
4243 @vindex enable-xemacs-performance-kludge-p (c-)
4244 Another alternative for XEmacs users, is to set the variable
4245 @code{c-enable-xemacs-performance-kludge-p} to non-@code{nil}. This
4246 tells @ccmode{} to use XEmacs-specific built-in functions which, in some
4247 circumstances, can locate the top-most opening brace much quicker than
4248 @code{beginning-of-defun}. Preliminary testing has shown that for
4249 styles where these braces are hung (e.g. most JDK-derived Java styles),
4250 this hack can improve performance of the core syntax parsing routines
4251 from 3 to 60 times. However, for styles which @emph{do} conform to
4252 Emacs' recommended style of putting top-level braces in column zero,
4253 this hack can degrade performance by about as much. Thus this variable
4254 is set to @code{nil} by default, since the Emacs-friendly styles
4255 should be more common (and
4256 encouraged!). Note that this variable has no effect in Emacs since the
4257 necessary built-in functions don't exist (in Emacs 20.2 or 20.3 as of
4258 this writing 27-Apr-1998).
4259
4260 You will probably notice pathological behavior from @ccmode{} when
4261 working in files containing large amounts of C preprocessor macros.
4262 This is because Emacs cannot skip backwards over these lines as quickly
4263 as it can comments.
4264
4265 @vindex c-recognize-knr-p
4266 @vindex recognize-knr-p (c-)
4267 Previous versions of @ccmode{} had potential performance problems
4268 when recognizing K&R style function argument declarations. This was
4269 because there are ambiguities in the C syntax when K&R style argument
4270 lists are used@footnote{It is hard to distinguish them from top-level
4271 declarations.}. @ccmode{} has adopted BOCM's convention for
4272 limiting the search: it assumes that argdecls are indented at least one
4273 space, and that the function headers are not indented at all. With
4274 current versions of @ccmode{}, user customization of
4275 @code{c-recognize-knr-p} is deprecated. Just don't put argdecls in
4276 column zero!
4277
4278 @cindex @file{cc-lobotomy.el} file
4279 @vindex cc-lobotomy-pith-list
4280 You might want to investigate the speed-ups contained in the
4281 file @file{cc-lobotomy.el}, which comes as part of the @ccmode{}
4282 distribution, but is completely unsupported.
4283 As mentioned previous, @ccmode{} always trades speed for accuracy,
4284 however it is recognized that sometimes you need speed and can sacrifice
4285 some accuracy in indentation. The file @file{cc-lobotomy.el} contains
4286 hacks that will ``dumb down'' @ccmode{} in some specific ways, making
4287 that trade-off of accuracy for speed. I won't go into details of its
4288 use here; you should read the comments at the top of the file, and look
4289 at the variable @code{cc-lobotomy-pith-list} for details.
4290
4291
4292 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4293 @node Limitations and Known Bugs, Frequently Asked Questions, Performance Issues, Top
4294 @comment node-name, next, previous, up
4295 @chapter Limitations and Known Bugs
4296 @cindex limitations
4297 @cindex bugs
4298 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4299
4300 @itemize @bullet
4301 @item
4302 Re-indenting large regions or expressions can be slow.
4303
4304 @findex c-indent-exp
4305 @findex indent-exp (c-)
4306 @item
4307 @code{c-indent-exp} has not been fully optimized. It essentially
4308 equivalent to hitting @kbd{TAB} (@code{c-indent-command}) on every
4309 line. Some information is cached from line to line, but such caching
4310 invariable causes inaccuracies in analysis in some bizarre situations.
4311
4312 @vindex signal-error-on-buffer-boundary
4313 @item
4314 XEmacs versions from 19.15 until (as of this writing 12-Mar-1998) 20.4
4315 contain a variable called @code{signal-error-on-buffer-boundary}. This
4316 was intended as a solution to user interface problems associated with
4317 buffer movement and the @code{zmacs-region} deactivation on errors.
4318 However, setting this variable to a non-default value had the
4319 deleterious side effect of breaking many built-in primitive functions.
4320 Most users will not be affected since they never change the value of
4321 this variable. @strong{Do not set this variable to @code{nil}}; you
4322 will cause serious problems in @ccmode{} and probably other XEmacs
4323 packages! As of at least XEmacs 20.4, the effects this variable tried
4324 to correct have been fixed in other, better ways.
4325
4326 @end itemize
4327
4328
4329 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4330 @node Frequently Asked Questions, Getting the Latest CC Mode Release, Limitations and Known Bugs, Top
4331 @comment node-name, next, previous, up
4332 @appendix Frequently Asked Questions
4333 @cindex frequently asked questions
4334 @cindex FAQ
4335 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4336
4337 @kindex C-x h
4338 @kindex C-M-\
4339 @kindex C-M-x
4340 @kindex C-M-q
4341 @kindex C-M-u
4342 @kindex RET
4343 @kindex C-j
4344 @quotation
4345
4346 @strong{Q.} @emph{How do I re-indent the whole file?}
4347
4348 @strong{A.} Visit the file and hit @kbd{C-x h} to mark the whole
4349 buffer. Then hit @kbd{C-M-\}.
4350
4351 @sp 1
4352 @strong{Q.} @emph{How do I re-indent the entire function?
4353 @kbd{C-M-x} doesn't work.}
4354
4355 @strong{A.} @kbd{C-M-x} is reserved for future Emacs use.
4356 To re-indent the entire function hit @kbd{C-c C-q}.
4357
4358 @sp 1
4359 @strong{Q.} @emph{How do I re-indent the current block?}
4360
4361 @strong{A.} First move to the brace which opens the block with
4362 @kbd{C-M-u}, then re-indent that expression with
4363 @kbd{C-M-q}.
4364
4365 @sp 1
4366 @strong{Q.} @emph{Why doesn't the @kbd{RET} key indent the new line?}
4367
4368 @strong{A.} Emacs' convention is that @kbd{RET} just adds a newline,
4369 and that @kbd{C-j} adds a newline and indents it. You can make
4370 @kbd{RET} do this too by adding this to your
4371 @code{c-mode-common-hook}:
4372 @example
4373
4374 (define-key c-mode-base-map "\C-m" 'c-context-line-break)
4375
4376 @end example
4377
4378 This is a very common question. If you want this to be the default
4379 behavior, don't lobby me, lobby RMS! @t{:-)}
4380
4381 @sp 1
4382 @strong{Q.} @emph{I put @code{(c-set-offset 'substatement-open 0)}
4383 in my @file{.emacs} file but I get an error saying that
4384 @code{c-set-offset}'s function definition is void.}
4385
4386 @strong{A.} This means that @ccmode{} wasn't loaded into your
4387 Emacs session by the time the @code{c-set-offset} call was reached,
4388 most likely because @ccmode{} is being autoloaded. Instead
4389 of putting the @code{c-set-offset} line in your top-level
4390 @file{.emacs} file, put it in your @code{c-mode-common-hook}, or
4391 simply modify @code{c-offsets-alist} directly:
4392 @example
4393
4394 (setq c-offsets-alist '((substatement-open . 0)))
4395
4396 @end example
4397
4398 @sp 1
4399 @strong{Q.} @emph{How do I make strings, comments, keywords, and other
4400 constructs appear in different colors, or in bold face, etc.?}
4401
4402 @strong{A.} ``Syntax Colorization'' is a standard Emacs feature,
4403 controlled by @code{font-lock-mode}. @ccmode{} does not contain
4404 font-lock definitions for any of its supported languages.
4405
4406 @sp 1
4407 @strong{Q.} @emph{@kbd{M-a} and @kbd{M-e} used to move over entire
4408 balanced brace lists, but now they move into blocks. How do I get the
4409 old behavior back?}
4410
4411 @strong{A.} Use @kbd{C-M-f} and @kbd{C-M-b} to move over balanced brace
4412 blocks. Use @kbd{M-a} and @kbd{M-e} to move by statements, which will
4413 also move into blocks.
4414
4415 @sp 1
4416 @strong{Q.} @emph{Whenever I try to indent a line or type an
4417 ``electric'' key such as @kbd{;}, @kbd{@{}, or @kbd{@}}, I get an error
4418 that look like this: @code{Invalid function: (macro . #[...}. What
4419 gives?}
4420
4421 @strong{A.} This is a common error when @ccmode{} hasn't been compiled
4422 correctly, especially under Emacs 19.34@footnote{Technically, it's
4423 because some macros wasn't defined during the compilation, so the byte
4424 compiler put in function calls instead of the macro expansions. Later,
4425 when the interpreter tries to call the macros as functions, it shows
4426 this (somewhat cryptic) error message.}. If you are using the standalone
4427 @ccmode{} distribution, try recompiling it according to the instructions
4428 in the @file{README} file.
4429
4430 @end quotation
4431
4432
4433 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4434 @node Getting the Latest CC Mode Release, Mailing Lists and Submitting Bug Reports, Frequently Asked Questions, Top
4435 @comment node-name, next, previous, up
4436 @appendix Getting the Latest CC Mode Release
4437 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4438
4439 @ccmode{} is standard with all versions of Emacs since 19.34 and of
4440 XEmacs since 19.16.
4441
4442 Due to release schedule skew, it is likely that all of these Emacsen
4443 have old versions of @ccmode{} and so should be upgraded. Access to the
4444 @ccmode{} source code, as well as more detailed information on Emacsen
4445 compatibility, etc. are all available via the Web at:
4446
4447 @example
4448 @group
4449
4450 @uref{http://cc-mode.sourceforge.net/}
4451
4452 @end group
4453 @end example
4454
4455 @emph{Old URLs, including the FTP URLs, should no longer be used.}
4456
4457 There are many files under these directories; you can pick up the entire
4458 distribution (named @code{cc-mode.tar.gz}; a gzip'd tar file), or any of
4459 the individual files, including PostScript documentation.
4460
4461
4462 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4463 @node Mailing Lists and Submitting Bug Reports, Sample .emacs File, Getting the Latest CC Mode Release, Top
4464 @comment node-name, next, previous, up
4465 @appendix Mailing Lists and Submitting Bug Reports
4466 @cindex mailing lists
4467 @cindex reporting bugs
4468 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4469
4470 @kindex C-c C-b
4471 @findex c-submit-bug-report
4472 @findex submit-bug-report (c-)
4473 To report bugs, use the @kbd{C-c C-b} (@code{c-submit-bug-report})
4474 command. This provides vital information we need to reproduce your
4475 problem. Make sure you include a concise, but complete code example.
4476 Please try to boil your example down to just the essential code needed
4477 to reproduce the problem, and include an exact recipe of steps needed to
4478 expose the bug. Be especially sure to include any code that appears
4479 @emph{before} your bug example, if you think it might affect our ability
4480 to reproduce it.
4481
4482 Please try to produce the problem in an Emacs instance without any
4483 customizations loaded (i.e. start it with the @code{-q -no-site-file}
4484 arguments). If it works correctly there, the problem might be caused by
4485 faulty customizations in either your own or your site configuration. In
4486 that case, we'd appreciate if you isolate the Emacs Lisp code that trigs
4487 the bug and include it in your report.
4488
4489 @cindex bug report mailing list
4490 Bug reports are now sent to the following email addresses:
4491 @email{bug-cc-mode@@gnu.org} and @email{bug-gnu-emacs@@gnu.org}; the
4492 latter is mirrored on the Usenet newsgroup @code{gnu.emacs.bug}. You
4493 can send other questions and suggestions (kudos? @t{;-)} to
4494 @email{bug-cc-mode@@gnu.org}.
4495
4496 @cindex announcement mailing list
4497 If you want to get announcements of new @ccmode{} releases, send the
4498 word @emph{subscribe} in the body of a message to
4499 @email{cc-mode-announce-request@@lists.sourceforge.net}. Announcements
4500 will also be posted to the Usenet newsgroups @code{gnu.emacs.sources},
4501 @code{comp.emacs} and @code{comp.emacs.xemacs}.
4502
4503
4504 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4505 @node Sample .emacs File, Concept Index, Mailing Lists and Submitting Bug Reports, Top
4506 @comment node-name, next, previous, up
4507 @appendix Sample .emacs file
4508 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4509
4510 @example
4511 ;; Here's a sample .emacs file that might help you along the way. Just
4512 ;; copy this region and paste it into your .emacs file. You may want to
4513 ;; change some of the actual values.
4514
4515 (defconst my-c-style
4516 '((c-tab-always-indent . t)
4517 (c-comment-only-line-offset . 4)
4518 (c-hanging-braces-alist . ((substatement-open after)
4519 (brace-list-open)))
4520 (c-hanging-colons-alist . ((member-init-intro before)
4521 (inher-intro)
4522 (case-label after)
4523 (label after)
4524 (access-label after)))
4525 (c-cleanup-list . (scope-operator
4526 empty-defun-braces
4527 defun-close-semi))
4528 (c-offsets-alist . ((arglist-close . c-lineup-arglist)
4529 (substatement-open . 0)
4530 (case-label . 4)
4531 (block-open . 0)
4532 (knr-argdecl-intro . -)))
4533 (c-echo-syntactic-information-p . t)
4534 )
4535 "My C Programming Style")
4536
4537 ;; offset customizations not in my-c-style
4538 (setq c-offsets-alist '((member-init-intro . ++)))
4539
4540 ;; Customizations for all modes in CC Mode.
4541 (defun my-c-mode-common-hook ()
4542 ;; add my personal style and set it for the current buffer
4543 (c-add-style "PERSONAL" my-c-style t)
4544 ;; other customizations
4545 (setq tab-width 8
4546 ;; this will make sure spaces are used instead of tabs
4547 indent-tabs-mode nil)
4548 ;; we like auto-newline and hungry-delete
4549 (c-toggle-auto-hungry-state 1)
4550 ;; key bindings for all supported languages. We can put these in
4551 ;; c-mode-base-map because c-mode-map, c++-mode-map, objc-mode-map,
4552 ;; java-mode-map, idl-mode-map, and pike-mode-map inherit from it.
4553 (define-key c-mode-base-map "\C-m" 'c-context-line-break)
4554 )
4555
4556 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
4557 @end example
4558
4559
4560 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4561 @node Concept Index, Command Index, Sample .emacs File, Top
4562 @comment node-name, next, previous, up
4563 @unnumbered Concept Index
4564 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4565
4566 @printindex cp
4567
4568
4569 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4570 @node Command Index, Key Index, Concept Index, Top
4571 @comment node-name, next, previous, up
4572 @unnumbered Command Index
4573 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4574
4575 Since most @ccmode{} commands are prepended with the string
4576 @samp{c-}, each appears under its @code{c-@var{<thing>}} name and its
4577 @code{@var{<thing>} (c-)} name.
4578 @iftex
4579 @sp 2
4580 @end iftex
4581 @printindex fn
4582
4583
4584 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4585 @node Key Index, Variable Index, Command Index, Top
4586 @comment node-name, next, previous, up
4587 @unnumbered Key Index
4588 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4589
4590 @printindex ky
4591
4592
4593 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4594 @node Variable Index, , Key Index, Top
4595 @comment node-name, next, previous, up
4596 @unnumbered Variable Index
4597 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4598
4599 Since most @ccmode{} variables are prepended with the string
4600 @samp{c-}, each appears under its @code{c-@var{<thing>}} name and its
4601 @code{@var{<thing>} (c-)} name.
4602 @iftex
4603 @sp 2
4604 @end iftex
4605 @printindex vr
4606
4607 @iftex
4608 @page
4609 @summarycontents
4610 @contents
4611 @end iftex
4612
4613 @bye