annotate man/cc-mode.texi @ 58374:388064fea98c

*** empty log message ***
author Richard M. Stallman <rms@gnu.org>
date Sun, 21 Nov 2004 00:38:58 +0000
parents b7446b6f097d
children b362e981bb86 d8411455de48
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1 \input texinfo
Dave Love <fx@gnu.org>
parents:
diff changeset
2
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3 @c Notes to self regarding line handling:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4 @c
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5 @c Empty lines are often significant before @end directives; avoid them.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6 @c
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
7 @c Empty lines before and after @example directives are significant in
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
8 @c info output but not in TeX. Empty lines inside @example directives
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
9 @c are significant.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
10
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
11 @c Conventions for formatting examples:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
12 @c o If the example contains empty lines then put the surrounding empty
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
13 @c lines inside the @example directives. Put them outside otherwise.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
14 @c o Use @group inside the example only if it shows indentation where
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
15 @c the relation between lines inside is relevant.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
16 @c o Format line number columns like this:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
17 @c 1: foo
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
18 @c 2: bar
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
19 @c ^ one space
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
20 @c ^^ two columns, right alignment
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
21 @c o Check line lengths in TeX output; they can typically be no longer
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
22 @c than 70 chars, 60 if the paragraph is indented.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
23
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
24 @comment TBD: Document the finer details of statement anchoring?
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
25
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
26 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
27 @comment %**start of header (This is for running Texinfo on a region)
Dave Love <fx@gnu.org>
parents:
diff changeset
28 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
29
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
30 @comment No overfull hbox marks in the dvi file.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
31 @finalout
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
32
36924
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
33 @setfilename ../info/ccmode
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
34 @settitle CC Mode Manual
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
35 @footnotestyle end
Dave Love <fx@gnu.org>
parents:
diff changeset
36
Dave Love <fx@gnu.org>
parents:
diff changeset
37 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
38 @comment @setchapternewpage odd !! we don't want blank pages !!
Dave Love <fx@gnu.org>
parents:
diff changeset
39 @comment %**end of header (This is for running Texinfo on a region)
Dave Love <fx@gnu.org>
parents:
diff changeset
40 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
41
Dave Love <fx@gnu.org>
parents:
diff changeset
42
Dave Love <fx@gnu.org>
parents:
diff changeset
43 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
44 @comment
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
45 @comment Texinfo manual for CC Mode
Dave Love <fx@gnu.org>
parents:
diff changeset
46 @comment Generated from the original README file by Krishna Padmasola
Dave Love <fx@gnu.org>
parents:
diff changeset
47 @comment <krishna@earth-gw.njit.edu>
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
48 @comment
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
49 @comment Authors:
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
50 @comment Barry A. Warsaw
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
51 @comment Martin Stjernholm
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
52 @comment
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
53 @comment Maintained by Martin Stjernholm <bug-cc-mode@gnu.org>
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
54 @comment
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
55 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
56
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
57 @comment Define an index for syntactic symbols.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
58 @defindex ss
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
59
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
60 @comment Combine key, syntactic symbol and concept indices into one.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
61 @syncodeindex ss cp
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
62 @syncodeindex ky cp
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
63
47737
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
64 @copying
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
65 This manual is for CC Mode in Emacs.
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
66
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
67 Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
68 2003 Free Software Foundation, Inc.
47737
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
69
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
70 @quotation
36924
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
71 Permission is granted to copy, distribute and/or modify this document
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
72 under the terms of the GNU Free Documentation License, Version 1.1 or
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
73 any later version published by the Free Software Foundation; with the
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
74 Invariant Sections being ``The GNU Manifesto'', ``Distribution'' and
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
75 ``GNU GENERAL PUBLIC LICENSE'', with the Front-Cover texts being ``A GNU
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
76 Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
77 license is included in the section entitled ``GNU Free Documentation
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
78 License'' in the Emacs manual.
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
79
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
80 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
81 this GNU Manual, like GNU software. Copies published by the Free
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
82 Software Foundation raise funds for GNU development.''
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
83
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
84 This document is part of a collection distributed under the GNU Free
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
85 Documentation License. If you want to distribute this document
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
86 separately from the collection, you can do so by adding a copy of the
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
87 license to the document, as described in section 6 of the license.
47737
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
88 @end quotation
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
89 @end copying
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
90
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
91 @comment Info directory entry for use by install-info. The indentation
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
92 @comment here is by request from the FSF folks.
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
93 @dircategory Emacs
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
94 @direntry
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
95 * CC Mode: (ccmode). Emacs mode for editing C, C++, Objective-C,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
96 Java, Pike, AWK, and CORBA IDL code.
47737
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
97 @end direntry
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
98
Dave Love <fx@gnu.org>
parents:
diff changeset
99 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
100 @comment TeX title page
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
101 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
102
Dave Love <fx@gnu.org>
parents:
diff changeset
103 @titlepage
Dave Love <fx@gnu.org>
parents:
diff changeset
104 @sp 10
Dave Love <fx@gnu.org>
parents:
diff changeset
105
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
106 @center @titlefont{CC Mode 5.30}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
107 @sp 2
Dave Love <fx@gnu.org>
parents:
diff changeset
108 @center @subtitlefont{A GNU Emacs mode for editing C and C-like languages}
Dave Love <fx@gnu.org>
parents:
diff changeset
109 @sp 2
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
110 @center Barry A. Warsaw, Martin Stjernholm, Alan Mackenzie (AWK support)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
111
Dave Love <fx@gnu.org>
parents:
diff changeset
112 @page
Dave Love <fx@gnu.org>
parents:
diff changeset
113 @vskip 0pt plus 1filll
47737
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
114 @insertcopying
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
115 @end titlepage
Dave Love <fx@gnu.org>
parents:
diff changeset
116
Dave Love <fx@gnu.org>
parents:
diff changeset
117 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
118 @comment The Top node contains the master menu for the Info file.
Dave Love <fx@gnu.org>
parents:
diff changeset
119 @comment This appears only in the Info file, not the printed manual.
Dave Love <fx@gnu.org>
parents:
diff changeset
120 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
121
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
122 @node Top, Introduction, (dir), (dir)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
123 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
124
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
125 @macro ccmode
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
126 CC Mode
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
127 @end macro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
128
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
129 @ifinfo
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
130 @top @ccmode{}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
131
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
132 @ccmode{} is a GNU Emacs mode for editing files containing C, C++,
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
133 Objective-C, Java, CORBA IDL (and the variants PSDL and CIDL), Pike
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
134 code and to a certain extent, AWK code @xref{AWK Mode}. It provides
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
135 syntax-based indentation, font locking, and has several handy commands
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
136 and some minor modes to make the editing easier. It does not provide
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
137 tools to look up and navigate between functions, classes etc - there are
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
138 other packages for that.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
139 @end ifinfo
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
140
Dave Love <fx@gnu.org>
parents:
diff changeset
141 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
142 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
143
Dave Love <fx@gnu.org>
parents:
diff changeset
144 @menu
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
145 * Introduction::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
146 * Getting Connected::
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
147 * Indentation Engine::
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
148 * Minor Modes::
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
149 * Text Filling and Line Breaking::
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
150 * Macro Handling::
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
151 * Font Locking::
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
152 * Commands::
Dave Love <fx@gnu.org>
parents:
diff changeset
153 * Customizing Indentation::
Dave Love <fx@gnu.org>
parents:
diff changeset
154 * Syntactic Symbols::
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
155 * Indentation Functions::
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
156 * AWK Mode::
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
157 * Odds and Ends::
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
158 * Performance Issues::
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
159 * Limitations and Known Bugs::
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
160 * Frequently Asked Questions::
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
161 * Getting the Latest CC Mode Release::
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
162 * Mailing Lists and Submitting Bug Reports::
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
163 * Sample .emacs File::
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
164
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
165 --- Indices ---
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
166
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
167 * Command and Function Index::
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
168 * Variable Index::
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
169 * Concept Index::
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
170
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
171 @detailmenu
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
172 --- The Detailed Node Listing ---
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
173
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
174 Indentation Engine
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
175
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
176 * Syntactic Analysis::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
177 * Indentation Calculation::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
178
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
179 Minor Modes
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
180
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
181 * Auto-newline Insertion::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
182 * Hungry-deletion of Whitespace::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
183
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
184 Font Locking
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
185
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
186 * Font Locking Preliminaries::
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
187 * Faces::
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
188 * Documentation Comments::
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
189
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
190 Auto-newline Insertion
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
191
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
192 * Hanging Braces::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
193 * Hanging Colons::
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
194 * Hanging Semicolons and Commas::
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
195 * Other Electric Commands::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
196 * Clean-ups::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
197
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
198 Commands
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
199
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
200 * Indentation Commands::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
201 * Movement Commands::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
202 * Other Commands::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
203
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
204 Customizing Indentation
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
205
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
206 * Interactive Customization::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
207 * Permanent Customization::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
208 * Hooks::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
209 * Styles::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
210 * Advanced Customizations::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
211
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
212 Styles
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
213
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
214 * Built-in Styles::
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
215 * Choosing a Style::
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
216 * Adding Styles::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
217 * File Styles::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
218
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
219 Advanced Customizations
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
220
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
221 * Custom Indentation Functions::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
222 * Custom Brace and Colon Hanging::
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
223 * Customizing Semicolons and Commas::
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
224 * Other Special Indentations::
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
225
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
226 AWK Mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
227
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
228 * Initialising AWK Mode::
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
229 * AWK Mode Font Locking::
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
230 * AWK Mode Defuns::
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
231 @end detailmenu
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
232 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
233
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
234
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
235 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
236 @node Introduction, Getting Connected, Top, Top
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
237 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
238 @chapter Introduction
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
239 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
240
Dave Love <fx@gnu.org>
parents:
diff changeset
241 @cindex BOCM
Dave Love <fx@gnu.org>
parents:
diff changeset
242
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
243 Welcome to @ccmode{}, a GNU Emacs mode for editing files containing C,
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
244 C++, Objective-C, Java, CORBA IDL (and the variants CORBA PSDL and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
245 CIDL), Pike and to a certain extent, AWK code (@pxref{AWK Mode}). This
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
246 incarnation of the mode is descended from @file{c-mode.el} (also called
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
247 ``Boring Old C Mode'' or BOCM @t{:-)}, and @file{c++-mode.el} version 2,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
248 which Barry has been maintaining since 1992. Late in 1997, Martin
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
249 joined the @ccmode{} Maintainers Team, and implemented the Pike support.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
250 As of 2000 Martin has taken over as the sole maintainer. @ccmode{} did
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
251 not originally contain the font lock support for its languages --- that
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
252 was added in version 5.30. AWK support was also added in 5.30 by Alan
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
253 Mackenzie.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
254
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
255 This manual describes @ccmode{}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
256 @comment The following line must appear on its own, so that the automated
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
257 version 5.30.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
258 @comment Release.py script can update the version number automatically
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
259
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
260 @ccmode{} supports the editing of K&R and ANSI C, C++, Objective-C,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
261 Java, CORBA's Interface Definition Language, Pike@footnote{A C-like
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
262 scripting language with its roots in the LPC language used in some MUD
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
263 engines. See @uref{http://pike.ida.liu.se/}.} and AWK files. In this
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
264 way, you can easily set up consistent font locking and coding styles for
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
265 use in editing all of these languages, although AWK is not yet as
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
266 uniformly integrated as the other languages.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
267
Dave Love <fx@gnu.org>
parents:
diff changeset
268 @findex c-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
269 @findex c++-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
270 @findex objc-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
271 @findex java-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
272 @findex idl-mode
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
273 @findex pike-mode
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
274 @findex awk-mode
36924
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
275 Note that the name of this package is ``@ccmode{},'' but there is no top
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
276 level @code{cc-mode} entry point. All of the variables, commands, and
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
277 functions in @ccmode{} are prefixed with @code{c-@var{thing}}, and
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
278 @code{c-mode}, @code{c++-mode}, @code{objc-mode}, @code{java-mode},
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
279 @code{idl-mode}, @code{pike-mode}, and @code{awk-mode} entry points are
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
280 provided. This package is intended to be a replacement for
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
281 @file{c-mode.el}, @file{c++-mode.el} and @file{awk-mode.el}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
282
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
283 @c @cindex @file{cc-compat.el} file
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
284 @c This distribution also contains a file
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
285 @c called @file{cc-compat.el} which should ease your transition from BOCM
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
286 @c to @ccmode{}. If you have a BOCM configuration you are really happy
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
287 @c with, and want to postpone learning how to configure @ccmode{}, take a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
288 @c look at that file. It maps BOCM configuration variables to @ccmode{}'s
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
289 @c indentation model. It is not actively supported so for the long run,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
290 @c you should learn how to customize @ccmode{} to support your coding
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
291 @c style.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
292
Dave Love <fx@gnu.org>
parents:
diff changeset
293 A special word of thanks goes to Krishna Padmasola for his work in
Dave Love <fx@gnu.org>
parents:
diff changeset
294 converting the original @file{README} file to Texinfo format. I'd also
Dave Love <fx@gnu.org>
parents:
diff changeset
295 like to thank all the @ccmode{} victims who help enormously during the
Dave Love <fx@gnu.org>
parents:
diff changeset
296 early beta stages of @ccmode{}'s development.
Dave Love <fx@gnu.org>
parents:
diff changeset
297
Dave Love <fx@gnu.org>
parents:
diff changeset
298
Dave Love <fx@gnu.org>
parents:
diff changeset
299 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
300 @node Getting Connected, Indentation Engine, Introduction, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
301 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
302 @chapter Getting Connected
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
303 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
304
Dave Love <fx@gnu.org>
parents:
diff changeset
305 If you got this version of @ccmode{} with Emacs or XEmacs, it should
Dave Love <fx@gnu.org>
parents:
diff changeset
306 work just fine right out of the box. Note however that you may not have
Dave Love <fx@gnu.org>
parents:
diff changeset
307 the latest @ccmode{} release and may want to upgrade your copy.
Dave Love <fx@gnu.org>
parents:
diff changeset
308
Dave Love <fx@gnu.org>
parents:
diff changeset
309 If you are upgrading an existing @ccmode{} installation, please see the
Dave Love <fx@gnu.org>
parents:
diff changeset
310 @file{README} file for installation details. @ccmode{} may not work
Dave Love <fx@gnu.org>
parents:
diff changeset
311 with older versions of Emacs or XEmacs. See the @ccmode{} release notes
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
312 at @uref{http://cc-mode.sourceforge.net} for the latest information on
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
313 Emacs version and package compatibility (@pxref{Getting the Latest CC
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
314 Mode Release}).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
315
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
316 @deffn Command c-version
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
317 @findex version (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
318 You can find out what version of @ccmode{} you are using by visiting a C
Dave Love <fx@gnu.org>
parents:
diff changeset
319 file and entering @kbd{M-x c-version RET}. You should see this message in
Dave Love <fx@gnu.org>
parents:
diff changeset
320 the echo area:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
321
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
322 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
323 Using CC Mode version 5.XX
Dave Love <fx@gnu.org>
parents:
diff changeset
324 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
325
Dave Love <fx@gnu.org>
parents:
diff changeset
326 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
327 where @samp{XX} is the minor release number.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
328 @end deffn
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
329
Dave Love <fx@gnu.org>
parents:
diff changeset
330
Dave Love <fx@gnu.org>
parents:
diff changeset
331 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
332 @node Indentation Engine, Minor Modes, Getting Connected, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
333 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
334 @chapter Indentation Engine
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
335 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
336
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
337 @ccmode{} has an indentation engine that provides a flexible and general
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
338 mechanism for customizing indentation. It separates indentation
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
339 calculation into two steps: first, @ccmode{} analyzes the line of code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
340 being indented to determine the kind of language construct it's looking
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
341 at, then it applies user defined offsets to the current line based on
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
342 this analysis.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
343
Dave Love <fx@gnu.org>
parents:
diff changeset
344 This section will briefly cover how indentation is calculated in
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
345 @ccmode{}. It is important to understand the indentation model being
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
346 used so that you will know how to customize @ccmode{} for your personal
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
347 coding style. All the details are in @ref{Customizing Indentation}, and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
348 later chapters.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
349
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
350 @defopt c-syntactic-indentation
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
351 @vindex syntactic-indentation (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
352 Syntactic analysis for indentation is done when this is non-@code{nil}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
353 (which is the default). When it's @code{nil} every line is just
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
354 indented to the same level as the previous one, and @kbd{TAB}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
355 (@code{c-indent-command}) adjusts the indentation in steps of
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
356 @code{c-basic-offset}. The indentation style has no effect, nor any of
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
357 the indentation associated variables, e.g., @code{c-special-indent-hook}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
358 @end defopt
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
359
Dave Love <fx@gnu.org>
parents:
diff changeset
360 @menu
Dave Love <fx@gnu.org>
parents:
diff changeset
361 * Syntactic Analysis::
Dave Love <fx@gnu.org>
parents:
diff changeset
362 * Indentation Calculation::
Dave Love <fx@gnu.org>
parents:
diff changeset
363 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
364
Dave Love <fx@gnu.org>
parents:
diff changeset
365
Dave Love <fx@gnu.org>
parents:
diff changeset
366 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
367 @node Syntactic Analysis, Indentation Calculation, , Indentation Engine
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
368 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
369 @section Syntactic Analysis
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
370 @cindex syntactic analysis
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
371 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
372
Dave Love <fx@gnu.org>
parents:
diff changeset
373 @cindex relative buffer position
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
374 @cindex syntactic symbols
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
375 @cindex syntactic component
Dave Love <fx@gnu.org>
parents:
diff changeset
376 @cindex syntactic component list
Dave Love <fx@gnu.org>
parents:
diff changeset
377 The first thing @ccmode{} does when indenting a line of code, is to
Dave Love <fx@gnu.org>
parents:
diff changeset
378 analyze the line, determining the @dfn{syntactic component list} of the
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
379 construct on that line. A syntactic component consists of a pair of
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
380 elements (in lisp parlance, a @emph{cons cell}), the first being
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
381 a @dfn{syntactic symbol}, the second being a @dfn{relative
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
382 buffer position}. Syntactic symbols describe elements of C code
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
383 @footnote{Unless otherwise noted, the term ``C code'' refers to all
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
384 the C-like languages.}, e.g., @code{statement}, @code{substatement},
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
385 @code{class-open}, @code{class-close}, etc. @xref{Syntactic Symbols},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
386 for a complete list of currently recognized syntactic symbols and their
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
387 semantics. The style variable @code{c-offsets-alist} also contains the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
388 list of currently supported syntactic symbols.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
389
Dave Love <fx@gnu.org>
parents:
diff changeset
390 Conceptually, a line of C code is always indented relative to the
Dave Love <fx@gnu.org>
parents:
diff changeset
391 indentation of some line higher up in the buffer. This is represented
Dave Love <fx@gnu.org>
parents:
diff changeset
392 by the relative buffer position in the syntactic component.
Dave Love <fx@gnu.org>
parents:
diff changeset
393
Dave Love <fx@gnu.org>
parents:
diff changeset
394 Here is an example. Suppose we had the following code as the only thing
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
395 in a C++ buffer @footnote{The line numbers in this and future examples
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
396 don't actually appear in the buffer, of course!}:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
397
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
398 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
399 1: void swap( int& a, int& b )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
400 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
401 3: int tmp = a;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
402 4: a = b;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
403 5: b = tmp;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
404 6: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
405 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
406
Dave Love <fx@gnu.org>
parents:
diff changeset
407 @kindex C-c C-s
Dave Love <fx@gnu.org>
parents:
diff changeset
408 @findex c-show-syntactic-information
Dave Love <fx@gnu.org>
parents:
diff changeset
409 @findex show-syntactic-information (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
410 We can use the command @kbd{C-c C-s} (bound to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
411 @code{c-show-syntactic-information}) to simply report what the
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
412 syntactic analysis is for the current line. Running this command on
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
413 line 4 of this example, we'd see in the echo area@footnote{With a
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
414 universal argument (i.e., @kbd{C-u C-c C-s}) the analysis is inserted
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
415 into the buffer as a comment on the current line.}:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
416
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
417 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
418 ((statement 35))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
419 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
420
Dave Love <fx@gnu.org>
parents:
diff changeset
421 This tells us that the line is a statement and it is indented relative
Dave Love <fx@gnu.org>
parents:
diff changeset
422 to buffer position 35, which happens to be the @samp{i} in @code{int} on
Dave Love <fx@gnu.org>
parents:
diff changeset
423 line 3. If you were to move point to line 3 and hit @kbd{C-c C-s}, you
Dave Love <fx@gnu.org>
parents:
diff changeset
424 would see:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
425
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
426 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
427 ((defun-block-intro 29))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
428 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
429
Dave Love <fx@gnu.org>
parents:
diff changeset
430 This indicates that the @samp{int} line is the first statement in a top
Dave Love <fx@gnu.org>
parents:
diff changeset
431 level function block, and is indented relative to buffer position 29,
Dave Love <fx@gnu.org>
parents:
diff changeset
432 which is the brace just after the function header.
Dave Love <fx@gnu.org>
parents:
diff changeset
433
Dave Love <fx@gnu.org>
parents:
diff changeset
434 Here's another example:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
435
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47737
diff changeset
436 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
437 1: int add( int val, int incr, int doit )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
438 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
439 3: if( doit )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
440 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
441 5: return( val + incr );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
442 6: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
443 7: return( val );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
444 8: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
445 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
446
Dave Love <fx@gnu.org>
parents:
diff changeset
447 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
448 Hitting @kbd{C-c C-s} on line 4 gives us:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
449
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
450 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
451 ((substatement-open 46))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
452 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
453
Dave Love <fx@gnu.org>
parents:
diff changeset
454 @cindex substatement
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
455 @cindex substatement block
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
456 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
457 which tells us that this is a brace that @emph{opens} a substatement
Dave Love <fx@gnu.org>
parents:
diff changeset
458 block. @footnote{A @dfn{substatement} is the line after a
Dave Love <fx@gnu.org>
parents:
diff changeset
459 conditional statement, such as @code{if}, @code{else}, @code{while},
Dave Love <fx@gnu.org>
parents:
diff changeset
460 @code{do}, @code{switch}, etc. A @dfn{substatement
Dave Love <fx@gnu.org>
parents:
diff changeset
461 block} is a brace block following one of these conditional statements.}
Dave Love <fx@gnu.org>
parents:
diff changeset
462
Dave Love <fx@gnu.org>
parents:
diff changeset
463 @cindex comment-only line
Dave Love <fx@gnu.org>
parents:
diff changeset
464 Syntactic component lists can contain more than one component, and
Dave Love <fx@gnu.org>
parents:
diff changeset
465 individual syntactic components need not have relative buffer positions.
Dave Love <fx@gnu.org>
parents:
diff changeset
466 The most common example of this is a line that contains a @dfn{comment
Dave Love <fx@gnu.org>
parents:
diff changeset
467 only line}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
468
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
469 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
470 1: void draw_list( List<Drawables>& drawables )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
471 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
472 3: // call the virtual draw() method on each element in list
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
473 4: for( int i=0; i < drawables.count(), ++i )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
474 5: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
475 6: drawables[i].draw();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
476 7: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
477 8: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
478 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
479
Dave Love <fx@gnu.org>
parents:
diff changeset
480 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
481 Hitting @kbd{C-c C-s} on line 3 of this example gives:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
482
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
483 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
484 ((comment-intro) (defun-block-intro 46))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
485 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
486
Dave Love <fx@gnu.org>
parents:
diff changeset
487 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
488 and you can see that the syntactic component list contains two syntactic
Dave Love <fx@gnu.org>
parents:
diff changeset
489 components. Also notice that the first component,
Dave Love <fx@gnu.org>
parents:
diff changeset
490 @samp{(comment-intro)} has no relative buffer position.
Dave Love <fx@gnu.org>
parents:
diff changeset
491
Dave Love <fx@gnu.org>
parents:
diff changeset
492
Dave Love <fx@gnu.org>
parents:
diff changeset
493 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
494 @node Indentation Calculation, , Syntactic Analysis, Indentation Engine
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
495 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
496 @section Indentation Calculation
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
497 @cindex indentation
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
498 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
499
Dave Love <fx@gnu.org>
parents:
diff changeset
500 Indentation for a line is calculated using the syntactic
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
501 component list derived in step 1 above (@pxref{Syntactic Analysis}).
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
502 Each component contributes to the final total indentation of the line in
Dave Love <fx@gnu.org>
parents:
diff changeset
503 two ways.
Dave Love <fx@gnu.org>
parents:
diff changeset
504
Dave Love <fx@gnu.org>
parents:
diff changeset
505 First, the syntactic symbols are looked up in the @code{c-offsets-alist}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
506 style variable, which is an association list of syntactic symbols and
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
507 the offsets to apply for those symbols. These offsets are added to a
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
508 running total.
Dave Love <fx@gnu.org>
parents:
diff changeset
509
Dave Love <fx@gnu.org>
parents:
diff changeset
510 Second, if the component has a relative buffer position, @ccmode{}
Dave Love <fx@gnu.org>
parents:
diff changeset
511 adds the column number of that position to the running total. By adding
Dave Love <fx@gnu.org>
parents:
diff changeset
512 up the offsets and columns for every syntactic component on the list,
Dave Love <fx@gnu.org>
parents:
diff changeset
513 the final total indentation for the current line is computed.
Dave Love <fx@gnu.org>
parents:
diff changeset
514
Dave Love <fx@gnu.org>
parents:
diff changeset
515 Let's use our two code examples above to see how this works. Here is
Dave Love <fx@gnu.org>
parents:
diff changeset
516 our first example again:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
517
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
518 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
519 1: void swap( int& a, int& b )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
520 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
521 3: int tmp = a;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
522 4: a = b;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
523 5: b = tmp;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
524 6: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
525 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
526
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
527 Let's say point is on line 3 and we hit the @kbd{TAB} key to reindent
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
528 the line. Remember that the syntactic component list for that
Dave Love <fx@gnu.org>
parents:
diff changeset
529 line is:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
530
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
531 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
532 ((defun-block-intro 29))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
533 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
534
Dave Love <fx@gnu.org>
parents:
diff changeset
535 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
536 @ccmode{} looks up @code{defun-block-intro} in the
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
537 @code{c-offsets-alist} style variable. Let's say it finds the value
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
538 @samp{4}; it adds this to the running total (initialized to zero),
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
539 yielding a running total indentation of 4 spaces.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
540
Dave Love <fx@gnu.org>
parents:
diff changeset
541 Next @ccmode{} goes to buffer position 29 and asks for the current
Dave Love <fx@gnu.org>
parents:
diff changeset
542 column. This brace is in column zero, so @ccmode{}
Dave Love <fx@gnu.org>
parents:
diff changeset
543 adds @samp{0} to the running total. Since there is only one syntactic
Dave Love <fx@gnu.org>
parents:
diff changeset
544 component on the list for this line, indentation calculation is
Dave Love <fx@gnu.org>
parents:
diff changeset
545 complete, and the total indentation for the line
Dave Love <fx@gnu.org>
parents:
diff changeset
546 is 4 spaces.
Dave Love <fx@gnu.org>
parents:
diff changeset
547
Dave Love <fx@gnu.org>
parents:
diff changeset
548 Here's another example:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
549
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
550 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
551 1: int add( int val, int incr, int doit )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
552 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
553 3: if( doit )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
554 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
555 5: return( val + incr );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
556 6: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
557 7: return( val );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
558 8: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
559 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
560
Dave Love <fx@gnu.org>
parents:
diff changeset
561 If we were to hit @kbd{TAB} on line 4 in the above example, the same
Dave Love <fx@gnu.org>
parents:
diff changeset
562 basic process is performed, despite the differences in the syntactic
Dave Love <fx@gnu.org>
parents:
diff changeset
563 component list. Remember that the list for this line is:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
564
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
565 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
566 ((substatement-open 46))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
567 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
568
Dave Love <fx@gnu.org>
parents:
diff changeset
569 Here, @ccmode{} first looks up the @code{substatement-open} symbol
Dave Love <fx@gnu.org>
parents:
diff changeset
570 in @code{c-offsets-alist}. Let's say it finds the value @samp{4}. This
Dave Love <fx@gnu.org>
parents:
diff changeset
571 yields a running total of 4. @ccmode{} then goes to
Dave Love <fx@gnu.org>
parents:
diff changeset
572 buffer position 46, which is the @samp{i} in @code{if} on line 3. This
Dave Love <fx@gnu.org>
parents:
diff changeset
573 character is in the fourth column on that line so adding this to the
Dave Love <fx@gnu.org>
parents:
diff changeset
574 running total yields an indentation for the line of 8 spaces.
Dave Love <fx@gnu.org>
parents:
diff changeset
575
Dave Love <fx@gnu.org>
parents:
diff changeset
576 Simple, huh?
Dave Love <fx@gnu.org>
parents:
diff changeset
577
Dave Love <fx@gnu.org>
parents:
diff changeset
578 Actually, the mode usually just does The Right Thing without you having
Dave Love <fx@gnu.org>
parents:
diff changeset
579 to think about it in this much detail. But when customizing
Dave Love <fx@gnu.org>
parents:
diff changeset
580 indentation, it's helpful to understand the general indentation model
Dave Love <fx@gnu.org>
parents:
diff changeset
581 being used.
Dave Love <fx@gnu.org>
parents:
diff changeset
582
Dave Love <fx@gnu.org>
parents:
diff changeset
583 As you configure @ccmode{}, you might want to set the variable
Dave Love <fx@gnu.org>
parents:
diff changeset
584 @code{c-echo-syntactic-information-p} to non-@code{nil} so that the
Dave Love <fx@gnu.org>
parents:
diff changeset
585 syntactic component list and calculated offset will always be echoed in
Dave Love <fx@gnu.org>
parents:
diff changeset
586 the minibuffer when you hit @kbd{TAB}.
Dave Love <fx@gnu.org>
parents:
diff changeset
587
Dave Love <fx@gnu.org>
parents:
diff changeset
588
Dave Love <fx@gnu.org>
parents:
diff changeset
589 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
590 @node Minor Modes, Text Filling and Line Breaking, Indentation Engine, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
591 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
592 @chapter Minor Modes
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
593 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
594
Dave Love <fx@gnu.org>
parents:
diff changeset
595 @ccmode{} contains two minor-mode-like features that you should
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
596 find useful while entering new C code. The first is called
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
597 @dfn{auto-newline} mode, and the second is called @dfn{hungry-delete}
Dave Love <fx@gnu.org>
parents:
diff changeset
598 mode. These minor modes can be toggled on and off independently, and
Dave Love <fx@gnu.org>
parents:
diff changeset
599 @ccmode{} can be configured so that it starts up with any
Dave Love <fx@gnu.org>
parents:
diff changeset
600 combination of these minor modes. By default, both of these minor modes
Dave Love <fx@gnu.org>
parents:
diff changeset
601 are turned off.
Dave Love <fx@gnu.org>
parents:
diff changeset
602
Dave Love <fx@gnu.org>
parents:
diff changeset
603 The state of the minor modes is always reflected in the minor mode list
Dave Love <fx@gnu.org>
parents:
diff changeset
604 on the modeline of the @ccmode{} buffer. When auto-newline mode is
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
605 enabled, you will see @samp{C/a} on the mode line@footnote{The @samp{C}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
606 would be replaced with the name of the language in question for the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
607 other languages @ccmode{} supports.}. When hungry delete mode is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
608 enabled you will see @samp{C/h} and if both modes were enabled, you'd
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
609 see @samp{C/ah}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
610
Dave Love <fx@gnu.org>
parents:
diff changeset
611 @kindex C-c C-a
Dave Love <fx@gnu.org>
parents:
diff changeset
612 @kindex C-c C-d
Dave Love <fx@gnu.org>
parents:
diff changeset
613 @kindex C-c C-t
Dave Love <fx@gnu.org>
parents:
diff changeset
614 @findex c-toggle-hungry-state
Dave Love <fx@gnu.org>
parents:
diff changeset
615 @findex c-toggle-auto-state
Dave Love <fx@gnu.org>
parents:
diff changeset
616 @findex c-toggle-auto-hungry-state
Dave Love <fx@gnu.org>
parents:
diff changeset
617 @findex toggle-hungry-state (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
618 @findex toggle-auto-state (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
619 @findex toggle-auto-hungry-state (c-)
39267
a8c0a02f6129 Spelling corrections.
Richard M. Stallman <rms@gnu.org>
parents: 36924
diff changeset
620 @ccmode{} provides key bindings which allow you to toggle the minor
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
621 modes on the fly while editing code. To toggle just the auto-newline
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
622 state, hit @kbd{C-c C-a} (bound to @code{c-toggle-auto-state}). When
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
623 you do this, you should see the @samp{a} indicator either appear or
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
624 disappear on the modeline. Similarly, to toggle just the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
625 hungry-delete state, use @kbd{C-c C-d} (@code{c-toggle-hungry-state}),
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
626 and to toggle both states, use @kbd{C-c C-t}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
627 (@code{c-toggle-auto-hungry-state}).
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
628
Dave Love <fx@gnu.org>
parents:
diff changeset
629 To set up the auto-newline and hungry-delete states to your preferred
Dave Love <fx@gnu.org>
parents:
diff changeset
630 values, you would need to add some lisp to your @file{.emacs} file that
Dave Love <fx@gnu.org>
parents:
diff changeset
631 called one of the @code{c-toggle-*-state} functions directly. When
Dave Love <fx@gnu.org>
parents:
diff changeset
632 called programmatically, each function takes a numeric value, where
Dave Love <fx@gnu.org>
parents:
diff changeset
633 a positive number enables the minor mode, a negative number disables the
Dave Love <fx@gnu.org>
parents:
diff changeset
634 mode, and zero toggles the current state of the mode.
Dave Love <fx@gnu.org>
parents:
diff changeset
635
Dave Love <fx@gnu.org>
parents:
diff changeset
636 So for example, if you wanted to enable both auto-newline and
Dave Love <fx@gnu.org>
parents:
diff changeset
637 hungry-delete for all your C file editing, you could add the following
Dave Love <fx@gnu.org>
parents:
diff changeset
638 to your @file{.emacs} file:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
639
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
640 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
641 (add-hook 'c-mode-common-hook
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
642 (lambda () (c-toggle-auto-hungry-state 1)))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
643 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
644
Dave Love <fx@gnu.org>
parents:
diff changeset
645 @menu
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
646 * Auto-newline Insertion::
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
647 * Hungry-deletion of Whitespace::
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
648 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
649
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
650
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
651 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
652 @node Auto-newline Insertion, Hungry-deletion of Whitespace, , Minor Modes
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
653 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
654 @section Auto-newline Insertion
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
655 @cindex auto-newline
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
656 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
657
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
658 @cindex electric characters
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
659 Auto-newline minor mode works by enabling certain @dfn{electric
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
660 characters}. Special characters such as the left and right braces,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
661 colons, semicolons, etc., have been made electric to perform some
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
662 magic formatting in addition to inserting the typed character. As a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
663 general rule, electric characters are only electric when the following
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
664 conditions apply:
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
665
Dave Love <fx@gnu.org>
parents:
diff changeset
666 @itemize @bullet
Dave Love <fx@gnu.org>
parents:
diff changeset
667 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
668 Auto-newline minor mode is enabled, as evidenced by a @samp{C/a} or
Dave Love <fx@gnu.org>
parents:
diff changeset
669 @samp{C/ah} indicator on the modeline.
Dave Love <fx@gnu.org>
parents:
diff changeset
670
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
671 @item
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
672 @cindex literal
Dave Love <fx@gnu.org>
parents:
diff changeset
673 @cindex syntactic whitespace
Dave Love <fx@gnu.org>
parents:
diff changeset
674 The character was not typed inside of a literal @footnote{A
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
675 @dfn{literal} is defined as any comment, string, or preprocessor macro
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
676 definition. These constructs are also known as @dfn{syntactic
Dave Love <fx@gnu.org>
parents:
diff changeset
677 whitespace} since they are usually ignored when scanning C code.}.
Dave Love <fx@gnu.org>
parents:
diff changeset
678
Dave Love <fx@gnu.org>
parents:
diff changeset
679 @item
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
680 No numeric argument was supplied to the command (i.e., it was typed as
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
681 normal, with no @kbd{C-u} prefix).
Dave Love <fx@gnu.org>
parents:
diff changeset
682 @end itemize
Dave Love <fx@gnu.org>
parents:
diff changeset
683
Dave Love <fx@gnu.org>
parents:
diff changeset
684 @menu
Dave Love <fx@gnu.org>
parents:
diff changeset
685 * Hanging Braces::
Dave Love <fx@gnu.org>
parents:
diff changeset
686 * Hanging Colons::
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
687 * Hanging Semicolons and Commas::
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
688 * Other Electric Commands::
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
689 * Clean-ups::
Dave Love <fx@gnu.org>
parents:
diff changeset
690 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
691
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
692
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
693 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
694 @node Hanging Braces, Hanging Colons, , Auto-newline Insertion
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
695 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
696 @subsection Hanging Braces
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
697 @cindex hanging braces
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
698 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
699
Dave Love <fx@gnu.org>
parents:
diff changeset
700 @findex c-electric-brace
Dave Love <fx@gnu.org>
parents:
diff changeset
701 @findex electric-brace (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
702 @kindex @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
703 @kindex @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
704
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
705 When you type either an open or close brace (i.e., @kbd{@{} or @kbd{@}}),
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
706 the electric command @code{c-electric-brace} gets run. This command has
Dave Love <fx@gnu.org>
parents:
diff changeset
707 two electric formatting behaviors. First, it will perform some
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
708 reindentation of the line the brace was typed on, and second, it will
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
709 add various newlines before and/or after the typed brace.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
710 Reindentation occurs automatically whenever the electric behavior is
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
711 enabled. If the brace ends up on a line other than the one it was typed
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
712 on, then that line is also reindented.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
713
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
714 The default in auto-newline mode is to insert newlines both before and
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
715 after a brace, but that can be controlled by the
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
716 @code{c-hanging-braces-alist} style variable.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
717
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
718 @defopt c-hanging-braces-alist
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
719 @vindex hanging-braces-alist (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
720
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
721 This variable contains a mapping between syntactic symbols related to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
722 braces, and a list of places to insert a newline. The syntactic symbols
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
723 that are useful for this list are @code{brace-list-intro},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
724 @code{statement-cont}, @code{inexpr-class-open},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
725 @code{inexpr-class-close}, and all the @code{*-open} and @code{*-close}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
726 symbols. @xref{Syntactic Symbols}, for a more detailed description of
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
727 these syntactic symbols, except for @code{inexpr-class-open} and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
728 @code{inexpr-class-close}, which aren't actual syntactic symbols.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
729
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
730 The braces of anonymous inner classes in Java are given the special
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
731 symbols @code{inexpr-class-open} and @code{inexpr-class-close}, so that
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
732 they can be distinguished from the braces of normal classes@footnote{The
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
733 braces of anonymous classes produce a combination of
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
734 @code{inexpr-class}, and @code{class-open} or @code{class-close} in
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
735 normal indentation analysis.}.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
736
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
737 Note that the aggregate constructs in Pike mode, @samp{(@{}, @samp{@})},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
738 @samp{([}, @samp{])}, and @samp{(<}, @samp{>)}, do not count as brace
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
739 lists in this regard, even though they do for normal indentation
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
740 purposes. It's currently not possible to set automatic newlines on
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
741 these constructs.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
742
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
743 The value associated with each syntactic symbol in this association list
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
744 is called an @var{action}, which can be either a function or a list.
26490
2b08d829af86 Fix complaints from makeinfo 4.0.
Eli Zaretskii <eliz@gnu.org>
parents: 25829
diff changeset
745 @xref{Custom Brace and Colon Hanging}, for a more detailed discussion of
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
746 using a function as a brace hanging @var{action}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
747
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
748 When the @var{action} is a list, it can contain any combination of the
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
749 symbols @code{before} and @code{after}, directing @ccmode{} where to
Dave Love <fx@gnu.org>
parents:
diff changeset
750 put newlines in relationship to the brace being inserted. Thus, if the
Dave Love <fx@gnu.org>
parents:
diff changeset
751 list contains only the symbol @code{after}, then the brace is said to
Dave Love <fx@gnu.org>
parents:
diff changeset
752 @dfn{hang} on the right side of the line, as in:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
753
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
754 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
755 // here, open braces always `hang'
Dave Love <fx@gnu.org>
parents:
diff changeset
756 void spam( int i ) @{
Dave Love <fx@gnu.org>
parents:
diff changeset
757 if( i == 7 ) @{
Dave Love <fx@gnu.org>
parents:
diff changeset
758 dosomething(i);
Dave Love <fx@gnu.org>
parents:
diff changeset
759 @}
Dave Love <fx@gnu.org>
parents:
diff changeset
760 @}
Dave Love <fx@gnu.org>
parents:
diff changeset
761 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
762
Dave Love <fx@gnu.org>
parents:
diff changeset
763 When the list contains both @code{after} and @code{before}, the braces
Dave Love <fx@gnu.org>
parents:
diff changeset
764 will appear on a line by themselves, as shown by the close braces in the
Dave Love <fx@gnu.org>
parents:
diff changeset
765 above example. The list can also be empty, in which case no newlines
Dave Love <fx@gnu.org>
parents:
diff changeset
766 are added either before or after the brace.
Dave Love <fx@gnu.org>
parents:
diff changeset
767
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
768 If a syntactic symbol is missing entirely from
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
769 @code{c-hanging-braces-alist}, it's treated in the same way as an
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
770 @var{action} with a list containing @code{before} and @code{after}, so
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
771 that braces by default end up on their own line.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
772
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
773 For example, the default value of @code{c-hanging-braces-alist} is:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
774
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
775 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
776 ((brace-list-open)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
777 (brace-entry-open)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
778 (statement-cont)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
779 (substatement-open after)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
780 (block-close . c-snug-do-while)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
781 (extern-lang-open after)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
782 (inexpr-class-open after)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
783 (inexpr-class-close before))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
784 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
785
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
786 @noindent which says that @code{brace-list-open},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
787 @code{brace-entry-open} and @code{statement-cont}@footnote{Brace lists
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
788 inside statements, such as initializers for static array variables
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
789 inside functions in C, are recognized as @code{statement-cont}. All
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
790 normal substatement blocks are recognized with other symbols.} braces
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
791 should both hang on the right side and allow subsequent text to follow
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
792 on the same line as the brace. Also, @code{substatement-open},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
793 @code{extern-lang-open}, and @code{inexpr-class-open} braces should hang
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
794 on the right side, but subsequent text should follow on the next line.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
795 The opposite holds for @code{inexpr-class-close} braces; they won't
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
796 hang, but the following text continues on the same line. Here, in the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
797 @code{block-close} entry, you also see an example of using a function as
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
798 an @var{action}. In all other cases, braces are put on a line by
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
799 themselves.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
800 @end defopt
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
801
Dave Love <fx@gnu.org>
parents:
diff changeset
802
Dave Love <fx@gnu.org>
parents:
diff changeset
803 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
804 @node Hanging Colons, Hanging Semicolons and Commas, Hanging Braces, Auto-newline Insertion
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
805 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
806 @subsection Hanging Colons
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
807 @cindex hanging colons
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
808 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
809
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
810 Using a mechanism similar to brace hanging (@pxref{Hanging Braces}),
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
811 colons can also be made to hang using the style variable
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
812 @code{c-hanging-colons-alist}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
813
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
814 @defopt c-hanging-colons-alist
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
815 @vindex hanging-colons-alist (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
816
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
817 The syntactic symbols appropriate for this association list are:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
818 @code{case-label}, @code{label}, @code{access-label},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
819 @code{member-init-intro}, and @code{inher-intro}. Note however that for
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
820 @code{c-hanging-colons-alist}, @var{action}s as functions are not
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
821 supported. See also @ref{Custom Brace and Colon Hanging} for details.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
822
Dave Love <fx@gnu.org>
parents:
diff changeset
823 In C++, double-colons are used as a scope operator but because these
Dave Love <fx@gnu.org>
parents:
diff changeset
824 colons always appear right next to each other, newlines before and after
Dave Love <fx@gnu.org>
parents:
diff changeset
825 them are controlled by a different mechanism, called @dfn{clean-ups} in
26490
2b08d829af86 Fix complaints from makeinfo 4.0.
Eli Zaretskii <eliz@gnu.org>
parents: 25829
diff changeset
826 @ccmode{}. @xref{Clean-ups}, for details.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
827 @end defopt
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
828
Dave Love <fx@gnu.org>
parents:
diff changeset
829
Dave Love <fx@gnu.org>
parents:
diff changeset
830 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
831 @node Hanging Semicolons and Commas, Other Electric Commands, Hanging Colons, Auto-newline Insertion
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
832 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
833 @subsection Hanging Semicolons and Commas
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
834 @cindex hanging semicolons
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
835 @cindex hanging commas
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
836 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
837
Dave Love <fx@gnu.org>
parents:
diff changeset
838 Semicolons and commas are also electric in @ccmode{}, but since
Dave Love <fx@gnu.org>
parents:
diff changeset
839 these characters do not correspond directly to syntactic symbols, a
Dave Love <fx@gnu.org>
parents:
diff changeset
840 different mechanism is used to determine whether newlines should be
Dave Love <fx@gnu.org>
parents:
diff changeset
841 automatically inserted after these characters. @xref{Customizing
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
842 Semicolons and Commas}, for details.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
843
Dave Love <fx@gnu.org>
parents:
diff changeset
844
Dave Love <fx@gnu.org>
parents:
diff changeset
845 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
846 @node Other Electric Commands, Clean-ups, Hanging Semicolons and Commas, Auto-newline Insertion
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
847 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
848 @subsection Other Electric Commands
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
849 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
850
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
851 A few other keys also provide electric behavior, often only to reindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
852 the line. Common to all of them is that they only reindent if used in
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
853 normal code (as opposed to in a string literal or comment), and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
854 @code{c-syntactic-indentation} isn't @code{nil}. They are:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
855
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
856 @table @kbd
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
857 @item #
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
858 @kindex #
Dave Love <fx@gnu.org>
parents:
diff changeset
859 @findex c-electric-pound
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
860 @findex electric-pound (c-)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
861 @vindex c-electric-pound-behavior
Dave Love <fx@gnu.org>
parents:
diff changeset
862 @vindex electric-pound-behavior (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
863 Pound (bound to @code{c-electric-pound}) is electric when typed as the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
864 first non-whitespace character on a line and not within a macro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
865 definition. In this case, the variable @code{c-electric-pound-behavior}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
866 is consulted for the electric behavior. This variable takes a list
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
867 value, although the only element currently defined is @code{alignleft},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
868 which tells this command to force the @samp{#} character into column
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
869 zero. This is useful for entering preprocessor macro definitions.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
870
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
871 Pound is not electric in AWK buffers, where @samp{#} starts a comment,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
872 and is bound to @code{self-insert-command} like any typical printable
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
873 character.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
874
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
875 @item *
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
876 @kindex *
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
877 @itemx /
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
878 @kindex /
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
879 @findex c-electric-star
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
880 @findex electric-star (c-)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
881 @findex c-electric-slash
Dave Love <fx@gnu.org>
parents:
diff changeset
882 @findex electric-slash (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
883 Stars and slashes (bound to @code{c-electric-star} and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
884 @code{c-electric-slash} respectively) are also electric under certain
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
885 circumstances. If a @samp{*} is inserted as the second character of a C
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
886 style block comment on a comment-only line, then the comment delimiter
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
887 is indented as defined by @code{c-offsets-alist}. A comment-only line
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
888 is defined as a line which contains only a comment, as in:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
889
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
890 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
891 @group
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47737
diff changeset
892 void spam( int i )
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
893 @{
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
894 // this is a comment-only line...
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
895 if( i == 7 ) // but this is not
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
896 @{
Dave Love <fx@gnu.org>
parents:
diff changeset
897 dosomething(i);
Dave Love <fx@gnu.org>
parents:
diff changeset
898 @}
Dave Love <fx@gnu.org>
parents:
diff changeset
899 @}
Dave Love <fx@gnu.org>
parents:
diff changeset
900 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
901 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
902
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
903 Likewise, if a @samp{/} is inserted as the second slash in a C++ style
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
904 line comment (also only on a comment-only line), then the line is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
905 indented as defined by @code{c-offsets-alist}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
906
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
907 In AWK mode, @samp{*} and @samp{/} do not delimit comments and are
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
908 bound to @code{self-insert-command}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
909
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
910 @item <
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
911 @kindex <
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
912 @itemx >
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
913 @kindex >
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
914 @findex c-electric-lt-gt
Dave Love <fx@gnu.org>
parents:
diff changeset
915 @findex electric-lt-gt (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
916 Less-than and greater-than signs (bound to @code{c-electric-lt-gt}) are
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
917 electric, but only in C++ mode. Hitting the second of two @kbd{<} or
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
918 @kbd{>} keys reindents the line if it is a C++ style stream operator.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
919
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
920 @item (
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
921 @kindex (
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
922 @itemx )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
923 @kindex )
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
924 @findex c-electric-paren
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
925 @findex electric-paren (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
926 The normal parenthesis characters @samp{(} and @samp{)} reindent the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
927 current line. This is useful for getting the closing parenthesis of an
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
928 argument list aligned automatically.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
929 @end table
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
930
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
931 @deffn Command c-electric-continued-statement
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
932 @findex electric-continued-statement (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
933
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
934 Certain keywords, depending on language, are electric to cause
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
935 reindentation when they are preceded only by whitespace on the line.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
936 The keywords are those that continue an earlier statement instead of
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
937 starting a new one: @code{else}, @code{while}, @code{catch} (only in C++
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
938 and Java) and @code{finally} (only in Java).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
939
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
940 An example:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
941
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
942 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
943 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
944 for (i = 0; i < 17; i++)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
945 if (a[i])
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
946 res += a[i]->offset;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
947 else
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
948 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
949 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
950
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
951 Here, the @code{else} should be indented like the preceding @code{if},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
952 since it continues that statement. @ccmode{} will automatically reindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
953 it after the @code{else} has been typed in full, since it's not until
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
954 then it's possible to decide whether it's a new statement or a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
955 continuation of the preceding @code{if}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
956
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
957 @vindex abbrev-mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
958 @findex abbrev-mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
959 @cindex Abbrev mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
960 @ccmode{} uses Abbrev mode (@pxref{Abbrevs,,, emacs, The Emacs Editor})
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
961 to accomplish this. It's therefore turned on by default in all language
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
962 modes except IDL mode, since CORBA IDL doesn't have any statements.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
963 @end deffn
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
964
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
965
Dave Love <fx@gnu.org>
parents:
diff changeset
966 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
967 @node Clean-ups, , Other Electric Commands, Auto-newline Insertion
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
968 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
969 @subsection Clean-ups
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
970 @cindex clean-ups
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
971 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
972
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
973 @dfn{Clean-ups} are mechanisms complementary to colon and brace hanging.
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
974 On the surface, it would seem that clean-ups overlap the functionality
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
975 provided by the @code{c-hanging-*-alist} variables. Clean-ups are
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
976 however used to adjust code ``after-the-fact,'' i.e., to adjust the
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
977 whitespace in constructs after they are typed.
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
978
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
979 Most of the clean-ups are only applicable to counteract automatically
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
980 inserted newlines, and will therefore only have any effect if the
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
981 auto-newline minor mode is turned on. Others will work all the time.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
982
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
983 @defopt c-cleanup-list
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
984 @vindex cleanup-list (c-)
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
985 @cindex literal
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
986
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
987 You can configure @ccmode{}'s clean-ups by setting the style variable
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
988 @code{c-cleanup-list}, which is a list of clean-up symbols. By default,
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
989 @ccmode{} cleans up only the @code{scope-operator} construct, which is
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
990 necessary for proper C++ support. Note that clean-ups are only
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
991 performed when the construct does not occur within a literal
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
992 (@pxref{Auto-newline Insertion}), and when there is nothing but
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
993 whitespace appearing between the individual components of the construct.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
994 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
995
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
996 These are the clean-ups that are only active in the auto-newline minor
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
997 mode:
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
998
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
999 @c TBD: Would like to use some sort of @deffoo here; @table indents a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1000 @c bit too much in dvi output.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1001 @table @code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1002 @item brace-else-brace
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1003 Clean up @samp{@} else @{} constructs by placing the entire construct on
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1004 a single line. Clean-up occurs when the open brace after the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1005 @samp{else} is typed. So for example, this:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1006
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1007 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
1008 @group
Dave Love <fx@gnu.org>
parents:
diff changeset
1009 void spam(int i)
Dave Love <fx@gnu.org>
parents:
diff changeset
1010 @{
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1011 if( i==7 ) @{
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1012 dosomething();
Dave Love <fx@gnu.org>
parents:
diff changeset
1013 @}
Dave Love <fx@gnu.org>
parents:
diff changeset
1014 else
Dave Love <fx@gnu.org>
parents:
diff changeset
1015 @{
Dave Love <fx@gnu.org>
parents:
diff changeset
1016 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
1017 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1018
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1019 @noindent
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1020 appears like this after the last open brace is typed:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1021
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1022 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
1023 @group
Dave Love <fx@gnu.org>
parents:
diff changeset
1024 void spam(int i)
Dave Love <fx@gnu.org>
parents:
diff changeset
1025 @{
Dave Love <fx@gnu.org>
parents:
diff changeset
1026 if( i==7 ) @{
Dave Love <fx@gnu.org>
parents:
diff changeset
1027 dosomething();
Dave Love <fx@gnu.org>
parents:
diff changeset
1028 @} else @{
Dave Love <fx@gnu.org>
parents:
diff changeset
1029 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
1030 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
1031
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1032 @item brace-elseif-brace
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1033 Similar to the @code{brace-else-brace} clean-up, but this cleans up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1034 @samp{@} else if (...) @{} constructs. For example:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1035
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1036 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
1037 @group
Dave Love <fx@gnu.org>
parents:
diff changeset
1038 void spam(int i)
Dave Love <fx@gnu.org>
parents:
diff changeset
1039 @{
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1040 if( i==7 ) @{
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1041 dosomething();
Dave Love <fx@gnu.org>
parents:
diff changeset
1042 @}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1043 else if( i==3 )
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1044 @{
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1045 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
1046 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1047
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1048 @noindent
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1049 appears like this after the last open parenthesis is typed:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1050
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1051 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1052 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1053 void spam(int i)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1054 @{
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1055 if( i==7 ) @{
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1056 dosomething();
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1057 @} else if( i==3 )
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1058 @{
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1059 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1060 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1061
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1062 @noindent
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1063 and like this after the last open brace is typed:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1064
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1065 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
1066 @group
Dave Love <fx@gnu.org>
parents:
diff changeset
1067 void spam(int i)
Dave Love <fx@gnu.org>
parents:
diff changeset
1068 @{
Dave Love <fx@gnu.org>
parents:
diff changeset
1069 if( i==7 ) @{
Dave Love <fx@gnu.org>
parents:
diff changeset
1070 dosomething();
Dave Love <fx@gnu.org>
parents:
diff changeset
1071 @} else if( i==3 ) @{
Dave Love <fx@gnu.org>
parents:
diff changeset
1072 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
1073 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
1074
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1075 @item brace-catch-brace
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1076 Analogous to @code{brace-elseif-brace}, but cleans up @samp{@} catch
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1077 (...) @{} in C++ and Java mode.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1078
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1079 @item empty-defun-braces
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1080 Clean up braces following a top-level function or class definition that
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1081 contains no body. Clean up occurs when the closing brace is typed.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1082 Thus the following:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1083
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1084 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
1085 @group
Dave Love <fx@gnu.org>
parents:
diff changeset
1086 class Spam
Dave Love <fx@gnu.org>
parents:
diff changeset
1087 @{
Dave Love <fx@gnu.org>
parents:
diff changeset
1088 @}
Dave Love <fx@gnu.org>
parents:
diff changeset
1089 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
1090 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1091
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1092 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
1093 is transformed into this when the close brace is typed:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1094
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1095 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
1096 @group
Dave Love <fx@gnu.org>
parents:
diff changeset
1097 class Spam
Dave Love <fx@gnu.org>
parents:
diff changeset
1098 @{@}
Dave Love <fx@gnu.org>
parents:
diff changeset
1099 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
1100 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
1101
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1102 @item defun-close-semi
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1103 Clean up the terminating semicolon on top-level function or class
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1104 definitions when they follow a close brace. Clean up occurs when the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1105 semicolon is typed. So for example, the following:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1106
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1107 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
1108 @group
Dave Love <fx@gnu.org>
parents:
diff changeset
1109 class Spam
Dave Love <fx@gnu.org>
parents:
diff changeset
1110 @{
Dave Love <fx@gnu.org>
parents:
diff changeset
1111 @}
Dave Love <fx@gnu.org>
parents:
diff changeset
1112 ;
Dave Love <fx@gnu.org>
parents:
diff changeset
1113 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
1114 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1115
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1116 @noindent
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1117 is transformed into this when the semicolon is typed:
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1118
Dave Love <fx@gnu.org>
parents:
diff changeset
1119 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
1120 @group
Dave Love <fx@gnu.org>
parents:
diff changeset
1121 class Spam
Dave Love <fx@gnu.org>
parents:
diff changeset
1122 @{
Dave Love <fx@gnu.org>
parents:
diff changeset
1123 @};
Dave Love <fx@gnu.org>
parents:
diff changeset
1124 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
1125 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
1126
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1127 @item list-close-comma
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1128 Clean up commas following braces in array and aggregate initializers.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1129 Clean up occurs when the comma is typed.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1130
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1131 @item scope-operator
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1132 Clean up double colons which may designate a C++ scope operator split
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1133 across multiple lines@footnote{Certain C++ constructs introduce
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1134 ambiguous situations, so @code{scope-operator} clean-ups may not always
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1135 be correct. This usually only occurs when scoped identifiers appear in
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1136 switch label tags.}. Clean up occurs when the second colon is typed.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1137 You will always want @code{scope-operator} in the @code{c-cleanup-list}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1138 when you are editing C++ code.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1139 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1140
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
1141 The following clean-ups are always active when they occur on
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
1142 @code{c-cleanup-list}, and are thus not affected by the auto-newline
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
1143 minor mode:
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
1144
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1145 @table @code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1146 @item space-before-funcall
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1147 Insert a space between the function name and the opening parenthesis of
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1148 a function call. This produces function calls in the style mandated by
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1149 the GNU coding standards, e.g., @samp{signal (SIGINT, SIG_IGN)} and
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1150 @samp{abort ()}. Clean up occurs when the opening parenthesis is typed.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1151
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1152 @item compact-empty-funcall
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1153 Clean up any space between the function name and the opening parenthesis
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1154 of a function call that has no arguments. This is typically used
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1155 together with @code{space-before-funcall} if you prefer the GNU function
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1156 call style for functions with arguments but think it looks ugly when
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1157 it's only an empty parenthesis pair. I.e., you will get @samp{signal
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1158 (SIGINT, SIG_IGN)}, but @samp{abort()}. Clean up occurs when the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1159 closing parenthesis is typed.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1160 @end table
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
1161
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1162
Dave Love <fx@gnu.org>
parents:
diff changeset
1163 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1164 @node Hungry-deletion of Whitespace, , Auto-newline Insertion, Minor Modes
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1165 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1166 @section Hungry-deletion of Whitespace
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1167 @cindex hungry-deletion
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1168 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
1169
Dave Love <fx@gnu.org>
parents:
diff changeset
1170 Hungry deletion of whitespace, or as it more commonly called,
Dave Love <fx@gnu.org>
parents:
diff changeset
1171 @dfn{hungry-delete mode}, is a simple feature that some people find
Dave Love <fx@gnu.org>
parents:
diff changeset
1172 extremely useful. In fact, you might find yourself wanting
Dave Love <fx@gnu.org>
parents:
diff changeset
1173 hungry-delete in @strong{all} your editing modes!
Dave Love <fx@gnu.org>
parents:
diff changeset
1174
Dave Love <fx@gnu.org>
parents:
diff changeset
1175 @kindex DEL
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1176 @kindex C-d
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1177
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1178 In a nutshell, when hungry-delete mode is enabled, hitting the @kbd{DEL}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1179 or @kbd{C-d} keys will consume all preceding or following whitespace,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1180 including newlines and tabs. This can really cut down on the number of
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1181 times you have to hit these keys if, for example, you made a mistake on
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1182 the preceding line.
Dave Love <fx@gnu.org>
parents:
diff changeset
1183
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1184 @deffn Command c-electric-backspace
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1185 @findex electric-backspace (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1186 This command is run by default when you hit the @kbd{DEL} key. It
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1187 deletes any amount of whitespace in the backwards direction if
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1188 hungry-delete mode is enabled. When it's disabled, or when used with
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1189 a prefix argument or in a literal (@pxref{Auto-newline Insertion}),
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1190 the function contained in the @code{c-backspace-function} variable is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1191 called with the prefix argument.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1192 @end deffn
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1193
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1194 @defvar c-backspace-function
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1195 @vindex backspace-function (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1196 @findex backward-delete-char-untabify
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1197 Hook that gets called by @code{c-electric-backspace} when it doesn't
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1198 do an ``electric'' deletion of the preceding whitespace. The default
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1199 value is @code{backward-delete-char-untabify}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1200 @end defvar
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1201
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1202 @deffn Command c-electric-delete-forward
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1203 @findex electric-delete-forward (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1204 This function, which is bound to @kbd{C-d} by default, works just like
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1205 @code{c-electric-backspace} but in the forward direction. When it
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1206 doesn't do an ``electric'' deletion of the following whitespace, it
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1207 calls the function in @code{c-delete-function} with its prefix
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1208 argument.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1209 @end deffn
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1210
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1211 @defvar c-delete-function
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1212 @vindex delete-function (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1213 @findex delete-char
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1214 Hook that gets called by @code{c-electric-delete-forward} when it
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1215 doesn't do an ``electric'' deletion of the following whitespace. The
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1216 default value is @code{delete-char}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1217 @end defvar
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1218
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1219 Above we have only talked about the @kbd{DEL} and @kbd{C-d} key events,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1220 without connecting them to the physical keys commonly known as
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1221 @key{Backspace} and @key{Delete}. The default behavior of those two
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1222 depends on the flavor of (X)Emacs you are using.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1223
Dave Love <fx@gnu.org>
parents:
diff changeset
1224 @findex c-electric-delete
Dave Love <fx@gnu.org>
parents:
diff changeset
1225 @findex electric-delete (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
1226 @vindex delete-key-deletes-forward
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1227
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1228 In XEmacs 20.3 and beyond, the @key{Backspace} key is bound to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1229 @code{c-electric-backspace} and the @key{Delete} key is bound to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1230 @code{c-electric-delete}. You control the direction it deletes in by
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1231 setting the variable @code{delete-key-deletes-forward}, a standard
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1232 XEmacs variable. When this variable is non-@code{nil},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1233 @code{c-electric-delete} will do forward deletion with
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1234 @code{c-electric-delete-forward}, otherwise it does backward deletion
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1235 with @code{c-electric-backspace}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1236
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1237 In other Emacs versions, @ccmode{} doesn't bind either @key{Backspace}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1238 or @key{Delete}. In XEmacs 19 and Emacs prior to 21 that means that
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1239 it's up to you to fix them. Emacs 21 automatically binds them as
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1240 appropriate to @kbd{DEL} and @kbd{C-d}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1241
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1242 Another way to use hungry deletion is to bind
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1243 @code{c-hungry-backspace} and @code{c-hungry-delete-forward} directly
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1244 to keys, and not use the mode toggling. For example @kbd{C-c C-d} and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1245 @kbd{C-c DEL} to match plain @kbd{C-d} and @kbd{DEL},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1246
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1247 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1248 (add-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1249 'c-mode-common-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1250 (lambda ()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1251 (define-key c-mode-base-map
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1252 [?\C-c ?\d] 'c-hungry-backspace)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1253 (define-key c-mode-base-map
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1254 [?\C-c ?\C-d] 'c-hungry-delete-forward)))
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1255 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1256
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1257 @deffn Command c-hungry-backspace
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1258 @findex hungry-backspace (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1259 Delete any amount of whitespace in the backwards direction (regardless
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1260 whether hungry-delete mode is enabled or not).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1261 @end deffn
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1262
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1263 @deffn Command c-hungry-delete-forward
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1264 @findex hungry-delete-forward (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1265 Delete any amount of whitespace in the forward direction (regardless
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1266 whether hungry-delete mode is enabled or not).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1267 @end deffn
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1268
Dave Love <fx@gnu.org>
parents:
diff changeset
1269
Dave Love <fx@gnu.org>
parents:
diff changeset
1270 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1271 @node Text Filling and Line Breaking, Macro Handling, Minor Modes, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1272 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1273 @chapter Text Filling and Line Breaking
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1274 @cindex text filling
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1275 @cindex line breaking
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1276 @cindex comment handling
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1277 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
1278
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1279 Since there's a lot of normal text in comments and string literals,
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1280 @ccmode{} provides features to edit these like in text mode. The goal
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1281 is to do it as seamlessly as possible, i.e., you can use auto fill mode,
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1282 sentence and paragraph movement, paragraph filling, adaptive filling etc
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1283 wherever there's a piece of normal text without having to think much
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1284 about it. @ccmode{} should keep the indentation, fix the comment line
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1285 decorations, and so on, for you. It does that by hooking in on the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1286 different line breaking functions and tuning relevant variables as
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1287 necessary.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1288
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1289 @vindex c-comment-prefix-regexp
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1290 @vindex comment-prefix-regexp (c-)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1291 @cindex comment line prefix
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1292 @vindex comment-start
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1293 @vindex comment-end
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1294 @vindex comment-start-skip
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1295 @vindex paragraph-start
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1296 @vindex paragraph-separate
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1297 @vindex paragraph-ignore-fill-prefix
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1298 @vindex adaptive-fill-mode
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1299 @vindex adaptive-fill-regexp
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1300 @vindex adaptive-fill-first-line-regexp
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1301 To make Emacs recognize comments and treat text in them as normal
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1302 paragraphs, @ccmode{} makes several standard
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1303 variables@footnote{@code{comment-start}, @code{comment-end},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1304 @code{comment-start-skip}, @code{paragraph-start},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1305 @code{paragraph-separate}, @code{paragraph-ignore-fill-prefix},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1306 @code{adaptive-fill-mode}, @code{adaptive-fill-regexp}, and
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1307 @code{adaptive-fill-first-line-regexp}.} buffer local and modifies them
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1308 according to the language syntax and the comment line prefix.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1309
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1310 @defopt c-comment-prefix-regexp
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1311 @vindex comment-prefix-regexp (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1312 This style variable contains the regexp used to recognize the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1313 @dfn{comment line prefix}, which is the line decoration that starts
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1314 every line in a comment. The default is @samp{//+\\|\\**}, which
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1315 matches C++ style line comments like
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1316
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1317 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1318 // blah blah
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1319 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1320
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1321 @noindent
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1322 with two or more slashes in front of them, and C style block comments
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1323 like
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1324
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1325 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1326 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1327 /*
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1328 * blah blah
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1329 */
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1330 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1331 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1332
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1333 @noindent
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1334 with zero or more stars at the beginning of every line. If you change
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1335 this variable, please make sure it still matches the comment starter
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1336 (i.e., @code{//}) of line comments @emph{and} the line prefix inside
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1337 block comments.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1338
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1339 @findex c-setup-paragraph-variables
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1340 @findex setup-paragraph-variables (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1341 Also note that since @ccmode{} uses the value of
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1342 @code{c-comment-prefix-regexp} to set up several other variables at mode
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
1343 initialization, there won't be any effect if you just change it inside a
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1344 @ccmode{} buffer. You need to call the command
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
1345 @code{c-setup-paragraph-variables} too, to update those other variables with
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1346 the new value. That's also the case if you modify this variable in a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1347 mode hook, since @ccmode{} sets up all variables before calling them.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1348 @end defopt
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1349
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1350 @findex auto-fill-mode
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1351 @cindex Auto Fill mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1352 @cindex paragraph filling
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1353 Line breaks are by default handled (almost) the same regardless whether
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1354 they are made by auto fill mode (@pxref{Auto Fill,,, emacs, The Emacs
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1355 Editor}), paragraph filling (e.g., with @kbd{M-q}), or explicitly with
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1356 @kbd{M-j} or similar methods. In string literals, the new line gets the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1357 same indentation as the previous nonempty line (may be changed with the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1358 @code{string} syntactic symbol). In comments, @ccmode{} uses
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1359 @code{c-comment-prefix-regexp} to adapt the line prefix from the other
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1360 lines in the comment.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1361
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1362 @vindex adaptive-fill-mode
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1363 @cindex Adaptive Fill mode
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1364 @ccmode{} uses adaptive fill mode (@pxref{Adaptive Fill,,, emacs, The
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1365 Emacs Editor}) to make Emacs correctly keep the line prefix when filling
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1366 paragraphs. That also makes Emacs preserve the text indentation
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1367 @emph{inside} the comment line prefix. e.g., in the following comment,
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1368 both paragraphs will be filled with the left margins of the texts kept
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1369 intact:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1370
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1371 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1372 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1373 /* Make a balanced b-tree of the nodes in the incoming
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1374 * stream. But, to quote the famous words of Donald E.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1375 * Knuth,
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1376 *
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1377 * Beware of bugs in the above code; I have only
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1378 * proved it correct, not tried it.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1379 */
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1380 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1381 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1382
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1383 @findex c-setup-filladapt
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1384 @findex setup-filladapt (c-)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1385 @findex filladapt-mode
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1386 @vindex filladapt-mode
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1387 @cindex Filladapt mode
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1388 It's also possible to use other adaptive filling packages, notably Kyle
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1389 E. Jones' Filladapt package@footnote{It's available from
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1390 @uref{http://www.wonderworks.com/}. As of version 2.12, it does however
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1391 lack a feature that makes it work suboptimally when
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1392 @code{c-comment-prefix-regexp} matches the empty string (which it does
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1393 by default). A patch for that is available from
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1394 @uref{http://cc-mode.sourceforge.net/,, the CC Mode web site}.},
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1395 which handles things like bulleted lists nicely. There's a convenience
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1396 function @code{c-setup-filladapt} that tunes the relevant variables in
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1397 Filladapt for use in @ccmode{}. Call it from a mode hook, e.g., with
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1398 something like this in your @file{.emacs}:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1399
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1400 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1401 (defun my-c-mode-common-hook ()
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1402 (c-setup-filladapt)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1403 (filladapt-mode 1))
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1404 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1405 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1406
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1407 @defopt c-block-comment-prefix
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1408 @vindex block-comment-prefix (c-)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1409 @vindex c-comment-continuation-stars
Dave Love <fx@gnu.org>
parents:
diff changeset
1410 @vindex comment-continuation-stars (c-)
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1411 Normally the comment line prefix inserted for a new line inside a
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1412 comment is deduced from other lines in it. However there's one
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1413 situation when there's no hint about what the prefix should look like,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1414 namely when a block comment is broken for the first time. This style
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1415 variable@footnote{In versions before 5.26, this variable was called
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1416 @code{c-comment-continuation-stars}. As a compatibility measure,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1417 @ccmode{} still uses the value on that variable if it's set.} is used
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
1418 then as the comment prefix. It defaults to @samp{*
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
1419 }@footnote{Actually, this default setting of
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
1420 @code{c-block-comment-prefix} typically gets overriden by the default
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
1421 style @code{gnu}, which sets it to blank. You can see the line
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
1422 splitting effect described here by setting a different style,
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
1423 e.g. @code{k&r} @xref{Choosing a Style}}, which makes a comment
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1424
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1425 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1426 /* Got O(n^2) here, which is a Bad Thing. */
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1427 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1428
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1429 @noindent
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1430 break into
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1431
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1432 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1433 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1434 /* Got O(n^2) here,
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1435 * which is a Bad Thing. */
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1436 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1437 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1438
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1439 Note that it won't work to adjust the indentation by putting leading
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1440 spaces in @code{c-block-comment-prefix}, since @ccmode{} still uses the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1441 normal indentation engine to indent the line. Thus, the right way to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1442 fix the indentation is by customizing the @code{c} syntactic symbol. It
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1443 defaults to @code{c-lineup-C-comments}, which handles the indentation of
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1444 most common comment styles, see @ref{Indentation Functions}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1445 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1446
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1447 @defopt c-ignore-auto-fill
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1448 @vindex ignore-auto-fill (c-)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1449 When auto fill mode is enabled, @ccmode{} can selectively ignore it
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1450 depending on the context the line break would occur in, e.g., to never
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1451 break a line automatically inside a string literal. This variable
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1452 takes a list of symbols for the different contexts where auto-filling
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1453 never should occur:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1454
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1455 @table @code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1456 @item string
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1457 Inside a string or character literal.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1458 @item c
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1459 Inside a C style block comment.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1460 @item c++
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1461 Inside a C++ style line comment.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1462 @item cpp
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1463 Inside a preprocessor directive.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1464 @item code
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1465 Anywhere else, i.e., in normal code.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1466 @end table
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1467
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1468 By default, @code{c-ignore-auto-fill} is set to @code{'(string cpp
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1469 code)}, which means that auto-filling only occurs in comments when
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1470 auto-fill mode is activated. In literals, it's often desirable to have
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1471 explicit control over newlines. In preprocessor directives, the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1472 necessary @samp{\} escape character before the newline is not
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1473 automatically inserted, so an automatic line break would produce invalid
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1474 code. In normal code, line breaks are normally dictated by some logical
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1475 structure in the code rather than the last whitespace character, so
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1476 automatic line breaks there will produce poor results in the current
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1477 implementation.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1478 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1479
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1480 The commands that do the actual work follow.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1481
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1482 @table @asis
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1483 @item @kbd{M-q} (@code{c-fill-paragraph})
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1484 @kindex M-q
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1485 @findex c-fill-paragraph
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1486 @findex fill-paragraph (c-)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1487 @cindex Javadoc markup
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
1488 @cindex Pike autodoc markup
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1489 This is the replacement for @code{fill-paragraph} in @ccmode{}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1490 buffers. It's used to fill multiline string literals and both block and
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1491 line style comments. In Java buffers, the Javadoc markup words are
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
1492 recognized as paragraph starters. The line oriented Pike autodoc markup
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
1493 words are recognized in the same way in Pike mode.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1494
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1495 The function keeps the comment starters and enders of block comments as
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1496 they were before the filling. This means that a comment ender on the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1497 same line as the paragraph being filled will be filled with the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1498 paragraph, and one on a line by itself will stay as it is. The comment
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1499 starter is handled similarly@footnote{This means that the variables
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1500 @code{c-hanging-comment-starter-p} and @code{c-hanging-comment-ender-p},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1501 which controlled this behavior in earlier versions of @ccmode{}, are now
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1502 obsolete.}.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1503
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1504 @item @kbd{M-j} (@code{c-indent-new-comment-line})
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1505 @kindex M-j
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1506 @findex c-indent-new-comment-line
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1507 @findex indent-new-comment-line (c-)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1508 This is the replacement for @code{indent-new-comment-line}. It breaks
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1509 the line at point and indents the new line like the current one.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1510
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1511 @vindex comment-multi-line
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1512 If inside a comment and @code{comment-multi-line} is non-@code{nil}, the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1513 indentation and line prefix are preserved. If inside a comment and
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1514 @code{comment-multi-line} is @code{nil}, a new comment of the same type
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1515 is started on the next line and indented as appropriate for comments.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1516
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1517 Note that @ccmode{} sets @code{comment-multi-line} to @code{t} at
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1518 startup. The reason is that @kbd{M-j} could otherwise produce sequences
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1519 of single line block comments for texts that should logically be treated
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1520 as one comment, and the rest of the paragraph handling code
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1521 (e.g., @kbd{M-q} and @kbd{M-a}) can't cope with that, which would lead to
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1522 inconsistent behavior.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1523
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1524 @item @kbd{M-x c-context-line-break}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1525 @findex c-context-line-break
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1526 @findex context-line-break (c-)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1527 This is a function that works like @code{indent-new-comment-line} in
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1528 comments and @code{newline-and-indent} elsewhere, thus combining those
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1529 two in a way that uses each one in the context it's best suited for.
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1530 I.e., in comments the comment line prefix and indentation is kept for
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1531 the new line, and in normal code it's indented according to context by
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1532 the indentation engine.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1533
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1534 In macros it acts like @code{newline-and-indent} but additionally
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1535 inserts and optionally aligns the line ending backslash so that the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1536 macro remains unbroken. @xref{Macro Handling}, for details about the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1537 backslash alignment.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1538
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1539 It's not bound to a key by default, but it's intended to be used on the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1540 @kbd{RET} key. If you like the behavior of @code{newline-and-indent} on
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1541 @kbd{RET}, you should consider switching to this function.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1542
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1543 @item @kbd{M-x c-context-open-line}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1544 @findex c-context-open-line
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1545 @findex context-open-line (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1546 This is to @kbd{C-o} (@kbd{M-x open-line}) as
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1547 @code{c-context-line-break} is to @kbd{RET}. I.e., it works just like
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1548 @code{c-context-line-break} but leaves the point before the inserted
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1549 line break.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1550 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1551
Dave Love <fx@gnu.org>
parents:
diff changeset
1552
Dave Love <fx@gnu.org>
parents:
diff changeset
1553 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1554 @node Macro Handling, Font Locking, Text Filling and Line Breaking, Top
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1555 @comment node-name, next, previous, up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1556 @chapter Macro Handling
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1557 @cindex macros
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1558 @cindex preprocessor directives
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1559 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1560
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1561 Preprocessor directives are handled as syntactic whitespace from other
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1562 code, i.e., they can be interspersed anywhere without affecting the
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1563 syntactic analysis, just like comments.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1564
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1565 The code inside macro definitions is still analyzed syntactically so
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1566 that you get relative indentation there just as you'd get if the same
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1567 code was outside a macro. However, since there is no hint about the
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1568 syntactic context, i.e., whether the macro expands to an expression, to some
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1569 statements, or perhaps to whole functions, the syntactic recognition can be
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1570 wrong. @ccmode{} manages to figure it out correctly most of the time,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1571 though. @xref{Syntactic Symbols}, for details about the indentation.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1572
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1573 @defopt c-syntactic-indentation-in-macros
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1574 @vindex syntactic-indentation-in-macros (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1575 Enable syntactic analysis inside macros, which is the default. If this
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1576 is @code{nil}, all lines inside macro definitions are analyzed as
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1577 @code{cpp-macro-cont}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1578 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1579
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1580 @ccmode{} provides some tools to help keep the line continuation
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1581 backslashes in macros neat and tidy:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1582
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1583 @table @asis
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1584 @item @kbd{C-c C-\} (@code{c-backslash-region})
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1585 @kindex C-c C-\
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1586 @findex c-backslash-region
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1587 @findex backslash-region (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1588 This function inserts and aligns or deletes the end-of-line backslashes
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1589 in the current region.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1590
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1591 With no prefix argument, it inserts any missing backslashes and aligns
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1592 them according to the @code{c-backslash-column} and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1593 @code{c-backslash-max-column} variables. With a prefix argument, it
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1594 deletes any backslashes.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1595
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1596 The function does not modify blank lines at the start of the region. If
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1597 the region ends at the start of a line, it always deletes the backslash
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1598 (if any) at the end of the previous line.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1599 @end table
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1600
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1601 @defopt c-backslash-column
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1602 @vindex backslash-column (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1603 @defoptx c-backslash-max-column
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1604 @vindex backslash-max-column (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1605 These variables control the alignment columns for line continuation
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1606 backslashes in multiline macros. They are used by the functions that
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1607 automatically insert or align such backslashes,
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1608 e.g., @code{c-backslash-region} and @code{c-context-line-break}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1609
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1610 @code{c-backslash-column} specifies the minimum column for the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1611 backslashes. If any line in the macro exceeds it then the next tab
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1612 stop from that line is used as the alignment column for all the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1613 backslashes, so that they remain in a single column. However, if some
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1614 lines exceed @code{c-backslash-max-column} then the backslashes in the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1615 rest of the macro will be kept at that column, so that the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1616 lines which are too long ``stick out'' instead.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1617 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1618
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1619 @defopt c-auto-align-backslashes
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1620 @vindex auto-align-backslashes (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1621 Align automatically inserted line continuation backslashes if
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1622 non-@code{nil}. When line continuation backslashes are inserted
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1623 automatically for line breaks in multiline macros, e.g., by
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1624 @code{c-context-line-break}, they are aligned with the other backslashes
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1625 in the same macro if this flag is set. Otherwise the inserted
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1626 backslashes are preceded by a single space.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1627 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1628
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1629 The recommended line breaking function, @code{c-context-line-break}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1630 (@pxref{Text Filling and Line Breaking}), is especially nice if you edit
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1631 multiline macros frequently. When used inside a macro, it automatically
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1632 inserts and adjusts the mandatory backslash at the end of the line to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1633 keep the macro together, and it leaves the point at the right
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1634 indentation column for the code. Thus you can write code inside macros
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1635 almost exactly as you can elsewhere, without having to bother with the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1636 trailing backslashes.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1637
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1638
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1639 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1640 @node Font Locking, Commands, Macro Handling, Top
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1641 @comment node-name, next, previous, up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1642 @chapter Font Locking
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1643 @cindex font locking
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1644 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1645
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1646 @strong{Note:} The font locking in AWK mode is currently not integrated
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1647 with the rest of @ccmode{}, so this section does not apply there.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1648 @xref{AWK Mode Font Locking}, instead.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1649
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1650 @cindex Font Lock mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1651
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1652 @ccmode{} provides font locking for its supported languages by supplying
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1653 patterns for use with Font Lock mode. This means that you get distinct
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1654 faces on the various syntactic parts such as comments, strings, keywords
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1655 and types, which is very helpful in telling them apart at a glance and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1656 discovering syntactic errors. @xref{Font Lock,,, emacs, The Emacs
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1657 Editor}, for ways to enable font locking in @ccmode{} buffers.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1658
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1659 @menu
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1660 * Font Locking Preliminaries::
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1661 * Faces::
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1662 * Documentation Comments::
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1663 @end menu
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1664
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1665
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1666 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1667 @node Font Locking Preliminaries, Faces, , Font Locking
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1668 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1669 @section Font Locking Preliminaries
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1670 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1671
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1672 The font locking for most of the @ccmode{} languages were provided
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1673 directly by the Font Lock package prior to version 5.30 of @ccmode{}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1674 In the transition to @ccmode{} the patterns have been reworked
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1675 completely and are applied uniformly across all the languages except AWK
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1676 mode, just like the indentation rules (although each language still has
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1677 some pecularities of its own, of course). Since the languages
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1678 previously had completely separate font locking patterns, this means
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1679 that it's a bit different in most languages now.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1680
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1681 The main goal for the font locking in @ccmode{} is accuracy, to provide
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1682 a dependable aid in recognizing the various constructs. Some, like
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1683 strings and comments, are easy to recognize while others like
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1684 declarations and types can be very tricky. @ccmode{} can go to great
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1685 lengths to recognize declarations and casts correctly, especially when
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1686 the types aren't recognized by standard patterns. This is a fairly
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1687 demanding analysis which can be slow on older hardware, and it can
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1688 therefore be disabled by choosing a lower decoration level with the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1689 variable @code{font-lock-maximum-decoration}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1690
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1691 @vindex font-lock-maximum-decoration
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1692
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1693 The decoration levels are used as follows:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1694
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1695 @enumerate
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1696 @comment 1
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1697 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1698 Minimal font locking: Fontify only comments, strings and preprocessor
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1699 directives (in the languages that use cpp).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1700
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1701 @comment 2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1702 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1703 Fast normal font locking: In addition to level 1, fontify keywords,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1704 simple types and declarations that are easy to recognize. The variables
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1705 @code{*-font-lock-extra-types} (where @samp{*} is the name of the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1706 language) are used to recognize types (see below). Documentation
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1707 comments like Javadoc are fontified according to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1708 @code{c-doc-comment-style} (@pxref{Documentation Comments}).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1709
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1710 Use this if you think the font locking is too slow. It's the closest
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1711 corresponding level to level 3 in the old font lock patterns.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1712
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1713 @comment 3
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1714 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1715 Accurate normal font locking: Like level 2 but uses a different approach
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1716 that can recognize types and declarations much more accurately. The
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1717 @code{*-font-lock-extra-types} variables are still used, but user
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1718 defined types are recognized correctly anyway in most cases. Therefore
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1719 those variables should be fairly restrictive and not contain patterns
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1720 that are uncertain.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1721
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1722 @cindex Lazy Lock mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1723 @cindex Just-in-time Lock mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1724
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1725 This level is designed for fairly modern hardware and a font lock
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1726 support mode like Lazy Lock or Just-in-time Lock mode that only
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1727 fontifies the parts that are actually shown.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1728 @end enumerate
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1729
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1730 @cindex user defined types
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1731 @cindex types, user defined
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1732
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1733 Since user defined types are hard to recognize you can provide
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1734 additional regexps to match those you use:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1735
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1736 @defopt c-font-lock-extra-types
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1737 @defoptx c++-font-lock-extra-types
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1738 @defoptx objc-font-lock-extra-types
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1739 @defoptx java-font-lock-extra-types
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1740 @defoptx idl-font-lock-extra-types
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1741 @defoptx pike-font-lock-extra-types
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1742 For each language there's a variable @code{*-font-lock-extra-types},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1743 where @samp{*} stands for the language in question. It contains a list
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1744 of regexps that matches identifiers that should be recognized as types,
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1745 e.g., @samp{\\sw+_t} to recognize all identifiers ending with @samp{_t}
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1746 as is customary in C code. Each regexp should not match more than a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1747 single identifier.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1748
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1749 The default values contain regexps for many types in standard runtime
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1750 libraries that are otherwise difficult to recognize, and patterns for
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1751 standard type naming conventions like the @samp{_t} suffix in C and C++.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1752 Java, Objective-C and Pike have as a convention to start class names
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1753 with capitals, so there are patterns for that in those languages.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1754
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1755 Despite the names of these variables, they are not only used for
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1756 fontification but in other places as well where @ccmode{} needs to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1757 recognize types.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1758 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1759
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1760
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1761 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1762 @node Faces, Documentation Comments, Font Locking Preliminaries, Font Locking
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1763 @comment node-name, next, previous, up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1764 @section Faces
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1765 @cindex faces
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1766 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1767
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1768 @ccmode{} attempts to use the standard faces for programming languages
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1769 in accordance with their intended purposes as far as possible. No extra
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1770 faces are currently provided, with the exception of a replacement face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1771 @code{c-invalid-face} for emacsen that don't provide
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1772 @code{font-lock-warning-face}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1773
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1774 @itemize @bullet
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1775 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1776 @vindex font-lock-comment-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1777 Normal comments are fontified in @code{font-lock-comment-face}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1778
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1779 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1780 @vindex font-lock-doc-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1781 @vindex font-lock-doc-string-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1782 @vindex font-lock-comment-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1783 Comments that are recognized as documentation (@pxref{Documentation
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1784 Comments}) get @code{font-lock-doc-face} (Emacs) or
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1785 @code{font-lock-doc-string-face} (XEmacs) if those faces exist. If they
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1786 don't then @code{font-lock-comment-face} is used.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1787
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1788 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1789 @vindex font-lock-string-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1790 String and character literals are fontified in
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1791 @code{font-lock-string-face}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1792
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1793 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1794 @vindex font-lock-keyword-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1795 Keywords are fontified with @code{font-lock-keyword-face}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1796
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1797 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1798 @vindex font-lock-function-name-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1799 @code{font-lock-function-name-face} is used for function names in
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1800 declarations and definitions, and classes in those contexts. It's also
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1801 used for preprocessor defines with arguments.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1802
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1803 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1804 @vindex font-lock-variable-name-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1805 Variables in declarations and definitions, and other identifiers in such
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1806 variable contexts, get @code{font-lock-variable-name-face}. It's also
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1807 used for preprocessor defines without arguments.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1808
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1809 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1810 @vindex font-lock-constant-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1811 @vindex font-lock-reference-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1812 Builtin constants are fontified in @code{font-lock-constant-face} if it
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1813 exists, @code{font-lock-reference-face} otherwise. As opposed to the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1814 preceding two faces, this is used on the names in expressions, and it's
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1815 not used in declarations, even if there happen to be a @samp{const} in
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1816 them somewhere.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1817
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1818 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1819 @vindex font-lock-type-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1820 @code{font-lock-type-face} is put on types (both predefined and user
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1821 defined) and classes in type contexts.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1822
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1823 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1824 @vindex font-lock-constant-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1825 @vindex font-lock-reference-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1826 Label identifiers get @code{font-lock-constant-face} if it exists,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1827 @code{font-lock-reference-face} otherwise.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1828
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1829 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1830 Name qualifiers and identifiers for scope constructs are fontified like
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1831 labels.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1832
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1833 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1834 Special markup inside documentation comments are also fontified like
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1835 labels.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1836
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1837 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1838 @vindex font-lock-preprocessor-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1839 @vindex font-lock-builtin-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1840 @vindex font-lock-reference-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1841 Preprocessor directives get @code{font-lock-preprocessor-face} if it
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1842 exists (i.e., XEmacs). In Emacs they get @code{font-lock-builtin-face}
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1843 or @code{font-lock-reference-face}, for lack of a closer equivalent.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1844
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1845 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1846 @vindex font-lock-warning-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1847 @vindex c-invalid-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1848 @vindex invalid-face (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1849 Some kinds of syntactic errors are fontified with
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1850 @code{font-lock-warning-face} in Emacs. In older XEmacs versions
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1851 there's no corresponding standard face, so there a special
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1852 @code{c-invalid-face} is used, which is defined to stand out sharply by
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1853 default.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1854
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1855 Note that it's not used for @samp{#error} or @samp{#warning} directives,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1856 since those aren't syntactic errors in themselves.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1857 @end itemize
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1858
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1859
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1860 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1861 @node Documentation Comments, , Faces, Font Locking
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1862 @comment node-name, next, previous, up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1863 @section Documentation Comments
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1864 @cindex documentation comments
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1865 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1866
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1867 There are various tools to supply documentation in the source as
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1868 specially structured comments, e.g., the standard Javadoc tool in Java.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1869 @ccmode{} provides an extensible mechanism to fontify such comments and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1870 the special markup inside them.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1871
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1872 @defopt c-doc-comment-style
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1873 @vindex doc-comment-style (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1874 This is a style variable that specifies which documentation comment
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1875 style to recognize, e.g., @code{javadoc} for Javadoc comments.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1876
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1877 The value may also be a list of styles, in which case all of them are
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1878 recognized simultaneously (presumably with markup cues that don't
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1879 conflict).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1880
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1881 The value may also be an association list to specify different comment
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1882 styles for different languages. The symbol for the major mode is then
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1883 looked up in the alist, and the value of that element is interpreted as
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1884 above if found. If it isn't found then the symbol `other' is looked up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1885 and its value is used instead.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1886
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1887 Note that @ccmode{} uses this variable to set other variables that
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1888 handle fontification etc. That's done at mode initialization or when
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1889 you switch to a style which sets this variable. Thus, if you change it
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
1890 in some other way, e.g., interactively in a CC Mode buffer, you will need
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1891 to do @kbd{M-x java-mode} (or whatever mode you're currently using) to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1892 reinitialize.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1893
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1894 @findex c-setup-doc-comment-style
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1895 @findex setup-doc-comment-style (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1896 Note also that when @ccmode{} starts up, the other variables are
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1897 modified before the mode hooks are run. If you change this variable in
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1898 a mode hook, you have to call @code{c-setup-doc-comment-style}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1899 afterwards to redo that work.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1900 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1901
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1902 @ccmode{} currently provides handing of the following doc comment
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1903 styles:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1904
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1905 @table @code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1906 @item javadoc
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1907 @cindex Javadoc markup
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1908 Javadoc comments, the standard tool in Java.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1909
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1910 @item autodoc
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1911 @cindex Pike autodoc markup
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1912 For Pike autodoc markup, the standard in Pike.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1913 @end table
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1914
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1915 The above is by no means complete. If you'd like to see support for
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1916 other doc comment styles, please let us know (@pxref{Mailing Lists and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1917 Submitting Bug Reports}).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1918
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1919 You can also write your own doc comment fontification support to use
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1920 with @code{c-doc-comment-style}: Supply a variable or function
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1921 @code{*-font-lock-keywords} where @samp{*} is the name you want to use
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1922 in @code{c-doc-comment-style}. If it's a variable, it's prepended to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1923 @code{font-lock-keywords}. If it's a function, it's called at mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1924 initialization and the result is prepended. For an example, see
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1925 @code{javadoc-font-lock-keywords} in @file{cc-fonts.el}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1926
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1927 If you add support for another doc comment style, please consider
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1928 contributing it --- send a note to @email{bug-cc-mode@@gnu.org}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1929
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1930
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1931 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1932 @node Commands, Customizing Indentation, Font Locking, Top
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1933 @comment node-name, next, previous, up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1934 @chapter Commands
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1935 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
1936
Dave Love <fx@gnu.org>
parents:
diff changeset
1937 @menu
Dave Love <fx@gnu.org>
parents:
diff changeset
1938 * Indentation Commands::
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1939 * Movement Commands::
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1940 * Other Commands::
Dave Love <fx@gnu.org>
parents:
diff changeset
1941 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
1942
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1943 See also @ref{Text Filling and Line Breaking} and @ref{Macro Handling},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1944 for commands concerning those bits.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1945
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1946
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1947 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1948 @node Indentation Commands, Movement Commands, , Commands
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1949 @comment node-name, next, previous,up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1950 @section Indentation Commands
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1951 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
1952
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1953 The following list of commands reindent C constructs. Note that when
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1954 you change your coding style, either interactively or through some other
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1955 means, your file does @emph{not} automatically get reindented. You
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1956 will need to execute one of the following commands to see the effects of
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1957 your changes.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1958
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1959 @cindex GNU indent program
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1960 Also, variables like @code{c-hanging-*} and @code{c-cleanup-list}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1961 only affect how on-the-fly code is formatted. Changing the
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1962 ``hanginess'' of a brace and then reindenting, will not move the brace
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1963 to a different line. For this, you're better off getting an external
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1964 program like GNU @code{indent}, which will rearrange brace location,
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1965 among other things.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1966
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1967 Reindenting large sections of code can take a long time. When
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1968 @ccmode{} reindents a region of code, it is essentially equivalent to
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1969 hitting @kbd{TAB} on every line of the region.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1970
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1971 These commands are useful when indenting code:
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1972
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1973 @table @asis
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1974 @item @kbd{TAB} (@code{c-indent-command})
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1975 @kindex TAB
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1976 @findex c-indent-command
Dave Love <fx@gnu.org>
parents:
diff changeset
1977 @findex indent-command (c-)
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1978 Indents the current line. The actual behavior is controlled by several
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1979 variables, described below. See @code{c-tab-always-indent},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1980 @code{c-insert-tab-function}, and @code{indent-tabs-mode}. With a
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1981 numeric argument, this command rigidly indents the region, preserving
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1982 the relative indentation among the lines.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1983
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1984 @item @kbd{C-M-q} (@code{c-indent-exp})
40705
421e0a91a1d1 Replace M-C- with C-M-
Eli Zaretskii <eliz@gnu.org>
parents: 39267
diff changeset
1985 @kindex C-M-q
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1986 @findex c-indent-exp
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1987 @findex indent-exp (c-)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1988 Indent an entire balanced brace or parenthesis expression. Note that
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1989 point must be on the opening brace or parenthesis of the expression you
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1990 want to indent.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1991
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1992 @item @kbd{C-c C-q} (@code{c-indent-defun})
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1993 @kindex C-c C-q
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1994 @findex c-indent-defun
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1995 @findex indent-defun (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1996 Indents the entire top-level function, class or macro definition
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1997 encompassing point. It leaves point unchanged. This function can't be
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1998 used to reindent a nested brace construct, such as a nested class or
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1999 function, or a Java method. The top-level construct being reindented
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
2000 must be complete, i.e., it must have both a beginning brace and an ending
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2001 brace.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2002
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2003 @item @kbd{C-M-\} (@code{indent-region})
40705
421e0a91a1d1 Replace M-C- with C-M-
Eli Zaretskii <eliz@gnu.org>
parents: 39267
diff changeset
2004 @kindex C-M-\
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2005 @findex indent-region
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2006 Indents an arbitrary region of code. This is a standard Emacs command,
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2007 tailored for C code in a @ccmode{} buffer. Note, of course, that point
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2008 and mark must delineate the region you want to indent.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2009
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2010 @item @kbd{M-;} (@code{indent-for-comment})
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2011 @kindex M-;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2012 @findex indent-for-comment
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2013 Insert a comment at the end of the current line, if none is there already.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2014 Then reindent the comment according to the variables
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2015 @code{c-indent-comment-alist}, @code{c-indent-comments-syntactically-p}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2016 and @code{comment-column}. Then position the point after the comment
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2017 starter. This is a standard Emacs command, but @ccmode{} enhances it a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2018 bit with two variables:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2019
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2020 @defopt c-indent-comment-alist
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2021 @vindex indent-comment-alist (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2022 @vindex comment-column
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2023 This style variable allows you to control which column @kbd{M-;}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2024 indents the comment to, depending on the preceding code and the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2025 indentation of a similar comment on the preceding line, if there is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2026 any. It is an association list that maps different types of lines to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2027 actions describing how they should be handled. If a certain line type
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2028 isn't present on the list then the line is indented to the column
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2029 specified by @code{comment-column}. See the documentation string for
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2030 @code{c-indent-comment-alist} for a full description of the available
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2031 line types and actions (use @kbd{C-h v c-indent-comment-alist}).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2032 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2033
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2034 @defopt c-indent-comments-syntactically-p
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2035 @vindex indent-comments-syntactically-p (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2036 Normally, when this variable is @code{nil}, @kbd{M-;} will indent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2037 comment-only lines according to @code{c-indent-comment-alist}, just as
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2038 it does with lines where other code precede the comments. However, if
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2039 you want it to act just like @kbd{TAB} for comment-only lines you can
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2040 get that by setting @code{c-indent-comments-syntactically-p} to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2041 non-@code{nil}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2042
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2043 If @code{c-indent-comments-syntactically-p} is non-@code{nil} then
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2044 @code{c-indent-comment-alist} won't be consulted at all for comment-only
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2045 lines.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2046 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2047
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2048 @item @kbd{C-M-h} (@code{c-mark-function})
40705
421e0a91a1d1 Replace M-C- with C-M-
Eli Zaretskii <eliz@gnu.org>
parents: 39267
diff changeset
2049 @kindex C-M-h
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2050 @findex c-mark-function
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2051 @findex mark-function (c-)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2052 While not strictly an indentation command, this is useful for marking
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2053 the current top-level function or class definition as the current
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2054 region. As with @code{c-indent-defun}, this command operates on
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2055 top-level constructs, and can't be used to mark say, a Java method.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2056 @end table
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2057
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2058 These variables are also useful when indenting code:
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2059
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2060 @defopt c-tab-always-indent
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2061 @vindex tab-always-indent (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
2062 @kindex TAB
Dave Love <fx@gnu.org>
parents:
diff changeset
2063 @cindex literal
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2064 This variable controls how @kbd{TAB} (@code{c-indent-command})
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2065 operates. When it is @code{t}, @kbd{TAB} always indents the current
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2066 line. When it is @code{nil}, the line is indented only if point is at
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2067 the left margin, or on or before the first non-whitespace character on
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2068 the line, otherwise some whitespace is inserted. If this variable is
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2069 some other value (not @code{nil} or @code{t}), then some whitespace is
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2070 inserted only within strings and comments (literals), but the line is
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2071 always reindented.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2072 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2073
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2074 @defopt c-insert-tab-function
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2075 @vindex insert-tab-function (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
2076 @findex tab-to-tab-stop
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2077 When ``some whitespace'' is inserted as described above, what actually
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2078 happens is that the function stored in @code{c-insert-tab-function} is
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2079 called. Normally, this just inserts a real tab character, or the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2080 equivalent number of spaces, depending on @code{indent-tabs-mode}.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2081 Some people, however, set @code{c-insert-tab-function} to
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2082 @code{tab-to-tab-stop} so as to get hard tab stops when indenting.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2083 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2084
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2085 @defopt indent-tabs-mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2086 This is a standard Emacs variable that controls how line indentation
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2087 is composed. When it's non-@code{nil}, tabs can be used in a line's
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2088 indentation, otherwise only spaces can be used.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2089 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2090
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2091 @defopt c-progress-interval
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2092 @vindex progress-interval (c-)
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47737
diff changeset
2093 When indenting large regions of code, this variable controls how often a
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2094 progress message is displayed. Set this variable to @code{nil} to
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2095 inhibit the progress messages, or set it to an integer which is how
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2096 often (in seconds) progress messages are to be displayed.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2097 @end defopt
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2098
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2099
Dave Love <fx@gnu.org>
parents:
diff changeset
2100 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2101 @node Movement Commands, Other Commands, Indentation Commands, Commands
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2102 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2103 @section Movement Commands
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2104 @cindex movement
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2105 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2106
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2107 @ccmode{} contains some useful commands for moving around in C
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2108 code.
Dave Love <fx@gnu.org>
parents:
diff changeset
2109
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2110 @table @asis
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2111 @item @kbd{M-x c-beginning-of-defun}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2112 @findex c-beginning-of-defun
Dave Love <fx@gnu.org>
parents:
diff changeset
2113 @findex beginning-of-defun (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
2114 @findex beginning-of-defun
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2115 Move point back to the least-enclosing brace. This function is
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2116 analogous to the Emacs built-in command @code{beginning-of-defun},
Dave Love <fx@gnu.org>
parents:
diff changeset
2117 except it eliminates the constraint that the top-level opening brace
Dave Love <fx@gnu.org>
parents:
diff changeset
2118 must be in column zero. See @code{beginning-of-defun} for more
Dave Love <fx@gnu.org>
parents:
diff changeset
2119 information.
Dave Love <fx@gnu.org>
parents:
diff changeset
2120
Dave Love <fx@gnu.org>
parents:
diff changeset
2121 Depending on the coding style being used, you might prefer
Dave Love <fx@gnu.org>
parents:
diff changeset
2122 @code{c-beginning-of-defun} to @code{beginning-of-defun}. If so,
Dave Love <fx@gnu.org>
parents:
diff changeset
2123 consider binding @kbd{C-M-a} to the former instead. For backwards
Dave Love <fx@gnu.org>
parents:
diff changeset
2124 compatibility reasons, the default binding remains in effect.
Dave Love <fx@gnu.org>
parents:
diff changeset
2125
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2126 In AWK mode, a defun doesn't necessarily have braces at all. AWK Mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2127 therefore has its own version of this function which is bound by
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2128 default to @kbd{C-M-a}. You can thus chose freely which function to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2129 bind to @kbd{C-M-a} for the other modes without worrying about AWK
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2130 buffers. @xref{AWK Mode Defuns}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2131
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2132 @item @kbd{M-x c-end-of-defun}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2133 @findex c-end-of-defun
Dave Love <fx@gnu.org>
parents:
diff changeset
2134 @findex end-of-defun (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
2135 @findex end-of-defun
Dave Love <fx@gnu.org>
parents:
diff changeset
2136 Moves point to the end of the current top-level definition. This
Dave Love <fx@gnu.org>
parents:
diff changeset
2137 function is analogous to the Emacs built-in command @code{end-of-defun},
Dave Love <fx@gnu.org>
parents:
diff changeset
2138 except it eliminates the constraint that the top-level opening brace of
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2139 the defun must be in column zero. See @code{end-of-defun} for more
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2140 information.
Dave Love <fx@gnu.org>
parents:
diff changeset
2141
Dave Love <fx@gnu.org>
parents:
diff changeset
2142 Depending on the coding style being used, you might prefer
Dave Love <fx@gnu.org>
parents:
diff changeset
2143 @code{c-end-of-defun} to @code{end-of-defun}. If so,
Dave Love <fx@gnu.org>
parents:
diff changeset
2144 consider binding @kbd{C-M-e} to the former instead. For backwards
Dave Love <fx@gnu.org>
parents:
diff changeset
2145 compatibility reasons, the default binding remains in effect.
Dave Love <fx@gnu.org>
parents:
diff changeset
2146
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2147 In AWK Mode, a defun doesn't necessarily have braces at all. AWK Mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2148 therefore has its own version of this function which is bound by
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2149 default to @kbd{C-M-e}. You can thus chose freely which function to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2150 bind to @kbd{C-M-e} for the other modes without worrying about AWK
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2151 buffers. @ref{AWK Mode Defuns}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2152
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2153 @item @kbd{C-c C-u} (@code{c-up-conditional})
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2154 @kindex C-c C-u
Dave Love <fx@gnu.org>
parents:
diff changeset
2155 @findex c-up-conditional
Dave Love <fx@gnu.org>
parents:
diff changeset
2156 @findex up-conditional (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
2157 Move point back to the containing preprocessor conditional, leaving the
Dave Love <fx@gnu.org>
parents:
diff changeset
2158 mark behind. A prefix argument acts as a repeat count. With a negative
Dave Love <fx@gnu.org>
parents:
diff changeset
2159 argument, move point forward to the end of the containing
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2160 preprocessor conditional.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2161
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2162 @samp{#elif} is treated like @samp{#else} followed by @samp{#if}, so the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2163 function stops at them when going backward, but not when going forward.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2164
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2165 @item @kbd{M-x c-up-conditional-with-else}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2166 @findex c-up-conditional-with-else
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2167 @findex up-conditional-with-else (c-)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2168 A variety of @code{c-up-conditional} that also stops at @samp{#else}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2169 lines. Normally those lines are ignored.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2170
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2171 @item @kbd{M-x c-down-conditional}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2172 @findex c-down-conditional
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2173 @findex down-conditional (c-)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2174 Move point forward into the next nested preprocessor conditional,
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2175 leaving the mark behind. A prefix argument acts as a repeat count.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2176 With a negative argument, move point backward into the previous
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2177 nested preprocessor conditional.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2178
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2179 @samp{#elif} is treated like @samp{#else} followed by @samp{#if}, so the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2180 function stops at them when going forward, but not when going backward.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2181
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2182 @item @kbd{M-x c-down-conditional-with-else}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2183 @findex c-down-conditional-with-else
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2184 @findex down-conditional-with-else (c-)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2185 A variety of @code{c-down-conditional} that also stops at @samp{#else}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2186 lines. Normally those lines are ignored.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2187
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2188 @item @kbd{C-c C-p} (@code{c-backward-conditional})
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2189 @kindex C-c C-p
Dave Love <fx@gnu.org>
parents:
diff changeset
2190 @findex c-backward-conditional
Dave Love <fx@gnu.org>
parents:
diff changeset
2191 @findex backward-conditional (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
2192 Move point back over a preprocessor conditional, leaving the mark
Dave Love <fx@gnu.org>
parents:
diff changeset
2193 behind. A prefix argument acts as a repeat count. With a negative
Dave Love <fx@gnu.org>
parents:
diff changeset
2194 argument, move forward.
Dave Love <fx@gnu.org>
parents:
diff changeset
2195
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2196 @item @kbd{C-c C-n} (@code{c-forward-conditional})
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2197 @kindex C-c C-n
Dave Love <fx@gnu.org>
parents:
diff changeset
2198 @findex c-forward-conditional
Dave Love <fx@gnu.org>
parents:
diff changeset
2199 @findex forward-conditional (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
2200 Move point forward across a preprocessor conditional, leaving the mark
Dave Love <fx@gnu.org>
parents:
diff changeset
2201 behind. A prefix argument acts as a repeat count. With a negative
Dave Love <fx@gnu.org>
parents:
diff changeset
2202 argument, move backward.
Dave Love <fx@gnu.org>
parents:
diff changeset
2203
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2204 @item @kbd{M-a} (@code{c-beginning-of-statement})
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2205 @kindex M-a
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2206 @findex c-beginning-of-statement
Dave Love <fx@gnu.org>
parents:
diff changeset
2207 @findex beginning-of-statement (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
2208 Move point to the beginning of the innermost C statement. If point is
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2209 already at the beginning of a statement, move to the beginning of the
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2210 closest preceding statement, even if that means moving into a block (you
40705
421e0a91a1d1 Replace M-C- with C-M-
Eli Zaretskii <eliz@gnu.org>
parents: 39267
diff changeset
2211 can use @kbd{C-M-b} to move over a balanced block). With prefix
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2212 argument @var{n}, move back @var{n} @minus{} 1 statements.
Dave Love <fx@gnu.org>
parents:
diff changeset
2213
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2214 If point is within or next to a comment or a string which spans more
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2215 than one line, this command moves by sentences instead of statements.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2216
Dave Love <fx@gnu.org>
parents:
diff changeset
2217 When called from a program, this function takes three optional
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2218 arguments: the repetition count, a buffer position limit which is the
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2219 farthest back to search for the syntactic context, and a flag saying
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2220 whether to do sentence motion in or near comments and multiline strings.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2221
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2222 @item @kbd{M-e} (@code{c-end-of-statement})
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2223 @kindex M-e
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2224 @findex c-end-of-statement
Dave Love <fx@gnu.org>
parents:
diff changeset
2225 @findex end-of-statement (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
2226 Move point to the end of the innermost C statement. If point is at the
Dave Love <fx@gnu.org>
parents:
diff changeset
2227 end of a statement, move to the end of the next statement, even if it's
40705
421e0a91a1d1 Replace M-C- with C-M-
Eli Zaretskii <eliz@gnu.org>
parents: 39267
diff changeset
2228 inside a nested block (use @kbd{C-M-f} to move to the other side of the
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2229 block). With prefix argument @var{n}, move forward @var{n} @minus{} 1
Dave Love <fx@gnu.org>
parents:
diff changeset
2230 statements.
Dave Love <fx@gnu.org>
parents:
diff changeset
2231
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2232 If point is within or next to a comment or a string which spans more
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2233 than one line, this command moves by sentences instead of statements.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2234
Dave Love <fx@gnu.org>
parents:
diff changeset
2235 When called from a program, this function takes three optional
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2236 arguments: the repetition count, a buffer position limit which is the
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2237 farthest back to search for the syntactic context, and a flag saying
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2238 whether to do sentence motion in or near comments and multiline strings.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2239
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2240 @item @kbd{M-x c-forward-into-nomenclature}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2241 @findex c-forward-into-nomenclature
Dave Love <fx@gnu.org>
parents:
diff changeset
2242 @findex forward-into-nomenclature (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
2243 A popular programming style, especially for object-oriented languages
Dave Love <fx@gnu.org>
parents:
diff changeset
2244 such as C++ is to write symbols in a mixed case format, where the first
Dave Love <fx@gnu.org>
parents:
diff changeset
2245 letter of each word is capitalized, and not separated by underscores.
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
2246 e.g., @samp{SymbolsWithMixedCaseAndNoUnderlines}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2247
Dave Love <fx@gnu.org>
parents:
diff changeset
2248 This command moves point forward to next capitalized word. With prefix
Dave Love <fx@gnu.org>
parents:
diff changeset
2249 argument @var{n}, move @var{n} times.
Dave Love <fx@gnu.org>
parents:
diff changeset
2250
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2251 @item @kbd{M-x c-backward-into-nomenclature}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2252 @findex c-backward-into-nomenclature
Dave Love <fx@gnu.org>
parents:
diff changeset
2253 @findex backward-into-nomenclature (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
2254 Move point backward to beginning of the next capitalized
Dave Love <fx@gnu.org>
parents:
diff changeset
2255 word. With prefix argument @var{n}, move @var{n} times. If
Dave Love <fx@gnu.org>
parents:
diff changeset
2256 @var{n} is negative, move forward.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2257 @end table
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2258
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2259
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2260 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2261 @node Other Commands, , Movement Commands, Commands
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2262 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2263 @section Other Commands
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2264 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2265
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2266 Here are the various other commands that didn't fit anywhere else:
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2267
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2268 @table @asis
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2269 @item @kbd{C-c :} (@code{c-scope-operator})
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2270 @kindex C-c :
Dave Love <fx@gnu.org>
parents:
diff changeset
2271 @findex c-scope-operator
Dave Love <fx@gnu.org>
parents:
diff changeset
2272 @findex scope-operator (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
2273 In C++, it is also sometimes desirable to insert the double-colon scope
Dave Love <fx@gnu.org>
parents:
diff changeset
2274 operator without performing the electric behavior of colon insertion.
Dave Love <fx@gnu.org>
parents:
diff changeset
2275 @kbd{C-c :} does just this.
Dave Love <fx@gnu.org>
parents:
diff changeset
2276 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
2277
Dave Love <fx@gnu.org>
parents:
diff changeset
2278 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2279 @node Customizing Indentation, Syntactic Symbols, Commands, Top
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2280 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2281 @chapter Customizing Indentation
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2282 @cindex customization, indentation
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2283 @cindex indentation
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2284 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2285
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2286 The context sensitive indentation is mainly controlled by the variable
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2287 @code{c-offsets-alist}:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2288
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2289 @defopt c-offsets-alist
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2290 @vindex offsets-alist (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2291 This special style variable contains the mappings between syntactic
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2292 symbols and the offsets to apply for those symbols. It's set at mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2293 initialization from a @emph{style} you may specify. Styles are
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2294 groupings of syntactic symbol offsets and other style variable values.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2295 Most likely, you'll find that one of the predefined styles will suit
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2296 your needs. @xref{Styles}, for an explanation of how to set up named
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2297 styles.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2298
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2299 Only syntactic symbols not already bound on @code{c-offsets-alist} will
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2300 be set from styles. This means that any association you set on it, be
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2301 it before or after mode initialization, will not be changed. The
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
2302 @code{c-offsets-alist} variable may therefore be used from e.g., the
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2303 Customization interface@footnote{Available in Emacs 20 and later, and
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2304 XEmacs 19.15 and later.} to easily change indentation offsets without
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2305 having to bother about styles. Initially @code{c-offsets-alist} is
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2306 empty, so that all syntactic symbols are set by the style system.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2307
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2308 The offset associated with any particular syntactic symbol can be an
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2309 integer, a function or lambda expression, a variable name, a vector, a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2310 list, or one of the following special symbols: @code{+}, @code{-},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2311 @code{++}, @code{--}, @code{*}, or @code{/}. The meaning of these
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2312 values are described in detail below.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2313 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2314
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2315 The special symbols describe an offset in multiples of the value of
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2316 @code{c-basic-offset}:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2317
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2318 @defopt c-basic-offset
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2319 @vindex basic-offset (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2320 Style variable that holds the basic offset between indentation levels.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2321 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2322
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2323 By defining a style's indentation in terms of @code{c-basic-offset},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2324 you can change the amount of whitespace given to an indentation level
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2325 while maintaining the same basic shape of your code. Here are the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2326 values that the special symbols correspond to:
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2327
Dave Love <fx@gnu.org>
parents:
diff changeset
2328 @table @code
Dave Love <fx@gnu.org>
parents:
diff changeset
2329 @item +
Dave Love <fx@gnu.org>
parents:
diff changeset
2330 @code{c-basic-offset} times 1
Dave Love <fx@gnu.org>
parents:
diff changeset
2331 @item -
Dave Love <fx@gnu.org>
parents:
diff changeset
2332 @code{c-basic-offset} times -1
Dave Love <fx@gnu.org>
parents:
diff changeset
2333 @item ++
Dave Love <fx@gnu.org>
parents:
diff changeset
2334 @code{c-basic-offset} times 2
Dave Love <fx@gnu.org>
parents:
diff changeset
2335 @item --
Dave Love <fx@gnu.org>
parents:
diff changeset
2336 @code{c-basic-offset} times -2
Dave Love <fx@gnu.org>
parents:
diff changeset
2337 @item *
Dave Love <fx@gnu.org>
parents:
diff changeset
2338 @code{c-basic-offset} times 0.5
Dave Love <fx@gnu.org>
parents:
diff changeset
2339 @item /
Dave Love <fx@gnu.org>
parents:
diff changeset
2340 @code{c-basic-offset} times -0.5
Dave Love <fx@gnu.org>
parents:
diff changeset
2341 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
2342
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2343 @cindex indentation functions
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2344
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2345 When a function is used as offset, it's called an @dfn{indentation
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2346 function}. Such functions are useful when more context than just the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2347 syntactic symbol is needed to get the desired indentation.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2348 @xref{Indentation Functions}, and @ref{Custom Indentation Functions},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2349 for details about them.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2350
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2351 If the offset is a vector, its first element sets the absolute
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2352 indentation column, which will override any previous relative
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2353 indentation. It won't override additional relative indentation for
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2354 nested constructs, though.
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2355
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2356 @vindex c-strict-syntax-p
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2357 @vindex strict-syntax-p (c-)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2358 The offset can also be a list, in which case it is evaluated recursively
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2359 using the semantics described above. The first element of the list that
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2360 returns a non-@code{nil} value succeeds and the evaluation stops. If
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2361 none of the list elements return a non-@code{nil} value, then an offset
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2362 of 0 (zero) is used@footnote{There is however a variable
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2363 @code{c-strict-syntax-p} that, when set to non-@code{nil}, will cause an
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2364 error to be signalled in that case. It's now considered obsolete since
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2365 it doesn't work well with some of the alignment functions that now
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2366 returns @code{nil} instead of zero to be more usable in lists. You
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2367 should therefore leave @code{c-strict-syntax-p} set to @code{nil}.}.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2368
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2369 So, for example, because most of the default offsets are defined in
Dave Love <fx@gnu.org>
parents:
diff changeset
2370 terms of @code{+}, @code{-}, and @code{0}, if you like the general
Dave Love <fx@gnu.org>
parents:
diff changeset
2371 indentation style, but you use 4 spaces instead of 2 spaces per level,
Dave Love <fx@gnu.org>
parents:
diff changeset
2372 you can probably achieve your style just by changing
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2373 @code{c-basic-offset} like so@footnote{You can try this interactively in
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2374 a C buffer by typing the text that appears in italics.}:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2375
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2376 @example
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2377 @emph{M-x set-variable RET}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2378 Set variable: @emph{c-basic-offset RET}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2379 Set c-basic-offset to value: @emph{4 RET}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2380 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2381
Dave Love <fx@gnu.org>
parents:
diff changeset
2382 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
2383 This would change
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2384
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2385 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2386 @group
Dave Love <fx@gnu.org>
parents:
diff changeset
2387 int add( int val, int incr, int doit )
Dave Love <fx@gnu.org>
parents:
diff changeset
2388 @{
Dave Love <fx@gnu.org>
parents:
diff changeset
2389 if( doit )
Dave Love <fx@gnu.org>
parents:
diff changeset
2390 @{
Dave Love <fx@gnu.org>
parents:
diff changeset
2391 return( val + incr );
Dave Love <fx@gnu.org>
parents:
diff changeset
2392 @}
Dave Love <fx@gnu.org>
parents:
diff changeset
2393 return( val );
Dave Love <fx@gnu.org>
parents:
diff changeset
2394 @}
Dave Love <fx@gnu.org>
parents:
diff changeset
2395 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2396 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2397
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2398 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
2399 to
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2400
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2401 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2402 @group
Dave Love <fx@gnu.org>
parents:
diff changeset
2403 int add( int val, int incr, int doit )
Dave Love <fx@gnu.org>
parents:
diff changeset
2404 @{
Dave Love <fx@gnu.org>
parents:
diff changeset
2405 if( doit )
Dave Love <fx@gnu.org>
parents:
diff changeset
2406 @{
Dave Love <fx@gnu.org>
parents:
diff changeset
2407 return( val + incr );
Dave Love <fx@gnu.org>
parents:
diff changeset
2408 @}
Dave Love <fx@gnu.org>
parents:
diff changeset
2409 return( val );
Dave Love <fx@gnu.org>
parents:
diff changeset
2410 @}
Dave Love <fx@gnu.org>
parents:
diff changeset
2411 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2412 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2413
Dave Love <fx@gnu.org>
parents:
diff changeset
2414 To change indentation styles more radically, you will want to change the
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2415 offsets associated with other syntactic symbols. First, I'll show you
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2416 how to do that interactively, then I'll describe how to make changes to
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2417 your @file{.emacs} file so that your changes are more permanent.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2418
Dave Love <fx@gnu.org>
parents:
diff changeset
2419 @menu
Dave Love <fx@gnu.org>
parents:
diff changeset
2420 * Interactive Customization::
Dave Love <fx@gnu.org>
parents:
diff changeset
2421 * Permanent Customization::
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2422 * Hooks::
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2423 * Styles::
Dave Love <fx@gnu.org>
parents:
diff changeset
2424 * Advanced Customizations::
Dave Love <fx@gnu.org>
parents:
diff changeset
2425 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
2426
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2427
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2428 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2429 @node Interactive Customization, Permanent Customization, , Customizing Indentation
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2430 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2431 @section Interactive Customization
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2432 @cindex customization, interactive
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2433 @cindex interactive customization
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2434 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2435
Dave Love <fx@gnu.org>
parents:
diff changeset
2436 As an example of how to customize indentation, let's change the
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2437 style of this example@footnote{In this and subsequent examples, the
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2438 original code is formatted using the @samp{gnu} style unless otherwise
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2439 indicated. @xref{Styles}.}:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2440
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2441 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2442 @group
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2443 1: int add( int val, int incr, int doit )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2444 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2445 3: if( doit )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2446 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2447 5: return( val + incr );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2448 6: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2449 7: return( val );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2450 8: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2451 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2452 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2453
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2454 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
2455 to:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2456
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2457 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2458 @group
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2459 1: int add( int val, int incr, int doit )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2460 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2461 3: if( doit )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2462 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2463 5: return( val + incr );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2464 6: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2465 7: return( val );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2466 8: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2467 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2468 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2469
Dave Love <fx@gnu.org>
parents:
diff changeset
2470 In other words, we want to change the indentation of braces that open a
Dave Love <fx@gnu.org>
parents:
diff changeset
2471 block following a condition so that the braces line up under the
Dave Love <fx@gnu.org>
parents:
diff changeset
2472 conditional, instead of being indented. Notice that the construct we
Dave Love <fx@gnu.org>
parents:
diff changeset
2473 want to change starts on line 4. To change the indentation of a line,
Dave Love <fx@gnu.org>
parents:
diff changeset
2474 we need to see which syntactic components affect the offset calculations
Dave Love <fx@gnu.org>
parents:
diff changeset
2475 for that line. Hitting @kbd{C-c C-s} on line 4 yields:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2476
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2477 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2478 ((substatement-open 44))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2479 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2480
Dave Love <fx@gnu.org>
parents:
diff changeset
2481 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
2482 so we know that to change the offset of the open brace, we need to
Dave Love <fx@gnu.org>
parents:
diff changeset
2483 change the indentation for the @code{substatement-open} syntactic
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2484 symbol.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2485
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2486 To do this interactively, just hit @kbd{C-c C-o}. This prompts
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2487 you for the syntactic symbol to change, providing a reasonable default.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2488 In this case, the default is @code{substatement-open}, which is just the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2489 syntactic symbol we want to change!
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2490
Dave Love <fx@gnu.org>
parents:
diff changeset
2491 After you hit return, @ccmode{} will then prompt you for the new
Dave Love <fx@gnu.org>
parents:
diff changeset
2492 offset value, with the old value as the default. The default in this
Dave Love <fx@gnu.org>
parents:
diff changeset
2493 case is @samp{+}, but we want no extra indentation so enter
Dave Love <fx@gnu.org>
parents:
diff changeset
2494 @samp{0} and @kbd{RET}. This will associate the offset 0 with the
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2495 syntactic symbol @code{substatement-open}.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2496
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2497 To check your changes quickly, just hit @kbd{C-c C-q}
Dave Love <fx@gnu.org>
parents:
diff changeset
2498 (@code{c-indent-defun}) to reindent the entire function. The example
Dave Love <fx@gnu.org>
parents:
diff changeset
2499 should now look like:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2500
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2501 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2502 @group
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2503 1: int add( int val, int incr, int doit )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2504 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2505 3: if( doit )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2506 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2507 5: return( val + incr );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2508 6: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2509 7: return( val );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2510 8: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2511 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2512 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2513
Dave Love <fx@gnu.org>
parents:
diff changeset
2514 Notice how just changing the open brace offset on line 4 is all we
Dave Love <fx@gnu.org>
parents:
diff changeset
2515 needed to do. Since the other affected lines are indented relative to
Dave Love <fx@gnu.org>
parents:
diff changeset
2516 line 4, they are automatically indented the way you'd expect. For more
Dave Love <fx@gnu.org>
parents:
diff changeset
2517 complicated examples, this may not always work. The general approach to
Dave Love <fx@gnu.org>
parents:
diff changeset
2518 take is to always start adjusting offsets for lines higher up in the
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2519 file, then reindent and see if any following lines need further
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2520 adjustments.
Dave Love <fx@gnu.org>
parents:
diff changeset
2521
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2522 @deffn Command c-set-offset symbol offset
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2523 @findex set-offset (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2524 @kindex C-c C-o
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2525 This is the command bound to @kbd{C-c C-o}. It provides a convenient
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2526 way to set offsets on @code{c-offsets-alist} both interactively (see
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2527 the example above) and from your mode hook.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2528
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2529 It takes two arguments when used programmatically: @var{symbol} is the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2530 syntactic element symbol to change and @var{offset} is the new offset
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2531 for that syntactic element.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2532 @end deffn
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2533
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2534
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2535 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2536 @node Permanent Customization, Hooks, Interactive Customization, Customizing Indentation
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2537 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2538 @section Permanent Customization
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2539 @cindex customization, permanent
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2540 @cindex permanent customization
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2541 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2542
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2543 To make your changes permanent, you need to add some lisp code to your
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2544 @file{.emacs} file. @ccmode{} supports many different ways to be
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2545 configured, from the straightforward way by setting variables globally
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2546 in @file{.emacs} or in the Customization interface, to the complex and
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2547 precisely controlled way by using styles and hook functions.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2548
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2549 The simplest way of customizing @ccmode{} permanently is to set the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2550 variables in your @file{.emacs} with @code{setq} and similar commands.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2551 So to make a permanent setting of @code{substatement-open} to 0, add
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2552 this to the @file{.emacs} file:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2553
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2554 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2555 @group
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2556 (setq c-offsets-alist
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2557 '((substatement-open . 0)))
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2558 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2559 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2560
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2561 When @ccmode{} initializes a buffer, it will fill out
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2562 @code{c-offsets-alist} with the remaining syntactic symbols according to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2563 the style system.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2564
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2565 You can also use the more user friendly Customization interface, but
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2566 this manual does not cover how that works.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2567
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2568 Variables set like this at the top level in @file{.emacs} take effect in
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2569 all @ccmode{} buffers, regardless of language. The indentation style
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
2570 related variables, e.g., @code{c-offsets-alist}, that you don't set this
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
2571 way get their value from the style system (@pxref{Styles}), and they
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
2572 therefore depend on the setting of @code{c-default-style}. Note that if
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
2573 you use Customize, this means that the greyed-out default values
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
2574 presented there might not be the ones you actually get, since the actual
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
2575 values depend on the style, which may very well be different for
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
2576 different languages.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2577
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
2578 If you want to make more advanced configurations, e.g., language-specific
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2579 customization, setting global variables isn't enough. For that you can
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2580 use the language hooks, see @ref{Hooks}, and/or the style system, see
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2581 @ref{Styles}.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2582
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2583 @defopt c-style-variables-are-local-p
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2584 @vindex style-variables-are-local-p (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2585 By default, all style variables are buffer local, so that different
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2586 buffers can have different style settings. If you only use one style
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2587 in all the files you edit you might want to share them between buffers
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2588 so that a change take effect in all buffers. That's done by setting
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2589 this variable to @code{nil}. The value takes effect when @ccmode{} is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2590 activated in a buffer for the first time in the Emacs session, so you
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2591 typically set it in your @file{.emacs} file and then restart Emacs.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2592 @end defopt
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2593
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2594
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2595 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2596 @node Hooks, Styles, Permanent Customization, Customizing Indentation
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2597 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2598 @section Hooks
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2599 @cindex mode hooks
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2600 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2601
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2602 @ccmode{} provides several hooks that you can use to customize the mode
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2603 according to your coding style. Each language mode has its own hook,
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2604 adhering to standard Emacs major mode conventions. There is also one
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2605 general hook and one package initialization hook:
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2606
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2607 @defvar c-initialization-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2608 @vindex initialization-hook (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2609 Hook run only once per Emacs session, when @ccmode{} is initialized.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2610 @end defvar
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2611
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2612 @defvar c-mode-common-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2613 @vindex mode-common-hook (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2614 Common hook across all languages. It's run immediately before the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2615 language specific hook.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2616 @end defvar
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2617
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2618 @defvar c-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2619 @defvarx c++-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2620 @defvarx objc-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2621 @defvarx java-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2622 @defvarx idl-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2623 @defvarx pike-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2624 @defvarx awk-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2625 The language specific mode hooks. The appropriate one is run as the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2626 last thing when you enter that language mode.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2627 @end defvar
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2628
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2629 Note that all the language-specific mode setup that CC Mode does is done
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2630 prior to both @code{c-mode-common-hook} and the language specific hook.
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2631 That includes installing the indentation style, which can be mode
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2632 specific (and also is by default for Java mode). Thus, any style
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2633 settings done in @code{c-mode-common-hook} will override whatever
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2634 language-specific style is chosen by @code{c-default-style}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2635
Dave Love <fx@gnu.org>
parents:
diff changeset
2636 Here's a simplified example of what you can add to your @file{.emacs}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2637 file to do things whenever any @ccmode{} language is edited. See the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2638 Emacs manuals for more information on customizing Emacs via hooks.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2639 @xref{Sample .emacs File}, for a more complete sample @file{.emacs}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2640 file.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2641
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2642 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2643 (defun my-c-mode-common-hook ()
Dave Love <fx@gnu.org>
parents:
diff changeset
2644 ;; my customizations for all of c-mode and related modes
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2645 (no-case-fold-search)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2646 )
Dave Love <fx@gnu.org>
parents:
diff changeset
2647 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
Dave Love <fx@gnu.org>
parents:
diff changeset
2648 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2649
Dave Love <fx@gnu.org>
parents:
diff changeset
2650
Dave Love <fx@gnu.org>
parents:
diff changeset
2651 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2652 @node Styles, Advanced Customizations, Hooks, Customizing Indentation
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2653 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2654 @section Styles
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2655 @cindex styles
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2656 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2657
Dave Love <fx@gnu.org>
parents:
diff changeset
2658 Most people only need to edit code formatted in just a few well-defined
Dave Love <fx@gnu.org>
parents:
diff changeset
2659 and consistent styles. For example, their organization might impose a
Dave Love <fx@gnu.org>
parents:
diff changeset
2660 ``blessed'' style that all its programmers must conform to. Similarly,
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2661 people who work on GNU software will have to use the GNU coding style.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2662 Some shops are more lenient, allowing a variety of coding styles, and as
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2663 programmers come and go, there could be a number of styles in use. For
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2664 this reason, @ccmode{} makes it convenient for you to set up logical
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2665 groupings of customizations called @dfn{styles}, associate a single name
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2666 for any particular style, and pretty easily start editing new or
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2667 existing code using these styles.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2668
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2669 @cindex style variables
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2670 The variables that the style system affect are called @dfn{style
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2671 variables}. They are handled specially in several ways:
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2672
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2673 @itemize @bullet
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2674 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2675 Style variables are by default buffer local variables. However, they
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2676 can instead be made global by setting
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2677 @code{c-style-variables-are-local-p} to @code{nil} before @ccmode{} is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2678 initialized.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2679
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2680 @item
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2681 @vindex c-old-style-variable-behavior
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2682 @vindex old-style-variable-behavior (c-)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2683 The default value of any style variable (with two exceptions --- see
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2684 below) is the special symbol @code{set-from-style}. Variables that are
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2685 still set to that symbol when a @ccmode{} buffer is initialized will be
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2686 set according to the current style, otherwise they will keep their
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2687 current value@footnote{This is a big change from versions of @ccmode{}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2688 earlier than 5.26, where such settings would get overridden by the style
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2689 system unless special precautions were taken. That was changed since it
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2690 was counterintuitive and confusing, especially to novice users. If your
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2691 configuration depends on the old overriding behavior, you can set the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2692 variable @code{c-old-style-variable-behavior} to non-@code{nil}.}.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2693
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2694 Note that when we talk about the ``default value'' for a style variable,
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2695 we don't mean the @code{set-from-style} symbol that all style variables
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2696 are set to initially, but instead the value it will get at mode
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2697 initialization when neither a style nor a global setting has set its
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2698 value.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2699
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2700 The style variable @code{c-offsets-alist} is handled a little
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2701 differently from the other style variables. It's an association list,
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2702 and is thus by default set to the empty list, @code{nil}. When the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2703 style system is initialized, any syntactic symbols already on it are
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2704 kept --- only the missing ones are filled in from the chosen style.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2705
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2706 The style variable @code{c-special-indent-hook} is also handled in a
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2707 special way. Styles may only add more functions on this hook, so the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2708 global settings on it are always preserved@footnote{This did not change
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2709 in version 5.26.}.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2710
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2711 @item
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2712 The global settings of style variables get captured in the special
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2713 @code{user} style, which is used as the base for all the other styles.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2714 @xref{Built-in Styles}, for details.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2715 @end itemize
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2716
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2717 The style variables are:
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2718 @code{c-basic-offset},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2719 @code{c-comment-only-line-offset},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2720 @code{c-block-comment-prefix},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2721 @code{c-comment-prefix-regexp},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2722 @code{c-cleanup-list},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2723 @code{c-hanging-braces-alist},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2724 @code{c-hanging-colons-alist},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2725 @code{c-hanging-semi&comma-criteria},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2726 @code{c-backslash-column},
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2727 @code{c-backslash-max-column},
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2728 @code{c-special-indent-hook},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2729 @code{c-label-minimum-indentation}, and
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2730 @code{c-offsets-alist}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2731
Dave Love <fx@gnu.org>
parents:
diff changeset
2732 @menu
Dave Love <fx@gnu.org>
parents:
diff changeset
2733 * Built-in Styles::
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2734 * Choosing a Style::
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2735 * Adding Styles::
Dave Love <fx@gnu.org>
parents:
diff changeset
2736 * File Styles::
Dave Love <fx@gnu.org>
parents:
diff changeset
2737 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
2738
Dave Love <fx@gnu.org>
parents:
diff changeset
2739
Dave Love <fx@gnu.org>
parents:
diff changeset
2740 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2741 @node Built-in Styles, Choosing a Style, , Styles
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2742 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2743 @subsection Built-in Styles
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2744 @cindex styles, built-in
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2745 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2746
Dave Love <fx@gnu.org>
parents:
diff changeset
2747 If you're lucky, one of @ccmode{}'s built-in styles might be just
Dave Love <fx@gnu.org>
parents:
diff changeset
2748 what you're looking for. These include:
Dave Love <fx@gnu.org>
parents:
diff changeset
2749
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2750 @table @code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2751 @item gnu
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2752 @cindex GNU style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2753 Coding style blessed by the Free Software Foundation
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2754 for C code in GNU programs.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2755
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2756 @item k&r
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2757 @cindex K&R style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2758 The classic Kernighan and Ritchie style for C code.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2759
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2760 @item bsd
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2761 @cindex BSD style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2762 Also known as ``Allman style'' after Eric Allman.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2763
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2764 @item whitesmith
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2765 @cindex Whitesmith style
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2766 Popularized by the examples that came with Whitesmiths C, an early
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2767 commercial C compiler.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2768
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2769 @item stroustrup
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2770 @cindex Stroustrup style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2771 The classic Stroustrup style for C++ code.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2772
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2773 @item ellemtel
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2774 @cindex Ellemtel style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2775 Popular C++ coding standards as defined by ``Programming in C++, Rules
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2776 and Recommendations,'' Erik Nyquist and Mats Henricson,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2777 Ellemtel@footnote{This document is available at
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2778 @uref{http://www.doc.ic.ac.uk/lab/cplus/c++.rules/} among other
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2779 places.}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2780
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2781 @item linux
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2782 @cindex Linux style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2783 C coding standard for Linux (the kernel).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2784
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2785 @item python
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2786 @cindex Python style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2787 C coding standard for Python extension modules@footnote{Python is a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2788 high level scripting language with a C/C++ foreign function interface.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2789 For more information, see @uref{http://www.python.org/}.}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2790
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2791 @item java
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2792 @cindex Java style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2793 The style for editing Java code. Note that the default
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2794 value for @code{c-default-style} installs this style when you enter
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2795 @code{java-mode}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2796
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2797 @item user
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2798 @cindex User style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2799 This is a special style for several reasons. First, the
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2800 @ccmode{} customizations you do by using either the Customization
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2801 interface, or by writing @code{setq}'s at the top level of your
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2802 @file{.emacs} file, will be captured in the @code{user} style. Also,
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2803 all other styles implicitly inherit their settings from @code{user}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2804 style. This means that for any styles you add via @code{c-add-style}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2805 (@pxref{Adding Styles}) you need only define the differences between
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2806 your new style and @code{user} style.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2807 @end table
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2808
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2809
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2810 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2811 @node Choosing a Style, Adding Styles, Built-in Styles, Styles
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2812 @comment node-name, next, previous, up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2813 @subsection Choosing a Style
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2814 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2815
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2816 Use @kbd{C-c .} to choose a style interactively:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2817
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2818 @deffn Command c-set-style style-name
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2819 @findex set-style (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2820 @kindex C-c .
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2821 Switch to the specified style in the current buffer. Use
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2822 interactively like this:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2823
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2824 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2825 @kbd{C-c . @var{style-name} RET}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2826 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2827
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2828 Note that all style names are case insensitive, even the ones you
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2829 define.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2830
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2831 Setting a style in this way does @emph{not} automatically reindent your
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2832 file. For commands that you can use to view the effect of your changes,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2833 see @ref{Commands}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2834 @end deffn
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2835
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2836 The default style in all newly created buffers is @code{gnu}, except
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2837 in Java mode where it's @code{java}. Although the @code{user} style
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2838 is not the default style, any style variable settings you do with the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2839 Customization interface or on the top level in your @file{.emacs} file
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2840 will by default override the style system, so you don't need to set
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2841 @code{c-default-style} to @code{user} to see the effect of such
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2842 settings.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2843
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2844 @defopt c-default-style
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2845 @vindex default-style (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2846 This variable specifies which style to install by default in new
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2847 buffers. It takes either a style name string, or an association list
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2848 of major mode symbols to style names:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2849
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2850 @enumerate
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2851 @item
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2852 When @code{c-default-style} is a string, it must be an existing style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2853 name. This style is then used for all modes.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2854
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2855 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2856 When @code{c-default-style} is an association list, the mode language
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2857 is looked up to find a style name string.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2858
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2859 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2860 If @code{c-default-style} is an association list where the mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2861 language mode isn't found then the special symbol @samp{other} is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2862 looked up. If it's found then the associated style is used.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2863
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2864 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2865 If @samp{other} is not found then the @samp{gnu} style is used.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2866
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2867 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2868 In all cases, the style described in @code{c-default-style} is installed
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2869 @emph{before} the language hooks are run, so you can always override
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2870 this setting by including an explicit call to @code{c-set-style} in your
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2871 language mode hook, or in @code{c-mode-common-hook}.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2872 @end enumerate
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2873 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2874
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2875 @defvar c-indentation-style
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2876 @vindex indentation-style (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2877 This variable always contains the buffer's current style name, as a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2878 string.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2879 @end defvar
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2880
Dave Love <fx@gnu.org>
parents:
diff changeset
2881
Dave Love <fx@gnu.org>
parents:
diff changeset
2882 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2883 @node Adding Styles, File Styles, Choosing a Style, Styles
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2884 @comment node-name, next, previous, up
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2885 @subsection Adding and Amending Styles
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2886 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2887
Dave Love <fx@gnu.org>
parents:
diff changeset
2888 If none of the built-in styles is appropriate, you'll probably want to
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2889 create a new @dfn{style definition}, possibly based on an existing
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2890 style. To do this, put the new style's settings into a list with the
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2891 following format - the list can then be passed as an argument to the
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2892 function @code{c-add-style}:
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2893
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2894 @cindex style definition
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2895 @defvr {List} style definition
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2896 ([@var{base-style}] [(@var{variable} . @var{value}) @dots{}])
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2897
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2898 Optional @var{base-style}, if present, must be a string which is the
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2899 name of the @dfn{base style} from which this style inherits. At most
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2900 one @var{base-style} is allowed in a style definition. If
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2901 @var{base-style} is not specified, the style inherits from a table of
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2902 default values@footnote{This table is stored internally in the
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2903 variable c-fallback-style. It is computed during the initialisation
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2904 of @ccmode{} from the factory defaults of the style variables and any
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2905 global values they may have been given since starting Emacs.} instead.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2906 All styles eventually inherit from this internal table. Style loops
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2907 generate errors. The list of pre-existing styles can be seen in
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2908 @ref{Built-in Styles}.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2909
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2910 The dotted pairs (@var{variable} . @var{value}) each consist of a
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2911 variable and the value it is to be set to when the style is later
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2912 activated.@footnote{In certain circumstances, this value can get
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2913 overridden by another value.} The variable can be either a @ccmode{}
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2914 style variable or an arbitrary Emacs variable. In the latter case, it
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2915 is @emph{not} made buffer local by the @ccmode{} style system.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2916 @end defvr
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2917
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2918 Two variables are treated specially in the dotted pair list:
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2919
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2920 @table @code
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2921 @item c-offsets-alist
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2922 The value is in turn a dotted list on the form
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2923
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2924 (@var{syntactic-symbol} . @var{offset})
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2925
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2926 as described in @ref{Customizing Indentation}. These are passed to
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2927 @code{c-set-offset} so there is no need to set every syntactic symbol in
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2928 your style, only those that are different from the inherited style.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2929
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2930 @item c-special-indent-hook
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2931 The value is added to @code{c-special-indent-hook} using
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2932 @code{add-hook}, so any functions already on it are kept. If the value
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2933 is a list, each element of the list is added with @code{add-hook}.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2934 @end table
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2935
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2936 Styles are kept in the @code{c-style-alist} variable, but you
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2937 should never modify this variable directly. Instead, @ccmode{}
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2938 provides the function @code{c-add-style} for this purpose.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2939
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2940 @defun c-add-style stylename description &optional set-p
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2941 @findex add-style (c-)
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2942 Add or update a style called @var{stylename}, a string.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2943 @var{description} is the new style definition in the form described
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2944 above. If @var{stylename} already exists in @code{c-style-alist} then
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2945 it is replaced by @var{description}. (Note, this replacement is
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2946 total. The old style is @emph{not} merged into the new one.)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2947 Otherwise, a new style is added. If the optional @var{set-p} is
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2948 non-@code{nil} then the new style is applied to the current buffer as
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2949 well.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2950
Dave Love <fx@gnu.org>
parents:
diff changeset
2951 The sample @file{.emacs} file provides a concrete example of how a new
Dave Love <fx@gnu.org>
parents:
diff changeset
2952 style can be added and automatically set. @xref{Sample .emacs File}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2953 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2954
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2955 @defvar c-style-alist
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2956 @vindex style-alist (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2957 This is the variable that holds the definitions for the styles. It
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2958 should not be changed directly; use @code{c-add-style} instead.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2959 @end defvar
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2960
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2961
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2962 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2963 @node File Styles, , Adding Styles, Styles
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2964 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2965 @subsection File Styles
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2966 @cindex styles, file local
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2967 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2968
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2969 @cindex file local variables
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2970
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2971 The Emacs manual describes how you can customize certain variables on
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2972 a per-file basis by including a @dfn{file local variable} block at the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2973 end of the file. So far, you've only seen a functional interface to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2974 @ccmode{} customization, which can't be used there. @ccmode{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2975 provides two variables allow customization of the indentation style on
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2976 a per-file basis:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2977
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2978 @defvar c-file-style
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2979 @vindex file-style (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2980 This variable can be set to a style name string. When the file is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2981 visited, @ccmode{} will automatically set the file's style to this
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2982 one using @code{c-set-style}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2983 @end defvar
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2984
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2985 @defvar c-file-offsets
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2986 @vindex file-offsets (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2987 This variable takes an association list similar to what is allowed in
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2988 @code{c-offsets-alist}. When the file is visited, @ccmode{} will
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2989 automatically institute these offsets using @code{c-set-offset}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2990 @end defvar
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2991
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
2992 Note that file style settings (i.e., @code{c-file-style}) are applied
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
2993 before file offset settings (i.e., @code{c-file-offsets}). Also, if
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2994 either of these are set in a file's local variable section, all the
Dave Love <fx@gnu.org>
parents:
diff changeset
2995 style variable values are made local to that buffer.
Dave Love <fx@gnu.org>
parents:
diff changeset
2996
Dave Love <fx@gnu.org>
parents:
diff changeset
2997
Dave Love <fx@gnu.org>
parents:
diff changeset
2998 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2999 @node Advanced Customizations, , Styles, Customizing Indentation
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3000 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3001 @section Advanced Customizations
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3002 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3003
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3004 For most users, @ccmode{} will support their coding styles with very
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3005 little need for more advanced customizations. Usually, one of the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3006 standard styles (@pxref{Built-in Styles}) will do the trick. At most,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3007 perhaps one of the syntactic symbol offsets will need to be tweaked
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3008 slightly, or maybe @code{c-basic-offset} will need to be changed.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3009 However, some styles require a more flexible framework for
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3010 customization, and one of the real strengths of @ccmode{} is that the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3011 syntactic analysis model provides just such a framework. This allows
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3012 you to implement custom indentation calculations for situations not
Dave Love <fx@gnu.org>
parents:
diff changeset
3013 handled by the mode directly.
Dave Love <fx@gnu.org>
parents:
diff changeset
3014
Dave Love <fx@gnu.org>
parents:
diff changeset
3015 @menu
Dave Love <fx@gnu.org>
parents:
diff changeset
3016 * Custom Indentation Functions::
Dave Love <fx@gnu.org>
parents:
diff changeset
3017 * Custom Brace and Colon Hanging::
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3018 * Customizing Semicolons and Commas::
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3019 * Other Special Indentations::
Dave Love <fx@gnu.org>
parents:
diff changeset
3020 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
3021
Dave Love <fx@gnu.org>
parents:
diff changeset
3022 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3023 @node Custom Indentation Functions, Custom Brace and Colon Hanging, , Advanced Customizations
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3024 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3025 @subsection Custom Indentation Functions
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3026 @cindex customization, indentation functions
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3027 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3028
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3029 The most flexible way to customize @ccmode{} is by writing custom
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3030 indentation functions, and associating them with specific syntactic
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3031 symbols (@pxref{Syntactic Symbols}). @ccmode{} itself uses indentation
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3032 functions to provide more sophisticated indentation, for example when
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3033 lining up C++ stream operator blocks:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3034
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3035 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3036 @group
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3037 1: void main(int argc, char**)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3038 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3039 3: cout << "There were "
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3040 4: << argc
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3041 5: << "arguments passed to the program"
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3042 6: << endl;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3043 7: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3044 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
3045 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3046
Dave Love <fx@gnu.org>
parents:
diff changeset
3047 In this example, lines 4 through 6 are assigned the @code{stream-op}
Dave Love <fx@gnu.org>
parents:
diff changeset
3048 syntactic symbol. Here, @code{stream-op} has an offset of @code{+}, and
Dave Love <fx@gnu.org>
parents:
diff changeset
3049 with a @code{c-basic-offset} of 2, you can see that lines 4 through 6
Dave Love <fx@gnu.org>
parents:
diff changeset
3050 are simply indented two spaces to the right of line 3. But perhaps we'd
Dave Love <fx@gnu.org>
parents:
diff changeset
3051 like @ccmode{} to be a little more intelligent so that it aligns
Dave Love <fx@gnu.org>
parents:
diff changeset
3052 all the @samp{<<} symbols in lines 3 through 6. To do this, we have
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3053 to write a custom indentation function which finds the column of the first
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3054 stream operator on the first line of the statement. Here is sample
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3055 lisp code implementing this:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3056
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3057 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3058 (defun c-lineup-streamop (langelem)
Dave Love <fx@gnu.org>
parents:
diff changeset
3059 (save-excursion
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3060 (goto-char (cdr langelem))
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3061 (re-search-forward "<<\\|>>" (c-point 'eol) 'move)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3062 (goto-char (match-beginning 0))
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3063 (vector (current-column))))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3064 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3065
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3066 Indentation functions take a single argument, which is a syntactic
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3067 component cons cell (@pxref{Syntactic Analysis}). The function can
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3068 return an integer which is added to the running total indentation for
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3069 the line, or a vector containing an integer which is an absolute
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3070 column to align to. Usually an absolute column is wanted when
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3071 aligning to existing text, as in this example.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3072
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3073 The function should return @code{nil} if it's used in a situation where
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3074 it doesn't want to make any decision. If the function is used in a list
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3075 expression (@pxref{Customizing Indentation}), that will cause @ccmode{}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3076 to go on and check the next entry in the list.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3077
Dave Love <fx@gnu.org>
parents:
diff changeset
3078 Now, to associate the function @code{c-lineup-streamop} with the
Dave Love <fx@gnu.org>
parents:
diff changeset
3079 @code{stream-op} syntactic symbol, we can add something like the
Dave Love <fx@gnu.org>
parents:
diff changeset
3080 following to our @code{c++-mode-hook}@footnote{It probably makes more
Dave Love <fx@gnu.org>
parents:
diff changeset
3081 sense to add this to @code{c++-mode-hook} than @code{c-mode-common-hook}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3082 since stream operators are only relevant for C++.}:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3083
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3084 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3085 (c-set-offset 'stream-op 'c-lineup-streamop)
Dave Love <fx@gnu.org>
parents:
diff changeset
3086 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3087
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3088 Now the function looks like this after reindenting (using @kbd{C-c
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3089 C-q}):
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3090
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3091 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3092 @group
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3093 1: void main(int argc, char**)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3094 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3095 3: cout << "There were "
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3096 4: << argc
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3097 5: << " arguments passed to the program"
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3098 6: << endl;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3099 7: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3100 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
3101 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3102
Dave Love <fx@gnu.org>
parents:
diff changeset
3103 Custom indentation functions can be as simple or as complex as you like,
Dave Love <fx@gnu.org>
parents:
diff changeset
3104 and any syntactic symbol that appears in @code{c-offsets-alist} can have
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3105 a custom indentation function associated with it.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3106
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3107 @ccmode{} comes with an extensive set of predefined indentation
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3108 functions, not all of which are used by the default styles. So there's
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3109 a good chance the function you want already exists. @xref{Indentation
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3110 Functions}, for a list of them. If you have written an indentation
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3111 function that you think is generally useful, you're very welcome to
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3112 contribute it; please contact @email{bug-cc-mode@@gnu.org}.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3113
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3114
Dave Love <fx@gnu.org>
parents:
diff changeset
3115 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3116 @node Custom Brace and Colon Hanging, Customizing Semicolons and Commas, Custom Indentation Functions, Advanced Customizations
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3117 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3118 @subsection Custom Brace and Colon Hanging
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3119 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3120
Dave Love <fx@gnu.org>
parents:
diff changeset
3121 @vindex c-hanging-braces-alist
Dave Love <fx@gnu.org>
parents:
diff changeset
3122 @vindex hanging-braces-alist (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
3123 Syntactic symbols aren't the only place where you can customize
Dave Love <fx@gnu.org>
parents:
diff changeset
3124 @ccmode{} with the lisp equivalent of callback functions. Brace
Dave Love <fx@gnu.org>
parents:
diff changeset
3125 ``hanginess'' can also be determined by custom functions associated with
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3126 syntactic symbols on the @code{c-hanging-braces-alist} style variable.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3127 Remember that @var{action}'s are typically a list containing some
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3128 combination of the symbols @code{before} and @code{after}
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3129 (@pxref{Hanging Braces}). However, an @var{action} can also be a
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3130 function which gets called when a brace matching that syntactic symbol
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3131 is entered.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3132
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3133 @cindex customization, brace hanging
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3134 These @var{action} functions are called with two arguments: the
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3135 syntactic symbol for the brace, and the buffer position at which the
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3136 brace was inserted. The @var{action} function is expected to return a
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3137 list containing some combination of @code{before} and @code{after},
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
3138 including neither of them (i.e., @code{nil}). This return value has the
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3139 normal brace hanging semantics.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3140
Dave Love <fx@gnu.org>
parents:
diff changeset
3141 As an example, @ccmode{} itself uses this feature to dynamically
Dave Love <fx@gnu.org>
parents:
diff changeset
3142 determine the hanginess of braces which close ``do-while''
Dave Love <fx@gnu.org>
parents:
diff changeset
3143 constructs:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3144
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3145 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3146 void do_list( int count, char** atleast_one_string )
Dave Love <fx@gnu.org>
parents:
diff changeset
3147 @{
Dave Love <fx@gnu.org>
parents:
diff changeset
3148 int i=0;
Dave Love <fx@gnu.org>
parents:
diff changeset
3149 do @{
Dave Love <fx@gnu.org>
parents:
diff changeset
3150 handle_string( atleast_one_string[i] );
Dave Love <fx@gnu.org>
parents:
diff changeset
3151 i++;
Dave Love <fx@gnu.org>
parents:
diff changeset
3152 @} while( i < count );
Dave Love <fx@gnu.org>
parents:
diff changeset
3153 @}
Dave Love <fx@gnu.org>
parents:
diff changeset
3154 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3155
Dave Love <fx@gnu.org>
parents:
diff changeset
3156 @ccmode{} assigns the @code{block-close} syntactic symbol to the
Dave Love <fx@gnu.org>
parents:
diff changeset
3157 brace that closes the @code{do} construct, and normally we'd like the
Dave Love <fx@gnu.org>
parents:
diff changeset
3158 line that follows a @code{block-close} brace to begin on a separate
Dave Love <fx@gnu.org>
parents:
diff changeset
3159 line. However, with ``do-while'' constructs, we want the
Dave Love <fx@gnu.org>
parents:
diff changeset
3160 @code{while} clause to follow the closing brace. To do this, we
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3161 associate the @code{block-close} symbol with the @var{action} function
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3162 @code{c-snug-do-while}:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3163
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3164 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3165 (defun c-snug-do-while (syntax pos)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3166 "Dynamically calculate brace hanginess for do-while statements."
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3167 (save-excursion
Dave Love <fx@gnu.org>
parents:
diff changeset
3168 (let (langelem)
Dave Love <fx@gnu.org>
parents:
diff changeset
3169 (if (and (eq syntax 'block-close)
Dave Love <fx@gnu.org>
parents:
diff changeset
3170 (setq langelem (assq 'block-close c-syntactic-context))
Dave Love <fx@gnu.org>
parents:
diff changeset
3171 (progn (goto-char (cdr langelem))
Dave Love <fx@gnu.org>
parents:
diff changeset
3172 (if (= (following-char) ?@{)
Dave Love <fx@gnu.org>
parents:
diff changeset
3173 (forward-sexp -1))
Dave Love <fx@gnu.org>
parents:
diff changeset
3174 (looking-at "\\<do\\>[^_]")))
Dave Love <fx@gnu.org>
parents:
diff changeset
3175 '(before)
Dave Love <fx@gnu.org>
parents:
diff changeset
3176 '(before after)))))
Dave Love <fx@gnu.org>
parents:
diff changeset
3177 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3178
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3179 @findex c-snug-do-while
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3180 @findex snug-do-while (c-)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3181 This function simply looks to see if the brace closes a ``do-while''
Dave Love <fx@gnu.org>
parents:
diff changeset
3182 clause and if so, returns the list @samp{(before)} indicating
Dave Love <fx@gnu.org>
parents:
diff changeset
3183 that a newline should be inserted before the brace, but not after it.
Dave Love <fx@gnu.org>
parents:
diff changeset
3184 In all other cases, it returns the list @samp{(before after)} so
Dave Love <fx@gnu.org>
parents:
diff changeset
3185 that the brace appears on a line by itself.
Dave Love <fx@gnu.org>
parents:
diff changeset
3186
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3187 @defvar c-syntactic-context
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3188 @vindex syntactic-context (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3189 During the call to the indentation or brace hanging @var{action}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3190 function, this variable is bound to the full syntactic analysis list.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3191 @end defvar
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3192
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3193 @cindex customization, colon hanging
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3194 @vindex c-hanging-colons-alist
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3195 @vindex hanging-colons-alist (c-)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3196 Note that for symmetry, colon hanginess should be customizable by
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3197 allowing function symbols as @var{action}s on the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3198 @code{c-hanging-colons-alist} style variable. Since no use has actually
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3199 been found for this feature, it isn't currently implemented!
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3200
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3201
Dave Love <fx@gnu.org>
parents:
diff changeset
3202 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3203 @node Customizing Semicolons and Commas, Other Special Indentations, Custom Brace and Colon Hanging, Advanced Customizations
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3204 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3205 @subsection Customizing Semicolons and Commas
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3206 @cindex customization, semicolon newlines
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3207 @cindex customization, comma newlines
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3208 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3209
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3210 You can also customize the insertion of newlines after semicolons and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3211 commas when the auto-newline minor mode is enabled (@pxref{Minor
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3212 Modes}).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3213
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3214 @defopt c-hanging-semi&comma-criteria
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3215 @vindex hanging-semi&comma-criteria (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3216 This style variable takes a list of hooks that get called when a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3217 semicolon or comma is inserted. The hooks are called in order without
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3218 arguments, and are expected to return one of the following values:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3219
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3220 @table @code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3221 @item t
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3222 A newline is inserted, and no more functions from the list are called.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3223 @item stop
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3224 No more functions from the list are called, but no newline is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3225 inserted.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3226 @item nil
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3227 No determination is made, and the next function in the list is called.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3228 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3229
Dave Love <fx@gnu.org>
parents:
diff changeset
3230 If every function in the list is called without a determination being
Dave Love <fx@gnu.org>
parents:
diff changeset
3231 made, then no newline is added. The default value for this variable is a
Dave Love <fx@gnu.org>
parents:
diff changeset
3232 list containing a single function which inserts newlines only after
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
3233 semicolons which do not appear inside parenthesis lists (i.e., those
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3234 that separate @code{for}-clause statements).
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3235 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3236
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3237 @defun c-semi&comma-no-newlines-before-nonblanks
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3238 @findex semi&comma-no-newlines-before-nonblanks (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3239 This is an example of a criteria function, provided by @ccmode{}. It
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3240 prevents newlines from being inserted after semicolons when there is a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3241 non-blank following line. Otherwise, it makes no determination. To
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3242 use, add this function to the front of the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3243 @code{c-hanging-semi&comma-criteria} list.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3244
Dave Love <fx@gnu.org>
parents:
diff changeset
3245 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3246 (defun c-semi&comma-no-newlines-before-nonblanks ()
Dave Love <fx@gnu.org>
parents:
diff changeset
3247 (save-excursion
Dave Love <fx@gnu.org>
parents:
diff changeset
3248 (if (and (eq last-command-char ?\;)
Dave Love <fx@gnu.org>
parents:
diff changeset
3249 (zerop (forward-line 1))
Dave Love <fx@gnu.org>
parents:
diff changeset
3250 (not (looking-at "^[ \t]*$")))
Dave Love <fx@gnu.org>
parents:
diff changeset
3251 'stop
Dave Love <fx@gnu.org>
parents:
diff changeset
3252 nil)))
Dave Love <fx@gnu.org>
parents:
diff changeset
3253 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3254 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3255
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3256 @defun c-semi&comma-inside-parenlist
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3257 @findex semi&comma-inside-parenlist (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3258 @defunx c-semi&comma-no-newlines-for-oneline-inliners
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3259 @findex semi&comma-no-newlines-for-oneline-inliners (c-)
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3260 The function @code{c-semi&comma-inside-parenlist} is what prevents
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3261 newlines from being inserted inside the parenthesis list of @code{for}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3262 statements. In addition to
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3263 @code{c-semi&comma-no-newlines-before-nonblanks} described above,
Dave Love <fx@gnu.org>
parents:
diff changeset
3264 @ccmode{} also comes with the criteria function
Dave Love <fx@gnu.org>
parents:
diff changeset
3265 @code{c-semi&comma-no-newlines-for-oneline-inliners}, which suppresses
Dave Love <fx@gnu.org>
parents:
diff changeset
3266 newlines after semicolons inside one-line inline method definitions
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
3267 (e.g., in C++ or Java).
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3268 @end defun
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3269
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3270
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3271 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3272 @node Other Special Indentations, , Customizing Semicolons and Commas, Advanced Customizations
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3273 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3274 @subsection Other Special Indentations
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3275 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3276
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3277 Here are the remaining odds and ends regarding indentation:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3278
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3279 @defopt c-label-minimum-indentation
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3280 @vindex label-minimum-indentation (c-)
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3281 In @samp{gnu} style (@pxref{Built-in Styles}), a minimum indentation
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3282 is imposed on lines inside top-level constructs. This minimum
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3283 indentation is controlled by this style variable. The default value
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3284 is 1.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3285 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3286
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3287 @defopt c-special-indent-hook
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3288 @vindex special-indent-hook (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3289 This style variable is a standard hook variable that is called after
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3290 every line is indented by @ccmode{}. You can use it to do any special
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3291 indentation or line adjustments your style dictates, such as adding
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3292 extra indentation to constructors or destructor declarations in a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3293 class definition, etc. Note that you should not change point or mark
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
3294 inside your @code{c-special-indent-hook} functions, i.e., you'll
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3295 probably want to wrap your function in a @code{save-excursion}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3296
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3297 Setting @code{c-special-indent-hook} in your style definition is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3298 handled slightly differently than other variables. In your style
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3299 definition, you should set the value for @code{c-special-indent-hook}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3300 to a function or list of functions, which will be appended to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3301 @code{c-special-indent-hook} using @code{add-hook}. That way, the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3302 current setting for the buffer local value of
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3303 @code{c-special-indent-hook} won't be overridden.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3304 @end defopt
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3305
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3306
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3307 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3308 @node Syntactic Symbols, Indentation Functions, Customizing Indentation, Top
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3309 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3310 @chapter Syntactic Symbols
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3311 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3312
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3313 @cindex syntactic symbols, brief list
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3314 @vindex c-offsets-alist
Dave Love <fx@gnu.org>
parents:
diff changeset
3315 @vindex offsets-alist (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
3316 Here is a complete list of the recognized syntactic symbols as described
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3317 in the @code{c-offsets-alist} style variable, along with a brief
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3318 description. More detailed descriptions follow.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3319
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3320 @table @code
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3321 @item string
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3322 Inside a multiline string.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3323 @item c
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3324 Inside a multiline C style block comment.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3325 @item defun-open
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3326 Brace that opens a top-level function definition.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3327 @item defun-close
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3328 Brace that closes a top-level function definition.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3329 @item defun-block-intro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3330 The first line in a top-level defun.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3331 @item class-open
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3332 Brace that opens a class definition.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3333 @item class-close
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3334 Brace that closes a class definition.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3335 @item inline-open
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3336 Brace that opens an in-class inline method.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3337 @item inline-close
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3338 Brace that closes an in-class inline method.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3339 @item func-decl-cont
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3340 The region between a function definition's argument list and the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3341 function opening brace (excluding K&R argument declarations). In C, you
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3342 cannot put anything but whitespace and comments in this region, however
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3343 in C++ and Java, @code{throws} declarations and other things can appear
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3344 here.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3345 @item knr-argdecl-intro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3346 First line of a K&R C argument declaration.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3347 @item knr-argdecl
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3348 Subsequent lines in a K&R C argument declaration.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3349 @item topmost-intro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3350 The first line in a ``topmost'' definition.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3351 @item topmost-intro-cont
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3352 Topmost definition continuation lines. This is only used in the parts
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3353 that aren't covered by other symbols such as @code{func-decl-cont} and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3354 @code{knr-argdecl}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3355 @item member-init-intro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3356 First line in a member initialization list.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3357 @item member-init-cont
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3358 Subsequent member initialization list lines.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3359 @item inher-intro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3360 First line of a multiple inheritance list.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3361 @item inher-cont
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3362 Subsequent multiple inheritance lines.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3363 @item block-open
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3364 Statement block open brace.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3365 @item block-close
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3366 Statement block close brace.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3367 @item brace-list-open
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3368 Open brace of an enum or static array list.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3369 @item brace-list-close
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3370 Close brace of an enum or static array list.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3371 @item brace-list-intro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3372 First line in an enum or static array list.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3373 @item brace-list-entry
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3374 Subsequent lines in an enum or static array list.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3375 @item brace-entry-open
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3376 Subsequent lines in an enum or static array list where the line begins
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3377 with an open brace.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3378 @item statement
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3379 A statement.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3380 @item statement-cont
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3381 A continuation of a statement.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3382 @item statement-block-intro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3383 The first line in a new statement block.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3384 @item statement-case-intro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3385 The first line in a case block.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3386 @item statement-case-open
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3387 The first line in a case block that starts with a brace.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3388 @item substatement
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3389 The first line after a conditional or loop construct.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3390 @item substatement-open
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3391 The brace that opens a substatement block.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3392 @item substatement-label
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3393 The first line after a conditional or loop construct if it's a label.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3394 @item case-label
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3395 A label in a @code{switch} block.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3396 @item access-label
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3397 C++ access control label.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3398 @item label
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3399 Any other label.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3400 @item do-while-closure
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3401 The @code{while} line that ends a @code{do}-@code{while} construct.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3402 @item else-clause
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3403 The @code{else} line of an @code{if}-@code{else} construct.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3404 @item catch-clause
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3405 The @code{catch} or @code{finally} (in Java) line of a
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3406 @code{try}-@code{catch} construct.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3407 @item comment-intro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3408 A line containing only a comment introduction.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3409 @item arglist-intro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3410 The first line in an argument list.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3411 @item arglist-cont
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3412 Subsequent argument list lines when no arguments follow on the same line
36341
0ab4e667274d (Syntactic Symbols): Remove doubled `the'.
Gerd Moellmann <gerd@gnu.org>
parents: 36160
diff changeset
3413 as the arglist opening paren.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3414 @item arglist-cont-nonempty
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3415 Subsequent argument list lines when at least one argument follows on the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3416 same line as the arglist opening paren.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3417 @item arglist-close
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3418 The solo close paren of an argument list.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3419 @item stream-op
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3420 Lines continuing a stream operator (C++ only).
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3421 @item inclass
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3422 The line is nested inside a class definition.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3423 @item cpp-macro
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3424 The start of a preprocessor macro definition.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3425 @item cpp-define-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3426 The first line inside a multiline preproprocessor macro if
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3427 @code{c-syntactic-indentation-in-macros} is set.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3428 @item cpp-macro-cont
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3429 All lines inside multiline preprocessor macros if
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3430 @code{c-syntactic-indentation-in-macros} is @code{nil}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3431 @item friend
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3432 A C++ friend declaration.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3433 @item objc-method-intro
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3434 The first line of an Objective-C method definition.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3435 @item objc-method-args-cont
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3436 Lines continuing an Objective-C method definition.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3437 @item objc-method-call-cont
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3438 Lines continuing an Objective-C method call.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3439 @item extern-lang-open
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
3440 Brace that opens an @code{extern} block (e.g., @code{extern "C" @{...@}}).
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3441 @item extern-lang-close
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3442 Brace that closes an @code{extern} block.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3443 @item inextern-lang
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3444 Analogous to @code{inclass} syntactic symbol, but used inside
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3445 @code{extern} blocks.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3446 @item namespace-open
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3447 @itemx namespace-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3448 @itemx innamespace
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3449 These are analogous to the three @code{extern-lang} symbols above, but
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3450 are returned for C++ namespace blocks.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3451 @item module-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3452 @itemx module-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3453 @itemx inmodule
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3454 Analogous to the above, but for CORBA IDL @code{module} blocks.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3455 @item composition-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3456 @itemx composition-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3457 @itemx incomposition
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3458 Analogous to the above, but for CORBA CIDL @code{composition} blocks.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3459 @item template-args-cont
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3460 C++ template argument list continuations.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3461 @item inlambda
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3462 Analogous to @code{inclass} syntactic symbol, but used inside lambda
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
3463 (i.e., anonymous) functions. Only used in Pike mode.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3464 @item lambda-intro-cont
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
3465 Lines continuing the header of a lambda function, i.e., between the
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3466 @code{lambda} keyword and the function body. Only used in Pike mode.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3467 @item inexpr-statement
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
3468 A statement block inside an expression. The gcc C and C++ extension for
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
3469 this is recognized. It's also used for the special functions that take
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
3470 a statement block as an argument in Pike.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3471 @item inexpr-class
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3472 A class definition inside an expression. This is used for anonymous
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3473 classes in Java. It's also used for anonymous array initializers in
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3474 Java.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3475 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3476
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3477 @ssindex -open symbols
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3478 @ssindex -close symbols
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3479 Most syntactic symbol names follow a general naming convention. When a
Dave Love <fx@gnu.org>
parents:
diff changeset
3480 line begins with an open or close brace, the syntactic symbol will
Dave Love <fx@gnu.org>
parents:
diff changeset
3481 contain the suffix @code{-open} or @code{-close} respectively.
Dave Love <fx@gnu.org>
parents:
diff changeset
3482
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3483 @ssindex -intro symbols
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3484 @ssindex -cont symbols
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3485 @ssindex -block-intro symbols
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3486 Usually, a distinction is made between the first line that introduces a
Dave Love <fx@gnu.org>
parents:
diff changeset
3487 construct and lines that continue a construct, and the syntactic symbols
Dave Love <fx@gnu.org>
parents:
diff changeset
3488 that represent these lines will contain the suffix @code{-intro} or
Dave Love <fx@gnu.org>
parents:
diff changeset
3489 @code{-cont} respectively. As a sub-classification of this scheme, a
Dave Love <fx@gnu.org>
parents:
diff changeset
3490 line which is the first of a particular brace block construct will
Dave Love <fx@gnu.org>
parents:
diff changeset
3491 contain the suffix @code{-block-intro}.
Dave Love <fx@gnu.org>
parents:
diff changeset
3492
Dave Love <fx@gnu.org>
parents:
diff changeset
3493 Let's look at some examples to understand how this works. Remember that
Dave Love <fx@gnu.org>
parents:
diff changeset
3494 you can check the syntax of any line by using @kbd{C-c C-s}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3495
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3496 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3497 1: void
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3498 2: swap( int& a, int& b )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3499 3: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3500 4: int tmp = a;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3501 5: a = b;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3502 6: b = tmp;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3503 7: int ignored =
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3504 8: a + b;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3505 9: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3506 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3507
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3508 @ssindex topmost-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3509 @ssindex topmost-intro-cont
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3510 @ssindex defun-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3511 @ssindex defun-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3512 @ssindex defun-block-intro
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3513 Line 1 shows a @code{topmost-intro} since it is the first line that
Dave Love <fx@gnu.org>
parents:
diff changeset
3514 introduces a top-level construct. Line 2 is a continuation of the
Dave Love <fx@gnu.org>
parents:
diff changeset
3515 top-level construct introduction so it has the syntax
Dave Love <fx@gnu.org>
parents:
diff changeset
3516 @code{topmost-intro-cont}. Line 3 shows a @code{defun-open} since it is
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3517 the brace that opens a top-level function definition. Line 9 is the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3518 corresponding
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3519 @code{defun-close} since it contains the brace that closes the top-level
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
3520 function definition. Line 4 is a @code{defun-block-intro}, i.e., it is
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3521 the first line of a brace-block, enclosed in a
Dave Love <fx@gnu.org>
parents:
diff changeset
3522 top-level function definition.
Dave Love <fx@gnu.org>
parents:
diff changeset
3523
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3524 @ssindex statement
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3525 @ssindex statement-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3526 Lines 5, 6, and 7 are all given @code{statement} syntax since there
Dave Love <fx@gnu.org>
parents:
diff changeset
3527 isn't much special about them. Note however that line 8 is given
Dave Love <fx@gnu.org>
parents:
diff changeset
3528 @code{statement-cont} syntax since it continues the statement begun
Dave Love <fx@gnu.org>
parents:
diff changeset
3529 on the previous line.
Dave Love <fx@gnu.org>
parents:
diff changeset
3530
Dave Love <fx@gnu.org>
parents:
diff changeset
3531 Here's another example, which illustrates some C++ class syntactic
Dave Love <fx@gnu.org>
parents:
diff changeset
3532 symbols:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3533
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3534 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3535 1: class Bass
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3536 2: : public Guitar,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3537 3: public Amplifiable
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3538 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3539 5: public:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3540 6: Bass()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3541 7: : eString( new BassString( 0.105 )),
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3542 8: aString( new BassString( 0.085 )),
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3543 9: dString( new BassString( 0.065 )),
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3544 10: gString( new BassString( 0.045 ))
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3545 11: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3546 12: eString.tune( 'E' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3547 13: aString.tune( 'A' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3548 14: dString.tune( 'D' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3549 15: gString.tune( 'G' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3550 16: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3551 17: friend class Luthier;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3552 18: @};
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3553 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3554
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3555 @ssindex class-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3556 @ssindex class-close
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3557 As in the previous example, line 1 has the @code{topmost-intro} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
3558 Here however, the brace that opens a C++ class definition on line 4 is
Dave Love <fx@gnu.org>
parents:
diff changeset
3559 assigned the @code{class-open} syntax. Note that in C++, classes,
Dave Love <fx@gnu.org>
parents:
diff changeset
3560 structs, and unions are essentially equivalent syntactically (and are
Dave Love <fx@gnu.org>
parents:
diff changeset
3561 very similar semantically), so replacing the @code{class} keyword in the
Dave Love <fx@gnu.org>
parents:
diff changeset
3562 example above with @code{struct} or @code{union} would still result in a
Dave Love <fx@gnu.org>
parents:
diff changeset
3563 syntax of @code{class-open} for line 4 @footnote{This is the case even
Dave Love <fx@gnu.org>
parents:
diff changeset
3564 for C and Objective-C. For consistency, structs in all supported
Dave Love <fx@gnu.org>
parents:
diff changeset
3565 languages are syntactically equivalent to classes. Note however that
Dave Love <fx@gnu.org>
parents:
diff changeset
3566 the keyword @code{class} is meaningless in C and Objective-C.}.
Dave Love <fx@gnu.org>
parents:
diff changeset
3567 Similarly, line 18 is assigned @code{class-close} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
3568
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3569 @ssindex inher-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3570 @ssindex inher-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3571 Line 2 introduces the inheritance list for the class so it is assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
3572 the @code{inher-intro} syntax, and line 3, which continues the
Dave Love <fx@gnu.org>
parents:
diff changeset
3573 inheritance list is given @code{inher-cont} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
3574
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3575 @ssindex access-label
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3576 @ssindex inclass
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3577 Hitting @kbd{C-c C-s} on line 5 shows the following analysis:
Dave Love <fx@gnu.org>
parents:
diff changeset
3578
Dave Love <fx@gnu.org>
parents:
diff changeset
3579 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3580 ((inclass 58) (access-label 58))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3581 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3582
Dave Love <fx@gnu.org>
parents:
diff changeset
3583 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
3584 The primary syntactic symbol for this line is @code{access-label} as
Dave Love <fx@gnu.org>
parents:
diff changeset
3585 this a label keyword that specifies access protection in C++. However,
Dave Love <fx@gnu.org>
parents:
diff changeset
3586 because this line is also a top-level construct inside a class
Dave Love <fx@gnu.org>
parents:
diff changeset
3587 definition, the analysis actually shows two syntactic symbols. The
Dave Love <fx@gnu.org>
parents:
diff changeset
3588 other syntactic symbol assigned to this line is @code{inclass}.
Dave Love <fx@gnu.org>
parents:
diff changeset
3589 Similarly, line 6 is given both @code{inclass} and @code{topmost-intro}
Dave Love <fx@gnu.org>
parents:
diff changeset
3590 syntax:
Dave Love <fx@gnu.org>
parents:
diff changeset
3591
Dave Love <fx@gnu.org>
parents:
diff changeset
3592 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3593 ((inclass 58) (topmost-intro 60))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3594 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3595
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3596 @ssindex member-init-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3597 @ssindex member-init-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3598 Line 7 introduces a C++ member initialization list and as such is given
Dave Love <fx@gnu.org>
parents:
diff changeset
3599 @code{member-init-intro} syntax. Note that in this case it is
Dave Love <fx@gnu.org>
parents:
diff changeset
3600 @emph{not} assigned @code{inclass} since this is not considered a
Dave Love <fx@gnu.org>
parents:
diff changeset
3601 top-level construct. Lines 8 through 10 are all assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
3602 @code{member-init-cont} since they continue the member initialization
Dave Love <fx@gnu.org>
parents:
diff changeset
3603 list started on line 7.
Dave Love <fx@gnu.org>
parents:
diff changeset
3604
Dave Love <fx@gnu.org>
parents:
diff changeset
3605 @cindex in-class inline methods
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3606 @ssindex inline-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3607 @ssindex inline-close
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3608 Line 11's analysis is a bit more complicated:
Dave Love <fx@gnu.org>
parents:
diff changeset
3609
Dave Love <fx@gnu.org>
parents:
diff changeset
3610 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3611 ((inclass 58) (inline-open))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3612 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3613
Dave Love <fx@gnu.org>
parents:
diff changeset
3614 This line is assigned a syntax of both @code{inline-open} and
Dave Love <fx@gnu.org>
parents:
diff changeset
3615 @code{inclass} because it opens an @dfn{in-class} C++ inline method
Dave Love <fx@gnu.org>
parents:
diff changeset
3616 definition. This is distinct from, but related to, the C++ notion of an
Dave Love <fx@gnu.org>
parents:
diff changeset
3617 inline function in that its definition occurs inside an enclosing class
Dave Love <fx@gnu.org>
parents:
diff changeset
3618 definition, which in C++ implies that the function should be inlined.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3619 However, if the definition of the @code{Bass} constructor appeared
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3620 outside the class definition, the construct would be given the
Dave Love <fx@gnu.org>
parents:
diff changeset
3621 @code{defun-open} syntax, even if the keyword @code{inline} appeared
Dave Love <fx@gnu.org>
parents:
diff changeset
3622 before the method name, as in:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3623
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3624 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3625 1: class Bass
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3626 2: : public Guitar,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3627 3: public Amplifiable
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3628 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3629 5: public:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3630 6: Bass();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3631 7: @};
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3632 8:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3633 9: inline
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3634 10: Bass::Bass()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3635 11: : eString( new BassString( 0.105 )),
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3636 12: aString( new BassString( 0.085 )),
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3637 13: dString( new BassString( 0.065 )),
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3638 14: gString( new BassString( 0.045 ))
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3639 15: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3640 16: eString.tune( 'E' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3641 17: aString.tune( 'A' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3642 18: dString.tune( 'D' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3643 19: gString.tune( 'G' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3644 20: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3645 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3646
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3647 @ssindex friend
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3648 Returning to the previous example, line 16 is given @code{inline-close}
Dave Love <fx@gnu.org>
parents:
diff changeset
3649 syntax, while line 12 is given @code{defun-block-open} syntax, and lines
Dave Love <fx@gnu.org>
parents:
diff changeset
3650 13 through 15 are all given @code{statement} syntax. Line 17 is
Dave Love <fx@gnu.org>
parents:
diff changeset
3651 interesting in that its syntactic analysis list contains three
Dave Love <fx@gnu.org>
parents:
diff changeset
3652 elements:
Dave Love <fx@gnu.org>
parents:
diff changeset
3653
Dave Love <fx@gnu.org>
parents:
diff changeset
3654 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3655 ((inclass 58) (topmost-intro 380) (friend))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3656 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3657
Dave Love <fx@gnu.org>
parents:
diff changeset
3658 The @code{friend} syntactic symbol is a modifier that typically does not
Dave Love <fx@gnu.org>
parents:
diff changeset
3659 have a relative buffer position.
Dave Love <fx@gnu.org>
parents:
diff changeset
3660
Dave Love <fx@gnu.org>
parents:
diff changeset
3661 Template definitions introduce yet another syntactic symbol:
Dave Love <fx@gnu.org>
parents:
diff changeset
3662
Dave Love <fx@gnu.org>
parents:
diff changeset
3663 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3664 1: ThingManager <int,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3665 2: Framework::Callback *,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3666 3: Mutex> framework_callbacks;
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3667 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3668
Dave Love <fx@gnu.org>
parents:
diff changeset
3669 Here, line 1 is analyzed as a @code{topmost-intro}, but lines 2 and 3
Dave Love <fx@gnu.org>
parents:
diff changeset
3670 are both analyzed as @code{template-args-cont} lines.
Dave Love <fx@gnu.org>
parents:
diff changeset
3671
Dave Love <fx@gnu.org>
parents:
diff changeset
3672 Here is another (totally contrived) example which illustrates how syntax
Dave Love <fx@gnu.org>
parents:
diff changeset
3673 is assigned to various conditional constructs:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3674
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3675 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3676 1: void spam( int index )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3677 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3678 3: for( int i=0; i<index; i++ )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3679 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3680 5: if( i == 10 )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3681 6: do_something_special();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3682 7: else
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3683 8: silly_label:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3684 9: do_something( i );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3685 10: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3686 11: do @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3687 12: another_thing( i-- );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3688 13: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3689 14: while( i > 0 );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3690 15: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3691 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3692
Dave Love <fx@gnu.org>
parents:
diff changeset
3693 Only the lines that illustrate new syntactic symbols will be discussed.
Dave Love <fx@gnu.org>
parents:
diff changeset
3694
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3695 @ssindex substatement-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3696 @ssindex substatement-block-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3697 @ssindex block-close
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3698 Line 4 has a brace which opens a conditional's substatement block. It
Dave Love <fx@gnu.org>
parents:
diff changeset
3699 is thus assigned @code{substatement-open} syntax, and since line 5 is
Dave Love <fx@gnu.org>
parents:
diff changeset
3700 the first line in the substatement block, it is assigned
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3701 @code{substatement-block-intro} syntax. Line 10 contains the brace that
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3702 closes the inner substatement block, and is therefore given the syntax
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3703 @code{block-close}. Line 13 is treated the same way.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3704
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3705 @ssindex substatement
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3706 Lines 6 and 9 are also substatements of conditionals, but since they
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3707 don't start blocks they are given @code{substatement} syntax
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3708 instead of @code{substatement-open}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3709
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3710 @ssindex substatement-label
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3711 Line 8 contains a label, which is normally given @code{label} syntax.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3712 This one is however a bit special since it's between a conditional and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3713 its substatement. It's analyzed as @code{substatement-label} to let you
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3714 handle this rather odd case differently from normal labels.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3715
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3716 @ssindex else-clause
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3717 @ssindex catch-clause
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3718 Line 7 start with an @code{else} that matches the @code{if} statement on
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3719 line 5. It is therefore given the @code{else-clause} syntax and is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3720 anchored on the matching @code{if}. The @code{try}-@code{catch}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3721 constructs in C++ and Java are treated this way too, except that
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3722 @code{catch} and (in Java) @code{finally}, are marked with
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3723 @code{catch-clause}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3724
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3725 @ssindex do-while-closure
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3726 The @code{while} construct on line 14 that closes a @code{do}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3727 conditional is given the special syntax @code{do-while-closure} if it
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3728 appears on a line by itself. Note that if the @code{while} appeared on
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3729 the same line as the preceding close brace, that line would still have
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3730 @code{block-close} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3731
Dave Love <fx@gnu.org>
parents:
diff changeset
3732 Switch statements have their own set of syntactic symbols. Here's an
Dave Love <fx@gnu.org>
parents:
diff changeset
3733 example:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3734
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3735 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3736 1: void spam( enum Ingredient i )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3737 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3738 3: switch( i ) @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3739 4: case Ham:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3740 5: be_a_pig();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3741 6: break;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3742 7: case Salt:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3743 8: drink_some_water();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3744 9: break;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3745 10: default:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3746 11: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3747 12: what_is_it();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3748 13: break;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3749 14: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3750 15: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3751 14: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3752 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3753
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3754 @ssindex case-label
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3755 @ssindex statement-case-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3756 @ssindex statement-case-open
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3757 Here, lines 4, 7, and 10 are all assigned @code{case-label} syntax,
Dave Love <fx@gnu.org>
parents:
diff changeset
3758 while lines 5 and 8 are assigned @code{statement-case-intro}. Line 11
Dave Love <fx@gnu.org>
parents:
diff changeset
3759 is treated slightly differently since it contains a brace that opens a
Dave Love <fx@gnu.org>
parents:
diff changeset
3760 block --- it is given @code{statement-case-open} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
3761
Dave Love <fx@gnu.org>
parents:
diff changeset
3762 @cindex brace lists
Dave Love <fx@gnu.org>
parents:
diff changeset
3763 There are a set of syntactic symbols that are used to recognize
Dave Love <fx@gnu.org>
parents:
diff changeset
3764 constructs inside of brace lists. A brace list is defined as an
Dave Love <fx@gnu.org>
parents:
diff changeset
3765 @code{enum} or aggregate initializer list, such as might statically
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3766 initialize an array of structs. The three special aggregate constructs
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3767 in Pike, @code{(@{ @})}, @code{([ ])} and @code{(< >)}, are treated as
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3768 brace lists too. An example:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3769
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3770 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3771 1: static char* ingredients[] =
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3772 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3773 3: "Ham",
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3774 4: "Salt",
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3775 5: NULL
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3776 6: @};
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3777 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3778
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3779 @ssindex brace-list-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3780 @ssindex brace-list-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3781 @ssindex brace-list-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3782 @ssindex brace-list-entry
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3783 Following convention, line 2 in this example is assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
3784 @code{brace-list-open} syntax, and line 3 is assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
3785 @code{brace-list-intro} syntax. Likewise, line 6 is assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
3786 @code{brace-list-close} syntax. Lines 4 and 5 however, are assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
3787 @code{brace-list-entry} syntax, as would all subsequent lines in this
Dave Love <fx@gnu.org>
parents:
diff changeset
3788 initializer list.
Dave Love <fx@gnu.org>
parents:
diff changeset
3789
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3790 @ssindex brace-entry-open
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3791 Your static initializer might be initializing nested structures, for
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3792 example:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3793
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3794 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3795 1: struct intpairs[] =
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3796 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3797 3: @{ 1, 2 @},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3798 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3799 5: 3,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3800 6: 4
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3801 7: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3802 8: @{ 1,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3803 9: 2 @},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3804 10: @{ 3, 4 @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3805 11: @};
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3806 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3807
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3808 Here, you've already seen the analysis of lines 1, 2, 3, and 11. On
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3809 line 4, things get interesting; this line is assigned
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3810 @code{brace-entry-open} syntactic symbol because it's a bracelist entry
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3811 line that starts with an open brace. Lines 5 and 6 (and line 9) are
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3812 pretty standard, and line 7 is a @code{brace-list-close} as you'd
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3813 expect. Once again, line 8 is assigned as @code{brace-entry-open} as is
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3814 line 10.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3815
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3816 External language definition blocks also have their own syntactic
Dave Love <fx@gnu.org>
parents:
diff changeset
3817 symbols. In this example:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3818
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3819 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3820 1: extern "C"
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3821 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3822 3: int thing_one( int );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3823 4: int thing_two( double );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3824 5: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3825 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3826
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3827 @ssindex extern-lang-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3828 @ssindex extern-lang-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3829 @ssindex inextern-lang
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3830 @ssindex inclass
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3831 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
3832 line 2 is given the @code{extern-lang-open} syntax, while line 5 is given
Dave Love <fx@gnu.org>
parents:
diff changeset
3833 the @code{extern-lang-close} syntax. The analysis for line 3 yields:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3834
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3835 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3836 ((inextern-lang) (topmost-intro 14))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3837 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3838
Dave Love <fx@gnu.org>
parents:
diff changeset
3839 @noindent
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3840 where @code{inextern-lang} is a modifier similar in purpose to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3841 @code{inclass}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3842
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3843 There are various other top level blocks like @code{extern}, and they
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3844 are all treated in the same way except that the symbols are named after
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
3845 the keyword that introduces the block. e.g., C++ namespace blocks get
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3846 the three symbols @code{namespace-open}, @code{namespace-close} and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3847 @code{innamespace}. The currently recognized top level blocks are:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3848
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3849 @table @asis
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3850 @item @code{extern-lang-open}, @code{extern-lang-close}, @code{inextern-lang}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3851 @code{extern} blocks in C and C++.@footnote{These should logically be
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3852 named @code{extern-open}, @code{extern-close} and @code{inextern}, but
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3853 that isn't the case for historical reasons.}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3854
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3855 @item @code{namespace-open}, @code{namespace-close}, @code{innamespace}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3856 @ssindex namespace-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3857 @ssindex namespace-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3858 @ssindex innamespace
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3859 @code{namespace} blocks in C++.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3860
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3861 @item @code{module-open}, @code{module-close}, @code{inmodule}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3862 @ssindex module-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3863 @ssindex module-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3864 @ssindex inmodule
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3865 @code{module} blocks in CORBA IDL.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3866
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3867 @item @code{composition-open}, @code{composition-close}, @code{incomposition}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3868 @ssindex composition-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3869 @ssindex composition-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3870 @ssindex incomposition
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3871 @code{composition} blocks in CORBA CIDL.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3872 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3873
Dave Love <fx@gnu.org>
parents:
diff changeset
3874 A number of syntactic symbols are associated with parenthesis lists,
Dave Love <fx@gnu.org>
parents:
diff changeset
3875 a.k.a argument lists, as found in function declarations and function
Dave Love <fx@gnu.org>
parents:
diff changeset
3876 calls. This example illustrates these:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3877
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3878 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3879 1: void a_function( int line1,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3880 2: int line2 );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3881 3:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3882 4: void a_longer_function(
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3883 5: int line1,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3884 6: int line2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3885 7: );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3886 8:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3887 9: void call_them( int line1, int line2 )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3888 10: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3889 11: a_function(
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3890 12: line1,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3891 13: line2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3892 14: );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3893 15:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3894 16: a_longer_function( line1,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3895 17: line2 );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3896 18: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3897 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3898
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3899 @ssindex arglist-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3900 @ssindex arglist-close
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3901 Lines 5 and 12 are assigned @code{arglist-intro} syntax since they are
Dave Love <fx@gnu.org>
parents:
diff changeset
3902 the first line following the open parenthesis, and lines 7 and 14 are
Dave Love <fx@gnu.org>
parents:
diff changeset
3903 assigned @code{arglist-close} syntax since they contain the parenthesis
Dave Love <fx@gnu.org>
parents:
diff changeset
3904 that closes the argument list.
Dave Love <fx@gnu.org>
parents:
diff changeset
3905
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3906 @ssindex arglist-cont-nonempty
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3907 @ssindex arglist-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3908 Lines that continue argument lists can be assigned one of two syntactic
Dave Love <fx@gnu.org>
parents:
diff changeset
3909 symbols. For example, Lines 2 and 17
Dave Love <fx@gnu.org>
parents:
diff changeset
3910 are assigned @code{arglist-cont-nonempty} syntax. What this means
Dave Love <fx@gnu.org>
parents:
diff changeset
3911 is that they continue an argument list, but that the line containing the
Dave Love <fx@gnu.org>
parents:
diff changeset
3912 parenthesis that opens the list is @emph{not empty} following the open
Dave Love <fx@gnu.org>
parents:
diff changeset
3913 parenthesis. Contrast this against lines 6 and 13 which are assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
3914 @code{arglist-cont} syntax. This is because the parenthesis that opens
Dave Love <fx@gnu.org>
parents:
diff changeset
3915 their argument lists is the last character on that line.
Dave Love <fx@gnu.org>
parents:
diff changeset
3916
Dave Love <fx@gnu.org>
parents:
diff changeset
3917 Note that there is no @code{arglist-open} syntax. This is because any
Dave Love <fx@gnu.org>
parents:
diff changeset
3918 parenthesis that opens an argument list, appearing on a separate line,
Dave Love <fx@gnu.org>
parents:
diff changeset
3919 is assigned the @code{statement-cont} syntax instead.
Dave Love <fx@gnu.org>
parents:
diff changeset
3920
Dave Love <fx@gnu.org>
parents:
diff changeset
3921 A few miscellaneous syntactic symbols that haven't been previously
Dave Love <fx@gnu.org>
parents:
diff changeset
3922 covered are illustrated by this C++ example:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3923
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3924 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3925 1: void Bass::play( int volume )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3926 2: const
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3927 3: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3928 4: /* this line starts a multiline
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3929 5: * comment. This line should get `c' syntax */
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3930 6:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3931 7: char* a_multiline_string = "This line starts a multiline \
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3932 8: string. This line should get `string' syntax.";
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3933 9:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3934 10: note:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3935 11: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3936 12: #ifdef LOCK
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3937 13: Lock acquire();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3938 14: #endif // LOCK
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3939 15: slap_pop();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3940 16: cout << "I played "
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3941 17: << "a note\n";
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3942 18: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3943 19: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3944 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3945
Dave Love <fx@gnu.org>
parents:
diff changeset
3946 The lines to note in this example include:
Dave Love <fx@gnu.org>
parents:
diff changeset
3947
Dave Love <fx@gnu.org>
parents:
diff changeset
3948 @itemize @bullet
Dave Love <fx@gnu.org>
parents:
diff changeset
3949 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3950 @ssindex func-decl-cont
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3951 Line 2 is assigned the @code{func-decl-cont} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3952
Dave Love <fx@gnu.org>
parents:
diff changeset
3953 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3954 @ssindex comment-intro
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3955 Line 4 is assigned both @code{defun-block-intro} @emph{and}
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3956 @code{comment-intro} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3957
Dave Love <fx@gnu.org>
parents:
diff changeset
3958 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3959 @ssindex c
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3960 Line 5 is assigned @code{c} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3961
Dave Love <fx@gnu.org>
parents:
diff changeset
3962 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
3963 @cindex syntactic whitespace
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3964 Line 6 which, even though it contains nothing but whitespace, is
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3965 assigned @code{defun-block-intro}. Note that the appearance of the
Dave Love <fx@gnu.org>
parents:
diff changeset
3966 comment on lines 4 and 5 do not cause line 6 to be assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
3967 @code{statement} syntax because comments are considered to be
Dave Love <fx@gnu.org>
parents:
diff changeset
3968 @dfn{syntactic whitespace}, which are ignored when analyzing
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3969 code.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3970
Dave Love <fx@gnu.org>
parents:
diff changeset
3971 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3972 @ssindex string
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3973 Line 8 is assigned @code{string} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3974
Dave Love <fx@gnu.org>
parents:
diff changeset
3975 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3976 @ssindex label
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3977 Line 10 is assigned @code{label} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3978
Dave Love <fx@gnu.org>
parents:
diff changeset
3979 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3980 @ssindex block-open
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3981 Line 11 is assigned @code{block-open} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3982
Dave Love <fx@gnu.org>
parents:
diff changeset
3983 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3984 @ssindex cpp-macro
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3985 Lines 12 and 14 are assigned @code{cpp-macro} syntax in addition to the
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3986 normal syntactic symbols (@code{statement-block-intro} and
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3987 @code{statement}, respectively). Normally @code{cpp-macro} is
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3988 configured to cancel out the normal syntactic context to make all
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3989 preprocessor directives stick to the first column, but that's easily
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3990 changed if you want preprocessor directives to be indented like the rest
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3991 of the code.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3992
Dave Love <fx@gnu.org>
parents:
diff changeset
3993 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3994 @ssindex stream-op
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
3995 Line 17 is assigned @code{stream-op} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3996 @end itemize
Dave Love <fx@gnu.org>
parents:
diff changeset
3997
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3998 @cindex multiline macros
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3999 @cindex syntactic whitespace
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4000 @ssindex cpp-define-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4001 Multiline preprocessor macro definitions are normally handled just like
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
4002 other code, i.e., the lines inside them are indented according to the
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4003 syntactic analysis of the preceding lines inside the macro. The first
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
4004 line inside a macro definition (i.e., the line after the starting line of
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4005 the cpp directive itself) gets @code{cpp-define-intro}. In this example:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4006
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4007 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4008 1: #define LIST_LOOP(cons, listp) \
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4009 2: for (cons = listp; !NILP (cons); cons = XCDR (cons)) \
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4010 3: if (!CONSP (cons)) \
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4011 4: signal_error ("Invalid list format", listp); \
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4012 5: else
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4013 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4014
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4015 @noindent
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4016 line 1 is given the syntactic symbol @code{cpp-macro}. The first line
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4017 of a cpp directive is always given that symbol. Line 2 is given
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4018 @code{cpp-define-intro}, so that you can give the macro body as a whole
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4019 some extra indentation. Lines 3 through 5 are then analyzed as normal
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
4020 code, i.e., @code{substatement} on lines 3 and 4, and @code{else-clause}
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4021 on line 5.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4022
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4023 The syntactic analysis inside macros can be turned off with
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4024 @code{c-syntactic-indentation-in-macros}. In that case, lines 2 through
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4025 5 would all be given @code{cpp-macro-cont} with a relative buffer
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4026 position pointing to the @code{#} which starts the cpp
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4027 directive@footnote{This is how @ccmode{} 5.28 and earlier analyzed
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4028 macros.}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4029
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4030 @xref{Macro Handling}, for more info about the treatment of macros.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4031
Dave Love <fx@gnu.org>
parents:
diff changeset
4032 In Objective-C buffers, there are three additional syntactic symbols
Dave Love <fx@gnu.org>
parents:
diff changeset
4033 assigned to various message calling constructs. Here's an example
Dave Love <fx@gnu.org>
parents:
diff changeset
4034 illustrating these:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4035
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4036 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4037 1: - (void)setDelegate:anObject
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4038 2: withStuff:stuff
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4039 3: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4040 4: [delegate masterWillRebind:self
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4041 5: toDelegate:anObject
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4042 6: withExtraStuff:stuff];
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4043 7: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4044 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4045
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4046 @ssindex objc-method-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4047 @ssindex objc-method-args-cont
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4048 @ssindex objc-method-call-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4049 Here, line 1 is assigned @code{objc-method-intro} syntax, and line 2 is
Dave Love <fx@gnu.org>
parents:
diff changeset
4050 assigned @code{objc-method-args-cont} syntax. Lines 5 and 6 are both
Dave Love <fx@gnu.org>
parents:
diff changeset
4051 assigned @code{objc-method-call-cont} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4052
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4053 Java has a concept of anonymous classes, which may look something like
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4054 this:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4055
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4056 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4057 1: public void watch(Observable o) @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4058 2: o.addObserver(new Observer() @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4059 3: public void update(Observable o, Object arg) @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4060 4: history.addElement(arg);
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4061 5: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4062 6: @});
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4063 7: @}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4064 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4065
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4066 @ssindex inexpr-class
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4067 The brace following the @code{new} operator opens the anonymous class.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4068 Lines 3 and 6 are assigned the @code{inexpr-class} syntax, besides the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4069 @code{inclass} symbol used in normal classes. Thus, the class will be
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4070 indented just like a normal class, with the added indentation given to
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4071 @code{inexpr-class}.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4072
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4073 There are a few occasions where a statement block may be used inside an
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
4074 expression. One is in C or C++ code using the gcc extension for this,
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
4075 e.g:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4076
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4077 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4078 1: int res = (@{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4079 2: int y = foo (); int z;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4080 3: if (y > 0) z = y; else z = - y;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4081 4: z;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4082 5: @});
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4083 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4084
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4085 @ssindex inexpr-statement
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4086 Lines 2 and 5 get the @code{inexpr-statement} syntax, besides the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4087 symbols they'd get in a normal block. Therefore, the indentation put on
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4088 @code{inexpr-statement} is added to the normal statement block
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4089 indentation.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4090
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4091 In Pike code, there are a few other situations where blocks occur inside
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4092 statements, as illustrated here:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4093
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4094 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4095 1: array itgob()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4096 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4097 3: string s = map (backtrace()[-2][3..],
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4098 4: lambda
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4099 5: (mixed arg)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4100 6: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4101 7: return sprintf ("%t", arg);
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4102 8: @}) * ", " + "\n";
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4103 9: return catch @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4104 10: write (s + "\n");
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4105 11: @};
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4106 12: @}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4107 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4108
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4109 @ssindex inlambda
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4110 @ssindex lambda-intro-cont
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4111 Lines 4 through 8 contain a lambda function, which @ccmode{} recognizes
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4112 by the @code{lambda} keyword. If the function argument list is put
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4113 on a line of its own, as in line 5, it gets the @code{lambda-intro-cont}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4114 syntax. The function body is handled as an inline method body, with the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4115 addition of the @code{inlambda} syntactic symbol. This means that line
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4116 6 gets @code{inlambda} and @code{inline-open}, and line 8 gets
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4117 @code{inline-close}@footnote{You might wonder why it doesn't get
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4118 @code{inlambda} too. It's because the closing brace is relative to the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4119 opening brace, which stands on its own line in this example. If the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4120 opening brace was hanging on the previous line, then the closing brace
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4121 would get the @code{inlambda} syntax too to be indented correctly.}.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4122
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4123 @ssindex inexpr-statement
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4124 On line 9, @code{catch} is a special function taking a statement block
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4125 as its argument. The block is handled as an in-expression statement
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4126 with the @code{inexpr-statement} syntax, just like the gcc extended C
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4127 example above. The other similar special function, @code{gauge}, is
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4128 handled like this too.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4129
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4130 @ssindex knr-argdecl-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4131 @ssindex knr-argdecl
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4132 Two other syntactic symbols can appear in old style, non-prototyped C
Dave Love <fx@gnu.org>
parents:
diff changeset
4133 code @footnote{a.k.a. K&R C, or Kernighan & Ritchie C}:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4134
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4135 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4136 1: int add_three_integers(a, b, c)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4137 2: int a;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4138 3: int b;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4139 4: int c;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4140 5: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4141 6: return a + b + c;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4142 7: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4143 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4144
Dave Love <fx@gnu.org>
parents:
diff changeset
4145 Here, line 2 is the first line in an argument declaration list and so is
Dave Love <fx@gnu.org>
parents:
diff changeset
4146 given the @code{knr-argdecl-intro} syntactic symbol. Subsequent lines
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
4147 (i.e., lines 3 and 4 in this example), are given @code{knr-argdecl}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4148 syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4149
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4150
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4151 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4152 @node Indentation Functions, AWK Mode, Syntactic Symbols, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4153 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4154 @chapter Indentation Functions
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4155 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4156
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4157 @cindex indentation function
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4158 @cindex line-up function
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4159 Often there are cases when a simple offset setting on a syntactic
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4160 symbol isn't enough to get the desired indentation. Therefore, it's
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4161 also possible to use an @dfn{indentation function} (a.k.a. @dfn{line-up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4162 function}) for a syntactic symbol.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4163
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4164 @ccmode{} comes with many predefined indentation functions for common
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4165 situations. If none of these does what you want, you can write your
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4166 own, see @ref{Custom Indentation Functions}. If you do, it's probably a
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4167 good idea to start working from one of these predefined functions, they
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4168 can be found in the file @file{cc-align.el}.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4169
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4170 For every function below there is a ``works with'' list that indicates
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4171 which syntactic symbols the function is intended to be used with.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4172
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4173 @macro workswith
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
4174 @emph{Works with:@ }
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4175 @end macro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4176 @ifinfo
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4177 @unmacro workswith
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4178 @macro workswith
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4179 Works with:
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4180 @end macro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4181 @end ifinfo
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4182
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4183 @macro sssTBasicOffset
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4184 <--> @i{c-basic-offset}@c
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4185 @end macro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4186
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4187 @macro sssTsssTBasicOffset
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4188 <--><--> @i{c-basic-offset}@c
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4189 @end macro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4190
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4191 @macro hereFn{func}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4192 <- @i{\func\}@c
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4193 @end macro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4194
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4195 @c The TeX backend seems to insert extra spaces around the argument. :P
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4196 @iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4197 @unmacro hereFn
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4198 @macro hereFn{func}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4199 <-@i{\func\}@c
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4200 @end macro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4201 @end iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4202
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4203 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4204
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4205 @defun c-indent-one-line-block
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4206 @findex indent-one-line-block (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4207 Indent a one line block @code{c-basic-offset} extra. E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4208
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4209 @example
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4210 @group
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4211 if (n > 0)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4212 @{m+=n; n=0;@} @hereFn{c-indent-one-line-block}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4213 @sssTBasicOffset{}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4214 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4215 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4216
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4217 @noindent
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4218 and
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4219
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4220 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4221 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4222 if (n > 0)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4223 @{ @hereFn{c-indent-one-line-block}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4224 m+=n; n=0;
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4225 @}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4226 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4227 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4228
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4229 The block may be surrounded by any kind of parenthesis characters.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4230 @code{nil} is returned if the line doesn't start with a one line block,
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4231 which makes the function usable in list expressions.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4232
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4233 @workswith Almost all syntactic symbols, but most useful on the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4234 @code{-open} symbols.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4235 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4236
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4237 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4238
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4239 @defun c-indent-multi-line-block
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4240 @findex indent-multi-line-block (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4241 Indent a multiline block @code{c-basic-offset} extra. E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4242
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4243 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4244 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4245 int *foo[] = @{
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4246 NULL,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4247 @{17@}, @hereFn{c-indent-multi-line-block}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4248 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4249 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4250
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4251 @noindent
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4252 and
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4253
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4254 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4255 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4256 int *foo[] = @{
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4257 NULL,
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4258 @{ @hereFn{c-indent-multi-line-block}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4259 17
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4260 @},
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4261 @sssTBasicOffset{}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4262 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4263 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4264
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4265 The block may be surrounded by any kind of parenthesis characters.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4266 @code{nil} is returned if the line doesn't start with a multiline
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4267 block, which makes the function usable in list expressions.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4268
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4269 @workswith Almost all syntactic symbols, but most useful on the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4270 @code{-open} symbols.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4271 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4272
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4273 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4274
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4275 @defun c-lineup-argcont
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4276 @findex lineup-argcont (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4277 Line up a continued argument. E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4278
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4279 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4280 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4281 foo (xyz, aaa + bbb + ccc
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4282 + ddd + eee + fff); @hereFn{c-lineup-argcont}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4283 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4284 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4285
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4286 Only continuation lines like this are touched, @code{nil} is returned on
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4287 lines which are the start of an argument.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4288
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4289 Within a gcc @code{asm} block, @code{:} is recognised as an argument
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4290 separator, but of course only between operand specifications, not in the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4291 expressions for the operands.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4292
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4293 @workswith @code{arglist-cont}, @code{arglist-cont-nonempty}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4294 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4295
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4296 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4297
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4298 @defun c-lineup-arglist
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4299 @findex lineup-arglist (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4300 Line up the current argument line under the first argument.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4301
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4302 As a special case, if an argument on the same line as the open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4303 parenthesis starts with a brace block opener, the indentation is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4304 @code{c-basic-offset} only. This is intended as a ``DWIM'' measure in
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4305 cases like macros that contains statement blocks, e.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4306
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4307 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4308 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4309 A_VERY_LONG_MACRO_NAME (@{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4310 some (code, with + long, lines * in[it]);
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4311 @});
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4312 @sssTBasicOffset{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4313 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4314 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4315
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4316 This is motivated partly because it's more in line with how code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4317 blocks are handled, and partly since it approximates the behavior of
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4318 earlier CC Mode versions, which due to inaccurate analysis tended to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4319 indent such cases this way.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4320
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4321 @workswith @code{arglist-cont-nonempty}, @code{arglist-close}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4322 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4323
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4324 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4325
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4326 @defun c-lineup-arglist-intro-after-paren
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4327 @findex lineup-arglist-intro-after-paren (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4328 Line up a line to just after the open paren of the surrounding paren or
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4329 brace block.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4330
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4331 @workswith @code{defun-block-intro}, @code{brace-list-intro},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4332 @code{statement-block-intro}, @code{statement-case-intro},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4333 @code{arglist-intro}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4334 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4335
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4336 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4337
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4338 @defun c-lineup-arglist-close-under-paren
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4339 @findex lineup-arglist-close-under-paren (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4340 Set your @code{arglist-close} syntactic symbol to this line-up function
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4341 so that parentheses that close argument lists will line up under the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4342 parenthesis that opened the argument list. It can also be used with
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4343 @code{arglist-cont} and @code{arglist-cont-nonempty} to line up all
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4344 lines inside a parenthesis under the open paren.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4345
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4346 As a special case, if a brace block is opened at the same line as the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4347 open parenthesis of the argument list, the indentation is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4348 @code{c-basic-offset} only. See @code{c-lineup-arglist} for further
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4349 discussion of this ``DWIM'' measure.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4350
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4351 @workswith Almost all symbols, but are typically most useful on
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4352 @code{arglist-close}, @code{brace-list-close}, @code{arglist-cont} and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4353 @code{arglist-cont-nonempty}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4354 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4355
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4356 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4357
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4358 @defun c-lineup-arglist-operators
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4359 @findex lineup-arglist-operators (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4360 Line up lines starting with an infix operator under the open paren.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4361 Return @code{nil} on lines that don't start with an operator, to leave
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4362 those cases to other lineup functions. Example:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4363
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4364 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4365 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4366 if ( x < 10
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4367 || at_limit (x, @hereFn{c-lineup-arglist-operators}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4368 list) @hereFn{c-lineup-arglist-operators@r{ returns nil}}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4369 )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4370 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4371 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4372
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4373 Since this function doesn't do anything for lines without an infix
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4374 operator you typically want to use it together with some other lineup
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
4375 settings, e.g., as follows (the @code{arglist-close} setting is just a
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4376 suggestion to get a consistent style):
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4377
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4378 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4379 (c-set-offset 'arglist-cont
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4380 '(c-lineup-arglist-operators 0))
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4381 (c-set-offset 'arglist-cont-nonempty
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4382 '(c-lineup-arglist-operators c-lineup-arglist))
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4383 (c-set-offset 'arglist-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4384 '(c-lineup-arglist-close-under-paren))
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4385 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4386
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4387 @workswith @code{arglist-cont}, @code{arglist-cont-nonempty}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4388 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4389
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4390 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4391
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4392 @defun c-lineup-C-comments
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4393 @findex lineup-C-comments (c-)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4394 Line up C block comment continuation lines. Various heuristics are used
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4395 to handle most of the common comment styles. Some examples:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4396
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4397 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4398 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4399 /* /** /*
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4400 * text * text text
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4401 */ */ */
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4402 @end group
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4403 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4404
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4405 @example
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4406 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4407 /* text /* /**
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4408 text ** text ** text
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4409 */ */ */
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4410 @end group
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4411 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4412
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4413 @example
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4414 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4415 /**************************************************
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4416 * text
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4417 *************************************************/
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4418 @end group
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4419 @end example
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4420
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4421 @vindex comment-start-skip
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4422 @example
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4423 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4424 /**************************************************
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4425 Free form text comments:
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4426 In comments with a long delimiter line at the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4427 start, the indentation is kept unchanged for lines
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4428 that start with an empty comment line prefix. The
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4429 delimiter line is whatever matches the
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4430 @code{comment-start-skip} regexp.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4431 **************************************************/
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4432 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4433 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4434
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4435 The style variable @code{c-comment-prefix-regexp} is used to recognize
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
4436 the comment line prefix, e.g., the @samp{*} that usually starts every
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4437 line inside a comment.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4438
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4439 @workswith The @code{c} syntactic symbol.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4440 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4441
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4442 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4443
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4444 @defun c-lineup-cascaded-calls
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4445 @findex lineup-cascaded-calls (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4446 Line up ``cascaded calls'' under each other. If the line begins with
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4447 @code{->} or @code{.} and the preceding line ends with one or more
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4448 function calls preceded by the same token, then the arrow is lined up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4449 with the first of those tokens. E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4450
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4451 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4452 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4453 r = proc->add(17)->add(18)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4454 ->add(19) + @hereFn{c-lineup-cascaded-calls}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4455 offset; @hereFn{c-lineup-cascaded-calls@r{ (inactive)}}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4456 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4457 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4458
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4459 In any other situation @code{nil} is returned to allow use in list
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4460 expressions.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4461
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4462 @workswith @code{topmost-intro-cont}, @code{statement-cont},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4463 @code{arglist-cont}, @code{arglist-cont-nonempty}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4464 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4465
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4466 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4467
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4468 @defun c-lineup-close-paren
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4469 @findex lineup-close-paren (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4470 Line up the closing paren under its corresponding open paren if the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4471 open paren is followed by code. If the open paren ends its line, no
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4472 indentation is added. E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4473
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4474 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4475 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4476 main (int,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4477 char **
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4478 ) @hereFn{c-lineup-close-paren}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4479 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4480 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4481
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4482 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4483 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4484
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4485 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4486 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4487 main (
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4488 int, char **
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4489 ) @hereFn{c-lineup-close-paren}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4490 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4491 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4492
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4493 As a special case, if a brace block is opened at the same line as the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4494 open parenthesis of the argument list, the indentation is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4495 @code{c-basic-offset} instead of the open paren column. See
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4496 @code{c-lineup-arglist} for further discussion of this ``DWIM'' measure.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4497
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4498 @workswith All @code{*-close} symbols.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4499 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4500
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4501 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4502
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4503 @defun c-lineup-comment
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4504 @findex lineup-comment (c-)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4505 Line up a comment-only line according to the style variable
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4506 @code{c-comment-only-line-offset}. If the comment is lined up with a
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4507 comment starter on the previous line, that alignment is preserved.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4508
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4509 @defopt c-comment-only-line-offset
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4510 @vindex comment-only-line-offset (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4511 This style variable specifies the extra offset for the line. It can
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4512 contain an integer or a cons cell of the form
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4513
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4514 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4515 (@r{@var{non-anchored-offset}} . @r{@var{anchored-offset}})
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4516 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4517
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4518 @noindent
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4519 where @var{non-anchored-offset} is the amount of offset given to
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4520 non-column-zero anchored lines, and @var{anchored-offset} is the amount
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4521 of offset to give column-zero anchored lines. Just an integer as value
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4522 is equivalent to @code{(@r{@var{value}} . -1000)}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4523 @end defopt
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4524
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4525 @workswith @code{comment-intro}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4526 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4527
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4528 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4529
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4530 @defun c-lineup-cpp-define
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4531 @findex lineup-cpp-define (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4532 Line up macro continuation lines according to the indentation of the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4533 construct preceding the macro. E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4534
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4535 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4536 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4537 const char msg[] = @hereFn{@r{The beginning of the preceding construct.}}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4538 \"Some text.\";
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4539
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4540 #define X(A, B) \
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4541 do @{ \ @hereFn{c-lineup-cpp-define}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4542 printf (A, B); \
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4543 @} while (0)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4544 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4545 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4546
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4547 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4548 and:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4549
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4550 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4551 @group
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4552 int dribble() @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4553 if (!running) @hereFn{@r{The beginning of the preceding construct.}}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4554 error(\"Not running!\");
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4555
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4556 #define X(A, B) \
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4557 do @{ \ @hereFn{c-lineup-cpp-define}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4558 printf (A, B); \
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4559 @} while (0)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4560 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4561 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4562
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4563 If @code{c-syntactic-indentation-in-macros} is non-@code{nil}, the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4564 function returns the relative indentation to the macro start line to
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
4565 allow accumulation with other offsets. e.g., in the following cases,
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4566 @code{cpp-define-intro} is combined with the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4567 @code{statement-block-intro} that comes from the @samp{do @{} that hangs
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4568 on the @samp{#define} line:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4569
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4570 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4571 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4572 const char msg[] =
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4573 \"Some text.\";
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4574
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4575 #define X(A, B) do @{ \
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4576 printf (A, B); \ @hereFn{c-lineup-cpp-define}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4577 this->refs++; \
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4578 @} while (0) @hereFn{c-lineup-cpp-define}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4579 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4580 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4581
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4582 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4583 and:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4584
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4585 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4586 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4587 int dribble() @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4588 if (!running)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4589 error(\"Not running!\");
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4590
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4591 #define X(A, B) do @{ \
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4592 printf (A, B); \ @hereFn{c-lineup-cpp-define}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4593 this->refs++; \
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4594 @} while (0) @hereFn{c-lineup-cpp-define}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4595 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4596 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4597
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4598 The relative indentation returned by @code{c-lineup-cpp-define} is zero
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4599 and two, respectively, on the two lines in each of these examples. They
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4600 are then added to the two column indentation that
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4601 @code{statement-block-intro} gives in both cases here.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4602
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4603 If the relative indentation is zero, then @code{nil} is returned
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4604 instead. That is useful in a list expression to specify the default
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4605 indentation on the top level.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4606
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4607 If @code{c-syntactic-indentation-in-macros} is @code{nil} then this
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4608 function keeps the current indentation, except for empty lines (ignoring
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4609 the ending backslash) where it takes the indentation from the closest
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4610 preceding nonempty line in the macro. If there's no such line in the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4611 macro then the indentation is taken from the construct preceding it, as
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4612 described above.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4613
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4614 @workswith @code{cpp-define-intro}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4615 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4616
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4617 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4618
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4619 @defun c-lineup-dont-change
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4620 @findex lineup-dont-change (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4621 This lineup function makes the line stay at whatever indentation it
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4622 already has; think of it as an identity function for lineups.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4623
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4624 @workswith Any syntactic symbol.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4625 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4626
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4627 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4628
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4629 @defun c-lineup-gcc-asm-reg
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4630 @findex lineup-gcc-asm-reg (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4631 Line up a gcc asm register under one on a previous line.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4632
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4633 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4634 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4635 asm ("foo %1, %0\n"
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4636 "bar %0, %1"
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4637 : "=r" (w),
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4638 "=r" (x)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4639 : "0" (y),
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4640 "1" (z));
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4641 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4642 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4643
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4644 The @samp{x} line is aligned to the text after the @samp{:} on the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4645 @samp{w} line, and similarly @samp{z} under @samp{y}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4646
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4647 This is done only in an @samp{asm} or @samp{__asm__} block, and only to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4648 those lines mentioned. Anywhere else @code{nil} is returned. The usual
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4649 arrangement is to have this routine as an extra feature at the start of
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4650 arglist lineups, e.g.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4651
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4652 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4653 (c-lineup-gcc-asm-reg c-lineup-arglist)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4654 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4655
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4656 @workswith @code{arglist-cont}, @code{arglist-cont-nonempty}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4657 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4658
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4659 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4660
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4661 @defun c-lineup-inexpr-block
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4662 @findex lineup-inexpr-block (c-)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4663 This can be used with the in-expression block symbols to indent the
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
4664 whole block to the column where the construct is started. e.g., for Java
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4665 anonymous classes, this lines up the class under the @samp{new} keyword,
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4666 and in Pike it lines up the lambda function body under the @samp{lambda}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4667 keyword. Returns @code{nil} if the block isn't part of such a
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4668 construct.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4669
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4670 @workswith @code{inlambda}, @code{inexpr-statement},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4671 @code{inexpr-class}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4672 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4673
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4674 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4675
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4676 @defun c-lineup-java-inher
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4677 @findex lineup-java-inher (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4678 Line up Java implements and extends declarations. If class names
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4679 follow on the same line as the @samp{implements}/@samp{extends}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4680 keyword, they are lined up under each other. Otherwise, they are
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4681 indented by adding @code{c-basic-offset} to the column of the keyword.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4682 E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4683
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4684 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4685 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4686 class Foo
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4687 extends
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4688 Bar @hereFn{c-lineup-java-inher}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4689 @sssTBasicOffset{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4690 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4691 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4692
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4693 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4694 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4695
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4696 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4697 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4698 class Foo
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4699 extends Cyphr,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4700 Bar @hereFn{c-lineup-java-inher}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4701 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4702 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4703
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4704 @workswith @code{inher-cont}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4705 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4706
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4707 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4708
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4709 @defun c-lineup-java-throws
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4710 @findex lineup-java-throws (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4711 Line up Java throws declarations. If exception names follow on the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4712 same line as the throws keyword, they are lined up under each other.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4713 Otherwise, they are indented by adding @code{c-basic-offset} to the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4714 column of the @samp{throws} keyword. The @samp{throws} keyword itself
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4715 is also indented by @code{c-basic-offset} from the function declaration
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4716 start if it doesn't hang. E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4717
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4718 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4719 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4720 int foo()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4721 throws @hereFn{c-lineup-java-throws}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4722 Bar @hereFn{c-lineup-java-throws}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4723 @sssTsssTBasicOffset{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4724 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4725 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4726
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4727 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4728 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4729
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4730 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4731 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4732 int foo() throws Cyphr,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4733 Bar, @hereFn{c-lineup-java-throws}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4734 Vlod @hereFn{c-lineup-java-throws}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4735 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4736 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4737
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4738 @workswith @code{func-decl-cont}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4739 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4740
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4741 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4742
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4743 @defun c-lineup-knr-region-comment
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4744 @findex lineup-knr-region-comment (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4745 Line up a comment in the ``K&R region'' with the declaration. That is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4746 the region between the function or class header and the beginning of the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4747 block. E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4748
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4749 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4750 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4751 int main()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4752 /* Called at startup. */ @hereFn{c-lineup-knr-region-comment}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4753 @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4754 return 0;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4755 @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4756 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4757 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4758
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4759 Return @code{nil} if called in any other situation, to be useful in list
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4760 expressions.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4761
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4762 @workswith @code{comment-intro}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4763 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4764
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4765 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4766
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4767 @defun c-lineup-math
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4768 @findex lineup-math (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4769 Line up the current line to after the equal sign on the first line in the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4770 statement. If there isn't any, indent with @code{c-basic-offset}. If
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4771 the current line contains an equal sign too, try to align it with the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4772 first one.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4773
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4774 @workswith @code{topmost-intro-cont}, @code{statement-cont},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4775 @code{arglist-cont}, @code{arglist-cont-nonempty}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4776 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4777
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4778 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4779
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4780 @defun c-lineup-multi-inher
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4781 @findex lineup-multi-inher (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4782 Line up the classes in C++ multiple inheritance clauses and member
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4783 initializers under each other. E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4784
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4785 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4786 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4787 Foo::Foo (int a, int b):
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4788 Cyphr (a),
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4789 Bar (b) @hereFn{c-lineup-multi-inher}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4790 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4791 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4792
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4793 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4794 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4795
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4796 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4797 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4798 class Foo
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4799 : public Cyphr,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4800 public Bar @hereFn{c-lineup-multi-inher}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4801 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4802 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4803
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4804 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4805 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4806
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4807 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4808 @group
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4809 Foo::Foo (int a, int b)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4810 : Cyphr (a)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4811 , Bar (b) @hereFn{c-lineup-multi-inher}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4812 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4813 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4814
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4815 @workswith @code{inher-cont}, @code{member-init-cont}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4816 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4817
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4818 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4819
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4820 @defun c-lineup-ObjC-method-call
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4821 @findex lineup-ObjC-method-call (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4822 For Objective-C code, line up selector args as Emacs Lisp mode does
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4823 with function args: go to the position right after the message receiver,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4824 and if you are at the end of the line, indent the current line
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4825 c-basic-offset columns from the opening bracket; otherwise you are
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4826 looking at the first character of the first method call argument, so
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4827 lineup the current line with it.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4828
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4829 @workswith @code{objc-method-call-cont}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4830 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4831
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4832 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4833
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4834 @defun c-lineup-ObjC-method-args
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4835 @findex lineup-ObjC-method-args (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4836 For Objective-C code, line up the colons that separate args. The colon
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4837 on the current line is aligned with the one on the first line.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4838
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4839 @workswith @code{objc-method-args-cont}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4840 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4841
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4842 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4843
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4844 @defun c-lineup-ObjC-method-args-2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4845 @findex lineup-ObjC-method-args-2 (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4846 Similar to @code{c-lineup-ObjC-method-args} but lines up the colon on
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4847 the current line with the colon on the previous line.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4848
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4849 @workswith @code{objc-method-args-cont}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4850 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4851
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4852 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4853
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4854 @defun c-lineup-runin-statements
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4855 @findex lineup-runin-statements (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4856 Line up statements for coding standards which place the first statement
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4857 in a block on the same line as the block opening brace@footnote{Run-in
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4858 style doesn't really work too well. You might need to write your own
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4859 custom indentation functions to better support this style.}. E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4860
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4861 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4862 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4863 int main()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4864 @{ puts ("Hello!");
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4865 return 0; @hereFn{c-lineup-runin-statements}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4866 @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4867 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4868 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4869
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4870 If there is no statement after the opening brace to align with,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4871 @code{nil} is returned. This makes the function usable in list
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4872 expressions.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4873
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4874 @workswith The @code{statement} syntactic symbol.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4875 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4876
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4877 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4878
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4879 @defun c-lineup-streamop
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4880 @findex lineup-streamop (c-)
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
4881 Line up C++ stream operators (i.e., @samp{<<} and @samp{>>}).
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4882
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4883 @workswith @code{stream-op}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4884 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4885
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4886 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4887
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4888 @defun c-lineup-string-cont
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4889 @findex lineup-string-cont (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4890 Line up a continued string under the one it continues. A continued
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4891 string in this sense is where a string literal follows directly after
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4892 another one. E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4893
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4894 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4895 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4896 result = prefix + "A message "
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4897 "string."; @hereFn{c-lineup-string-cont}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4898 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4899 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4900
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4901 @code{nil} is returned in other situations, to allow stacking with other
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4902 lineup functions.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4903
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4904 @workswith @code{topmost-intro-cont}, @code{statement-cont},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4905 @code{arglist-cont}, @code{arglist-cont-nonempty}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4906 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4907
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4908 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4909
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4910 @defun c-lineup-template-args
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4911 @findex lineup-template-args (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4912 Line up the arguments of a template argument list under each other, but
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4913 only in the case where the first argument is on the same line as the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4914 opening @samp{<}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4915
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4916 To allow this function to be used in a list expression, @code{nil} is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4917 returned if there's no template argument on the first line.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4918
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4919 @workswith @code{template-args-cont}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4920 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4921
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4922 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4923
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4924 @defun c-lineup-topmost-intro-cont
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4925 @findex lineup-topmost-intro-cont (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4926 Line up declaration continuation lines zero or one indentation
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4927 step@footnote{This function is mainly provided to mimic the behavior of
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4928 CC Mode 5.28 and earlier where this case wasn't handled consistently so
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4929 that those lines could be analyzed as either topmost-intro-cont or
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4930 statement-cont. It's used for @code{topmost-intro-cont} by default, but
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4931 you might consider using @code{+} instead.}. For lines preceding a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4932 definition, zero is used. For other lines, @code{c-basic-offset} is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4933 added to the indentation. E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4934
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4935 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4936 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4937 int
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4938 neg (int i) @hereFn{c-lineup-topmost-intro-cont}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4939 @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4940 return -i;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4941 @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4942 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4943 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4944
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4945 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4946 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4947
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4948 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4949 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4950 struct
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4951 larch @hereFn{c-lineup-topmost-intro-cont}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4952 @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4953 double height;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4954 @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4955 the_larch, @hereFn{c-lineup-topmost-intro-cont}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4956 another_larch; @hereFn{c-lineup-topmost-intro-cont}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4957 @sssTBasicOffset{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4958 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4959 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4960
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4961 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4962 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4963
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4964 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4965 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4966 struct larch
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4967 the_larch, @hereFn{c-lineup-topmost-intro-cont}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4968 another_larch; @hereFn{c-lineup-topmost-intro-cont}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4969 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4970 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4971
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4972 @workswith @code{topmost-intro-cont}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4973 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4974
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4975 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4976
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4977 @defun c-lineup-whitesmith-in-block
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4978 @findex lineup-whitesmith-in-block (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4979 Line up lines inside a block in Whitesmith style. It's done in a way
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4980 that works both when the opening brace hangs and when it doesn't. E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4981
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4982 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4983 @group
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4984 something
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4985 @{
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4986 foo; @hereFn{c-lineup-whitesmith-in-block}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4987 @}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4988 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4989 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4990
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4991 @noindent
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4992 and
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4993
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4994 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4995 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4996 something @{
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4997 foo; @hereFn{c-lineup-whitesmith-in-block}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4998 @}
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4999 @sssTBasicOffset{}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5000 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5001 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5002
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5003 In the first case the indentation is kept unchanged, in the second
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5004 @code{c-basic-offset} is added.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5005
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5006 @workswith @code{defun-close}, @code{defun-block-intro},
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5007 @code{block-close}, @code{brace-list-close}, @code{brace-list-intro},
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5008 @code{statement-block-intro} and all @code{in*} symbols,
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
5009 e.g., @code{inclass} and @code{inextern-lang}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5010 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5011
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5012
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5013 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5014 @node AWK Mode, Odds and Ends, Indentation Functions, Top
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5015 @comment node-name, next, previous, up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5016 @chapter Status of AWK Mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5017 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5018
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5019 @dfn{AWK mode} existed until recently in the file @file{awk-mode.el}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5020 as a mode derived from c-mode. It had not been actively maintained to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5021 keep pace with the newer @ccmode{}, and its indentation mechanism no
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5022 longer worked satisfactorally.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5023
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5024 The current AWK mode is based around the GNU implementation,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5025 @emph{GAWK version 3.1.0}, though it should work pretty well with any
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5026 AWK. It has now been updated and integrated into @ccmode{} to a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5027 substantial extent, though as yet not all the features of @ccmode{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5028 have been adapted to support it.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5029
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5030 If your (X)Emacs is set up to use the old file @file{awk-mode.elc}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5031 (which will usually be the case if you have obtained this @ccmode{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5032 independently of (X)Emacs itself), or if you are not sure, insert the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5033 following form into your @file{.emacs} or @file{init.el} so that the new
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5034 AWK mode will be used instead:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5035
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5036 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5037 (autoload 'awk-mode "cc-mode" nil t)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5038 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5039
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5040 You can check which AWK mode you are running by displaying the mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5041 documentation string with @kbd{C-h m} from an AWK buffer. The newer
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5042 mode's doc string contains @code{To submit a problem report, enter
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5043 `C-c C-b'} near the top of the doc string where the older mode has
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5044 @code{This is much like C mode except ....}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5045
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5046 Since this newer AWK mode makes essential use of a relatively new
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5047 Emacs Lisp feature@footnote{Specifically, the @code{syntax-table} text
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5048 property.}, you need either GNU Emacs 20.1 (or later) or XEmacs 21.4
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5049 (or later) to use it. If your Emacs version is earlier than one of
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5050 these, the older @file{awk-mode.el} will get loaded and run in place
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5051 of the AWK mode described here, even when you have put the above
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5052 @code{autoload} form into your @file{.emacs} or @file{init.el}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5053 Upgrading your (X)Emacs is strongly recommended if this is the case.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5054
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5055 Here is an overview of which @ccmode{} features currently work with
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5056 AWK mode and which don't:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5057
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5058 @table @asis
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5059 @item Indentation Engine
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5060 The @ccmode{} indentation engine fully supports AWK mode.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5061 @xref{Indentation Engine}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5062
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5063 AWK mode handles code formatted in the conventional AWK fashion:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5064 @samp{@{}s which start actions, user-defined functions, or compound
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5065 statements are placed on the same line as the associated construct; the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5066 matching @samp{@}}s are normally placed under the start of the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5067 respective pattern, function definition, or structured statement.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5068 @c Add in a bit about the @samp{@}} being on the same line when the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5069 @c contents are short.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5070
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5071 The predefined indentation functions (@pxref{Indentation Functions})
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5072 haven't yet been adapted for AWK mode, though some of them may work
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5073 serendipitously. There shouldn't be any problems writing custom
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5074 indentation functions for AWK mode.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5075
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5076 The command @kbd{C-c C-q} (@code{c-indent-defun}) hasn't yet been
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5077 adapted for AWK, though in practice it works properly nearly all the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5078 time. Should it fail, explicitly set the region around the function
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5079 (using @kbd{C-u C-SPC}: @kbd{C-M-h} probably won't work either) then do
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5080 @kbd{C-M-\} (@code{indent-region}).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5081
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5082 @item Font Locking
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5083 There is a single level of font locking in AWK mode, rather than the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5084 three distinct levels the other modes have. There are several
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5085 idiosyncrasies in AWK mode's font-locking due to the peculiarities of
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5086 the AWK language itself. @xref{AWK Mode Font Locking}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5087
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5088 @item Comment Commands
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5089 @kbd{M-;} (@code{indent-for-comment}) works fine. None of the other
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5090 @ccmode{} comment formatting commands have yet been adapted for AWK
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5091 mode. @xref{Text Filling and Line Breaking}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5092
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5093 @item Movement Commands
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5094 Most of the movement commands work in AWK mode. The most important
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5095 exceptions are @kbd{M-a} (@code{c-beginning-of-statement}) and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5096 @kbd{M-e} (@code{c-end-of-statement}) which haven't yet been adapted.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5097
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5098 The notion of @dfn{defun} has been augmented to include pattern-action
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5099 pairs. See @ref{AWK Mode Defuns} for a description of commands which
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5100 work on AWK ``defuns''.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5101
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5102 Since there is no preprocessor in AWK, the commands which move to
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
5103 preprocessor directives (e.g., @code{c-up-conditional}) are meaningless
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5104 in AWK mode and are not bound in the AWK mode keymap.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5105
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5106 @item Auto-newline Insertion and Clean-ups
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5107 Auto-newline insertion hasn't yet been adapted for AWK. Some of the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5108 clean-ups can actually convert good AWK code into syntactically
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5109 invalid code.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5110
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5111 If auto-newline or its associated clean-ups are enabled generally for
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5112 the modes in @ccmode{}, you are strongly recommended to disable them
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5113 in the AWK Mode hook. @xref{Initialising AWK Mode}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5114
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5115 The clean-up @code{space-before-funcall}, which is independent of
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5116 auto-newline, should never be active in AWK mode (since inserting a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5117 space between a user function's name and its opening @samp{(} makes
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5118 the call syntactically invalid). If necessary, this should be
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5119 disabled in the AWK Mode hook. @xref{Initialising AWK Mode}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5120
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5121 @end table
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5122
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5123 @menu
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5124 * Initialising AWK Mode::
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5125 * AWK Mode Font Locking::
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5126 * AWK Mode Defuns::
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5127 @end menu
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5128
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5129
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5130 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5131 @node Initialising AWK Mode, AWK Mode Font Locking, , AWK Mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5132 @comment node-name, next, previous, up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5133 @section AWK mode - What to put in your @file{.emacs} or @file{init.el}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5134 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5135
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5136 Much of the AWK mode initialization can, of course, be done by the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5137 @ccmode{} general initialization procedure. You may want to use certain
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5138 @ccmode{} features such as @code{auto-newline} and @code{clean-ups} in
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5139 the other modes, and you might thus have enabled them in a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5140 @code{c-mode-common-hook} function, as described in @ref{Sample .emacs File}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5141 These features have not yet been amended for AWK mode, and far from
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5142 being useful, can be irritating in AWK mode or actually make AWK code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5143 syntactically invalid. Adding the following code to your
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5144 @file{.emacs} or @file{init.el} file will disable them for AWK mode.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5145
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5146 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5147 (defun my-awk-mode-hook ()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5148 "Disable certain @ccmode{} features which could impair AWK mode."
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5149 (c-toggle-auto-state -1) ; disable automatic insertions of newlines
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5150 (if (memq 'space-before-funcall c-cleanup-list)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5151 (setq c-cleanup-list ; don't automatically insert a space into "foo("
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5152 (remove 'space-before-funcall c-cleanup-list))))
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5153 (add-hook 'awk-mode-hook 'my-awk-mode-hook)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5154 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5155
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5156 Naturally you can add your own AWK-specific customizations to this
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5157 function. @xref{Hooks}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5158
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5159
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5160 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5161 @node AWK Mode Font Locking, AWK Mode Defuns, Initialising AWK Mode, AWK Mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5162 @comment node-name, next, previous, up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5163 @section AWK Mode Font Locking
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5164 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5165
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5166 The general appearance of font-locking in AWK mode is much like in any
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5167 other programming mode. @xref{Faces For Font Lock,,,elisp}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5168
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5169 The following faces are, however, used in a non-standard fashion in
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5170 AWK mode:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5171
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5172 @table @asis
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5173 @item @code{font-lock-variable-name-face}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5174 This face was intended for variable declarations. Since variables are
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5175 not declared in AWK, this face is used instead for AWK system
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5176 variables (such as @code{NF}) and ``Special File Names'' (such as
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5177 @code{"/dev/stderr"}).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5178
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5179 @item @code{font-lock-builtin-face} (Emacs)/@code{font-lock-preprocessor-face} (XEmacs)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5180 This face is normally used for preprocessor directives in @ccmode{}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5181 There are no such things in AWK, so this face is used instead for
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5182 standard functions (such as @code{match}).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5183
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5184 @item @code{font-lock-string-face}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5185 As well as being used for strings, including localizable strings,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5186 (delimited by @samp{"} and @samp{_"}), this face is also used for AWK
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5187 regular expressions (delimited by @samp{/}).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5188
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5189 @item @code{font-lock-warning-face} (Emacs)/@code{c-invalid-face} (XEmacs)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5190 This face highlights the following syntactically invalid AWK
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5191 constructs:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5192
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5193 @itemize @bullet
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5194 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5195 An unterminated string or regular expression. Here the opening
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5196 delimiter (@samp{"} or @samp{/} or @samp{_"}) is displayed in
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5197 @code{font-lock-warning-face}. This is most noticeable when typing in a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5198 new string/regular expression into a buffer, when the warning-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5199 serves as a continual reminder to terminate the construct.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5200
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5201 AWK mode fontifies unterminated strings/regular expressions
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5202 differently from other modes: Only the text up to the end of the line
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5203 is fontified as a string (escaped newlines being handled correctly),
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5204 rather than the text up to the next string quote.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5205
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5206 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5207 A space between the function name and opening parenthesis when calling
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5208 a user function. The last character of the function name and the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5209 opening parenthesis are highlighted. This font-locking rule will
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5210 spuriously highlight a valid concatenation expression where an
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5211 identifier precedes a parenthesised expression. Unfortunately.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5212
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5213 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5214 Whitespace following the @samp{\} in what otherwise looks like an
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5215 escaped newline. The @samp{\} is highlighted.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5216 @end itemize
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5217 @end table
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5218
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5219
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5220 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5221 @node AWK Mode Defuns, , AWK Mode Font Locking, AWK Mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5222 @comment node-name, next, previous, up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5223 @section AWK Mode Defuns
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5224 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5225
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5226 In AWK mode, @dfn{defun} means either a user-defined function or a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5227 pattern-action pair. Either the pattern or the action may be
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5228 implicit.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5229
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5230 The beginning of a defun is recognised heuristically as, more or less,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5231 code which begins in column zero. Having the @samp{@{} in column zero,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5232 as is suggested for some modes, is neither necessary nor helpful in AWK
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5233 mode.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5234
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5235 More precisely, the beginning of a defun is code which begins in
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5236 column zero, and which isn't a closing brace, a comment, or a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5237 continuation of the previous line. Code is the @dfn{continuation of
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5238 the previous line} when that line is syntactically incomplete, for
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5239 example when it ends with @samp{@{} or an escaped newline.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5240
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5241 The end of a defun is the @samp{@}} which matches the @samp{@{} (if
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5242 any) at the beginning of the action or function body, or the EOL or
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5243 @samp{;} which marks an implicit action. Although this @samp{@}} is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5244 usually placed in column zero, AWK mode doesn't need it to be placed
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5245 there.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5246
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5247 @table @asis
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5248 @item @kbd{C-M-a} @code{c-awk-beginning-of-defun}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5249 @itemx @kbd{C-M-e} @code{c-awk-end-of-defun}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5250 @findex c-awk-beginning-of-defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5251 @findex awk-beginning-of-defun (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5252 @findex c-awk-end-of-defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5253 @findex awk-end-of-defun (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5254 Move point back to the beginning or forward to the end of the current
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5255 AWK defun. These functions can take prefix-arguments, their
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5256 functionality being entirely equivalent to @code{beginning-of-defun}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5257 and @code{end-of-defun}. @xref{Moving by Defuns,,,emacs}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5258
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5259 @item @kbd{C-M-h} @code{c-mark-function}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5260 This works fine with AWK defuns. @xref{Indentation Commands}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5261 @end table
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5262
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5263
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5264 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5265 @node Odds and Ends, Performance Issues, AWK Mode, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5266 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5267 @chapter Odds and Ends
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5268 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
5269
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5270 The stuff that didn't fit in anywhere else is documented here.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5271
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5272 @defopt c-require-final-newline
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5273 @vindex require-final-newline (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5274 Controls whether a final newline is ensured when the file is saved. The
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5275 value is an association list that for each language mode specifies the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5276 value to give to @code{require-final-newline} at mode initialization;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5277 see that variable for details about the value. If a language isn't
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5278 present on the association list, CC Mode won't touch
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5279 @code{require-final-newline} in buffers for that language.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5280
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5281 The default is to set @code{require-final-newline} to @code{t} in the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5282 languages that mandates that source files should end with newlines,
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
5283 i.e., C, C++ and Objective-C.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5284 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5285
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5286 @defopt c-echo-syntactic-information-p
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5287 @vindex echo-syntactic-information-p (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5288 If non-@code{nil}, the syntactic analysis for the current line is shown
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5289 in the echo area when it's indented (unless
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5290 @code{c-syntactic-indentation} is @code{nil}). That's useful when
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5291 finding out which syntactic symbols to modify to get the indentation you
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5292 want.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5293 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5294
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5295 @defopt c-report-syntactic-errors
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5296 @vindex report-syntactic-errors (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5297 If non-@code{nil}, certain syntactic errors are reported with a ding and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5298 a message, for example when an @code{else} is indented for which there
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5299 is no corresponding @code{if}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5300
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5301 Note however that @ccmode{} doesn't make any special effort to check for
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5302 syntactic errors; that's the job of the compiler. The reason it can
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5303 report cases like the one above is that it can't find the correct
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5304 anchoring position to indent the line in that case.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5305 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5306
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5307
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5308 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5309 @node Performance Issues, Limitations and Known Bugs, Odds and Ends, Top
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5310 @comment node-name, next, previous, up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5311 @chapter Performance Issues
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5312 @cindex performance
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5313 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5314
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5315 @comment FIXME: (ACM, 2003/5/24). Check whether AWK needs mentioning here.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5316
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5317 C and its derivative languages are highly complex creatures. Often,
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5318 ambiguous code situations arise that require @ccmode{} to scan large
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5319 portions of the buffer to determine syntactic context. Such
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5320 pathological code can cause @ccmode{} to perform fairly badly. This
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5321 section gives some insight in how @ccmode{} operates, how that interacts
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5322 with some coding styles, and what you can use to improve performance.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5323
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
5324 The overall goal is that @ccmode{} shouldn't be overly slow (i.e., take
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5325 more than a fraction of a second) in any interactive operation.
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
5326 i.e., it's tuned to limit the maximum response time in single operations,
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5327 which sometimes is at the expense of batch-like operations like
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5328 reindenting whole blocks. If you find that @ccmode{} gradually gets
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5329 slower and slower in certain situations, perhaps as the file grows in
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5330 size or as the macro or comment you're editing gets bigger, then chances
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5331 are that something isn't working right. You should consider reporting
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5332 it, unless it's something that's mentioned in this section.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5333
Dave Love <fx@gnu.org>
parents:
diff changeset
5334 Because @ccmode{} has to scan the buffer backwards from the current
Dave Love <fx@gnu.org>
parents:
diff changeset
5335 insertion point, and because C's syntax is fairly difficult to parse in
Dave Love <fx@gnu.org>
parents:
diff changeset
5336 the backwards direction, @ccmode{} often tries to find the nearest
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5337 position higher up in the buffer from which to begin a forward scan
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5338 (it's typically an opening or closing parethesis of some kind). The
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5339 farther this position is from the current insertion point, the slower it
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5340 gets.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5341
Dave Love <fx@gnu.org>
parents:
diff changeset
5342 @findex beginning-of-defun
Dave Love <fx@gnu.org>
parents:
diff changeset
5343 @findex defun-prompt-regexp
Dave Love <fx@gnu.org>
parents:
diff changeset
5344 One of the simplest things you can do to reduce scan time, is make sure
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
5345 any brace that opens a top-level construct@footnote{e.g., a function in
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5346 C, or outermost class definition in C++ or Java.} always appears in the
Dave Love <fx@gnu.org>
parents:
diff changeset
5347 leftmost column. This is actually an Emacs constraint, as embodied in
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5348 the @code{beginning-of-defun} function which @ccmode{} uses heavily. If
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5349 you hang top-level open braces on the right side of the line, then you
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5350 might want to set the variable @code{defun-prompt-regexp} to something
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5351 reasonable, however that ``something reasonable'' is difficult to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5352 define, so @ccmode{} doesn't do it for you.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5353
Dave Love <fx@gnu.org>
parents:
diff changeset
5354 @vindex c-Java-defun-prompt-regexp
Dave Love <fx@gnu.org>
parents:
diff changeset
5355 @vindex Java-defun-prompt-regexp (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5356 A special note about @code{defun-prompt-regexp} in Java mode: The common
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5357 style is to hang the opening braces of functions and classes on the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5358 right side of the line, and that doesn't work well with the Emacs
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5359 approach. @ccmode{} comes with a variable
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5360 @code{c-Java-defun-prompt-regexp} which tries to define a regular
Dave Love <fx@gnu.org>
parents:
diff changeset
5361 expression usable for this style, but there are problems with it. In
Dave Love <fx@gnu.org>
parents:
diff changeset
5362 some cases it can cause @code{beginning-of-defun} to hang@footnote{This
Dave Love <fx@gnu.org>
parents:
diff changeset
5363 has been observed in Emacs 19.34 and XEmacs 19.15.}. For this reason,
Dave Love <fx@gnu.org>
parents:
diff changeset
5364 it is not used by default, but if you feel adventurous, you can set
Dave Love <fx@gnu.org>
parents:
diff changeset
5365 @code{defun-prompt-regexp} to it in your mode hook. In any event,
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5366 setting and relying on @code{defun-prompt-regexp} will definitely slow
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5367 things down because (X)Emacs will be doing regular expression searches a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5368 lot, so you'll probably be taking a hit either way!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5369
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5370 @ccmode{} maintains a cache of the opening parentheses of the blocks
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5371 surrounding the point, and it adapts that cache as the point is moved
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5372 around. That means that in bad cases it can take noticeable time to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5373 indent a line in a new surrounding, but after that it gets fast as long
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5374 as the point isn't moved far off. The farther the point is moved, the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5375 less useful is the cache. Since editing typically is done in ``chunks''
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5376 rather than on single lines far apart from each other, the cache
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5377 typically gives good performance even when the code doesn't fit the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5378 Emacs approach to finding the defun starts.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5379
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5380 @vindex c-enable-xemacs-performance-kludge-p
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5381 @vindex enable-xemacs-performance-kludge-p (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5382 XEmacs users can set the variable
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5383 @code{c-enable-xemacs-performance-kludge-p} to non-@code{nil}. This
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5384 tells @ccmode{} to use XEmacs-specific built-in functions which, in some
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5385 circumstances, can locate the top-most opening brace much more quickly than
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5386 @code{beginning-of-defun}. Preliminary testing has shown that for
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
5387 styles where these braces are hung (e.g., most JDK-derived Java styles),
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5388 this hack can improve performance of the core syntax parsing routines
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5389 from 3 to 60 times. However, for styles which @emph{do} conform to
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5390 Emacs' recommended style of putting top-level braces in column zero,
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5391 this hack can degrade performance by about as much. Thus this variable
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5392 is set to @code{nil} by default, since the Emacs-friendly styles should
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5393 be more common (and encouraged!). Note that this variable has no effect
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5394 in Emacs since the necessary built-in functions don't exist (in Emacs
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5395 21.3 as of this writing in May 2003).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5396
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5397 Text properties are used to speed up skipping over syntactic whitespace,
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
5398 i.e., comments and preprocessor directives. Indenting a line after a
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5399 huge macro definition can be slow the first time, but after that the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5400 text properties are in place and it should be fast (even after you've
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5401 edited other parts of the file and then moved back).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5402
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5403 Font locking can be a CPU hog, especially the font locking done on
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5404 decoration level 3 which tries to be very accurate. Note that that
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5405 level is designed to be used with a font lock support mode that only
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
5406 fontifies the text that's actually shown, i.e., Lazy Lock or Just-in-time
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5407 Lock mode, so make sure you use one of them. Fontification of a whole
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5408 buffer with some thousand lines can often take over a minute. That is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5409 a known weakness; the idea is that it never should happen.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5410
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5411 The most effective way to speed up font locking is to reduce the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5412 decoration level to 2 by setting @code{font-lock-maximum-decoration}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5413 appropriately. That level is designed to be as pretty as possible
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5414 without sacrificing performance. @xref{Font Locking Preliminaries}, for
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5415 more info.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5416
Dave Love <fx@gnu.org>
parents:
diff changeset
5417
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5418 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5419 @node Limitations and Known Bugs, Frequently Asked Questions, Performance Issues, Top
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5420 @comment node-name, next, previous, up
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5421 @chapter Limitations and Known Bugs
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5422 @cindex limitations
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5423 @cindex bugs
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5424 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5425
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5426 @itemize @bullet
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5427 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5428 There is no way to apply auto newline settings (@pxref{Auto-newline
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5429 Insertion}) on already typed lines. That's only a feature to ease
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5430 interactive editing.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5431
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5432 To generalize this issue a bit: @ccmode{} is not intended to be used as
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5433 a reformatter for old code in some more or less batch-like way. With
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5434 the exception of some functions like @code{c-indent-region}, it's only
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5435 geared to be used interactively to edit new code. There's currently no
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5436 intention to change this goal.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5437
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5438 If you want to reformat old code, you're probably better off using some
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
5439 other tool instead, e.g., @ref{Top, , GNU indent, indent, The `indent'
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5440 Manual}, which has more powerful reformatting capabilities than
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5441 @ccmode{}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5442
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5443 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5444 @vindex signal-error-on-buffer-boundary
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5445 XEmacs has a variable called @code{signal-error-on-buffer-boundary}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5446 It's used as a solution to user interface problems associated with
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5447 buffer movement and the @code{zmacs-region} deactivation on errors.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5448 However, setting this variable to a non-default value in XEmacs 19 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5449 20 had the deleterious side effect of breaking many built-in primitive
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5450 functions. @strong{Do not set this variable to @code{nil} in XEmacs
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5451 19 and 20}; you will cause serious problems in @ccmode{} and probably
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5452 other XEmacs packages! In XEmacs 21 the effects of the variable is
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5453 limited to some functions that are only used interactively, so it's
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5454 not a problem there.
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5455 @end itemize
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5456
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5457
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5458 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5459 @node Frequently Asked Questions, Getting the Latest CC Mode Release, Limitations and Known Bugs, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5460 @comment node-name, next, previous, up
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5461 @appendix Frequently Asked Questions
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5462 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
5463
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5464 @itemize @bullet
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5465 @item
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5466 @kindex C-x h
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5467 @kindex C-M-\
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5468 @emph{How do I reindent the whole file?}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5469
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5470 Visit the file and hit @kbd{C-x h} to mark the whole buffer. Then hit
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5471 @kbd{C-M-\}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5472
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5473 @item
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5474 @kindex C-M-q
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5475 @kindex C-M-u
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5476 @emph{How do I reindent the current block?}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5477
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5478 First move to the brace which opens the block with @kbd{C-M-u}, then
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5479 reindent that expression with @kbd{C-M-q}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5480
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5481 @item
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5482 @kindex RET
Dave Love <fx@gnu.org>
parents:
diff changeset
5483 @kindex C-j
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5484 @emph{Why doesn't the @kbd{RET} key indent the new line?}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5485
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5486 Emacs' convention is that @kbd{RET} just adds a newline, and that
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5487 @kbd{C-j} adds a newline and indents it. You can make @kbd{RET} do this
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5488 too by adding this to your @code{c-mode-common-hook}:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5489
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5490 @example
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5491 (define-key c-mode-base-map "\C-m" 'c-context-line-break)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5492 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
5493
Dave Love <fx@gnu.org>
parents:
diff changeset
5494 This is a very common question. If you want this to be the default
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5495 behavior, don't lobby me, lobby RMS! @t{:-)}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5496
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5497 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5498 @emph{I put @code{(c-set-offset 'substatement-open 0)} in my
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5499 @file{.emacs} file but I get an error saying that @code{c-set-offset}'s
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5500 function definition is void. What's wrong?}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5501
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5502 This means that @ccmode{} wasn't loaded into your Emacs session by the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5503 time the @code{c-set-offset} call was reached, most likely because
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5504 @ccmode{} is being autoloaded. Instead of putting the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5505 @code{c-set-offset} line in your top-level @file{.emacs} file, put it in
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5506 your @code{c-mode-common-hook}, or simply modify @code{c-offsets-alist}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5507 directly:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5508
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5509 @example
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
5510 (setq c-offsets-alist '((substatement-open . 0)))
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5511 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5512
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5513 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5514 @kindex M-a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5515 @kindex M-e
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5516 @emph{@kbd{M-a} and @kbd{M-e} used to move over entire balanced brace
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5517 lists, but now they move into blocks. How do I get the old behavior
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5518 back?}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5519
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5520 Use @kbd{C-M-f} and @kbd{C-M-b} to move over balanced brace blocks. Use
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5521 @kbd{M-a} and @kbd{M-e} to move by statements, which will also move into
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5522 blocks.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5523
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5524 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5525 @emph{Whenever I try to indent a line or type an ``electric'' key such
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5526 as @kbd{;}, @kbd{@{}, or @kbd{@}}, I get an error that look like this:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5527 @code{Invalid function: (macro . #[...}. What gives?}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5528
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5529 This is a common error when @ccmode{} hasn't been compiled correctly,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5530 especially under Emacs 19.34@footnote{Technically, it's because some
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5531 macro wasn't defined during the compilation, so the byte compiler put
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5532 in function calls instead of the macro expansions. Later, when the
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5533 interpreter tries to call the macro as a function, it shows this
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5534 (somewhat cryptic) error message.}. If you are using the standalone
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5535 @ccmode{} distribution, try recompiling it according to the instructions
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5536 in the @file{README} file.
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5537
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5538 @item
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5539 @cindex open paren in column zero
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5540 @emph{I have an open paren character at column zero inside a comment or
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5541 multiline string literal, and it causes the fontification and/or
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5542 indentation to go haywire. What gives?}
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5543
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5544 It's due to the ad-hoc rule in (X)Emacs that such open parens always
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5545 start defuns (which translates to functions, classes, namespaces or any
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5546 other top-level block constructs in the @ccmode{} languages).
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5547 @xref{Left Margin Paren,,, emacs, The Emacs Editor}, for details
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5548 (@xref{Defuns,,, emacs, The Emacs Editor}, in the Emacs 20 manual).
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5549
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5550 This heuristic is built into the core syntax analysis routines in
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5551 (X)Emacs, so it's not really a @ccmode{} issue. However, in Emacs 21.4
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5552 it has become possible to turn it off@footnote{Using the variable
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5553 @code{open-paren-in-column-0-is-defun-start}.} and @ccmode{} does so
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5554 there since it got its own system to keep track of blocks.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
5555
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5556 @end itemize
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5557
Dave Love <fx@gnu.org>
parents:
diff changeset
5558
Dave Love <fx@gnu.org>
parents:
diff changeset
5559 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5560 @node Getting the Latest CC Mode Release, Mailing Lists and Submitting Bug Reports, Frequently Asked Questions, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5561 @comment node-name, next, previous, up
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5562 @appendix Getting the Latest CC Mode Release
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5563 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
5564
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5565 @ccmode{} has been standard with all versions of Emacs since 19.34 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5566 of XEmacs since 19.16.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5567
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5568 @cindex web site
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5569 Due to release schedule skew, it is likely that all of these Emacsen
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47737
diff changeset
5570 have old versions of @ccmode{} and so should be upgraded. Access to the
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5571 @ccmode{} source code, as well as more detailed information on Emacsen
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5572 compatibility, etc. are all available on the web site:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5573
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5574 @quotation
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5575 @uref{http://cc-mode.sourceforge.net/}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5576 @end quotation
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5577
Dave Love <fx@gnu.org>
parents:
diff changeset
5578
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5579 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5580 @node Mailing Lists and Submitting Bug Reports, Sample .emacs File, Getting the Latest CC Mode Release, Top
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5581 @comment node-name, next, previous, up
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5582 @appendix Mailing Lists and Submitting Bug Reports
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5583 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5584
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5585 @kindex C-c C-b
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5586 @findex c-submit-bug-report
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5587 @findex submit-bug-report (c-)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5588 To report bugs, use the @kbd{C-c C-b} (bound to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5589 @code{c-submit-bug-report}) command. This provides vital information
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5590 we need to reproduce your problem. Make sure you include a concise,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5591 but complete code example. Please try to boil your example down to
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5592 just the essential code needed to reproduce the problem, and include
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5593 an exact recipe of steps needed to expose the bug. Be especially sure
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5594 to include any code that appears @emph{before} your bug example, if
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5595 you think it might affect our ability to reproduce it.
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5596
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5597 Please try to produce the problem in an Emacs instance without any
55832
cd954d951766 Put commas after i.e. and e.g. Minor cleanups.
Richard M. Stallman <rms@gnu.org>
parents: 53118
diff changeset
5598 customizations loaded (i.e., start it with the @samp{-q --no-site-file}
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5599 arguments). If it works correctly there, the problem might be caused by
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5600 faulty customizations in either your own or your site configuration. In
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5601 that case, we'd appreciate if you isolate the Emacs Lisp code that trigs
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5602 the bug and include it in your report.
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5603
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5604 @cindex bug report mailing list
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5605 Bug reports are sent to @email{bug-cc-mode@@gnu.org}. You can also send
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5606 other questions and suggestions (kudos? @t{;-)} to that address. It's a
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5607 mailing list which you can join or browse an archive of; see the web
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5608 site at @uref{http://cc-mode.sourceforge.net/} for further details.
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5609
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5610 @cindex announcement mailing list
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5611 If you want to get announcements of new @ccmode{} releases, send the
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5612 word @emph{subscribe} in the body of a message to
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5613 @email{cc-mode-announce-request@@lists.sourceforge.net}. It's possible
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5614 to subscribe from the web site too. Announcements will also be posted
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5615 to the Usenet newsgroups @code{gnu.emacs.sources}, @code{comp.emacs} and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5616 @code{comp.emacs.xemacs}.
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5617
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5618
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5619 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5620 @node Sample .emacs File, Command and Function Index, Mailing Lists and Submitting Bug Reports, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5621 @comment node-name, next, previous, up
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5622 @appendix Sample .emacs file
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5623 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
5624
Dave Love <fx@gnu.org>
parents:
diff changeset
5625 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5626 ;; Here's a sample .emacs file that might help you along the way.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5627 ;; Just copy this region and paste it into your .emacs file. You may
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5628 ;; want to change some of the actual values.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5629
Dave Love <fx@gnu.org>
parents:
diff changeset
5630 (defconst my-c-style
Dave Love <fx@gnu.org>
parents:
diff changeset
5631 '((c-tab-always-indent . t)
Dave Love <fx@gnu.org>
parents:
diff changeset
5632 (c-comment-only-line-offset . 4)
Dave Love <fx@gnu.org>
parents:
diff changeset
5633 (c-hanging-braces-alist . ((substatement-open after)
Dave Love <fx@gnu.org>
parents:
diff changeset
5634 (brace-list-open)))
Dave Love <fx@gnu.org>
parents:
diff changeset
5635 (c-hanging-colons-alist . ((member-init-intro before)
Dave Love <fx@gnu.org>
parents:
diff changeset
5636 (inher-intro)
Dave Love <fx@gnu.org>
parents:
diff changeset
5637 (case-label after)
Dave Love <fx@gnu.org>
parents:
diff changeset
5638 (label after)
Dave Love <fx@gnu.org>
parents:
diff changeset
5639 (access-label after)))
Dave Love <fx@gnu.org>
parents:
diff changeset
5640 (c-cleanup-list . (scope-operator
Dave Love <fx@gnu.org>
parents:
diff changeset
5641 empty-defun-braces
Dave Love <fx@gnu.org>
parents:
diff changeset
5642 defun-close-semi))
Dave Love <fx@gnu.org>
parents:
diff changeset
5643 (c-offsets-alist . ((arglist-close . c-lineup-arglist)
Dave Love <fx@gnu.org>
parents:
diff changeset
5644 (substatement-open . 0)
Dave Love <fx@gnu.org>
parents:
diff changeset
5645 (case-label . 4)
Dave Love <fx@gnu.org>
parents:
diff changeset
5646 (block-open . 0)
Dave Love <fx@gnu.org>
parents:
diff changeset
5647 (knr-argdecl-intro . -)))
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5648 (c-echo-syntactic-information-p . t))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5649 "My C Programming Style")
Dave Love <fx@gnu.org>
parents:
diff changeset
5650
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5651 ;; offset customizations not in my-c-style
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
5652 (setq c-offsets-alist '((member-init-intro . ++)))
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5653
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5654 ;; Customizations for all modes in CC Mode.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5655 (defun my-c-mode-common-hook ()
Dave Love <fx@gnu.org>
parents:
diff changeset
5656 ;; add my personal style and set it for the current buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
5657 (c-add-style "PERSONAL" my-c-style t)
Dave Love <fx@gnu.org>
parents:
diff changeset
5658 ;; other customizations
Dave Love <fx@gnu.org>
parents:
diff changeset
5659 (setq tab-width 8
Dave Love <fx@gnu.org>
parents:
diff changeset
5660 ;; this will make sure spaces are used instead of tabs
Dave Love <fx@gnu.org>
parents:
diff changeset
5661 indent-tabs-mode nil)
Dave Love <fx@gnu.org>
parents:
diff changeset
5662 ;; we like auto-newline and hungry-delete
Dave Love <fx@gnu.org>
parents:
diff changeset
5663 (c-toggle-auto-hungry-state 1)
39267
a8c0a02f6129 Spelling corrections.
Richard M. Stallman <rms@gnu.org>
parents: 36924
diff changeset
5664 ;; key bindings for all supported languages. We can put these in
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5665 ;; c-mode-base-map because c-mode-map, c++-mode-map, objc-mode-map,
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5666 ;; java-mode-map, idl-mode-map, and pike-mode-map inherit from it.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5667 (define-key c-mode-base-map "\C-m" 'c-context-line-break))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5668
Dave Love <fx@gnu.org>
parents:
diff changeset
5669 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
Dave Love <fx@gnu.org>
parents:
diff changeset
5670 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
5671
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5672
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5673 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5674 @node Command and Function Index, Variable Index, Sample .emacs File, Top
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5675 @comment node-name, next, previous, up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5676 @unnumbered Command and Function Index
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5677 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5678
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5679 Since most @ccmode{} commands are prepended with the string
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5680 @samp{c-}, each appears under its @code{c-@var{thing}} name and its
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5681 @code{@var{thing} (c-)} name.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5682 @iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5683 @sp 2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5684 @end iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5685 @printindex fn
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5686
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5687
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5688 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5689 @node Variable Index, Concept Index, Command and Function Index, Top
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5690 @comment node-name, next, previous, up
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5691 @unnumbered Variable Index
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5692 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5693
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5694 Since most @ccmode{} variables are prepended with the string
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5695 @samp{c-}, each appears under its @code{c-@var{thing}} name and its
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5696 @code{@var{thing} (c-)} name.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5697 @iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5698 @sp 2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5699 @end iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5700 @printindex vr
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5701
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5702
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5703 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5704 @node Concept Index, , Variable Index, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5705 @comment node-name, next, previous, up
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5706 @unnumbered Concept Index
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5707 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5708
Dave Love <fx@gnu.org>
parents:
diff changeset
5709 @printindex cp
Dave Love <fx@gnu.org>
parents:
diff changeset
5710
Dave Love <fx@gnu.org>
parents:
diff changeset
5711
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5712 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5713 @comment Epilogue.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5714 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5715
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5716 @iftex
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5717 @page
Dave Love <fx@gnu.org>
parents:
diff changeset
5718 @summarycontents
Dave Love <fx@gnu.org>
parents:
diff changeset
5719 @contents
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5720 @end iftex
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5721
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
5722 @bye
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
5723
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
5724 @ignore
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
5725 arch-tag: c4cab162-5e57-4366-bdce-4a9db2fc97f0
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
5726 @end ignore