comparison man/cc-mode.texi @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children ac2d302a0011
comparison
equal deleted inserted replaced
-1:000000000000 0:376386a54a3c
1 \input texinfo @c -*- texinfo -*-
2
3 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4 @comment %**start of header (This is for running Texinfo on a region)
5 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6
7 @setfilename ../info/cc-mode.info
8 @settitle CC-MODE Version 4 Documentation
9 @footnotestyle end
10
11 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12 @comment @setchapternewpage odd !! we don't want blank pages !!
13 @comment %**end of header (This is for running Texinfo on a region)
14 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
15
16
17 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
18 @comment
19 @comment texinfo manual for @file{cc-mode.el} version 4
20 @comment manual version: 2.35
21 @comment generated from the original README file by Krishna Padmasola
22 @comment <krishna@earth-gw.njit.edu>
23 @comment
24 @comment Barry A. Warsaw <bwarsaw@cnri.reston.va.us>
25 @comment Last modification: 1996/01/19 20:50:48
26 @comment
27 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
28
29
30 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
31 @comment The following line inserts the copyright notice
32 @comment into the Info file.
33 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
34
35 @ifinfo
36 Copyright @copyright{} 1995 Free Software Foundation, Inc.
37 @end ifinfo
38
39 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
40 @comment !!!The titlepage section does not appear in the Info file.!!!
41 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
42
43 @titlepage
44 @sp 10
45
46
47 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
48 @comment The title is printed in a large font.
49 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
50
51 @center @titlefont{CC-MODE Version 4}
52 @sp 2
53 @center A GNU Emacs mode for editing C, C++, and Objective-C code.
54 @center (manual revision: 2.35)
55 @sp 2
56 @center Barry A. Warsaw
57
58
59 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
60 @comment The following two commands start the copyright page
61 @comment for the printed manual. This will not appear in the Info file.
62 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
63
64 @page
65 @vskip 0pt plus 1filll
66 Copyright @copyright{} 1995 Free Software Foundation, Inc.
67 @end titlepage
68
69
70 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
71 @comment The Top node contains the master menu for the Info file.
72 @comment This appears only in the Info file, not the printed manual.
73 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
74
75 @node Top, Introduction, (dir), (dir)
76 @comment node-name, next, previous, up
77
78
79 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
80 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
81
82 @menu
83 * Introduction::
84 * Getting Connected::
85 * New Indentation Engine::
86 * Minor Modes::
87 * Indentation Commands::
88 * Customizing Indentation::
89 * Syntactic Symbols::
90 * Performance Issues::
91 * Frequently Asked Questions::
92 * Getting the latest cc-mode release::
93 * Sample .emacs File::
94 * Requirements::
95 * Limitations and Known Bugs::
96 * Mailing Lists and Submitting Bug Reports::
97 * Concept Index::
98 * Command Index:: Command Index
99 * Key Index:: Key Index
100 * Variable Index:: Variable Index
101 @end menu
102
103 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
104 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
105
106 @node Introduction, Getting Connected, Top, Top
107 @comment node-name, next, previous, up
108 @chapter Introduction
109 @cindex Introduction
110
111 @cindex BOCM
112 Welcome to @code{cc-mode}, version 4. This is a GNU Emacs mode for
113 editing files containing C, C++, Objective-C, and Java code.
114 This incarnation of the mode is descendant from @file{c-mode.el} (also
115 called "Boring Old C Mode" or BOCM @code{:-)}, and @file{c++-mode.el}
116 version 2, which I have been maintaining since 1992. @code{cc-mode}
117 represents a significant milestone in the mode's life. It has been
118 fully merged back with Emacs 19's @file{c-mode.el}. Also a new, more
119 intuitive and flexible mechanism for controlling indentation has been
120 developed.
121
122 @code{cc-mode} version 4 supports the editing of K&R and ANSI C,
123 @dfn{ARM} @footnote{i.e. ``The Annotated C++ Reference Manual'', by
124 Ellis and Stroustrup.} C++, Objective-C, and Java files. In this way,
125 you can easily set up consistent coding styles for use in editing all C,
126 C++, Objective-C, and Java programs.
127
128 This manual will describe the following:
129
130 @itemize @bullet
131 @item
132 How to get started using @code{cc-mode}.
133
134 @item
135 How the new indentation engine works.
136
137 @item
138 How to customize the new indentation engine.
139
140 @end itemize
141
142 Note that the name of this file is @file{cc-mode.el}, and I'll often
143 refer to the package as @code{cc-mode}, but there really is no top level
144 @code{cc-mode} entry point. I call it @code{cc-mode} simply to
145 differentiate it from @file{c-mode.el}. All of the variables, commands,
146 and functions in @code{cc-mode} are prefixed with @code{c-<thing>}, and
147 @code{c-mode}, @code{c++-mode}, @code{objc-mode}, and @code{java-mode}
148 entry points are provided. This file is intended to be a replacement
149 for @file{c-mode.el} and @file{c++-mode.el}.
150
151 @findex c-version
152 The major version number was incremented to 4 with the addition of
153 @code{objc-mode}. To find the minor revision number of this release, use
154 @kbd{M-x c-version RET}. Work has already begun on @code{cc-mode}
155 version 5, in which Emacs 18 will not be supported.
156
157 As of this writing (19-Jan-1996), both Emacs 19.30 and XEmacs 19.13 are
158 distributed with @code{cc-mode}. Emacs 19.31 and XEmacs 19.14 will both
159 contain the latest version of cc-mode when it is released. If you are
160 running older versions of these Emacsen, you may want to upgrade your
161 copy of @code{cc-mode}. See @ref{Getting the latest cc-mode release}.
162
163 @cindex @file{cc-compat.el} file
164 This distribution also contains a file called @file{cc-compat.el}
165 which should ease your transition from BOCM to @code{cc-mode}. It
166 currently comes unguaranteed and unsupported, but this may change for
167 future versions.
168
169 A special word of thanks goes to Krishna Padmasola for his work in
170 converting the original @file{README} file to texinfo format.
171 @code{cc-mode} users have been clamoring for a manual for a long time,
172 and thanks to Krishna, it is now available <clap> <clap> <clap>!
173 @code{:-)}
174
175
176 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
177
178 @node Getting Connected, New Indentation Engine, Introduction, Top
179 @comment node-name, next, previous, up
180 @chapter Getting Connected
181 @cindex Getting Connected
182
183 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
184
185 @file{cc-mode.el} works well with the 2 main branches of Emacs 19:
186 XEmacs and the Emacs 19 maintained by the FSF. Emacs 19 users will want
187 to use Emacs version 19.21 or better, XEmacs users will want 19.6 or
188 better. Earlier versions of these Emacsen have deficiencies and/or bugs
189 which will adversely affect the performance and usability of
190 @code{cc-mode}.
191
192 @cindex @file{cc-mode-18.el} file
193 Similarly if you use the @file{cc-mode-18.el} compatibility file,
194 @file{cc-mode.el} will work with Emacs 18, but only moderately well. A
195 word of warning though, @emph{Emacs 18 lacks some fundamental
196 functionality and that ultimately means using Emacs 18 is a losing
197 battle}. Hence @code{cc-mode} under Emacs 18 is no longer supported and
198 it is highly recommended that you upgrade to Emacs 19. If you use
199 @code{cc-mode} under Emacs 18, you're on your own. With @code{cc-mode}
200 version 5, Emacs 18 support will be dropped altogether.
201
202 Note that as of XEmacs 19.13 and Emacs 19.30, your Emacs already comes
203 with @code{cc-mode} version 4 preconfigured for your use. You should be
204 able to safely skip the rest of the setup information in this chapter.
205
206 @cindex @file{.emacs} file
207 The first thing you will want to do is put @file{cc-mode.el} somewhere
208 on your @code{load-path} so Emacs can find it. Do a @kbd{C-h v
209 load-path RET} to see all the directories Emacs looks at when loading a
210 file. If none of these directories are appropriate, create a new
211 directory and add it to your @code{load-path}:
212
213 @noindent
214 @emph{[in the shell]}
215 @example
216 @group
217
218 % cd
219 % mkdir mylisp
220 % mv cc-mode.el mylisp
221 % cd mylisp
222
223 @end group
224 @end example
225
226 @noindent
227 @emph{[in your .emacs file add]}
228 @example
229
230 (setq load-path (cons "~/mylisp" load-path))
231
232 @end example
233
234 @cindex byte compile
235 Next you want to @dfn{byte compile} @file{cc-mode.el}. The mode uses a
236 lot of macros so if you don't byte compile it, things will be unbearably
237 slow. @emph{You can ignore all byte-compiler warnings!} They are the
238 result of the supporting different versions of Emacs, and none of the
239 warnings have any effect on operation. Let me say this again:
240 @strong{You really can ignore all byte-compiler warnings!}
241
242 Here's what to do to byte-compile the file [in emacs]:
243 @example
244
245 M-x byte-compile-file RET ~/mylisp/cc-mode.el RET
246
247 @end example
248
249 If you are running a version of Emacs or XEmacs that comes with
250 @code{cc-mode} by default, you can simply add the following to your
251 @file{.emacs} file in order to upgrade to the latest version of
252 @code{cc-mode}:
253 @example
254
255 (load "cc-mode")
256
257 @end example
258
259 Users of even older versions of Emacs 19, Emacs 18, or of the older
260 Lucid Emacs will probably be running an Emacs that has BOCM
261 @file{c-mode.el} and possible @file{c++-mode.el} pre-dumped. If your
262 Emacs is dumped with either of these files you first need to make Emacs
263 ``forget'' about those older modes.
264
265 If you can do a @kbd{C-h v c-mode-map RET} without getting an error, you
266 need to add these lines at the top of your @file{.emacs} file:
267 @example
268 @group
269
270 (fmakunbound 'c-mode)
271 (makunbound 'c-mode-map)
272 (fmakunbound 'c++-mode)
273 (makunbound 'c++-mode-map)
274 (makunbound 'c-style-alist)
275
276 @end group
277 @end example
278
279 After those lines you will want to add the following autoloads to your
280 @file{.emacs} file so that @code{cc-mode} gets loaded at the right time:
281 @example
282 @group
283
284 (autoload 'c++-mode "cc-mode" "C++ Editing Mode" t)
285 (autoload 'c-mode "cc-mode" "C Editing Mode" t)
286 (autoload 'objc-mode "cc-mode" "Objective-C Editing Mode" t)
287 (autoload 'java-mode "cc-mode" "Java Editing Mode" t)
288
289 @end group
290 @end example
291
292 Alternatively, if you want to make sure @code{cc-mode} is loaded when
293 Emacs starts up, you could use this line instead of the three autoloads
294 above:
295 @example
296
297 (require 'cc-mode)
298
299 @end example
300
301 Next, you will want to set up Emacs so that it edits C files in
302 @code{c-mode}, C++ files in @code{c++-mode}, and Objective-C files in
303 @code{objc-mode}. All users should add the following to their
304 @file{.emacs} file. Note that this assumes you'll be editing @code{.h}
305 and @code{.c} files as C, @code{.hh}, @code{.cc}, @code{.H}, and
306 @code{.C} files as C++, @code{.m} files as Objective-C, and @code{.java}
307 files as Java code. YMMV:
308 @example
309 @group
310
311 (setq auto-mode-alist
312 (append
313 '(("\\.C$" . c++-mode)
314 ("\\.H$" . c++-mode)
315 ("\\.cc$" . c++-mode)
316 ("\\.hh$" . c++-mode)
317 ("\\.c$" . c-mode)
318 ("\\.h$" . c-mode)
319 ("\\.m$" . objc-mode)
320 ("\\.java$" . java-mode)
321 ) auto-mode-alist))
322
323 @end group
324 @end example
325
326 You may already have some or all of these settings on your
327 @code{auto-mode-alist}, but it won't hurt to put them on there again.
328
329 That's all you need -- I know, I know, it sounds like a lot @code{:-)},
330 but after you've done all this, you should only need to quit and restart
331 Emacs. The next time you visit a C, C++, Objective-C, or Java file you
332 should be using @code{cc-mode}. You can check this easily by hitting
333 @kbd{M-x c-version RET} in the @code{c-mode}, @code{c++-mode}, or
334 @code{objc-mode} buffer. You should see this message in the echo area:
335 @example
336
337 Using @code{cc-mode} version 4.@var{xxx}
338
339 Where @var{xxx} is the latest release minor number.
340
341 @end example
342
343 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
344
345 @menu
346 * Syntactic Analysis::
347 * Indentation Calculation::
348 @end menu
349
350 @node New Indentation Engine, Minor Modes, Getting Connected, Top
351 @comment node-name, next, previous,up
352
353 @chapter New Indentation Engine
354 @cindex New Indentation Engine
355
356 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
357
358 @code{cc-mode} has a new indentation engine, providing a simplified, yet
359 flexible and general mechanism for customizing indentation. It breaks
360 indentation calculation into two steps. First for the line of code being
361 indented, @code{cc-mode} analyzes what kind of language construct it's
362 looking at, then it applies user defined offsets to the current line
363 based on this analysis.
364
365 This section will briefly cover how indentation is calculated in
366 @code{cc-mode}. It is important to understand the indentation model
367 being used so that you will know how to customize @code{cc-mode} for
368 your personal coding style.
369
370 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
371 @menu
372 * Syntactic Analysis::
373 * Indentation Calculation::
374 @end menu
375 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
376
377 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
378 @node Syntactic Analysis, Indentation Calculation, , New Indentation Engine
379 @comment node-name, next, previous,up
380 @section Syntactic Analysis
381 @cindex Syntactic Analysis
382 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
383
384 @vindex c-offsets-alist
385 @vindex offsets-alist (c-)
386 @cindex relative buffer position
387 @cindex syntactic symbol
388 @cindex syntactic component
389 @cindex syntactic component list
390 @cindex relative buffer position
391 The first thing @code{cc-mode} does when indenting a line of code, is to
392 analyze the line, determining the @dfn{syntactic component list} of the
393 construct on that line. A @dfn{syntactic component} consists of a pair
394 of information (in lisp parlance, a @emph{cons cell}), where the first
395 part is a @dfn{syntactic symbol}, and the second part is a @dfn{relative
396 buffer position}. Syntactic symbols describe elements of C code
397 @footnote{or C++, Objective-C, or Java code. In general, for the rest
398 of this manual I'll use the term ``C code'' to refer to all the C-like
399 dialects, unless otherwise noted.}, e.g. @code{statement},
400 @code{substatement}, @code{class-open}, @code{class-close}, etc.
401 @xref{Syntactic Symbols}, for a complete list of currently recognized
402 syntactic symbols and their semantics. The variable
403 @code{c-offsets-alist} also contains the list of currently supported
404 syntactic symbols.
405
406 Conceptually, a line of C code is always indented relative to the
407 indentation of some line higher up in the buffer. This is represented
408 by the relative buffer position in the syntactic component.
409
410 It might help to see an example. Suppose we had the following code as
411 the only thing in a @code{c++-mode} buffer @footnote{The line numbers in
412 this and future examples don't actually appear in the buffer, of course!}:
413 @example
414 @group
415
416 1: void swap( int& a, int& b )
417 2: @{
418 3: int tmp = a;
419 4: a = b;
420 5: b = tmp;
421 6: @}
422
423 @end group
424 @end example
425
426 @kindex C-c C-s
427 @findex c-show-syntactic-information
428 @findex show-syntactic-information (c-)
429 We can use the command @kbd{C-c C-s}
430 (@code{c-show-syntactic-information}) to simply report what the
431 syntactic analysis is for the current line. Running this command on
432 line 4 this example, we'd see in the echo area:
433 @example
434
435 ((statement . 35))
436
437 @end example
438
439 This tells us that the line is a statement and it is indented relative
440 to buffer position 35, which happens to be the @samp{i} in @code{int} on
441 line 3. If you were to move point to line 3 and hit @kbd{C-c C-s}, you
442 would see:
443 @example
444
445 ((defun-block-intro . 29))
446
447 @end example
448
449 This indicates that the @samp{int} line is the first statement in a top
450 level function block, and is indented relative to buffer position 29,
451 which is the brace just after the function header.
452
453 Here's another example:
454 @example
455 @group
456
457 1: int add( int val, int incr, int doit )
458 2: @{
459 3: if( doit )
460 4: @{
461 5: return( val + incr );
462 6: @}
463 7: return( val );
464 8: @}
465
466 @end group
467 @end example
468
469 @noindent
470 Hitting @kbd{C-c C-s} on line 4 gives us:
471 @example
472
473 ((substatement-open . 46))
474
475 @end example
476
477 @cindex substatement
478 @cindex substatment block
479 @noindent
480 which tells us that this is a brace that @emph{opens} a substatement
481 block. @footnote{A @dfn{substatement} indicates the line after an
482 @code{if}, @code{else}, @code{while}, @code{do}, @code{switch}, or
483 @code{for} statement, and a @dfn{substatement block} is a brace block
484 following one of those constructs.}
485
486 @cindex comment only line
487 Syntactic component lists can contain more than one component, and
488 individual syntactic components need not have relative buffer positions.
489 The most common example of this is a line that contains a @dfn{comment
490 only line}.
491 @example
492 @group
493
494 1: void draw_list( List<Drawables>& drawables )
495 2: @{
496 3: // call the virtual draw() method on each element in list
497 4: for( int i=0; i < drawables.count(), ++i )
498 5: @{
499 6: drawables[i].draw();
500 7: @}
501 8: @}
502
503 @end group
504 @end example
505
506 @noindent
507 Hitting @kbd{C-c C-s} on line 3 of example 3 gives us:
508 @example
509
510 ((comment-intro) (defun-block-intro . 46))
511
512 @end example
513
514 @noindent
515 so you can see that the syntactic component list contains two syntactic
516 components. Also notice that the first component,
517 @samp{(comment-intro)} has no relative buffer position.
518
519
520 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
521 @node Indentation Calculation, , Syntactic Analysis, New Indentation Engine
522 @comment node-name, next, previous,up
523 @section Indentation Calculation
524 @cindex Indentation Calculation
525 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
526
527 @vindex c-offsets-alist
528 @vindex offsets-alist (c-)
529 Indentation for the current line is calculated using the syntactic
530 component list derived in step 1 above (see @ref{Syntactic Analysis}).
531 Each component contributes to the final total indentation of the line in
532 two ways.
533
534 First, the syntactic symbols are looked up in the @code{c-offsets-alist}
535 variable, which is an association list of syntactic symbols and the
536 offsets to apply for those symbols. These offsets are added to the
537 running total.
538
539 Second, if the component has a relative buffer position, @code{cc-mode}
540 adds the column number of that position to the running total. By adding
541 up the offsets and columns for every syntactic component on the list,
542 the final total indentation for the current line is computed.
543
544 Let's use our two code examples above to see how this works. Here is
545 our first example again:
546 @example
547 @group
548
549 1: void swap( int& a, int& b )
550 2: @{
551 3: int tmp = a;
552 4: a = b;
553 5: b = tmp;
554 6: @}
555
556 @end group
557 @end example
558
559 @kindex TAB
560 Let's say point is on line 3 and we hit the @key{TAB} key to re-indent
561 the line. Remember that the syntactic component list for that
562 line is:
563 @example
564
565 ((defun-block-intro . 29))
566
567 @end example
568
569 @noindent
570 @code{cc-mode} looks up @code{defun-block-intro} in the
571 @code{c-offsets-alist} variable. Let's say it finds the value @samp{4};
572 it adds this to the running total (initialized to zero), yielding a
573 running total indentation of 4 spaces.
574
575 Next @code{cc-mode} goes to buffer position 29 and asks for the current
576 column. Since the brace at buffer position 29 is in column zero, it
577 adds @samp{0} to the running total. Since there is only one syntactic
578 component on the list for this line, indentation calculation is
579 complete, and the total indentation for the line
580 is 4 spaces.
581
582 Here's another example:
583 @example
584 @group
585
586 1: int add( int val, int incr, int doit )
587 2: @{
588 3: if( doit )
589 4: @{
590 5: return( val + incr );
591 6: @}
592 7: return( val );
593 8: @}
594
595 @end group
596 @end example
597
598 If we were to hit @kbd{TAB} on line 4 in the above example, the same
599 basic process is performed, despite the differences in the syntactic
600 component list. Remember that the list for this line is:
601 @example
602
603 ((substatement-open . 46))
604
605 @end example
606
607 Here, @code{cc-mode} first looks up the @code{substatement-open} symbol
608 in @code{c-offsets-alist}. Let's say it finds the value @samp{4}. This
609 yields a running total of 4. @code{cc-mode} then goes to
610 buffer position 46, which is the @samp{i} in @code{if} on line 3. This
611 character is in the fourth column on that line so adding this to the
612 running total yields an indentation for the line of 8 spaces.
613
614 Simple, huh?
615
616 Actually, the mode usually just does The Right Thing without you having
617 to think about it in this much detail. But when customizing
618 indentation, it's helpful to understand the general indentation model
619 being used.
620
621 @vindex c-echo-syntactic-information-p
622 @vindex echo-syntactic-information-p (c-)
623 @cindex TAB
624 To help you configure @code{cc-mode}, you can set the variable
625 @code{c-echo-syntactic-information-p} to non-@code{nil} so that the
626 syntactic component list and calculated offset will always be echoed in
627 the minibuffer when you hit @kbd{TAB}.
628
629
630 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
631 @node Minor Modes, Indentation Commands, New Indentation Engine, Top
632 @comment node-name, next, previous,up
633
634 @chapter Minor Modes
635 @cindex Minor Modes
636 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
637
638 @code{cc-mode} contains two minor-mode-like features that you should
639 find useful while you enter new C code. The first is called
640 @dfn{auto-newline} mode, and the second is called @dfn{hungry-delete}
641 mode. These minor modes can be toggled on and off independently, and
642 @code{cc-mode} can be configured so that it comes up with any
643 combination of these minor modes. By default, both of these minor modes
644 are turned off.
645
646 The state of the minor modes is always reflected in the minor mode list
647 on the modeline of the @code{cc-mode} buffer. When auto-newline mode is
648 enabled, you will see @samp{C/a} on the mode line @footnote{Remember
649 that the @samp{C} would be replaced with @samp{C++} or @samp{ObjC} if
650 you were editing C++ or Objective-C code.}. When hungry delete mode is
651 enabled you would see @samp{C/h} and when both modes are enabled, you'd
652 see @samp{C/ah}.
653
654 @kindex C-c C-a
655 @kindex C-c C-d
656 @kindex C-c C-t
657 @findex c-toggle-hungry-state
658 @findex c-toggle-auto-state
659 @findex c-toggle-auto-hungry-state
660 @findex toggle-hungry-state (c-)
661 @findex toggle-auto-state (c-)
662 @findex toggle-auto-hungry-state (c-)
663 @code{cc-mode} provides keybindings which allow you to toggle the minor
664 modes while editing code on the fly. To toggle just the auto-newline
665 state, hit @kbd{C-c C-a} (@code{c-toggle-auto-state}). When you do
666 this, you should see the @samp{a} indicator either appear or disappear
667 on the modeline. Similarly, to toggle just the hungry-delete state, use
668 @kbd{C-c C-d} (@code{c-toggle-hungry-state}), and to toggle both states
669 together, use @kbd{C-c C-t} (@code{c-toggle-auto-hungry-state}).
670
671 To set up the auto-newline and hungry-delete states to your preferred
672 values, you would need to add some lisp to your @file{.emacs} file that
673 called one of the @code{c-toggle-*-state} functions directly. When
674 called programmatically, each function takes a numeric value, where
675 a positive number enables the minor mode, a negative number disables the
676 mode, and zero toggles the current state of the mode.
677
678 So for example, if you wanted to enable both auto-newline and
679 hungry-delete for all your C file editing, you could add the following
680 to your @file{.emacs} file:
681 @example
682
683 (add-hook 'c-mode-common-hook '(lambda () (c-toggle-auto-hungry-state 1)))
684
685 @end example
686
687
688 @cindex electric characters
689
690 @menu
691 * Auto-newline insertion::
692 * Hungry-deletion of whitespace::
693 @end menu
694
695 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
696 @node Auto-newline insertion, Hungry-deletion of whitespace, , Minor Modes
697 @comment node-name, next, previous,up
698
699 @section Auto-newline insertion
700 @cindex Auto-newline insertion
701 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
702
703 @cindex electric commands
704 Auto-newline minor mode works by enabling certain @dfn{electric
705 commands}. Electric commands are typically bound to special characters
706 such as the left and right braces, colons, semi-colons, etc., which when
707 typed, perform some magic formatting in addition to inserting the typed
708 character. As a general rule, electric commands are only electric when
709 the following conditions apply:
710
711 @itemize @bullet
712 @item
713 Auto-newline minor mode is enabled, as evidenced by a @samp{C/a} or
714 @samp{C/ah} indicator on the modeline.
715
716 @cindex literal
717 @cindex syntactic whitespace
718 @item
719 The character was not typed inside of a literal @footnote{A
720 @dfn{literal} is defined in @code{cc-mode} as any comment,
721 string, or cpp macro definition. These constructs are also known as
722 @dfn{syntactic whitespace} since they are usually ignored when scanning
723 C code.}.
724
725 @item
726 @kindex C-u
727 No numeric argument was supplied to the command (i.e. it was typed as
728 normal, with no @kbd{C-u} prefix).
729
730 @end itemize
731
732 Certain other conditions may apply on a language specific basis. For
733 example, the second slash (@kbd{/}) of a C++ style line comment is
734 electric in @code{c++-mode}, @code{objc-mode}, and @code{java-mode}, but
735 not in @code{c-mode}.
736
737
738 @menu
739 * Hanging Braces::
740 * Hanging Colons::
741 * Hanging Semi-colons and commas::
742 * Other electric commands::
743 * Clean-ups::
744 @end menu
745
746 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
747 @node Hanging Braces, Hanging Colons, , Auto-newline insertion
748 @comment node-name, next, previous,up
749
750 @subsection Hanging Braces
751 @cindex Hanging Braces
752 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
753
754 @findex c-electric-brace
755 @findex electric-brace (c-)
756 @vindex c-hanging-braces-alist
757 @vindex hanging-braces-alist (c-)
758 @vindex c-offsets-alist
759 @vindex offsets-alist (c-)
760 When you type either an open or close brace (i.e. @kbd{@{} or @kbd{@}}),
761 the electric command @code{c-electric-brace} gets run. This command has
762 two electric formatting behaviors. First, it will perform some
763 re-indentation of the line the brace was typed on, and second, it will
764 add various newlines before and/or after the typed brace.
765 Re-indentation occurs automatically whenever the electric behavior is
766 enabled. If the brace ends up on a line other than the one it was typed
767 on, then that line is on is also indented according to
768 @code{c-offsets-alist}.
769
770 @cindex class-open syntactic symbol
771 @cindex class-close syntactic symbol
772 @cindex defun-open syntactic symbol
773 @cindex defun-close syntactic symbol
774 @cindex inline-open syntactic symbol
775 @cindex inline-close syntactic symbol
776 @cindex brace-list-open syntactic symbol
777 @cindex brace-list-close syntactic symbol
778 @cindex brace-list-intro syntactic symbol
779 @cindex brace-list-entry syntactic symbol
780 @cindex block-open syntactic symbol
781 @cindex block-close syntactic symbol
782 @cindex substatement-open syntactic symbol
783 @cindex statement-case-open syntactic symbol
784
785 The insertion of newlines is controlled by the
786 @code{c-hanging-braces-alist} variable. This variable contains a
787 mapping between syntactic symbols related to braces, and a list of
788 places to insert a newline. The syntactic symbols that are useful for
789 this list are: @code{class-open}, @code{class-close}, @code{defun-open},
790 @code{defun-close}, @code{inline-open}, @code{inline-close},
791 @code{brace-list-open}, @code{brace-list-close},
792 @code{brace-list-intro}, @code{brace-list-entry}, @code{block-open},
793 @code{block-close}, @code{substatement-open}, and
794 @code{statement-case-open}. @xref{Syntactic Symbols} for a more
795 detailed description of these syntactic symbols.
796
797 @cindex custom indentation function
798 The value associated with each syntactic symbol in this association list
799 is called an @var{ACTION} which can be either a function or a list.
800 @xref{Custom Brace and Colon Hanging} for a more detailed discussion of
801 using a function as a brace hanging @var{ACTION}.
802
803 When @var{ACTION} is a list, it can contain any combination of the
804 symbols @code{before} or @code{after}, directing @code{cc-mode} where to
805 put newlines in relationship to the brace being inserted. Thus, if the
806 list contains only the symbol @code{after}, then the brace is said to
807 @dfn{hang} on the right side of the line, as in:
808 @example
809 @group
810
811 // here, open braces always `hang'
812 void spam( int i ) @{
813 if( i == 7 ) @{
814 dosomething(i);
815 @}
816 @}
817
818
819 @end group
820 @end example
821
822 When the list contains both @code{after} and @code{before}, the braces
823 will appear on a line by themselves, as shown by the close braces in the
824 above example. The list can also be empty, in which case no newlines
825 are added either before or after the brace.
826
827 For example, the default value of @code{c-hanging-braces-alist} is:
828 @example
829 @group
830
831 (defvar c-hanging-braces-alist '((brace-list-open)
832 (substatement-open after)
833 (block-close . c-snug-do-while)))
834
835 @end group
836 @end example
837
838 @noindent
839 which says that @code{brace-list-open} braces should both hang on the
840 right side, and allow subsequent text to follow on the same line as the
841 brace. Also, @code{substatement-open} braces should hang on the right
842 side, but subsequent text should follow on the next line. Here, in the
843 @code{block-close} entry, you also see an example of using a function as
844 an @var{ACTION}.
845
846
847 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
848 @node Hanging Colons, Hanging Semi-colons and commas, Hanging Braces, Auto-newline insertion
849 @comment node-name, next, previous,up
850
851 @subsection Hanging Colons
852 @cindex Hanging Colons
853 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
854
855 @vindex hanging-colons-alist (c-)
856 @vindex c-hanging-colons-alist
857 Using a mechanism similar to brace hanging (see @ref{Hanging Braces}),
858 colons can also be made to hang using the variable
859 @code{c-hanging-colons-alist}. The syntactic symbols appropriate for
860 this assocation list are: @code{case-label}, @code{label},
861 @code{access-label}, @code{member-init-intro}, and @code{inher-intro}.
862 @xref{Hanging Braces} and @ref{Custom Brace and Colon Hanging} for
863 details. Note however, that @code{c-hanging-colons-alist} does not
864 implement functions as @var{ACTION}s.
865
866 @cindex clean-ups
867 In C++, double-colons are used as a scope operator but because these
868 colons always appear right next to each other, newlines before and after
869 them are controlled by a different mechanism, called @dfn{clean-ups} in
870 @code{cc-mode}. @xref{Clean-ups} for details.
871
872
873 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
874 @node Hanging Semi-colons and commas, Other electric commands, Hanging Colons, Auto-newline insertion
875 @comment node-name, next, previous,up
876
877 @subsection Hanging Semi-colons and commas
878 @cindex Hanging Semi-colons and commas
879 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
880
881 Semicolons and commas are also electric in @code{cc-mode}, but since
882 these characters do not correspond directly to syntactic symbols, a
883 different mechanism is used to determine whether newlines should be
884 automatically inserted after these characters. @xref{Customizing
885 Semi-colons and Commas} for details.
886
887
888 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
889 @node Other electric commands, Clean-ups, Hanging Semi-colons and commas, Auto-newline insertion
890 @comment node-name, next, previous,up
891
892 @subsection Other electric commands
893 @cindex Other electric commands
894 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
895
896 @kindex #
897 @findex c-electric-pound
898 @vindex c-electric-pound-behavior
899 @findex electric-pound (c-)
900 @vindex electric-pound-behavior (c-)
901 @vindex c-offsets-alist
902 @vindex offsets-alist (c-)
903 A few other keys also provide electric behavior. For example the
904 @kbd{#} key (@code{c-electric-pound}) is electric when it is typed as
905 the first non-whitespace character on a line. In this case, the
906 variable @code{c-electric-pound-behavior} is consulted for the electric
907 behavior. This variable takes a list value, although the only element
908 currently defined is @code{alignleft}, which tells this command to force
909 the @samp{#} character into column zero. This is useful for entering
910 cpp macro definitions.
911
912 @findex c-electric-star
913 @findex c-electric-slash
914 @findex electric-star (c-)
915 @findex electric-slash (c-)
916 @cindex comment-only line
917 Stars and slashes (i.e. @kbd{*} and @kbd{/}) are also electric under
918 certain circumstances. If a star is inserted as the second character of
919 a C style block comment on a @dfn{comment-only} line, then the comment
920 delimiter is indented as defined by @code{c-offsets-alist}. A
921 comment-only line is defined as a line which contains only a comment, as
922 in:
923 @example
924 @group
925
926 void spam( int i )
927 @{
928 // this is a comment-only line...
929 if( i == 7 ) // but this is not
930 @{
931 dosomething(i);
932 @}
933 @}
934
935 @end group
936 @end example
937
938 Likewise, if a slash is inserted as the second slash in a C++ style line
939 comment (also only on a comment-only line), then the line is indented as
940 defined by @code{c-offsets-alist}.
941
942
943 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
944 @node Clean-ups, , Other electric commands, Auto-newline insertion
945 @comment node-name, next, previous,up
946
947 @subsection Clean-ups
948 @cindex Clean-ups
949 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
950
951 @dfn{Clean-ups} are a mechanism complementary to colon and brace
952 hanging. On the surface, it would seem that clean-ups overlap the
953 functionality provided by the @code{c-hanging-*-alist} variables, and
954 similarly, clean-ups are only enabled when auto-newline minor mode is
955 enabled. Clean-ups are used however to adjust code ``after-the-fact'',
956 i.e. to eliminate some whitespace that isn't inserted by electric
957 commands, or whitespace that contains intervening constructs.
958
959 @cindex literal
960 You can configure @code{cc-mode}'s clean-ups by setting the variable
961 @code{c-cleanup-list}, which is a list of clean-up symbols. By default,
962 @code{cc-mode} cleans up only the @code{scope-operator} construct, which
963 is necessary for proper C++ support. Note that clean-ups are only
964 performed when the construct does not occur within a literal (see
965 @ref{Auto-newline insertion}), and when there is nothing but whitespace
966 appearing between the individual components of the construct.
967
968 @vindex c-cleanup-list
969 @vindex cleanup-list (c-)
970 There are currently only five specific constructs that @code{cc-mode}
971 can clean up, as indicated by these symbols:
972
973 @itemize @bullet
974 @item
975 @code{brace-else-brace} -- cleans up @samp{@} else @{} constructs by
976 placing the entire construct on a single line. Clean-up occurs when the
977 open brace after the @samp{else} is typed. So for example, this:
978 @example
979 @group
980
981 void spam(int i)
982 @{
983 if( i==7 )
984 @{
985 dosomething();
986 @}
987 else
988 @{
989
990 @end group
991 @end example
992 @noindent
993 appears like this after the open brace is typed:
994 @example
995 @group
996
997 void spam(int i)
998 @{
999 if( i==7 ) @{
1000 dosomething();
1001 @} else @{
1002
1003 @end group
1004 @end example
1005
1006 @item
1007 @code{empty-defun-braces} -- cleans up braces following a top-level
1008 function or class definition that contains no body. Clean up occurs
1009 when the closing brace is typed. Thus the following:
1010 @example
1011 @group
1012
1013 class Spam
1014 @{
1015 @}
1016
1017 @end group
1018 @end example
1019 @noindent
1020 is transformed into this when the close brace is typed:
1021 @example
1022 @group
1023
1024 class Spam
1025 @{@}
1026
1027 @end group
1028 @end example
1029
1030 @item
1031 @code{defun-close-semi} -- cleans up the terminating semi-colon on
1032 top-level function or class definitions when they follow a close
1033 brace. Clean up occurs when the semi-colon is typed.
1034 So for example, the following:
1035 @example
1036 @group
1037
1038 class Spam
1039 @{
1040 @}
1041 ;
1042
1043 @end group
1044 @end example
1045 @noindent
1046 is transformed into this when the semi-colon is typed:
1047
1048 @example
1049 @group
1050
1051 class Spam
1052 @{
1053 @};
1054
1055 @end group
1056 @end example
1057
1058 @item
1059 @code{list-close-comma} -- cleans up commas following braces in array
1060 and aggregate initializers. Clean up occurs when the comma is typed.
1061
1062 @item
1063 @code{scope-operator} -- cleans up double colons which may designate a
1064 C++ scope operator split across multiple lines@footnote{Certain C++
1065 constructs introduce ambiguous situations, so @code{scope-operator}
1066 clean-ups may not always be correct. This usually only occurs when
1067 scoped identifiers appear in switch label tags.}. Clean up occurs when
1068 the second colon is typed. You will always want @code{scope-operator}
1069 in the @code{c-cleanup-list} when you are editing C++ code.
1070
1071 @end itemize
1072
1073
1074 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1075 @node Hungry-deletion of whitespace, , Auto-newline insertion, Minor Modes
1076 @comment node-name, next, previous,up
1077
1078 @section Hungry-deletion of whitespace
1079 @cindex Hungry-deletion of whitespace
1080 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1081
1082 Hungry deletion of whitespace, or as it more commonly called,
1083 @dfn{hungry-delete mode}, is a simple feature that some people find
1084 extremely useful. In fact, you might find yourself wanting
1085 hungry-delete in @strong{all} your editing modes!
1086
1087 @kindex DEL
1088 In a nutshell, when hungry-delete mode is enabled, hitting the @kbd{DEL}
1089 character will consume all preceding whitespace, including newlines and
1090 tabs. This can really cut down on the number of @kbd{DEL}'s you have to
1091 type if, for example you made a mistake on the preceding line.
1092
1093 @findex c-electric-delete
1094 @findex electric-delete (c-)
1095 @vindex c-delete-function
1096 @vindex delete-function (c-)
1097 @cindex literal
1098 By default, @code{cc-mode} actually runs the command
1099 @code{c-electric-delete} when you hit @kbd{DEL}. When this command is
1100 used to delete a single character (i.e. when it is called interactively
1101 with no numeric argument), it really runs the function contained in the
1102 variable @code{c-delete-function}. This function is called with a
1103 single argument, which is the number of characters to delete.
1104 @code{c-delete-function} is also called when the @kbd{DEL} key is typed
1105 inside a literal (see @ref{Auto-newline insertion}. Inside a literal,
1106 @code{c-electric-delete} is not electric, which is typical of all the
1107 so-called electric commands.
1108
1109
1110 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1111 @node Indentation Commands, Customizing Indentation, Minor Modes, Top
1112 @comment node-name, next, previous,up
1113
1114 @chapter Indentation Commands
1115 @cindex Indentation Commands
1116 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1117
1118 @findex c-set-style
1119 @findex set-style (c-)
1120 Various commands are provided which allow you to conveniently re-indent
1121 C constructs, and these are outlined below. There are several things to
1122 note about these indentation commands. First, when you
1123 change your programming style, either though @code{c-set-style} or some
1124 other means, your file does @emph{not} automatically get re-indented.
1125 When you change style parameters, you will typically need to reformat
1126 the line, expression, or buffer to see the effects of your changes.
1127
1128 @cindex c-hanging- functions
1129 @findex c-hanging-braces-alist
1130 @findex hanging-braces-alist (c-)
1131 Second, changing some variables have no effect on existing code, even
1132 when you do re-indent. For example, the @code{c-hanging-*} variables and
1133 @code{c-cleanup-list} only affect newly entered code. So for example,
1134 changing @code{c-hanging-braces-alist} and re-indenting the buffer will
1135 not adjust placement of braces already in the file.
1136
1137 @vindex c-progress-interval
1138 @vindex progress-interval (c-)
1139 Third, re-indenting large portions of code is currently rather
1140 inefficient. Improvements have been made since previous releases of
1141 @code{cc-mode}, and much more radical improvements will be made for the
1142 next release, but for now you need to be aware of this @footnote{In
1143 particular, I have had people complain about the speed that
1144 @code{cc-mode} re-indents @code{lex(1)} output. Lex, yacc, and other
1145 code generators usually output some pretty perverse code. @emph{Don't}
1146 try to indent this stuff with @code{cc-mode}!}. Some provision has been
1147 made to at least inform you as to the progress of your large
1148 re-indentation command. The variable @code{c-progress-interval}
1149 controls how often a progress message is displayed. Set this variable
1150 to @code{nil} to inhibit progress messages. Note that this feature only
1151 works with Emacs 19.
1152
1153 Also, except as noted below, re-indentation is always driven by the
1154 same mechanisms that control on-the-fly indentation of code. @xref{New
1155 Indentation Engine} for details.
1156
1157 @findex c-indent-command
1158 @findex indent-command (c-)
1159 @vindex c-tab-always-indent
1160 @vindex tab-always-indent (c-)
1161 @kindex TAB
1162 @cindex literal
1163 To indent a single line of code, use @kbd{TAB}
1164 (@code{c-indent-command}). The behavior of this command is controlled
1165 by the variable @code{c-tab-always-indent}. When this variable is
1166 @code{t}, @kbd{TAB} always just indents the current line. When
1167 @code{nil}, the line is indented only if point is at the left
1168 margin, or on or before the first non-whitespace character on the line,
1169 otherwise a real tab character is inserted. If this variable's value is
1170 something other that @code{t} or @code{nil} (e.g. @code{'other}), then a
1171 real tab character is inserted only when point is inside a
1172 literal (see @ref{Auto-newline insertion}), otherwise the line is
1173 indented.
1174
1175 @kindex M-C-q
1176 @findex c-indent-exp
1177 @findex indent-exp (c-)
1178 To indent an entire balanced brace or parenthesis expression, use
1179 @kbd{M-C-q} (@code{c-indent-exp}). Note that point should be on
1180 the opening brace or parenthesis of the expression you want to indent.
1181
1182 @kindex C-c C-q
1183 @findex c-indent-defun
1184 @findex indent-defun (c-)
1185 Another very convenient keystroke is @kbd{C-c C-q}
1186 (@code{c-indent-defun}) when re-indents the entire top-level function or
1187 class definition that encompases point. It leaves point at the
1188 same position within the buffer.
1189
1190 @kindex M-C-\
1191 @findex indent-region
1192 To indent any arbitrary region of code, use @kbd{M-C-\}
1193 (@code{indent-region}). This is a standard Emacs command, specially
1194 tailored for C code in a @code{cc-mode} buffer. Note that of course,
1195 point and mark must delineate the region you
1196 want to indent.
1197
1198 @kindex M-C-h
1199 @findex c-mark-function
1200 @findex mark-function (c-)
1201 While not strictly an indentation function, @kbd{M-C-h}
1202 (@code{c-mark-function}) is useful for marking the current top-level
1203 function or class definition as the current region.
1204
1205
1206 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1207 @node Customizing Indentation, Syntactic Symbols, Indentation Commands, Top
1208 @comment node-name, next, previous,up
1209
1210 @chapter Customizing Indentation
1211 @cindex Customizing Indentation
1212 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1213
1214 @cindex c-set-offset
1215 @cindex set-offset (c-)
1216 The @code{c-offsets-alist} variable is where you customize all your
1217 indentations. You simply need to decide what additional offset you want
1218 to add for every syntactic symbol. You can use the command @kbd{C-c
1219 C-o} (@code{c-set-offset}) as the way to set offsets, both interactively
1220 and from your mode hook. Also, you can set up @emph{styles} of
1221 indentation just like in BOCM. Most likely, you'll
1222 find one of the pre-defined styles will suit your needs, but if not,
1223 this section will describe how to set up basic editing configurations.
1224 @xref{Styles} for an explanation of how to set up named styles.
1225
1226 @cindex c-basic-offset
1227 @cindex basic-offset (c-)
1228 As mentioned previously, the variable @code{c-offsets-alist} is an
1229 association list between syntactic symbols and the offsets to be applied
1230 for those symbols. In fact, these offset values can be an integer, a
1231 function or variable name, or one of the following symbols: @code{+},
1232 @code{-}, @code{++}, @code{--}, @code{*}, or @code{/}. These symbols
1233 describe offset in multiples of the value of the variable
1234 @code{c-basic-offset}. By defining a style's indentation in terms of
1235 this fundamental variable, you can change the amount of whitespace given
1236 to an indentation level while leaving the same relationship between
1237 levels. Here are multiples of @code{c-basic-offset} that the special
1238 symbols correspond to:
1239
1240 @itemize @bullet
1241
1242 @item
1243 @code{+ } = @code{c-basic-offset} times 1
1244 @item
1245 @code{- } = @code{c-basic-offset} times -1
1246 @item
1247 @code{++} = @code{c-basic-offset} times 2
1248 @item
1249 @code{--} = @code{c-basic-offset} times -2
1250 @item
1251 @code{* } = @code{c-basic-offset} times 0.5
1252 @item
1253 @code{/ } = @code{c-basic-offset} times -0.5
1254
1255 @end itemize
1256
1257 @noindent
1258 So, for example, because most of the default offsets are defined in
1259 terms of @code{+}, @code{-}, and @code{0}, if you like the general
1260 indentation style, but you use 4 spaces instead of 2 spaces per level,
1261 you can probably achieve your style just by changing
1262 @code{c-basic-offset} like so (in your @file{.emacs} file)@footnote{The
1263 reason you need to use @code{setq-default} instead of @code{setq} is
1264 that @code{c-basic-offset} is a buffer local variable, as are most of
1265 the @code{cc-mode} configuration variables. If you were to put this
1266 code in, e.g. your @code{c-mode-common-hook} function, you could use
1267 @code{setq}.}:
1268 @example
1269
1270 (setq-default c-basic-offset 4)
1271
1272 @end example
1273
1274 @noindent
1275 This would change
1276 @example
1277 @group
1278
1279 int add( int val, int incr, int doit )
1280 @{
1281 if( doit )
1282 @{
1283 return( val + incr );
1284 @}
1285 return( val );
1286 @}
1287
1288 @end group
1289 @end example
1290
1291 @noindent
1292 to
1293 @example
1294 @group
1295
1296 int add( int val, int incr, int doit )
1297 @{
1298 if( doit )
1299 @{
1300 return( val + incr );
1301 @}
1302 return( val );
1303 @}
1304
1305 @end group
1306 @end example
1307
1308 To change indentation styles more radically, you will want to change the
1309 value associated with the syntactic symbols in the
1310 @code{c-offsets-alist} variable. First, I'll show you how to do that
1311 interactively, then I'll describe how to make changes to your
1312 @file{.emacs} file so that your changes are more permanent.
1313
1314 @menu
1315 * Interactive Customization::
1316 * Permanent Customization::
1317 * Styles::
1318 * Advanced Customizations::
1319 @end menu
1320
1321 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1322 @node Interactive Customization, Permanent Customization, , Customizing Indentation
1323 @comment node-name, next, previous,up
1324
1325 @section Interactive Customization
1326 @cindex Interactive Customization
1327 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1328
1329 As an example of how to customize indentation, let's change the
1330 style of example 2 above from:
1331 @example
1332 @group
1333
1334 1: int add( int val, int incr, int doit )
1335 2: @{
1336 3: if( doit )
1337 4: @{
1338 5: return( val + incr );
1339 6: @}
1340 7: return( val );
1341 8: @}
1342
1343 @end group
1344 @end example
1345 @noindent
1346 to:
1347 @example
1348 @group
1349
1350 1: int add( int val, int incr, int doit )
1351 2: @{
1352 3: if( doit )
1353 4: @{
1354 5: return( val + incr );
1355 6: @}
1356 7: return( val );
1357 8: @}
1358
1359 @end group
1360 @end example
1361
1362 In other words, we want to change the indentation of braces that open a
1363 block following a condition so that the braces line up under the
1364 conditional, instead of being indented. Notice that the construct we
1365 want to change starts on line 4. To change the indentation of a line,
1366 we need to see which syntactic component affect the offset calculations
1367 for that line. Hitting @kbd{C-c C-s} on line 4 yields:
1368 @example
1369
1370 ((substatement-open . 46))
1371
1372 @end example
1373
1374 @findex c-set-offset
1375 @findex set-offset (c-)
1376 @kindex C-c C-o
1377 @noindent
1378 so we know that to change the offset of the open brace, we need to
1379 change the indentation for the @code{substatement-open} syntactic
1380 symbol. To do this interactively, just hit @kbd{C-c C-o}
1381 (@code{c-set-offset}). This prompts you for the syntactic symbol to
1382 change, providing a reasonable default. In this case, the default is
1383 @code{substatement-open}, which is just the syntactic symbol we want to
1384 change!
1385
1386 After you hit return, @code{cc-mode} will then prompt you for the new
1387 offset value, with the old value as the default. The default in this
1388 case is @samp{+}, so hit backspace to delete the @samp{+}, then hit
1389 @samp{0} and @kbd{RET}. This will associate the offset 0 with the
1390 syntactic symbol @code{substatement-open} in the @code{c-offsets-alist}
1391 variable.
1392
1393 @findex c-indent-defun
1394 @findex indent-defun (c-)
1395 @kindex C-c C-q
1396 To check your changes quickly, just hit @kbd{C-c C-q}
1397 (@code{c-indent-defun}) to reindent the entire function. The example
1398 should now look like:
1399 @example
1400 @group
1401
1402 1: int add( int val, int incr, int doit )
1403 2: @{
1404 3: if( doit )
1405 4: @{
1406 5: return( val + incr );
1407 6: @}
1408 7: return( val );
1409 8: @}
1410
1411 @end group
1412 @end example
1413
1414 Notice how just changing the open brace offset on line 4 is all we
1415 needed to do. Since the other affected lines are indented relative to
1416 line 4, they are automatically indented the way you'd expect. For more
1417 complicated examples, this may not always work. The general approach to
1418 take is to always start adjusting offsets for lines higher up in the
1419 file, then re-indent and see if any following lines need further
1420 adjustments.
1421
1422 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1423 @node Permanent Customization, Styles, Interactive Customization, Customizing Indentation
1424 @comment node-name, next, previous,up
1425
1426 @section Permanent Indentation
1427 @cindex Permanent Indentation
1428 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1429
1430 @vindex c-mode-common-hook
1431 @vindex c-mode-hook
1432 @vindex c++-mode-hook
1433 @vindex objc-mode-hook
1434 @vindex java-mode-hook
1435 @cindex hooks
1436 To make this change permanent, you need to add some lisp code to your
1437 @file{.emacs} file. @code{cc-mode} provides four hooks that you can use
1438 to customize your language editing styles. Four language specific hooks
1439 are provided, according to Emacs major mode conventions:
1440 @code{c-mode-hook}, @code{c++-mode-hook}, @code{objc-mode-hook}, and
1441 @code{java-mode-hook}. These get run as the last thing when you enter
1442 @code{c-mode}, @code{c++-mode}, @code{objc-mode}, or
1443 @code{java-mode-hook} respectively. @code{cc-mode} also provides a hook
1444 called @code{c-mode-common-hook} which is run by all three modes
1445 @emph{before} the language specific hook. Thus, to make changes
1446 consistently across all supported @code{cc-mode} modes, use
1447 @code{c-mode-common-hook}. Most of the examples in this section will
1448 assume you are using the common hook.
1449
1450 Here's a simplified example of what you can add to your @file{.emacs}
1451 file to make the changes described in the previous section
1452 (@ref{Interactive Customization}) more permanent. See the Emacs
1453 manuals for more information on customizing Emacs via hooks.
1454 @xref{Sample .emacs File} for a more complete sample @file{.emacs} file.
1455 @footnote{The use of @code{add-hook} in this example only works for
1456 Emacs 19. Workarounds are available if you are using Emacs 18.}
1457 @example
1458 @group
1459
1460 (defun my-c-mode-common-hook ()
1461 ;; my customizations for all of c-mode, c++-mode, objc-mode, java-mode
1462 (c-set-offset 'substatement-open 0)
1463 ;; other customizations can go here
1464 )
1465 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
1466
1467 @end group
1468 @end example
1469
1470 For complex customizations, you will probably want to set up a
1471 @emph{style} that groups all your customizations under a single
1472 name.
1473
1474 The offset value can also be a function, and this is how power users
1475 gain enormous flexibility in customizing indentation. @xref{Advanced
1476 Customizations} for details.
1477
1478 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1479 @node Styles, Advanced Customizations, Permanent Customization, Customizing Indentation
1480 @comment node-name, next, previous,up
1481
1482 @section Styles
1483 @cindex Styles
1484 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1485
1486 Most people only need to edit code formatted in just a few well-defined
1487 and consistent styles. For example, their organization might impose a
1488 ``blessed'' style that all its programmers must conform to. Similarly,
1489 people who work on GNU software will have to use the GNU coding style on
1490 C code. Some shops are more lenient, allowing some variety of coding
1491 styles, and as programmers come and go, there could be a number of
1492 styles in use. For this reason, @code{cc-mode} makes it convenient for
1493 you to set up logical groupings of customizations called @dfn{styles},
1494 associate a single name for any particular style, and pretty easily
1495 start editing new or existing code using these styles. This chapter
1496 describes how to set up styles and how to edit your C code using styles.
1497
1498 @menu
1499 * Built-in Styles::
1500 * Adding Styles::
1501 * File Styles::
1502 @end menu
1503
1504
1505 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1506 @node Built-in Styles, Adding Styles, , Styles
1507 @comment node-name, next, previous,up
1508
1509 @subsection Built-in Styles
1510 @cindex Built-in Styles
1511 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1512
1513 If you're lucky, one of @code{cc-mode}'s built-in styles might be just
1514 what you're looking for. Some of the most common C and C++ styles are
1515 already built-in. These include:
1516
1517 @itemize @bullet
1518 @item
1519 @cindex GNU style
1520 @code{gnu} -- coding style blessed by the Free Software Foundation
1521 for C code in GNU programs.
1522
1523 @item
1524 @cindex K&R style
1525 @code{k&r} -- The classic Kernighan and Ritchie style for C code.
1526
1527 @item
1528 @cindex BSD style
1529 @code{bsd} -- @strong{<TBD> Anybody know anything about the history of
1530 this style?}
1531
1532 @item
1533 @cindex Stroustrup style
1534 @code{stroustrup} -- The classic Stroustrup style for C++ code.
1535
1536 @item
1537 @cindex Whitesmith style
1538 @code{whitesmith} -- @strong{<TBD> Anybody know anything about the history of
1539 this style?}
1540
1541 @item
1542 @cindex Ellemtel style
1543 @code{ellemtel} -- Popular C++ coding standards as defined by
1544 ``Programming in C++, Rules and Recommendations'', Erik Nyquist and Mats
1545 Henricson, Ellemtel @footnote{This document is ftp'able from
1546 @code{euagate.eua.ericsson.se}}.
1547
1548 @item
1549 @cindex Java style
1550 @cindex java-mode
1551 @code{java} -- The style for editing Java code. Note that this style is
1552 automatically installed when you enter @code{java-mode}.
1553
1554 @item
1555 @cindex CC-MODE style
1556 @code{CC-MODE} -- Style that encapsulates the default values of the
1557 @code{cc-mode} variables. See below for details.
1558
1559 @end itemize
1560
1561 @findex c-set-style
1562 @findex set-style (c-)
1563 If you'd like to experiment with these built-in styles you can simply
1564 type the following in a @code{cc-mode} buffer:
1565 @example
1566 @group
1567
1568 @kbd{M-x c-set-style RET @var{STYLE-NAME} RET}
1569
1570 @end group
1571 @end example
1572 @noindent
1573 Note that all style names are case insensitive, even the ones you define.
1574
1575 Setting a style in this way does @emph{not} automatically re-indent your
1576 file. For commands that you can use to view the effect of your changes,
1577 see @ref{Indentation Commands}.
1578
1579 Once you find a built-in style you like, you can make the change
1580 permanent by adding a call to your @file{.emacs} file. Let's say for
1581 example that you want to use the @code{ellemtel} style in all your
1582 files. You would add this:
1583 @example
1584 @group
1585
1586 (defun my-c-mode-common-hook ()
1587 ;; use Ellemtel style for all C, C++, and Objective-C code
1588 (c-set-style "ellemtel")
1589 ;; other customizations can go here
1590 )
1591 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
1592
1593 @end group
1594 @end example
1595
1596 There is one other special style you can use, called @code{CC-MODE}.
1597 This is a style that is calculated by @code{cc-mode} when it starts up.
1598 The @code{CC-MODE} style is also special because all other styles
1599 implicitly inherit from it; in other words, whenever you set a style,
1600 @code{cc-mode} first re-instates the @code{CC-MODE} style, then applies
1601 your new style configurations.
1602
1603 The @code{CC-MODE} style exists because once @code{cc-mode} initializes,
1604 it institutes the @code{gnu} style for compatibility with BOCM's
1605 defaults. Any customizations you make in mode hooks will be based on
1606 the @code{gnu} style, unless you first do a @code{c-set-style} to
1607 @code{CC-MODE} or some other built-in style.
1608
1609
1610 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1611 @node Adding Styles, File Styles, Built-in Styles, Styles
1612 @comment node-name, next, previous,up
1613
1614 @subsection Adding Styles
1615 @cindex Adding Styles
1616 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1617
1618 @vindex c-style-alist
1619 @vindex style-alist (c-)
1620 @findex c-add-style
1621 @findex add-style (c-)
1622 If none of the built-in styles is appropriate, you'll probably want to
1623 add a new style definition. Styles are kept in the @code{c-style-alist}
1624 variable, but you probably won't want to modify this variable directly.
1625 @code{cc-mode} provides a function, called @code{c-add-style}, that you
1626 can use to easily add new styles or update existing styles. This
1627 function takes two arguments, a @var{stylename} string, and an
1628 association list @var{description} of style customizations. If
1629 @var{stylename} is not already in @code{c-style-alist}, the new style is
1630 added, otherwise the style already associated with @var{stylename} is
1631 changed to the new @var{description}. This function also takes an
1632 optional third argument, which if non-@code{nil}, automatically
1633 institutes the new style in the current buffer.
1634
1635 The sample @file{.emacs} file provides a concrete example of how a new
1636 style can be added and automatically set. @xref{Sample .emacs File}.
1637
1638 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1639 @node File Styles, , Adding Styles, Styles
1640 @comment node-name, next, previous,up
1641
1642 @subsection File Styles
1643 @cindex File Styles
1644 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1645
1646 @cindex local variables
1647 The Emacs manual describes how you can customize certain variables on a
1648 per-file basis by including a @dfn{Local Variable} block at the end of
1649 the file. So far, you've only seen a functional interface to
1650 @code{cc-mode}, which is highly inconvenient for use in a Local Variable
1651 block. @code{cc-mode} provides two variables that make it easier for
1652 you to customize your style on a per-file basis.
1653
1654 @vindex c-file-style
1655 @vindex file-style (c-)
1656 @vindex c-file-offsets
1657 @vindex file-offsets (c-)
1658
1659 The variable @code{c-file-style} can be set to a style name string as
1660 described in @ref{Built-in Styles}. When the file is visited,
1661 @code{cc-mode} will automatically set the file's style to this style
1662 using @code{c-set-style}.
1663
1664 @vindex c-offsets-alist
1665 @vindex offsets-alist (c-)
1666 @findex c-set-offset
1667 @findex set-offset (c-)
1668 Another variable, @code{c-file-offsets}, takes an association list
1669 similar to what is allowed in @code{c-offsets-alist}. When the file is
1670 visited, @code{cc-mode} will automatically institute these offets using
1671 @code{c-set-offset}.
1672
1673 Note that file style settings (i.e. @code{c-file-style}) are applied
1674 before file offset settings (i.e. @code{c-file-offsets}).
1675
1676
1677 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1678 @node Advanced Customizations, , Styles, Customizing Indentation
1679 @comment node-name, next, previous,up
1680
1681 @section Advanced Customizations
1682 @cindex Advanced Customizations
1683 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1684
1685 @vindex c-style-alist
1686 @vindex style-alist (c-)
1687 @vindex c-basic-offset
1688 @vindex basic-offset (c-)
1689 For most users, @code{cc-mode} will support their coding styles with
1690 very little need for customizations. Usually, one of the standard
1691 styles defined in @code{c-style-alist} will do the trick. At most,
1692 perhaps one of the syntactic symbol offsets will need to be tweaked
1693 slightly, or maybe @code{c-basic-offset} will need to be changed.
1694 However, some styles require a more advanced ability for customization,
1695 and one of the real strengths of @code{cc-mode} is that the syntactic
1696 analysis model provides a very flexible framework for customizing
1697 indentation. This allows you to perform special indentation calculations
1698 for situations not handled by the mode directly.
1699
1700 @menu
1701 * Custom Indentation Functions::
1702 * Custom Brace and Colon Hanging::
1703 * Customizing Semi-colons and Commas::
1704 * Other Special Indentations::
1705 @end menu
1706
1707 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1708 @node Custom Indentation Functions, Custom Brace and Colon Hanging, , Advanced Customizations
1709 @comment node-name, next, previous,up
1710
1711 @subsection Custom Indentation Functions
1712 @cindex Custom Indentation Functions
1713 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1714
1715 @cindex custom indentation functions
1716 One of the most common ways to customize @code{cc-mode} is by writing
1717 @dfn{custom indentation functions} and associating them with specific
1718 syntactic symbols (see @ref{Syntactic Symbols}). @code{cc-mode} itself
1719 uses custom indentation functions to provide more sophisticated
1720 indentation, for example when lining up C++ stream operator blocks:
1721 @example
1722 @group
1723
1724 1: void main(int argc, char**)
1725 2: @{
1726 3: cout << "There were "
1727 4: << argc
1728 5: << "arguments passed to the program"
1729 6: << endl;
1730 7: @}
1731
1732 @end group
1733 @end example
1734
1735 In this example, lines 4 through 6 are assigned the @code{stream-op}
1736 syntactic symbol. If @code{stream-op} had an offset of @code{+}, and
1737 @code{c-basic-offset} was 2, lines 4 through 6 would simply be indented
1738 two spaces to the right of line 3. But perhaps we'd like @code{cc-mode}
1739 to be a little more intelligent so that it offsets the stream operators
1740 under the operator in line 3. To do this, we have to write a custom
1741 indentation function which finds the column of first stream operator on
1742 the first line of the statement. Here is the lisp code (from the
1743 @file{cc-mode.el} source file) that implements this:
1744 @example
1745 @group
1746
1747 (defun c-lineup-streamop (langelem)
1748 ;; lineup stream operators
1749 (save-excursion
1750 (let* ((relpos (cdr langelem))
1751 (curcol (progn (goto-char relpos)
1752 (current-column))))
1753 (re-search-forward "<<\\|>>" (c-point 'eol) 'move)
1754 (goto-char (match-beginning 0))
1755 (- (current-column) curcol))))
1756
1757 @end group
1758 @end example
1759 @noindent
1760 Custom indent functions take a single argument, which is a syntactic
1761 component cons cell (see @ref{Syntactic Analysis}). The
1762 function returns an integer offset value that will be added to the
1763 running total indentation for the lne. Note that what actually gets
1764 returned is the difference between the column that the first stream
1765 operator is on, and the column of the buffer relative position passed in
1766 the function's argument. Remember that @code{cc-mode} automatically
1767 adds in the column of the component's relative buffer position and we
1768 don't want that value added into the final total twice.
1769
1770 @cindex stream-op syntactic symbol
1771 @findex c-lineup-streamop
1772 @findex lineup-streamop (c-)
1773 Now, to associate the function @code{c-lineup-streamop} with the
1774 @code{stream-op} syntactic symbol, we can add something like the
1775 following to our @code{c++-mode-hook}@footnote{It probably makes more
1776 sense to add this to @code{c++-mode-hook} than @code{c-mode-common-hook}
1777 since stream operators are only relevent for C++.}:
1778 @example
1779
1780 (c-set-offset 'stream-op 'c-lineup-streamop)
1781
1782 @end example
1783
1784 @kindex C-c C-q
1785 Now the function looks like this after re-indenting (using @kbd{C-c
1786 C-q}):
1787 @example
1788 @group
1789
1790 1: void main(int argc, char**)
1791 2: @{
1792 3: cout << "There were "
1793 4: << argc
1794 5: << "arguments passed to the program"
1795 6: << endl;
1796 7: @}
1797
1798 @end group
1799 @end example
1800
1801 @vindex c-offsets-alist
1802 @vindex offsets-alist (c-)
1803 Custom indentation functions can be as simple or as complex as you like,
1804 and any syntactic symbol that appears in @code{c-offsets-alist} can have
1805 a custom indentation function associated with it.
1806
1807 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1808 @node Custom Brace and Colon Hanging, Customizing Semi-colons and Commas, Custom Indentation Functions, Advanced Customizations
1809 @comment node-name, next, previous,up
1810
1811 @subsection Custom Brace and Colon Hanging
1812 @cindex Custom Brace and Colon Hanging
1813 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1814
1815 @vindex c-hanging-braces-alist
1816 @vindex hanging-braces-alist (c-)
1817 Syntactic symbols aren't the only place where you can customize
1818 @code{cc-mode} with the lisp equivalent of callback functions. Brace
1819 hanginess can also be determined by custom functions associated with
1820 syntactic symbols on the @code{c-hanging-braces-alist} variable.
1821 Remember that @var{ACTION}'s are typically a list containing some
1822 combination of the symbols @code{before} and @code{after} (see
1823 @ref{Hanging Braces}). However, an @var{ACTION} can also be a function
1824 symbol which gets called when a brace matching that syntactic symbol is
1825 typed.
1826
1827 @cindex customizing brace hanging
1828 These @var{ACTION} functions are called with two arguments: the
1829 syntactic symbol for the brace, and the buffer position at which the
1830 brace was inserted. The @var{ACTION} function is expected to return a
1831 list containing some combination of @code{before} and @code{after}. The
1832 function can also return @code{nil}. This return value has the normal
1833 brace hanging semantics described in @ref{Hanging Braces}.
1834
1835 As an example, @code{cc-mode} itself uses this feature to dynamically
1836 determine the hanginess of braces which close @samp{do-while}
1837 constructs:
1838 @example
1839 @group
1840
1841 void do_list( int count, char** atleast_one_string )
1842 @{
1843 int i=0;
1844 do @{
1845 handle_string( atleast_one_string( i ));
1846 i++;
1847 @} while( i < count );
1848 @}
1849
1850 @end group
1851 @end example
1852
1853 @findex c-snug-do-while
1854 @findex snug-do-while (c-)
1855 @code{cc-mode} assigns the @code{block-close} syntactic symbol to the
1856 brace that closes the @code{do} construct, and normally we'd like the
1857 line that follows a @code{block-close} brace to begin on a separate
1858 line. However, with @samp{do-while} constructs, we want the
1859 @code{while} clause to follow the closing brace. To do this, we
1860 associate the @code{block-close} symbol with the @var{ACTION} function
1861 @code{c-snug-do-while}:
1862 @example
1863
1864 (defun c-snug-do-while (syntax pos)
1865 "Dynamically calculate brace hanginess for do-while statements.
1866 Using this function, `while' clauses that end a `do-while' block will
1867 remain on the same line as the brace that closes that block.
1868
1869 See `c-hanging-braces-alist' for how to utilize this function as an
1870 ACTION associated with `block-close' syntax."
1871 (save-excursion
1872 (let (langelem)
1873 (if (and (eq syntax 'block-close)
1874 (setq langelem (assq 'block-close c-syntactic-context))
1875 (progn (goto-char (cdr langelem))
1876 (if (= (following-char) ?@{)
1877 (forward-sexp -1))
1878 (looking-at "\\<do\\>[^_]")))
1879 '(before)
1880 '(before after)))))
1881
1882 @end example
1883
1884 This function simply looks to see if the brace closes a @samp{do-while}
1885 clause and if so, returns the list @samp{@code{(before)}} indicating
1886 that a newline should be inserted before the brace, but not after it.
1887 In all other cases, it returns the list @samp{@code{(before after)}} so
1888 that the brace appears on a line by itself.
1889
1890 @vindex c-syntactic-context
1891 @vindex syntactic-context (c-)
1892 During the call to the brace hanging @var{ACTION} function, the variable
1893 @code{c-syntactic-context} is bound to the full syntactic analysis list.
1894
1895 @cindex customizing colon hanging
1896 @vindex c-hanging-colon-alist
1897 @vindex hanging-colon-alist (c-)
1898 Note that for symmetry, colon hanginess should be customizable by
1899 allowing function symbols as @var{ACTION}s on the
1900 @code{c-hanging-colon-alist} variable. Since no use has actually been
1901 found for this feature, it isn't currently implemented.
1902
1903 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1904 @node Customizing Semi-colons and Commas, Other Special Indentations, Custom Brace and Colon Hanging, Advanced Customizations
1905 @comment node-name, next, previous,up
1906
1907 @subsection Customizing Semi-colons and Commas
1908 @cindex Customizing Semi-colons and Commas
1909 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1910
1911 @cindex customizing semi-colons and commas
1912 @vindex c-hanging-semi&comma-criteria
1913 @vindex hanging-semi&comma-criteria (c-)
1914 You can also customize the insertion of newlines after semi-colons and
1915 commas, when the auto-newline minor mode is enabled (see @ref{Minor
1916 Modes}). This is controlled by the variable
1917 @code{c-hanging-semi&comma-criteria}, which contains a list of functions
1918 that are called in the order they appear. Each function is called with
1919 zero arguments, and is expected to return one of the following values:
1920
1921 @itemize @bullet
1922 @item
1923 non-@code{nil} -- A newline is inserted, and no more functions from the
1924 list are called.
1925
1926 @item
1927 @code{stop} -- No more functions from the list are called, but no
1928 newline is inserted.
1929
1930 @item
1931 @code{nil} -- No determination is made, and the next function in the
1932 list is called.
1933
1934 @end itemize
1935
1936 If every function in the list is called without a determination being
1937 made, then no newline is added. The default value for this variable is a
1938 list containing a single function which inserts newlines only after
1939 semi-colons which do not appear inside parenthesis lists (i.e. those
1940 that separate @code{for}-clause statements).
1941
1942 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1943 @node Other Special Indentations, , Customizing Semi-colons and Commas, Advanced Customizations
1944 @comment node-name, next, previous,up
1945
1946 @subsection Other Special Indentations
1947 @cindex Customizing Semi-colons and Commas
1948 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1949
1950 @vindex c-special-indent-hook
1951 @vindex special-indent-hook (c-)
1952 One other customization variable is available in @code{cc-mode}:
1953 @code{c-special-indent-hook}. This is a standard hook variable that is
1954 called after every line is indented by @code{cc-mode}. You can use it
1955 to do any special indentation or line adjustments your style dictates,
1956 such as adding extra indentation to constructors or destructor
1957 declarations in a class definition, etc. Note however, that you should
1958 not change point or mark inside your @code{c-special-indent-hook}
1959 functions (i.e. you'll probably want to wrap your function in a
1960 @code{save-excursion}).
1961
1962
1963 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1964 @node Syntactic Symbols, Performance Issues, Customizing Indentation, Top
1965 @comment node-name, next, previous,up
1966
1967 @chapter Syntactic Symbols
1968 @cindex Syntactic Symbols
1969 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1970
1971 @vindex c-offsets-alist
1972 @vindex offsets-alist (c-)
1973 The complete list of recognized syntactic symbols is described in the
1974 @code{c-offsets-alist} variable. This chapter will provide some
1975 examples to help clarify these symbols.
1976
1977 @cindex -open syntactic symbols
1978 @cindex -close syntactic symbols
1979 Most syntactic symbol names follow a general naming convention. When a
1980 line begins with an open or close brace, the syntactic symbol will
1981 contain the suffix @code{-open} or @code{-close} respectively.
1982
1983 @cindex -intro syntactic symbols
1984 @cindex -cont syntactic symbols
1985 @cindex -block-intro syntactic symbols
1986 Usually, a distinction is made between the first line that introduces a
1987 construct and lines that continue a construct, and the syntactic symbols
1988 that represent these lines will contain the suffix @code{-intro} or
1989 @code{-cont} respectively. As a sub-classification of this scheme, a
1990 line which is the first of a particular brace block construct will
1991 contain the suffix @code{-block-intro}.
1992
1993 @kindex C-c C-s
1994 Let's look at some examples to understand how this works. Remember that
1995 you can check the syntax of any line by using @kbd{C-c C-s}.
1996 @example
1997 @group
1998
1999 1: void
2000 2: swap( int& a, int& b )
2001 3: @{
2002 4: int tmp = a;
2003 5: a = b;
2004 6: b = tmp;
2005 7: int ignored =
2006 8: a + b;
2007 9: @}
2008
2009 @end group
2010 @end example
2011
2012 Line 1 shows a @code{topmost-intro} since it is the first line that
2013 introduces a top-level construct. Line 2 is a continuation of the
2014 top-level construct introduction so it has the syntax
2015 @code{topmost-intro-cont}. Line 3 shows a @code{defun-open} since it is
2016 the brace that opens a top-level function definition. Line 9 is a
2017 @code{defun-close} since it contains the brace that closes the top-level
2018 function definition. Line 4 is a @code{defun-block-intro}, i.e. it is
2019 the first line of a brace-block, which happens to be enclosed in a
2020 top-level function definition.
2021
2022 Lines 5, 6, and 7 are all given @code{statement} syntax since there
2023 isn't much special about them. Note however that line 8 is given
2024 @code{statement-cont} syntax since it continues the statement begun
2025 on the previous line.
2026
2027 Here's another example, which illustrates some C++ class syntactic
2028 symbols:
2029 @example
2030 @group
2031
2032 1: class Bass
2033 2: : public Guitar,
2034 3: public Amplifiable
2035 4: @{
2036 5: public:
2037 6: Bass()
2038 7: : eString( new BassString( 0.105 )),
2039 8: aString( new BassString( 0.085 )),
2040 9: dString( new BassString( 0.065 )),
2041 10: gString( new BassString( 0.045 ))
2042 11: @{
2043 12: eString.tune( 'E' );
2044 13: aString.tune( 'A' );
2045 14: dString.tune( 'D' );
2046 15: gString.tune( 'G' );
2047 16: @}
2048 17: @}
2049
2050 @end group
2051 @end example
2052
2053 As in the previous example, line 1 has the @code{topmost-intro} syntax.
2054 Here however, the brace that opens a C++ class definition on line 4 is
2055 assigned the @code{class-open} syntax. Note that in C++, structs and
2056 unions are essentially equivalent syntactically (and are very similar
2057 semantically), so replacing the @code{class} keyword in the example
2058 above with @code{struct} or @code{union} would still result in a syntax
2059 of @code{class-open} for line 4 @footnote{This is the case even for C
2060 and Objective-C. For consistency, structs in all three languages are
2061 syntactically equivalent to classes. Note however that the keyword
2062 @code{class} is meaningless in C and Objective-C.}. Similarly, line 17
2063 is assigned @code{class-close} syntax.
2064
2065 Line 2 introduces the inheritance list for the class so it is assigned
2066 the @code{inher-intro} syntax, and line 3, which continues the
2067 inheritance list is given @code{inher-cont} syntax.
2068
2069 Things get interesting at line 5. The primary syntactic symbol for this
2070 line is @code{access-label} since this a label keyword that specifies
2071 access protection in C++. However, this line actually shows two
2072 syntactic symbols when you hit @kbd{C-c C-s}. This is because it is
2073 also a top-level construct inside a class definition. Thus the other
2074 syntactic symbol assigned to this line is @code{inclass}. Similarly,
2075 line 6 is given both @code{inclass} and @code{topmost-intro} syntax.
2076
2077 Line 7 introduces a C++ member initialization list and as such is given
2078 @code{member-init-intro} syntax. Note that in this case it is
2079 @emph{not} assigned @code{inclass} since this is not considered a
2080 top-level construct. Lines 8 through 10 are all assigned
2081 @code{member-init-cont} since they continue the member initialization
2082 list started on line 7.
2083
2084 @cindex in-class inline methods
2085 Line 11 is assigned @code{inline-open} because it opens an
2086 @dfn{in-class} C++ inline method definition. This is distinct from, but
2087 related to, the C++ notion of an inline function in that its definition
2088 occurs inside an enclosing class definition, which in C++ implies that
2089 the function should be inlined. For example, if the definition of the
2090 @code{Bass} constructor appeared outside the class definition, line 11
2091 would be given the @code{defun-open} syntax, even if the keyword
2092 @code{inline} appeared before the method name, as in:
2093 @example
2094 @group
2095
2096 class Bass
2097 : public Guitar,
2098 public Amplifiable
2099 @{
2100 public:
2101 Bass();
2102 @}
2103
2104 inline
2105 Bass::Bass()
2106 : eString( new BassString( 0.105 )),
2107 aString( new BassString( 0.085 )),
2108 dString( new BassString( 0.065 )),
2109 gString( new BassString( 0.045 ))
2110 @{
2111 eString.tune( 'E' );
2112 aString.tune( 'A' );
2113 dString.tune( 'D' );
2114 gString.tune( 'G' );
2115 @}
2116
2117 @end group
2118 @end example
2119
2120 @noindent
2121 Similarly, line 16 is given @code{inline-close} syntax.
2122
2123 As in the first example above, line 12 is given @code{defun-block-open}
2124 syntax and lines 13 through 15 are all given @code{statement} syntax.
2125
2126 Here is another (totally contrived) example which illustrates how syntax
2127 is assigned to various conditional constructs:
2128 @example
2129 @group
2130
2131 1: void spam( int index )
2132 2: @{
2133 3: for( int i=0; i<index; i++ )
2134 4: @{
2135 5: if( i == 10 )
2136 6: @{
2137 7: do_something_special();
2138 8: @}
2139 9: else
2140 10: do_something( i );
2141 11: @}
2142 12: do @{
2143 13: another_thing( i-- );
2144 14: @}
2145 15: while( i > 0 );
2146 16: @}
2147
2148
2149 @end group
2150 @end example
2151
2152 @noindent
2153 Only the lines that illustrate new syntactic symbols will be discussed.
2154
2155 Line 4 has a brace which opens a conditional's substatement block. It
2156 is thus assigned @code{substatement-open} syntax, and since line 5 is
2157 the first line in the substatement block, it is assigned
2158 @code{substatement-block-intro} syntax. Lines 6 and 7 are assigned
2159 similar syntax. Line 8 contains the brace that closes the inner
2160 substatement block. It is given the generic syntax @code{block-close},
2161 as are lines 11 and 14.
2162
2163 Line 9 is a little different -- since it contains the keyword
2164 @code{else} matching the @code{if} statement introduced on line 5; it is
2165 given the @code{else-clause} syntax. Note also that line 10 is slightly
2166 different too. Because @code{else} is considered a conditional
2167 introducing keyword @footnote{The list of conditional keywords are (in
2168 C, Objective-C and C++): @code{for}, @code{if}, @code{do}, @code{else},
2169 @code{while}, and @code{switch}. C++ has two additional conditional
2170 keywords: @code{try} and @code{catch}.}, and because the following
2171 substatement is not a brace block, line 10 is assigned the
2172 @code{substatement} syntax.
2173
2174 One other difference is seen on line 15. The @code{while} construct
2175 that closes a @code{do} conditional is given the special syntax
2176 @code{do-while-closure} if it appears on a line by itself. Note that if
2177 the @code{while} appeared on the same line as the preceding close brace,
2178 that line would have been assigned @code{block-close} syntax instead.
2179
2180 Switch statements have their own set of syntactic symbols. Here's an
2181 example:
2182 @example
2183 @group
2184
2185 1: void spam( enum Ingredient i )
2186 2: @{
2187 3: switch( i ) @{
2188 4: case Ham:
2189 5: be_a_pig();
2190 6: break;
2191 7: case Salt:
2192 8: drink_some_water();
2193 9: break;
2194 10: default:
2195 11: @{
2196 12: what_is_it();
2197 13: break;
2198 14: @}
2199 15: @}
2200 14: @}
2201
2202 @end group
2203 @end example
2204
2205 Here, lines 4, 7, and 10 are all assigned @code{case-label} syntax,
2206 while lines 5 and 8 are assigned @code{statement-case-intro}. Line 11
2207 is treated slightly differently since it contains a brace that opens a
2208 block -- it is given @code{statement-case-open} syntax.
2209
2210 @cindex brace lists
2211 There are a set of syntactic symbols that are used to recognize
2212 constructs inside of brace lists. A brace list is defined as an
2213 @code{enum} or aggregate initializer list, such as might statically
2214 initialize an array of structs. For example:
2215 @example
2216 @group
2217
2218 1: static char* ingredients[] =
2219 2: @{
2220 3: "Ham",
2221 4: "Salt",
2222 5: NULL
2223 6: @}
2224
2225 @end group
2226 @end example
2227
2228 Following convention, line 2 in this example is assigned
2229 @code{brace-list-open} syntax, and line 3 is assigned
2230 @code{brace-list-intro} syntax. Likewise, line 6 is assigned
2231 @code{brace-list-close} syntax. Lines 4 and 5 however, are assigned
2232 @code{brace-list-entry} syntax, as would all subsequent lines in this
2233 initializer list.
2234
2235 A number of syntactic symbols are associated with parenthesis lists,
2236 a.k.a argument lists, as found in function declarations and function
2237 calls. This example illustrates these:
2238 @example
2239 @group
2240
2241 1: void a_function( int line1,
2242 2: int line2 );
2243 3:
2244 4: void a_longer_function(
2245 5: int line1,
2246 6: int line2
2247 7: );
2248 8:
2249 9: void call_them( int line1, int line2 )
2250 10: @{
2251 11: a_function(
2252 12: line1,
2253 13: line2
2254 14: );
2255 15:
2256 16: a_longer_function( line1,
2257 17: line2 );
2258 18: @}
2259
2260 @end group
2261 @end example
2262
2263 Lines 5 and 12 are assigned @code{arglist-intro} syntax since they are
2264 the first line following the open parenthesis, and lines 7 and 14 are
2265 assigned @code{arglist-close} syntax since they contain the parenthesis
2266 that closes the argument list.
2267
2268 The other lines with relevant syntactic symbols include lines 2 and 17
2269 which are assigned @code{arglist-cont-nonempty} syntax. What this means
2270 is that they continue an argument list, but that the line containing the
2271 parenthesis that opens the list is @emph{non-empty} following the open
2272 parenthesis. Contrast this against lines 6 and 13 which are assigned
2273 @code{arglist-cont} syntax. This is because the parenthesis that opens
2274 their argument lists is the last character on that line @footnote{The
2275 need for this somewhat confusing arrangement is that the typical
2276 indentation desired for these lines is calculated very differently.
2277 This should be simplified in version 5 of @code{cc-mode}, along with the
2278 added distinction between argument lists in function declarations, and
2279 argument lists in function calls.}.
2280
2281 Note that there is no @code{arglist-open} syntax. This is because any
2282 parenthesis that opens an argument list, appearing on a separate line,
2283 is assigned the @code{statement-cont} syntax instead.
2284
2285 A few miscellaneous syntactic symbols that haven't been previously
2286 covered are illustrated by this example:
2287 @example
2288 @group
2289
2290 1: void Bass::play( int volume )
2291 2: const
2292 3: @{
2293 4: /* this line starts a multi-line
2294 5: * comment. This line should get `c' syntax */
2295 6:
2296 7: char* a_long_multiline_string = "This line starts a multi-line \
2297 8: string. This line should get `string' syntax.";
2298 9:
2299 10: note:
2300 11: @{
2301 12: #ifdef LOCK
2302 13: Lock acquire();
2303 14: #endif // LOCK
2304 15: slap_pop();
2305 16: cout << "I played "
2306 17: << "a note\n";
2307 18: @}
2308 19: @}
2309
2310 @end group
2311 @end example
2312
2313 @cindex modifier syntactic symbol
2314 The lines to note in this example include:
2315
2316 @itemize @bullet
2317
2318 @item
2319 line 2 which is assigned the @code{ansi-funcdecl-cont} syntax;
2320
2321 @item
2322 line 4 which is assigned both @code{defun-block-intro} @emph{and}
2323 @code{comment-intro} syntax @footnote{The @code{comment-intro} syntactic
2324 symbol is known generically as a @dfn{modifier} since it always appears
2325 on a syntactic analysis list with other symbols, and never has a
2326 relative buffer position.};
2327
2328 @item
2329 line 5 which is assigned @code{c} syntax;
2330
2331 @item
2332 @cindex syntactic whitespace
2333 line 6 which, even though it contains nothing but whitespace, is
2334 assigned @code{defun-block-intro}. Note that the appearance of the
2335 comment on lines 4 and 5 do not cause line 6 to be assigned
2336 @code{statement} syntax because comments are considered to be
2337 @dfn{syntactic whitespace}, which are essentially ignored when analyzing
2338 code;
2339
2340 @item
2341 line 8 which is assigned @code{string} syntax;
2342
2343 @item
2344 line 10 which is assigned @code{label} syntax;
2345
2346 @item
2347 line 11 which is assigned @code{block-open} syntax;
2348
2349 @item
2350 lines 12 and 14 which are assigned @code{cpp-macro} syntax;
2351
2352 @item
2353 line 17 which is assigned @code{stream-op} syntax @footnote{In C++ only.}.
2354
2355 @end itemize
2356
2357 In Objective-C buffers, there are three additional syntactic symbols
2358 assigned to various message calling constructs. Here's an example
2359 illustrating these:
2360 @example
2361 @group
2362
2363 1: - (void)setDelegate:anObject
2364 2: withStuff:stuff
2365 3: @{
2366 4: [delegate masterWillRebind:self
2367 5: toDelegate:anObject
2368 6: withExtraStuff:stuff];
2369 7: @}
2370
2371 @end group
2372 @end example
2373
2374 Here, line 1 is assigned @code{objc-method-intro} syntax, and line 2 is
2375 assigned @code{objc-method-args-cont} syntax. Lines 5 and 6 are both
2376 assigned @code{objc-method-call-cont} syntax.
2377
2378 Other syntactic symbols may be recognized by @code{cc-mode}, but these
2379 are more obscure and so I haven't included examples of them. These
2380 include: @code{knr-argdecl-intro}, @code{knr-argdecl}, and the
2381 @code{friend} modifier.
2382
2383 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2384 @node Performance Issues, Frequently Asked Questions, Syntactic Symbols, Top
2385 @comment node-name, next, previous,up
2386
2387 @chapter Performance Issues
2388 @cindex Performance Issues
2389 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2390
2391 C and it's derivative languages are highly complex creatures. Often,
2392 ambiguous code situations arise that require @code{cc-mode} to scan
2393 large portions of the buffer to determine syntactic context. Some
2394 pathological code can cause @code{cc-mode} to slow down considerably.
2395 This section identifies some of the coding styles to watch out for, and
2396 suggests some workarounds that you can use to improve performance.
2397
2398 Note that this is an area that will get a lot of attention in
2399 @code{cc-mode} version 5. The mode should end up being much faster, at
2400 the expense of dropping Emacs 18 support, owing to the implementation of
2401 syntactic analysis caching. This is the last release of @code{cc-mode}
2402 that will be compatible with Emacs 18.
2403
2404 Because @code{cc-mode} has to scan the buffer backwards from the current
2405 insertion point, and because C's syntax is fairly difficult to parse in
2406 the backwards direction, @code{cc-mode} often tries to find the nearest
2407 position higher up in the buffer from which to begin a forward scan.
2408 The farther this position is from the current insertion point, the
2409 slower the mode gets. Some coding styles can even force @code{cc-mode}
2410 to scan from the beginning of the buffer!
2411
2412 @findex beginning-of-defun
2413 @findex defun-prompt-regexp
2414 One of the simplest things you can do to reduce scan time, is make sure
2415 any brace that opens a top-level block construct always appears in the
2416 leftmost column. This is actually an Emacs constraint, as embodied in
2417 the @code{beginning-of-defun} function which @code{cc-mode} uses
2418 heavily. If you insist on hanging top-level open braces on the right
2419 side of the line, then you should set the variable
2420 @code{defun-prompt-regexp} to something reasonable @footnote{Note that
2421 this variable is only defined in Emacs 19.}, however that ``something
2422 reasonable'' is difficult to define, so @code{cc-mode} doesn't do it
2423 for you.
2424
2425 @cindex @file{cc-lobotomy.el} file
2426 You will probably notice pathological behavior from @code{cc-mode} when
2427 working in files containing large amounts of cpp macros. This is
2428 because @code{cc-mode} cannot quickly skip backwards over these lines,
2429 which do not contribute to the syntactic calculations. You'll probably
2430 also have problems if you are editing ``K&R'' C code, i.e. C code that
2431 does not use function prototypes. This is because there are ambiguities
2432 in the C syntax when K&R style argument lists are used, and
2433 @code{cc-mode} has to use a slower scan to determine what it's looking
2434 at.
2435
2436 @vindex c-recognize-knr-p
2437 @vindex recognize-knr-p (c-)
2438 For the latter problem, I would suggest converting to ANSI style
2439 protocols, and turning the variable @code{c-recognize-knr-p} to
2440 @code{nil} (this is it's default value for all modes).
2441
2442 @vindex cc-lobotomy-pith-list
2443 For the former problem, you might want to investigate some of the
2444 speed-ups provided for you in the file @file{cc-lobotomy.el}, which
2445 is part of the canonical @code{cc-mode} distribution. As mentioned
2446 previous, @code{cc-mode} always trades accuracy for speed, however it is
2447 recognized that sometimes you need speed and can sacrifice some accuracy
2448 in indentation. The file @file{cc-lobotomy.el} contains hacks that
2449 will ``dumb down'' @code{cc-mode} in some specific ways, making that
2450 trade-off of speed for accuracy. I won't go into details of its use
2451 here; you should read the comments at the top of the file, and look at
2452 the variable @code{cc-lobotomy-pith-list} for details.
2453
2454
2455 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2456 @node Frequently Asked Questions, Getting the latest cc-mode release, Performance Issues, Top
2457 @comment node-name, next, previous,up
2458
2459 @chapter Frequently Asked Questions
2460 @cindex Frequently Asked Questions
2461 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2462
2463 @kindex C-x h
2464 @kindex ESC C-\
2465 @kindex ESC C-x
2466 @kindex C-c C-q
2467 @kindex ESC C-q
2468 @kindex ESC C-u
2469 @kindex RET
2470 @kindex LFD
2471 @findex newline-and-indent
2472 @quotation
2473
2474 @strong{Q.} @emph{How do I re-indent the whole file?}
2475
2476 @strong{A.} Visit the file and hit @kbd{C-x h} to mark the whole
2477 buffer. Then hit @kbd{@key{ESC} C-\}.
2478 @sp 2
2479
2480 @strong{Q.} @emph{How do I re-indent the entire function?
2481 @kbd{@key{ESC} C-x} doesn't work.}
2482
2483 @strong{A.} @kbd{@key{ESC} C-x} is reserved for future Emacs use.
2484 To re-indent the entire function hit @kbd{C-c C-q}.
2485 @sp 2
2486
2487 @strong{Q.} @emph{How do I re-indent the current block?}
2488
2489 @strong{A.} First move to the brace which opens the block with
2490 @kbd{@key{ESC} C-u}, then re-indent that expression with
2491 @kbd{@key{ESC} C-q}.
2492 @sp 2
2493
2494 @strong{Q.} @emph{Why doesn't the @key{RET} key indent the line to
2495 where the new text should go after inserting the newline?}
2496
2497 @strong{A.} Emacs' convention is that @key{RET} just adds a newline,
2498 and that @key{LFD} adds a newline and indents it. You can make
2499 @key{RET} do this too by adding this to your
2500 @code{c-mode-common-hook} (see the sample @file{.emacs} file
2501 @ref{Sample .emacs File}):
2502 @example
2503
2504 (define-key c-mode-map "\C-m" 'newline-and-indent)
2505
2506 @end example
2507
2508 This is a very common question. @code{:-)} If you want this to be the
2509 default behavior, don't lobby me, lobby RMS!
2510 @sp 2
2511
2512 @strong{Q.} @emph{I put @code{(c-set-offset 'substatement-open 0)}
2513 in my @file{.emacs} file but I get an error saying that
2514 @code{c-set-offset}'s function definition is void.}
2515
2516 @strong{A.} This means that @code{cc-mode} wasn't loaded into your
2517 Emacs session by the time the @code{c-set-offset} call was reached,
2518 mostly likely because @code{cc-mode} is being autoloaded. Instead
2519 of putting the @code{c-set-offset} line in your top-level
2520 @file{.emacs} file, put it in your @code{c-mode-common-hook}, or
2521 simply add the following to the top of your @file{.emacs} file:
2522 @example
2523
2524 (require 'cc-mode)
2525
2526 @end example
2527
2528 See the sample @file{.emacs} file @ref{Sample .emacs File} for
2529 details.
2530
2531 @strong{Q.} @emph{How do I make strings, comments, keywords, and other
2532 constructs appear in different colors, or in bold face, etc.?}
2533
2534 @strong{A.} ``Syntax Colorization'' is an Emacs 19 feature, controlled
2535 by @code{font-lock-mode}. It is not part of @code{cc-mode}.
2536
2537 @end quotation
2538
2539
2540 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2541 @node Getting the latest cc-mode release, Sample .emacs File, Frequently Asked Questions, Top
2542 @comment node-name, next, previous,up
2543
2544 @chapter Getting the latest @code{cc-mode} release
2545 @cindex Getting the latest @code{cc-mode} release
2546 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2547
2548 @code{cc-mode} is now distributed with both Emacs 19 and XEmacs 19, so
2549 you would typically just use the version that comes with your Emacs.
2550 Users of older versions of Emacs can get the latest release from this
2551 URL:
2552
2553 @example
2554
2555 @code{ftp://ftp.python.org/pub/emacs/cc-mode.tar.gz}
2556
2557 @end example
2558
2559 Note that this is a ``gzipped'' tar file.
2560
2561 If you do not have anonymous ftp access, you can get the distribution
2562 through an anonymous ftp-to-mail gateway, such as the one run by DEC at
2563 @code{ftpmail@@decwrl.dec.com}. To get @code{cc-mode} via email, send
2564 the following message in the body of your mail to that address:
2565 @example
2566
2567 reply <a valid net address back to you>
2568 connect ftp.python.org
2569 binary
2570 uuencode
2571 chdir pub/emacs
2572 get cc-mode.tar.gz
2573
2574 @end example
2575 @noindent
2576 or just send the message "help" for more information on ftpmail.
2577 Response times will vary with the number of requests in the queue.
2578
2579 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2580 @node Sample .emacs File, Requirements, Getting the latest cc-mode release, Top
2581 @comment node-name, next, previous,up
2582
2583 @chapter Sample @file{.emacs} file
2584 @cindex Sample @file{.emacs} file
2585 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2586
2587 @example
2588 ;; Here's a sample .emacs file that might help you along the way. Just
2589 ;; copy this region and paste it into your .emacs file. You may want to
2590 ;; change some of the actual values.
2591
2592 (defconst my-c-style
2593 '((c-tab-always-indent . t)
2594 (c-comment-only-line-offset . 4)
2595 (c-hanging-braces-alist . ((substatement-open after)
2596 (brace-list-open)))
2597 (c-hanging-colons-alist . ((member-init-intro before)
2598 (inher-intro)
2599 (case-label after)
2600 (label after)
2601 (access-label after)))
2602 (c-cleanup-list . (scope-operator
2603 empty-defun-braces
2604 defun-close-semi))
2605 (c-offsets-alist . ((arglist-close . c-lineup-arglist)
2606 (substatement-open . 0)
2607 (case-label . 4)
2608 (block-open . 0)
2609 (knr-argdecl-intro . -)))
2610 (c-echo-syntactic-information-p . t)
2611 )
2612 "My C Programming Style")
2613
2614 ;; Customizations for all of c-mode, c++-mode, and objc-mode
2615 (defun my-c-mode-common-hook ()
2616 ;; add my personal style and set it for the current buffer
2617 (c-add-style "PERSONAL" my-c-style t)
2618 ;; offset customizations not in my-c-style
2619 (c-set-offset 'member-init-intro '++)
2620 ;; other customizations
2621 (setq tab-width 8
2622 ;; this will make sure spaces are used instead of tabs
2623 indent-tabs-mode nil)
2624 ;; we like auto-newline and hungry-delete
2625 (c-toggle-auto-hungry-state 1)
2626 ;; keybindings for C, C++, and Objective-C. We can put these in
2627 ;; c-mode-map because c++-mode-map and objc-mode-map inherit it
2628 (define-key c-mode-map "\C-m" 'newline-and-indent)
2629 )
2630
2631 ;; the following only works in Emacs 19
2632 ;; Emacs 18ers can use (setq c-mode-common-hook 'my-c-mode-common-hook)
2633 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
2634 @end example
2635
2636 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2637 @node Requirements, Limitations and Known Bugs, Sample .emacs File, Top
2638 @comment node-name, next, previous,up
2639 @chapter Requirements
2640 @cindex Requirements
2641 @comment * Requirements
2642 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2643
2644 @cindex reporter.el
2645 @file{cc-mode.el} requires @file{reporter.el} for submission of bug
2646 reports. @file{reporter.el} is distributed with the latest Emacs 19s.
2647 Here is the Emacs Lisp Archive anonymous ftp'ing record for those of you
2648 who are using older Emacsen.
2649
2650 @comment * Here's the Emacs Lisp Archive information for @file{reporter.el}:
2651 @example
2652
2653 GNU Emacs Lisp Code Directory Apropos -- "reporter"
2654 "~/" refers to archive.cis.ohio-state.edu:/pub/gnu/emacs/elisp-archive/
2655
2656 reporter (2.12) 06-Jul-1994
2657 Barry A. Warsaw, <bwarsaw@@cnri.reston.va.us>
2658 ~/misc/reporter.el.Z
2659 Customizable bug reporting of lisp programs.
2660
2661 @end example
2662
2663 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2664 @node Limitations and Known Bugs, Mailing Lists and Submitting Bug Reports, Requirements, Top
2665 @comment node-name, next, previous,up
2666 @chapter Limitations and Known Bugs
2667 @cindex Limitations and Known Bugs
2668 @comment * Limitations and Known Bugs
2669 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2670
2671 @itemize @bullet
2672 @item
2673 Multi-line macros are not handled properly.
2674
2675 @item
2676 Re-indenting large regions or expressions can be slow.
2677
2678 @item
2679 Use with Emacs 18 can be slow and annoying. You should seriously
2680 consider upgrading to Emacs 19.
2681
2682 @item
2683 There is still some weird behavior when filling C block comments.
2684 My suggestion is to check out add-on fill packages such as
2685 @code{filladapt}, available at the elisp archive.
2686
2687 @cindex inline-close
2688 @kindex TAB
2689 @item
2690 Lines following @code{inline-close} braces which hang ``after'' do not
2691 line up correctly. Hit @kbd{TAB} to reindent the line.
2692
2693 @end itemize
2694
2695 @c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2696 @node Mailing Lists and Submitting Bug Reports, Concept Index, Limitations and Known Bugs, Top
2697 @comment node-name, next, previous,up
2698 @chapter Mailing Lists and Submitting Bug Reports
2699 @cindex Mailing Lists and Submitting Bug Reports
2700 @c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2701
2702 @kindex C-c C-b
2703 @findex c-submit-bug-report
2704 @findex submit-bug-report (c-)
2705 @cindex beta testers mailing list
2706 @cindex announcement mailing list
2707 To report bugs, use the @kbd{C-c C-b} (@code{c-submit-bug-report})
2708 command. This provides vital information I need to reproduce your
2709 problem. Make sure you include a concise, but complete code example.
2710 Please try to boil your example down to just the essential code needed
2711 to reproduce the problem, and include an exact recipe of steps needed to
2712 expose the bug. Be especially sure to include any code that appears
2713 @emph{before} your bug example.
2714
2715 Bug reports are now to be sent to @code{bug-gnu-emacs@@prep.ai.mit.edu}
2716 which is mirrored on the Usenet newsgroup @code{gnu.emacs.bug}. Other
2717 questions and suggestions should be mailed to
2718 @code{help-gnu-emacs@@prep.ai.mit.edu} which is mirrored on
2719 @code{gnu.emacs.help}.
2720
2721 Note that the @code{cc-mode} Majordomo mailing lists have been
2722 disbanded! With the inclusion of @code{cc-mode} in both of the latest
2723 flavors of Emacs 19, the need for them has ended.
2724
2725 @c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2726 @node Concept Index, Command Index, Mailing Lists and Submitting Bug Reports, Top
2727 @comment node-name, next, previous, up
2728 @unnumbered Concept Index
2729 @c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2730
2731 @printindex cp
2732
2733
2734 @c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2735 @node Command Index, Key Index, Concept Index, Top
2736 @comment node-name, next, previous, up
2737 @unnumbered Command Index
2738 @c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2739
2740 @ifinfo
2741
2742 @end ifinfo
2743 Since all @code{cc-mode} commands are prepended with the string
2744 @samp{c-}, each appears under its @code{c-<thing>} name and its
2745 @code{<thing> (c-)} name.
2746 @iftex
2747 @sp 2
2748 @end iftex
2749 @printindex fn
2750
2751
2752 @c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2753 @node Key Index, Variable Index, Command Index, Top
2754 @comment node-name, next, previous, up
2755 @unnumbered Key Index
2756 @c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2757
2758 @printindex ky
2759
2760
2761 @c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2762 @node Variable Index, , Key Index, Top
2763 @comment node-name, next, previous, up
2764 @unnumbered Variable Index
2765 @c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2766
2767 @ifinfo
2768
2769 @end ifinfo
2770 Since all @code{cc-mode} variables are prepended with the string
2771 @samp{c-}, each appears under its @code{c-<thing>} name and its
2772 @code{<thing> (c-)} name.
2773 @iftex
2774 @sp 2
2775 @end iftex
2776 @printindex vr
2777 @summarycontents
2778 @contents
2779 @bye