annotate man/cc-mode.texi @ 77121:3757055699dd

(Lazy Properties): Minor fix.
author Richard M. Stallman <rms@gnu.org>
date Wed, 11 Apr 2007 15:07:05 +0000
parents 307c1e602f07
children 88224dc74061 4ef881a120fe
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
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2 @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
3 @c
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4 @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
5 @c
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6 @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
7 @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
8 @c are significant.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
9
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
10 @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
11 @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
12 @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
13 @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
14 @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
15 @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
16 @c 1: foo
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
17 @c 2: bar
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
18 @c ^ one space
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
19 @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
20 @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
21 @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
22
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
23 @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
24
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
25 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
26 @comment %**start of header (This is for running Texinfo on a region)
Dave Love <fx@gnu.org>
parents:
diff changeset
27 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
28
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
29
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
30 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
31 @comment How to make the various output formats:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
32 @comment (Thanks to Robert Chassell for supplying this information.)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
33 @comment Note that Texinfo 4.7 (or later) is needed.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
34 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
35 @ignore
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
36 In each of the following pairs of commands, the first generates a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
37 version with cross references pointing to the GNU Emacs manuals,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
38 the second with them pointing to the XEmacs manuals.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
39 ## Info output
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
40 makeinfo cc-mode.texi
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
41 makeinfo -DXEMACS cc-mode.texi
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
42
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
43 ## DVI output
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
44 ## You may need to set up the environment variable TEXINPUTS so
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
45 ## that tex can find the file texinfo.tex - See the tex
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
46 ## manpage.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
47 texi2dvi cc-mode.texi
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
48 texi2dvi -t "@set XEMACS " cc-mode.texi
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
49
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
50 ## HTML output. (The --no-split parameter is optional)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
51 makeinfo --html --no-split cc-mode.texi
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
52 makeinfo --html --no-split -DXEMACS cc-mode.texi
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
53
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
54 ## Plain text output
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
55 makeinfo --fill-column=70 --no-split --paragraph-indent=0 \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
56 --no-headers --output=cc-mode.txt cc-mode.texi
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
57 makeinfo --fill-column=70 --no-split --paragraph-indent=0 \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
58 --no-headers --output=cc-mode.txt -DXEMACS cc-mode.texi
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
59
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
60 ## DocBook output
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
61 makeinfo --docbook --no-split --paragraph-indent=0 \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
62 cc-mode.texi
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
63 makeinfo --docbook --no-split --paragraph-indent=0 \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
64 -DXEMACS cc-mode.texi
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
65
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
66 ## XML output
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
67 makeinfo --xml --no-split --paragraph-indent=0 \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
68 cc-mode.texi
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
69 makeinfo --xml --no-split --paragraph-indent=0 \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
70 -DXEMACS cc-mode.texi
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
71
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
72 #### (You must be in the same directory as the viewed file.)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
73
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
74 ## View DVI output
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
75 xdvi cc-mode.dvi &
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
76
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
77 ## View HTML output
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
78 mozilla cc-mode.html
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
79 @end ignore
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
80
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
81 @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
82 @finalout
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
83
36924
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
84 @setfilename ../info/ccmode
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
85 @settitle CC Mode Manual
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
86 @footnotestyle end
Dave Love <fx@gnu.org>
parents:
diff changeset
87
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
88 @c The following four macros generate the filenames and titles of the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
89 @c main (X)Emacs manual and the Elisp/Lispref manual. Leave the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
90 @c Texinfo variable `XEMACS' unset to generate a GNU Emacs version, set it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
91 @c to generate an XEmacs version, e.g. with
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
92 @c "makeinfo -DXEMACS cc-mode.texi".
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
93 @ifset XEMACS
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
94 @macro emacsman
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
95 xemacs
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
96 @end macro
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
97 @macro emacsmantitle
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
98 XEmacs User's Manual
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
99 @end macro
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
100 @macro lispref
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
101 lispref
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
102 @end macro
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
103 @macro lispreftitle
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
104 XEmacs Lisp Reference Manual
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
105 @end macro
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
106 @end ifset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
107
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
108 @ifclear XEMACS
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
109 @macro emacsman
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
110 emacs
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
111 @end macro
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
112 @macro emacsmantitle
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
113 GNU Emacs Manual
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
114 @end macro
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
115 @macro lispref
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
116 elisp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
117 @end macro
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
118 @macro lispreftitle
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
119 GNU Emacs Lisp Reference Manual
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
120 @end macro
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
121 @end ifclear
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
122
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
123
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
124 @macro ccmode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
125 CC Mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
126 @end macro
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
127
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
128 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
129 @comment @setchapternewpage odd !! we don't want blank pages !!
Dave Love <fx@gnu.org>
parents:
diff changeset
130 @comment %**end of header (This is for running Texinfo on a region)
Dave Love <fx@gnu.org>
parents:
diff changeset
131 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
132
Dave Love <fx@gnu.org>
parents:
diff changeset
133
Dave Love <fx@gnu.org>
parents:
diff changeset
134 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
135 @comment
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
136 @comment Texinfo manual for CC Mode
Dave Love <fx@gnu.org>
parents:
diff changeset
137 @comment Generated from the original README file by Krishna Padmasola
Dave Love <fx@gnu.org>
parents:
diff changeset
138 @comment <krishna@earth-gw.njit.edu>
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
139 @comment
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
140 @comment Authors:
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
141 @comment Barry A. Warsaw
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
142 @comment Martin Stjernholm
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
143 @comment Alan Mackenzie
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
144 @comment
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
145 @comment Maintained by Martin Stjernholm and Alan Mackenzie <bug-cc-mode@gnu.org>
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
146 @comment
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
147 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
148
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
149 @comment Define an index for syntactic symbols.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
150 @ifnottex @c In texi2dvi, the @defindex would create an empty cc-mode.ss
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
151 @c For Info, unlike tex, @syncodeindex needs a matching @defindex.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
152 @defindex ss
61528
22798b2ebf72 Prevent creating an unnecessary empty cc-mode.ss file.
Lute Kamstra <lute@gnu.org>
parents: 59996
diff changeset
153 @end ifnottex
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
154
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
155 @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
156 @syncodeindex ss cp
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
157 @syncodeindex ky cp
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
158
47737
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
159 @copying
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
160 This manual is for CC Mode in Emacs.
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
161
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
162 Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
75348
3d45362f1d38 Add 2007 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 75028
diff changeset
163 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
47737
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
164
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
165 @quotation
36924
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
166 Permission is granted to copy, distribute and/or modify this document
65555
69b3598a61c5 Update all manuals to specify GFDL version 1.2.
Romain Francoise <romain@orebokech.com>
parents: 64890
diff changeset
167 under the terms of the GNU Free Documentation License, Version 1.2 or
36924
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
168 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
169 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
170 ``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
171 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
172 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
173 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
174
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
175 (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
176 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
177 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
178
28d23bbdd2cf Version merged with the one from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36923
diff changeset
179 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
180 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
181 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
182 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
183 @end quotation
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
184 @end copying
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
185
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
186 @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
187 @comment here is by request from the FSF folks.
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
188 @dircategory Emacs
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
189 @direntry
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
190 * 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
191 Java, Pike, AWK, and CORBA IDL code.
47737
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
192 @end direntry
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
193
Dave Love <fx@gnu.org>
parents:
diff changeset
194 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
195 @comment TeX title page
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
196 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
197
Dave Love <fx@gnu.org>
parents:
diff changeset
198 @titlepage
Dave Love <fx@gnu.org>
parents:
diff changeset
199 @sp 10
Dave Love <fx@gnu.org>
parents:
diff changeset
200
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
201 @center @titlefont{CC Mode 5.31}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
202 @sp 2
Dave Love <fx@gnu.org>
parents:
diff changeset
203 @center @subtitlefont{A GNU Emacs mode for editing C and C-like languages}
Dave Love <fx@gnu.org>
parents:
diff changeset
204 @sp 2
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
205 @center Barry A. Warsaw, Martin Stjernholm, Alan Mackenzie
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
206
Dave Love <fx@gnu.org>
parents:
diff changeset
207 @page
Dave Love <fx@gnu.org>
parents:
diff changeset
208 @vskip 0pt plus 1filll
47737
0a70200bde27 use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents: 46918
diff changeset
209 @insertcopying
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
210
71224
b7261e09f8e4 * cc-mode.texi (Getting Started, Indentation Commands, Config Basics)
Romain Francoise <romain@orebokech.com>
parents: 69681
diff changeset
211 This manual was generated from $Revision$ of $RCSfile$, which can be
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
212 downloaded from
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
213 @url{http://cvs.savannah.gnu.org/viewcvs/emacs/emacs/man/cc-mode.texi}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
214 @end titlepage
Dave Love <fx@gnu.org>
parents:
diff changeset
215
Dave Love <fx@gnu.org>
parents:
diff changeset
216 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
217 @comment The Top node contains the master menu for the Info file.
Dave Love <fx@gnu.org>
parents:
diff changeset
218 @comment This appears only in the Info file, not the printed manual.
Dave Love <fx@gnu.org>
parents:
diff changeset
219 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
220
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
221 @node Top, Introduction, (dir), (dir)
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
222 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
223
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
224 @ifinfo
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
225 @top @ccmode{}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
226
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
227 @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
228 Objective-C, Java, CORBA IDL (and the variants PSDL and CIDL), Pike
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
229 and AWK code. It provides syntax-based indentation, font locking, and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
230 has several handy commands and some minor modes to make the editing
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
231 easier. It does not provide tools to look up and navigate between
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
232 functions, classes etc - there are other packages for that.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
233 @end ifinfo
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
234
Dave Love <fx@gnu.org>
parents:
diff changeset
235 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
236 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
237
Dave Love <fx@gnu.org>
parents:
diff changeset
238 @menu
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
239 * Introduction::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
240 * Overview::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
241 * Getting Started::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
242 * Commands::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
243 * Font Locking::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
244 * Config Basics::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
245 * Custom Filling and Breaking::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
246 * Custom Auto-newlines::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
247 * Clean-ups::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
248 * Indentation Engine Basics::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
249 * Customizing Indentation::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
250 * Custom Macros::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
251 * Odds and Ends::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
252 * Sample .emacs File::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
253 * Performance Issues::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
254 * Limitations and Known Bugs::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
255 * FAQ::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
256 * Updating CC Mode::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
257 * Mailing Lists and Bug Reports::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
258 * Command and Function Index::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
259 * Variable Index::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
260 * Concept and Key Index::
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
261
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
262 @detailmenu
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
263 --- The Detailed Node Listing ---
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
264
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
265 Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
266
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
267 * Indentation Commands::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
268 * Comment Commands::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
269 * Movement Commands::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
270 * Filling and Breaking::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
271 * Minor Modes::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
272 * Electric Keys::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
273 * Auto-newlines::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
274 * Hungry WS Deletion::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
275 * Subword Movement::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
276 * Other Commands::
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
277
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
278 Font Locking
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
279
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
280 * Font Locking Preliminaries::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
281 * Faces::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
282 * Doc Comments::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
283 * AWK Mode Font Locking::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
284
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
285 Configuration Basics
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
286
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
287 * CC Hooks::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
288 * Style Variables::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
289 * Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
290
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
291 Styles
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
292
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
293 * Built-in Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
294 * Choosing a Style::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
295 * Adding Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
296 * File Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
297
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
298 Customizing Auto-newlines
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
299
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
300 * Hanging Braces::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
301 * Hanging Colons::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
302 * Hanging Semicolons and Commas::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
303
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
304 Hanging Braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
305
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
306 * Custom Braces::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
307
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
308 Indentation Engine Basics
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
309
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
310 * Syntactic Analysis::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
311 * Syntactic Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
312 * Indentation Calculation::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
313
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
314 Syntactic Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
315
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
316 * Function Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
317 * Class Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
318 * Conditional Construct Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
319 * Switch Statement Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
320 * Brace List Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
321 * External Scope Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
322 * Paren List Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
323 * Literal Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
324 * Multiline Macro Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
325 * Objective-C Method Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
326 * Anonymous Class Symbol::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
327 * Statement Block Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
328 * K&R Symbols::
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
329
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
330 Customizing Indentation
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
331
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
332 * c-offsets-alist::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
333 * Interactive Customization::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
334 * Line-Up Functions::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
335 * Custom Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
336 * Other Indentation::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
337
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
338 Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
339
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
340 * Brace/Paren Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
341 * List Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
342 * Operator Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
343 * Comment Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
344 * Misc Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
345
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
346 @end detailmenu
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
347 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
348
Dave Love <fx@gnu.org>
parents:
diff changeset
349 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
350 @node Introduction, Overview, Top, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
351 @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
352 @chapter Introduction
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
353 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
354
Dave Love <fx@gnu.org>
parents:
diff changeset
355 @cindex BOCM
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
356 @cindex history
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
357 @cindex awk-mode.el
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
358 @cindex c-mode.el
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
359 @cindex c++-mode.el
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
360
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
361 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
362 C++, Objective-C, Java, CORBA IDL (and the variants CORBA PSDL and
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
363 CIDL), Pike and AWK code. This incarnation of the mode is descended
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
364 from @file{c-mode.el} (also called ``Boring Old C Mode'' or BOCM
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
365 @t{:-)}, @file{c++-mode.el} version 2, which Barry Warsaw had been
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
366 maintaining since 1992, and @file{awk-mode.el}, a long neglected mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
367 in the (X)Emacs base.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
368
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
369 Late in 1997, Martin Stjernholm joined Barry on the @ccmode{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
370 Maintainers Team, and implemented the Pike support. In 2000 Martin
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
371 took over as the sole maintainer. In 2001 Alan Mackenzie joined the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
372 team, implementing AWK support in version 5.30. @ccmode{} did not
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
373 originally contain the font lock support for its languages --- that
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
374 was added in version 5.30.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
375
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
376 This manual describes @ccmode{}
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
377 @comment The following line must appear on its own, so that the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
378 version 5.31.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
379 @comment Release.py script can update the version number automatically
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
380
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
381 @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
382 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
383 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
384 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
385 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
386 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
387 uniformly integrated as the other languages.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
388
Dave Love <fx@gnu.org>
parents:
diff changeset
389 @findex c-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
390 @findex c++-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
391 @findex objc-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
392 @findex java-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
393 @findex idl-mode
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
394 @findex pike-mode
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
395 @findex awk-mode
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
396 Note that the name of this package is ``@ccmode{}'', but there is no top
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
397 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
398 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
399 @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
400 @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
401 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
402 @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
403
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
404 A special word of thanks goes to Krishna Padmasola for his work in
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
405 converting the original @file{README} file to Texinfo format. I'd
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
406 also like to thank all the @ccmode{} victims who help enormously
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
407 during the early beta stages of @ccmode{}'s development.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
408
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
409 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
410 @node Overview, Getting Started, Introduction, Top
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
411 @comment node-name, next, previous, up@cindex organization of the manual
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
412 @chapter Overview of the Manual
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
413 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
414
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
415 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
416 The manual starts with several introductory chapters (including this
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
417 one).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
418
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
419 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
420 The next chunk of the manual describes the day to day @emph{use} of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
421 @ccmode{} (as contrasted with how to customize it).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
422
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
423 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
424 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
425 The chapter ``Commands'' describes in detail how to use (nearly) all
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
426 of @ccmode{}'s features. There are extensive cross-references from
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
427 here to the corresponding sections later in the manual which tell you
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
428 how to customize these features.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
429
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
430 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
431 ``Font Locking'' describes how ``syntax highlighting'' is applied to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
432 your buffers. It is mainly background information and can be skipped
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
433 over at a first reading.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
434 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
435
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
436 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
437 The next chunk of the manual describes how to @emph{customize}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
438 @ccmode{}. Typically, an overview of a topic is given at the chapter
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
439 level, then the sections and subsections describe the material in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
440 increasing detail.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
441
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
442 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
443 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
444 The chapter ``Configuration Basics'' tells you @emph{how} to write
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
445 customizations - whether in hooks, in styles, in both, or in neither,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
446 depending on your needs. It describes the @ccmode{} style system and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
447 lists the standard styles that @ccmode{} supplies.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
448
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
449 @item
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
450 The next few chapters describe in detail how to customize the various
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
451 features of @ccmode{}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
452
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
453 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
454 Finally, there is a sample @file{.emacs} fragment, which might help you
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
455 in creating your own customization.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
456 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
457
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
458 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
459 The manual ends with ``this and that'', things that don't fit cleanly
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
460 into any of the previous chunks.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
461
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
462 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
463 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
464 Two chapters discuss the performance of @ccmode{} and known
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
465 bugs/limitations.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
466
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
467 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
468 The FAQ contains a list of common problems and questions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
469
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
470 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
471 The next two chapters tell you how to get in touch with the @ccmode{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
472 project - whether for updating @ccmode{} or submitting bug reports.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
473 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
474
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
475 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
476 Finally, there are the customary indices.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
477
Dave Love <fx@gnu.org>
parents:
diff changeset
478 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
479 @node Getting Started, Commands, Overview, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
480 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
481 @chapter Getting Started
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
482 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
483
Dave Love <fx@gnu.org>
parents:
diff changeset
484 If you got this version of @ccmode{} with Emacs or XEmacs, it should
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
485 work just fine right out of the box. Note however that you might not
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
486 have the latest @ccmode{} release and might want to upgrade your copy
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
487 (see below).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
488
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
489 You should probably start by skimming through the entire chapter
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
490 @ref{Commands} to get an overview of @ccmode{}'s capabilities.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
491
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
492 After trying out some commands, you may dislike some aspects of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
493 @ccmode{}'s default configuration. Here is an outline of how to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
494 change some of the settings that newcomers to @ccmode{} most often
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
495 want to change:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
496
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
497 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
498 @item c-basic-offset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
499 This Lisp variable holds an integer, the number of columns @ccmode{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
500 indents nested code. To set this value to 6, customize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
501 @code{c-basic-offset} or put this into your @file{.emacs}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
502
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
503 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
504 (setq c-basic-offset 6)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
505 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
506
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
507 @item The (indentation) style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
508 The basic ``shape'' of indentation created by @ccmode{}---by default,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
509 this is @code{gnu} style (except for Java and AWK buffers). A list of
71224
b7261e09f8e4 * cc-mode.texi (Getting Started, Indentation Commands, Config Basics)
Romain Francoise <romain@orebokech.com>
parents: 69681
diff changeset
510 the available styles and their descriptions can be found in
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
511 @ref{Built-in Styles}. A complete specification of the @ccmode{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
512 style system, including how to create your own style, can be found in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
513 the chapter @ref{Styles}. To set your style to @code{linux}, either
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
514 customize @code{c-default-style} or put this into your @file{.emacs}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
515
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
516 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
517 (setq c-default-style '((java-mode . "java")
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
518 (awk-mode . "awk")
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
519 (other . "linux")))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
520 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
521
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
522 @item Electric Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
523 Normally, when you type ``punctuation'' characters such as @samp{;} or
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
524 @samp{@{}, @ccmode{} instantly reindents the current line. This can
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
525 be disconcerting until you get used to it. To disable @dfn{electric
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
526 indentation} in the current buffer, type @kbd{C-c C-l}. Type the same
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
527 thing to enable it again. To have electric indentation disabled by
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
528 default, put the following into your @file{.emacs} file@footnote{There
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
529 is no ``easy customization'' facility for making this change.}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
530
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
531 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
532 (setq-default c-electric-flag nil)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
533 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
534
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
535 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
536 Details of of this and other similar ``Minor Modes'' appear in the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
537 section @ref{Minor Modes}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
538
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
539 @item Making the @key{RET} key indent the new line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
540 The standard Emacs binding for @key{RET} just adds a new line. If you
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
541 want it to reindent the new line as well, rebind the key. Note that
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
542 the action of rebinding will fail if the pertinent keymap doesn't yet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
543 exist---we thus need to delay the action until after @ccmode{} has
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
544 been loaded. Put the following code into your @file{.emacs}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
545
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
546 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
547 (defun my-make-CR-do-indent ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
548 (define-key c-mode-base-map "\C-m" 'c-context-line-break))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
549 (add-hook 'c-initialization-hook 'my-make-CR-do-indent)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
550 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
551
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
552 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
553 This example demonstrates the use of a very powerful @ccmode{} (and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
554 Emacs) facility, the hook. The use of @ccmode{}'s hooks is described
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
555 in @ref{CC Hooks}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
556 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
557
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
558 All these settings should occur in your @file{.emacs} @emph{before}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
559 any @ccmode{} buffers get loaded---in particular, before any call of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
560 @code{desktop-read}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
561
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
562 As you get to know the mode better, you may want to make more
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
563 ambitious changes to your configuration. For this, you should start
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
564 reading the chapter @ref{Config Basics}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
565
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
566 If you are upgrading an existing @ccmode{} installation, please see
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
567 the @file{README} file for installation details. In particular, if
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
568 you are going to be editing AWK files, @file{README} describes how to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
569 configure your (X)Emacs so that @ccmode{} will supersede the obsolete
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
570 @code{awk-mode.el} which might have been supplied with your (X)Emacs.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
571 @ccmode{} might not work with older versions of Emacs or XEmacs. See
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
572 the @ccmode{} release notes at @uref{http://cc-mode.sourceforge.net}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
573 for the latest information on Emacs version and package compatibility
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
574 (@pxref{Updating CC Mode}).
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
575
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
576 @deffn Command c-version
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
577 @findex version (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
578 You can find out what version of @ccmode{} you are using by visiting a C
Dave Love <fx@gnu.org>
parents:
diff changeset
579 file and entering @kbd{M-x c-version RET}. You should see this message in
Dave Love <fx@gnu.org>
parents:
diff changeset
580 the echo area:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
581
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
582 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
583 Using CC Mode version 5.XX
Dave Love <fx@gnu.org>
parents:
diff changeset
584 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
585
Dave Love <fx@gnu.org>
parents:
diff changeset
586 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
587 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
588 @end deffn
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
589
Dave Love <fx@gnu.org>
parents:
diff changeset
590 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
591 @node Commands, Font Locking, Getting Started, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
592 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
593 @chapter Commands
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
594 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
595
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
596 This chapter specifies all of CC Mode's commands, and thus contains
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
597 nearly everything you need to know to @emph{use} @ccmode{} (as
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
598 contrasted with configuring it). @dfn{Commands} here means both
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
599 control key sequences and @dfn{electric keys}, these being characters
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
600 such as @samp{;} which, as well as inserting themselves into the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
601 buffer, also do other things.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
602
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
603 You might well want to review
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
604 @ifset XEMACS
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
605 @ref{Lists,,,@emacsman{}, @emacsmantitle{}},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
606 @end ifset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
607 @ifclear XEMACS
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
608 @ref{Moving by Parens,,,@emacsman{}, @emacsmantitle{}},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
609 @end ifclear
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
610 which describes commands for moving around brace and parenthesis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
611 structures.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
612
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
613
Dave Love <fx@gnu.org>
parents:
diff changeset
614 @menu
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
615 * Indentation Commands::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
616 * Comment Commands::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
617 * Movement Commands::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
618 * Filling and Breaking::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
619 * Minor Modes::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
620 * Electric Keys::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
621 * Auto-newlines::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
622 * Hungry WS Deletion::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
623 * Subword Movement::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
624 * Other Commands::
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
625 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
626
Dave Love <fx@gnu.org>
parents:
diff changeset
627 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
628 @node Indentation Commands, Comment Commands, Commands, Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
629 @comment node-name, next, previous,up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
630 @section Indentation Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
631 @cindex indentation
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
632 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
633
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
634 The following commands reindent C constructs. Note that when you
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
635 change your coding style, either interactively or through some other
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
636 means, your file does @emph{not} automatically get reindented. You
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
637 will need to execute one of the following commands to see the effects
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
638 of your changes.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
639
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
640 @cindex GNU indent program
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
641 Also, variables like @code{c-hanging-*} and @code{c-cleanup-list}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
642 (@pxref{Custom Auto-newlines}) only affect how on-the-fly code is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
643 formatted. Changing the ``hanginess'' of a brace and then
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
644 reindenting, will not move the brace to a different line. For this,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
645 you're better off getting an external program like GNU @code{indent},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
646 which will rearrange brace location, amongst other things.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
647
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
648 Preprocessor directives are handled as syntactic whitespace from other
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
649 code, i.e. they can be interspersed anywhere without affecting the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
650 indentation of the surrounding code, just like comments.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
651
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
652 The code inside macro definitions is, by default, still analyzed
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
653 syntactically so that you get relative indentation there just as you'd
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
654 get if the same code was outside a macro. However, since there is no
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
655 hint about the syntactic context, i.e. whether the macro expands to an
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
656 expression, to some statements, or perhaps to whole functions, the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
657 syntactic recognition can be wrong. @ccmode{} manages to figure it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
658 out correctly most of the time, though.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
659
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
660 Reindenting large sections of code can take a long time. When
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
661 @ccmode{} reindents a region of code, it is essentially equivalent to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
662 hitting @key{TAB} on every line of the region.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
663
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
664 These commands indent code:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
665
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
666 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
667 @item @kbd{@key{TAB}} (@code{c-indent-command})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
668 @kindex TAB
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
669 @findex c-indent-command
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
670 @findex indent-command (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
671 This command indents the current line. That is all you need to know
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
672 about it for normal use.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
673
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
674 @code{c-indent-command} does different things, depending on the
71224
b7261e09f8e4 * cc-mode.texi (Getting Started, Indentation Commands, Config Basics)
Romain Francoise <romain@orebokech.com>
parents: 69681
diff changeset
675 setting of @code{c-syntactic-indentation} (@pxref{Indentation Engine
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
676 Basics}):
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
677
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
678 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
679 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
680 When it's non-@code{nil} (which it normally is), the command indents
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
681 the line according to its syntactic context. With a prefix argument
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
682 (@kbd{C-u @key{TAB}}), it will re-indent the entire
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
683 expression@footnote{this is only useful for a line starting with a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
684 comment opener or an opening brace, parenthesis, or string quote.}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
685 that begins at the line's left margin.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
686
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
687 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
688 When it's @code{nil}, the command indents the line by an extra
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
689 @code{c-basic-offset} columns. A prefix argument acts as a
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
690 multiplier. A bare prefix (@kbd{C-u @key{TAB}}) is equivalent to -1,
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
691 removing @code{c-basic-offset} columns from the indentation.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
692 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
693
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
694 The precise behavior is modified by several variables: With
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
695 @code{c-tab-always-indent}, you can make @key{TAB} insert whitespace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
696 in some circumstances---@code{c-insert-tab-function} then defines
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
697 precisely what sort of ``whitespace'' this will be. Set the standard
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
698 Emacs variable @code{indent-tabs-mode} to @code{t} if you want real
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
699 @samp{tab} characters to be used in the indentation, to @code{nil} if
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
700 you want only spaces. @xref{Just Spaces,,, @emacsman{},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
701 @emacsmantitle{}}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
702
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
703 @defopt c-tab-always-indent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
704 @vindex tab-always-indent (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
705 @cindex literal
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
706 This variable modifies how @key{TAB} operates.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
707 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
708 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
709 When it is @code{t} (the default), @key{TAB} simply indents the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
710 current line.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
711 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
712 When it is @code{nil}, @key{TAB} (re)indents the line only if point is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
713 to the left of the first non-whitespace character on the line.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
714 Otherwise it inserts some whitespace (a tab or an equivalent number of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
715 spaces - see below) at point.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
716 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
717 With some other value, the line is reindented. Additionally, if point
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
718 is within a string or comment, some whitespace is inserted.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
719 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
720 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
721
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
722 @defopt c-insert-tab-function
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
723 @vindex insert-tab-function (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
724 @findex tab-to-tab-stop
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
725 When ``some whitespace'' is inserted as described above, what actually
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
726 happens is that the function stored in @code{c-insert-tab-function} is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
727 called. Normally, this is @code{insert-tab}, which inserts a real tab
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
728 character or the equivalent number of spaces (depending on
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
729 @code{indent-tabs-mode}). Some people, however, set
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
730 @code{c-insert-tab-function} to @code{tab-to-tab-stop} so as to get
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
731 hard tab stops when indenting.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
732 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
733 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
734
Dave Love <fx@gnu.org>
parents:
diff changeset
735 @noindent
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
736 The kind of indentation the next five commands do depends on the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
737 setting of @code{c-syntactic-indentation} (@pxref{Indentation Engine
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
738 Basics}):
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
739 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
740 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
741 when it is non-@code{nil} (the default), the commands indent lines
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
742 according to their syntactic context;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
743 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
744 when it is @code{nil}, they just indent each line the same amount as
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
745 the previous non-blank line. The commands that indent a region aren't
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
746 very useful in this case.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
747 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
748
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
749 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
750 @item @kbd{C-j} (@code{newline-and-indent})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
751 @kindex C-j
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
752 @findex newline-and-indent
68453
72d32b7559c2 (Indentation Commands): Inserts newline, not "linefeed".
Richard M. Stallman <rms@gnu.org>
parents: 68313
diff changeset
753 Inserts a newline and indents the new blank line, ready to start
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
754 typing. This is a standard (X)Emacs command.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
755
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
756 @item @kbd{C-M-q} (@code{c-indent-exp})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
757 @kindex C-M-q
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
758 @findex c-indent-exp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
759 @findex indent-exp (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
760 Indents an entire balanced brace or parenthesis expression. Note that
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
761 point must be on the opening brace or parenthesis of the expression
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
762 you want to indent.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
763
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
764 @item @kbd{C-c C-q} (@code{c-indent-defun})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
765 @kindex C-c C-q
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
766 @findex c-indent-defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
767 @findex indent-defun (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
768 Indents the entire top-level function, class or macro definition
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
769 encompassing point. It leaves point unchanged. This function can't be
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
770 used to reindent a nested brace construct, such as a nested class or
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
771 function, or a Java method. The top-level construct being reindented
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
772 must be complete, i.e. it must have both a beginning brace and an ending
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
773 brace.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
774
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
775 @item @kbd{C-M-\} (@code{indent-region})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
776 @kindex C-M-\
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
777 @findex indent-region
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
778 Indents an arbitrary region of code. This is a standard Emacs command,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
779 tailored for C code in a @ccmode{} buffer. Note, of course, that point
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
780 and mark must delineate the region you want to indent.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
781
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
782 @item @kbd{C-M-h} (@code{c-mark-function})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
783 @kindex C-M-h
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
784 @findex c-mark-function
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
785 @findex mark-function (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
786 While not strictly an indentation command, this is useful for marking
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
787 the current top-level function or class definition as the current
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
788 region. As with @code{c-indent-defun}, this command operates on
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
789 top-level constructs, and can't be used to mark say, a Java method.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
790 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
791
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
792 These variables are also useful when indenting code:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
793
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
794 @defopt indent-tabs-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
795 This is a standard Emacs variable that controls how line indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
796 is composed. When it's non-@code{nil}, tabs can be used in a line's
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
797 indentation, otherwise only spaces are used.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
798 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
799
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
800 @defopt c-progress-interval
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
801 @vindex progress-interval (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
802 When indenting large regions of code, this variable controls how often a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
803 progress message is displayed. Set this variable to @code{nil} to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
804 inhibit the progress messages, or set it to an integer which is how
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
805 often (in seconds) progress messages are to be displayed.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
806 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
807
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
808 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
809 @node Comment Commands, Movement Commands, Indentation Commands, Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
810 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
811 @section Comment Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
812 @cindex comments (insertion of)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
813 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
814
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
815 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
816 @item @kbd{C-c C-c} (@code{comment-region})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
817 @kindex C-c C-c
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
818 @findex comment-region
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
819 This command comments out the lines that start in the region. With a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
820 negative argument, it does the opposite - it deletes the comment
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
821 delimiters from these lines. @xref{Multi-Line Comments,,, emacs, GNU
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
822 Emacs Manual}, for fuller details. @code{comment-region} isn't
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
823 actually part of @ccmode{} - it is given a @ccmode{} binding for
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
824 convenience.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
825
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
826 @item @kbd{M-;} (@code{comment-dwim} or @code{indent-for-comment} @footnote{The name of this command varies between (X)Emacs versions.})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
827 @kindex M-;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
828 @findex comment-dwim
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
829 @findex indent-for-comment
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
830 Insert a comment at the end of the current line, if none is there
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
831 already. Then reindent the comment according to @code{comment-column}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
832 @ifclear XEMACS
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
833 (@pxref{Options for Comments,,, emacs, GNU Emacs Manual})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
834 @end ifclear
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
835 @ifset XEMACS
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
836 (@pxref{Comments,,, xemacs, XEmacs User's Manual})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
837 @end ifset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
838 and the variables below. Finally, position the point after the
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
839 comment starter. @kbd{C-u M-;} kills any comment on the current line,
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
840 together with any whitespace before it. This is a standard Emacs
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
841 command, but @ccmode{} enhances it a bit with two variables:
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
842
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
843 @defopt c-indent-comment-alist
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
844 @vindex indent-comment-alist (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
845 @vindex comment-column
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
846 This style variable allows you to vary the column that @kbd{M-;} puts
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
847 the comment at, depending on what sort of code is on the line, and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
848 possibly the indentation of any similar comment on the preceding line.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
849 It is an association list that maps different types of lines to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
850 actions describing how they should be handled. If a certain line type
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
851 isn't present on the list then the line is indented to the column
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
852 specified by @code{comment-column}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
853
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
854 See the documentation string for for a full description of this
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
855 variable (use @kbd{C-h v c-indent-comment-alist}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
856 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
857
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
858 @defopt c-indent-comments-syntactically-p
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
859 @vindex indent-comments-syntactically-p (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
860 Normally, when this style variable is @code{nil}, @kbd{M-;} will
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
861 indent comment-only lines according to @code{c-indent-comment-alist},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
862 just as it does with lines where other code precede the comments.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
863 However, if you want it to act just like @key{TAB} for comment-only
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
864 lines you can get that by setting
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
865 @code{c-indent-comments-syntactically-p} to non-@code{nil}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
866
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
867 If @code{c-indent-comments-syntactically-p} is non-@code{nil} then
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
868 @code{c-indent-comment-alist} won't be consulted at all for comment-only
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
869 lines.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
870 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
871 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
872
Dave Love <fx@gnu.org>
parents:
diff changeset
873 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
874 @node Movement Commands, Filling and Breaking, Comment Commands, Commands
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
875 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
876 @section Movement Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
877 @cindex movement
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
878 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
879
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
880 @ccmode{} contains some useful commands for moving around in C code.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
881
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
882 @table @asis
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
883 @item @kbd{C-M-a}
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
884 @itemx @kbd{C-M-e}
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
885 @findex c-beginning-of-defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
886 @findex c-end-of-defun
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
887
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
888 Move to the beginning or end of the current or next function. Other
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
889 constructs (such as a structs or classes) which have a brace block
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
890 also count as ``functions'' here. To move over several functions, you
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
891 can give these commands a repeat count.
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
892
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
893 The start of a function is at its header. The end of the function is
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
894 after its closing brace, or after the semicolon of a construct (such
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
895 as a @code{struct}) which doesn't end at the brace. These two
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
896 commands try to leave point at the beginning of a line near the actual
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
897 start or end of the function. This occasionally causes point not to
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
898 move at all.
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
899
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
900 These functions are analogous to the Emacs built-in commands
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
901 @code{beginning-of-defun} and @code{end-of-defun}, except they
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
902 eliminate the constraint that the top-level opening brace of the defun
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
903 must be in column zero. See @ref{Defuns,,,@emacsman{},
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
904 @emacsmantitle{}}, for more information.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
905
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
906 @item @kbd{C-M-a} (AWK Mode) (@code{c-awk-beginning-of-defun})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
907 @itemx @kbd{C-M-e} (AWK Mode) (@code{c-awk-end-of-defun})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
908 @kindex C-M-a (AWK Mode)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
909 @kindex C-M-e (AWK Mode)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
910 @findex c-awk-beginning-of-defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
911 @findex awk-beginning-of-defun (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
912 @findex c-awk-end-of-defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
913 @findex awk-end-of-defun (c-)
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
914 Move to the beginning or end of the current or next AWK defun. These
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
915 commands can take prefix-arguments, their functionality being entirely
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
916 equivalent to @code{beginning-of-defun} and @code{end-of-defun}.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
917
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
918 AWK Mode @dfn{defuns} are either pattern/action pairs (either of which
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
919 might be implicit) or user defined functions. Having the @samp{@{} and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
920 @samp{@}} (if there are any) in column zero, as is suggested for some
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
921 modes, is neither necessary nor helpful in AWK mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
922
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
923 @item @kbd{M-a} (@code{c-beginning-of-statement})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
924 @itemx @kbd{M-e} (@code{c-end-of-statement})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
925 @kindex M-a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
926 @kindex M-e
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
927 @findex c-beginning-of-statement
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
928 @findex c-end-of-statement
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
929 @findex beginning-of-statement (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
930 @findex end-of-statement (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
931 Move to the beginning or end of the innermost C statement. If point
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
932 is already there, move to the next beginning or end of a statement,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
933 even if that means moving into a block. (Use @kbd{C-M-b} or
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
934 @kbd{C-M-f} to move over a balanced block.) A prefix argument @var{n}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
935 means move over @var{n} statements.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
936
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
937 If point is within or next to a comment or a string which spans more
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
938 than one line, these commands move by sentences instead of statements.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
939
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
940 When called from a program, these functions take three optional
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
941 arguments: the repetition count, a buffer position limit which is the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
942 farthest back to search for the syntactic context, and a flag saying
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
943 whether to do sentence motion in or near comments and multiline
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
944 strings.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
945
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
946 @item @kbd{C-c C-u} (@code{c-up-conditional})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
947 @kindex C-c C-u
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
948 @findex c-up-conditional
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
949 @findex up-conditional (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
950 Move back to the containing preprocessor conditional, leaving the mark
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
951 behind. A prefix argument acts as a repeat count. With a negative
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
952 argument, move forward to the end of the containing preprocessor
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
953 conditional.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
954
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
955 @samp{#elif} is treated like @samp{#else} followed by @samp{#if}, so the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
956 function stops at them when going backward, but not when going
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
957 forward.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
958
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
959 This key sequence is not bound in AWK Mode, which doesn't have
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
960 preprocessor statements.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
961
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
962 @item @kbd{M-x c-up-conditional-with-else}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
963 @findex c-up-conditional-with-else
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
964 @findex up-conditional-with-else (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
965 A variety of @code{c-up-conditional} that also stops at @samp{#else}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
966 lines. Normally those lines are ignored.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
967
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
968 @item @kbd{M-x c-down-conditional}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
969 @findex c-down-conditional
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
970 @findex down-conditional (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
971 Move forward into the next nested preprocessor conditional, leaving
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
972 the mark behind. A prefix argument acts as a repeat count. With a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
973 negative argument, move backward into the previous nested preprocessor
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
974 conditional.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
975
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
976 @samp{#elif} is treated like @samp{#else} followed by @samp{#if}, so the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
977 function stops at them when going forward, but not when going backward.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
978
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
979 @item @kbd{M-x c-down-conditional-with-else}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
980 @findex c-down-conditional-with-else
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
981 @findex down-conditional-with-else (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
982 A variety of @code{c-down-conditional} that also stops at @samp{#else}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
983 lines. Normally those lines are ignored.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
984
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
985 @item @kbd{C-c C-p} (@code{c-backward-conditional})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
986 @itemx @kbd{C-c C-n} (@code{c-forward-conditional})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
987 @kindex C-c C-p
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
988 @kindex C-c C-n
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
989 @findex c-backward-conditional
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
990 @findex c-forward-conditional
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
991 @findex backward-conditional (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
992 @findex forward-conditional (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
993 Move backward or forward across a preprocessor conditional, leaving
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
994 the mark behind. A prefix argument acts as a repeat count. With a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
995 negative argument, move in the opposite direction.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
996
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
997 These key sequences are not bound in AWK Mode, which doesn't have
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
998 preprocessor statements.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
999
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1000 @item @kbd{M-x c-backward-into-nomenclature}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1001 @itemx @kbd{M-x c-forward-into-nomenclature}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1002 @findex c-backward-into-nomenclature
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1003 @findex c-forward-into-nomenclature
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1004 @findex backward-into-nomenclature (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1005 @findex forward-into-nomenclature (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1006 A popular programming style, especially for object-oriented languages
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1007 such as C++ is to write symbols in a mixed case format, where the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1008 first letter of each word is capitalized, and not separated by
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1009 underscores. E.g. @samp{SymbolsWithMixedCaseAndNoUnderlines}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1010
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1011 These commands move backward or forward to the beginning of the next
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1012 capitalized word. With prefix argument @var{n}, move @var{n} times.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1013 If @var{n} is negative, move in the opposite direction.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1014
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1015 Note that these two commands have been superseded by
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1016 @code{c-subword-mode}, which you should use instead. @xref{Subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1017 Movement}. They might be removed from a future release of @ccmode{}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1018 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1019
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1020 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1021 @node Filling and Breaking, Minor Modes, Movement Commands, Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1022 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1023 @section Filling and Line Breaking Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1024 @cindex text filling
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1025 @cindex line breaking
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1026 @cindex comment handling
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1027 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1028
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1029 Since there's a lot of normal text in comments and string literals,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1030 @ccmode{} provides features to edit these like in text mode. The goal
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1031 is to do it seamlessly, i.e. you can use auto fill mode, sentence and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1032 paragraph movement, paragraph filling, adaptive filling etc. wherever
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1033 there's a piece of normal text without having to think much about it.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1034 @ccmode{} keeps the indentation, fixes suitable comment line prefixes,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1035 and so on.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1036
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1037 You can configure the exact way comments get filled and broken, and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1038 where Emacs does auto-filling (see @pxref{Custom Filling and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1039 Breaking}). Typically, the style system (@pxref{Styles}) will have
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1040 set this up for you, so you probably won't have to bother.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1041
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1042 @findex auto-fill-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1043 @cindex Auto Fill mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1044 @cindex paragraph filling
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1045 Line breaks are by default handled (almost) the same regardless of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1046 whether they are made by auto fill mode (@pxref{Auto Fill,,,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1047 @emacsman{}, @emacsmantitle{}}), by paragraph filling (e.g. with
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1048 @kbd{M-q}), or explicitly with @kbd{M-j} or similar methods. In
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1049 string literals, the new line gets the same indentation as the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1050 previous nonempty line.@footnote{You can change this default by
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1051 setting the @code{string} syntactic symbol (@pxref{Syntactic Symbols}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1052 and @pxref{Customizing Indentation})}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1053
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1054 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1055 @item @kbd{M-q} (@code{c-fill-paragraph})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1056 @kindex M-q
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1057 @findex c-fill-paragraph
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1058 @findex fill-paragraph (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1059 @cindex Javadoc markup
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1060 @cindex Pike autodoc markup
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1061 This command fills multiline string literals and both block
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1062 and line style comments. In Java buffers, the Javadoc markup words
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1063 are recognized as paragraph starters. The line oriented Pike autodoc
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1064 markup words are recognized in the same way in Pike mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1065
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1066 The formatting of the starters (@code{/*}) and enders (@code{*/}) of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1067 block comments are kept as they were before the filling. I.e., if
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1068 either the starter or ender were on a line of its own, then it stays
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1069 on its own line; conversely, if the delimiter has comment text on its
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1070 line, it keeps at least one word of that text with it on the line.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1071
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1072 This command is the replacement for @code{fill-paragraph} in @ccmode{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1073 buffers.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1074
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1075 @item @kbd{M-j} (@code{c-indent-new-comment-line})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1076 @kindex M-j
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1077 @findex c-indent-new-comment-line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1078 @findex indent-new-comment-line (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1079 This breaks the current line at point and indents the new line. If
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1080 point was in a comment, the new line gets the proper comment line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1081 prefix. If point was inside a macro, a backslash is inserted before
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1082 the line break. It is the replacement for
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1083 @code{indent-new-comment-line}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1084
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1085 @item @kbd{M-x c-context-line-break}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1086 @findex c-context-line-break
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1087 @findex context-line-break (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1088 Insert a line break suitable to the context: If the point is inside a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1089 comment, the new line gets the suitable indentation and comment line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1090 prefix like @code{c-indent-new-comment-line}. In normal code it's
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1091 indented like @code{newline-and-indent} would do. In macros it acts
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1092 like @code{newline-and-indent} but additionally inserts and optionally
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1093 aligns the line ending backslash so that the macro remains unbroken.
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1094 @xref{Custom Macros}, for details about the backslash alignment. In a
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1095 string, a backslash is inserted only if the string is within a
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1096 macro@footnote{In GCC, unescaped line breaks within strings are
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1097 valid.}.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1098
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1099 This function is not bound to a key by default, but it's intended to be
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1100 used on the @kbd{RET} key. If you like the behavior of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1101 @code{newline-and-indent} on @kbd{RET}, you should consider switching to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1102 this function. @xref{Sample .emacs File}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1103
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1104 @item @kbd{M-x c-context-open-line}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1105 @findex c-context-open-line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1106 @findex context-open-line (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1107 This is to @kbd{C-o} (@kbd{M-x open-line}) as
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1108 @code{c-context-line-break} is to @kbd{RET}. I.e. it works just like
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1109 @code{c-context-line-break} but leaves the point before the inserted
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1110 line break.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1111 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1112
Dave Love <fx@gnu.org>
parents:
diff changeset
1113
Dave Love <fx@gnu.org>
parents:
diff changeset
1114 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1115 @node Minor Modes, Electric Keys, Filling and Breaking, Commands
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1116 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1117 @section Minor Modes
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1118 @cindex Minor Modes
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1119 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
1120
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1121 @ccmode{} contains several minor-mode-like features that you might
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1122 find useful while writing new code or editing old code:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1123
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1124 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1125 @item electric mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1126 When this is enabled, certain visible characters cause reformatting as
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1127 they are typed. This is normally helpful, but can be a nuisance when
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1128 editing chaotically formatted code. It can also be disconcerting,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1129 especially for users who are new to @ccmode{}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1130 @item auto-newline mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1131 This automatically inserts newlines where you'd probably want to type
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1132 them yourself, e.g. after typing @samp{@}}s. Its action is suppressed
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1133 when electric mode is disabled.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1134 @item hungry-delete mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1135 This lets you delete a contiguous block of whitespace with a single
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1136 key - for example, the newline and indentation just inserted by
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1137 auto-newline when you want to back up and write a comment after the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1138 last statement.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1139 @item subword mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1140 This mode makes basic word movement commands like @kbd{M-f}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1141 (@code{forward-word}) and @kbd{M-b} (@code{backward-word}) treat the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1142 parts of sillycapsed symbols as different words.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1143 E.g. @samp{NSGraphicsContext} is treated as three words @samp{NS},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1144 @samp{Graphics}, and @samp{Context}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1145 @item syntactic-indentation mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1146 When this is enabled (which it normally is), indentation commands such
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1147 as @kbd{C-j} indent lines of code according to their syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1148 structure. Otherwise, a line is simply indented to the same level as
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1149 the previous one and @kbd{@key{TAB}} adjusts the indentation in steps
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1150 of `c-basic-offset'.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1151 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1152
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1153 Full details on how these minor modes work are at @ref{Electric Keys},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1154 @ref{Auto-newlines}, @ref{Hungry WS Deletion}, @ref{Subword Movement},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1155 and @ref{Indentation Engine Basics}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1156
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1157 You can toggle each of these minor modes on and off, and you can
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1158 configure @ccmode{} so that it starts up with your favourite
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1159 combination of them (@pxref{Sample .emacs File}). By default, when
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1160 you initialize a buffer, electric mode and syntactic-indentation mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1161 are enabled but the other two modes are disabled.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1162
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1163 @ccmode{} displays the current state of the first four of these minor
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1164 modes on the modeline by appending letters to the major mode's name,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1165 one letter for each enabled minor mode - @samp{l} for electric mode,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1166 @samp{a} for auto-newline mode, @samp{h} for hungry delete mode, and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1167 @samp{w} for subword mode. If all these modes were enabled, you'd see
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1168 @samp{C/lahw}@footnote{The @samp{C} would be replaced with the name of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1169 the language in question for the other languages @ccmode{} supports.}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1170
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1171 Here are the commands to toggle these modes:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1172
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1173 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1174 @item @kbd{C-c C-l} (@code{c-toggle-electric-state})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1175 @kindex C-c C-l
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1176 @findex c-toggle-electric-state
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1177 @findex toggle-electric-state (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1178 Toggle electric minor mode. When the command turns the mode off, it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1179 also suppresses auto-newline mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1180
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1181 @item @kbd{C-c C-a} (@code{c-toggle-auto-newline})
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1182 @kindex C-c C-a
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1183 @findex c-toggle-auto-newline
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1184 @findex toggle-auto-newline (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1185 Toggle auto-newline minor mode. When the command turns the mode on,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1186 it also enables electric minor mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1187
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1188 @item @kbd{M-x c-toggle-hungry-state}@footnote{Prior to @ccmode{} 5.31, this command was bound to @kbd{C-c C-d}.}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1189 @findex c-toggle-hungry-state
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1190 @findex toggle-hungry-state (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1191 Toggle hungry-delete minor mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1192
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1193 @item @kbd{M-x c-toggle-auto-hungry-state}@footnote{Prior to @ccmode{} 5.31, this command was bound to @kbd{C-c C-t}.}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1194 @findex c-toggle-auto-hungry-state
Dave Love <fx@gnu.org>
parents:
diff changeset
1195 @findex toggle-auto-hungry-state (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1196 Toggle both auto-newline and hungry delete minor modes.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1197
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1198 @item @kbd{C-c C-w} (@code{M-x c-subword-mode})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1199 @kindex C-c C-w
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1200 @findex c-subword-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1201 @findex subword-mode (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1202 Toggle subword mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1203
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1204 @item @kbd{M-x c-toggle-syntactic-indentation}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1205 @findex c-toggle-syntactic-indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1206 @findex toggle-syntactic-indentation (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1207 Toggle syntactic-indentation mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1208 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1209
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1210 Common to all the toggle functions above is that if they are called
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1211 programmatically, they take an optional numerical argument. A
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1212 positive value will turn on the minor mode (or both of them in the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1213 case of @code{c-toggle-auto-hungry-state}) and a negative value will
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1214 turn it (or them) off.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1215
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1216
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1217 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1218 @node Electric Keys, Auto-newlines, Minor Modes, Commands
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1219 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1220 @section Electric Keys and Keywords
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1221 @cindex electric characters
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1222 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
1223
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1224 Most punctuation keys provide @dfn{electric} behavior - as well as
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1225 inserting themselves they perform some other action, such as
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1226 reindenting the line. This reindentation saves you from having to
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1227 reindent a line manually after typing, say, a @samp{@}}. A few
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1228 keywords, such as @code{else}, also trigger electric action.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1229
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1230 You can inhibit the electric behaviour described here by disabling
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1231 electric minor mode (@pxref{Minor Modes}).
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1232
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1233 Common to all these keys is that they only behave electrically when
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1234 used in normal code (as contrasted with getting typed in a string
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1235 literal or comment). Those which cause re-indentation do so only when
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1236 @code{c-syntactic-indentation} has a non-@code{nil} value (which it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1237 does by default).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1238
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1239 These keys and keywords are:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1240 @c ACM, 2004/8/24: c-electric-pound doesn't check c-s-i: this is more
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1241 @c like a bug in the code than a bug in this document. It'll get
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1242 @c fixed in the code sometime.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1243
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1244 @table @kbd
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1245 @item #
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1246 @kindex #
Dave Love <fx@gnu.org>
parents:
diff changeset
1247 @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
1248 @findex electric-pound (c-)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1249 @vindex c-electric-pound-behavior
Dave Love <fx@gnu.org>
parents:
diff changeset
1250 @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
1251 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
1252 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
1253 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
1254 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
1255 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
1256 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
1257 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
1258
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1259 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
1260 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
1261 character.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1262 @c ACM, 2004/8/24: Change this (and the code) to do AWK comment
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1263 @c reindentation.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1264
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1265 @item *
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1266 @kindex *
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1267 @itemx /
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1268 @kindex /
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1269 @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
1270 @findex electric-star (c-)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1271 @findex c-electric-slash
Dave Love <fx@gnu.org>
parents:
diff changeset
1272 @findex electric-slash (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1273 A star (bound to @code{c-electric-star}) or a slash
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1274 (@code{c-electric-slash}) causes reindentation when you type it as the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1275 second component of a C style block comment opener (@samp{/*}) or a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1276 C++ line comment opener (@samp{//}) respectively, but only if the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1277 comment opener is the first thing on the line (i.e. there's only
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1278 whitespace before it).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1279
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1280 Additionally, you can configure @ccmode{} so that typing a slash at
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1281 the start of a line within a block comment will terminate the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1282 comment. You don't need to have electric minor mode enabled to get
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1283 this behaviour. @xref{Clean-ups}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1284
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1285 In AWK mode, @samp{*} and @samp{/} do not delimit comments and are not
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1286 electric.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1287
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1288 @item <
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1289 @kindex <
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1290 @itemx >
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1291 @kindex >
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1292 @findex c-electric-lt-gt
Dave Love <fx@gnu.org>
parents:
diff changeset
1293 @findex electric-lt-gt (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1294 A less-than or greater-than sign (bound to @code{c-electric-lt-gt}) is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1295 electric in two circumstances: when it is an angle bracket in a C++
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1296 @samp{template} declaration (and similar constructs in other
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1297 languages) and when it is the second of two @kbd{<} or @kbd{>}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1298 characters in a C++ style stream operator. In either case, the line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1299 is reindented. Angle brackets in C @samp{#include} directives are not
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1300 electric.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1301
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1302 @item (
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1303 @kindex (
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1304 @itemx )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1305 @kindex )
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1306 @findex c-electric-paren
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1307 @findex electric-paren (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1308 The normal parenthesis characters @samp{(} and @samp{)} (bound to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1309 @code{c-electric-paren}) reindent the current line. This is useful
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1310 for getting the closing parenthesis of an argument list aligned
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1311 automatically.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1312
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1313 You can also configure @ccmode{} to insert a space automatically
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1314 between a function name and the @samp{(} you've just typed, and to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1315 remove it automatically after typing @samp{)}, should the argument
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1316 list be empty. You don't need to have electric minor mode enabled to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1317 get these actions. @xref{Clean-ups}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1318
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1319 @item @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1320 @kindex @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1321 @itemx @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1322 @kindex @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1323 @findex c-electric-brace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1324 @findex electric-brace (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1325 Typing a brace (bound to @code{c-electric-brace}) reindents the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1326 current line. Also, one or more newlines might be inserted if
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1327 auto-newline minor mode is enabled. @xref{Auto-newlines}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1328 Additionally, you can configure @ccmode{} to compact excess whitespace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1329 inserted by auto-newline mode in certain circumstances.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1330 @xref{Clean-ups}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1331
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1332 @item :
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1333 @kindex :
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1334 @findex c-electric-colon
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1335 @findex electric-colon (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1336 Typing a colon (bound to @code{c-electric-colon}) reindents the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1337 current line. Additionally, one or more newlines might be inserted if
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1338 auto-newline minor mode is enabled. @xref{Auto-newlines}. If you
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1339 type a second colon immediately after such an auto-newline, by default
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1340 the whitespace between the two colons is removed, leaving a C++ scope
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1341 operator. @xref{Clean-ups}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1342
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1343 If you prefer, you can insert @samp{::} in a single operation,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1344 avoiding all these spurious reindentations, newlines, and clean-ups.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1345 @xref{Other Commands}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1346
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1347 @item ;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1348 @kindex ;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1349 @itemx ,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1350 @kindex ,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1351 @findex c-electric-semi&comma
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1352 @findex electric-semi&comma (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1353 Typing a semicolon or comma (bound to @code{c-electric-semi&comma})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1354 reindents the current line. Also, a newline might be inserted if
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1355 auto-newline minor mode is enabled. @xref{Auto-newlines}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1356 Additionally, you can configure @ccmode{} so that when auto-newline
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1357 has inserted whitespace after a @samp{@}}, it will be removed again
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1358 when you type a semicolon or comma just after it. @xref{Clean-ups}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1359
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1360 @end table
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1361
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1362 @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
1363 @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
1364
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1365 Certain keywords are electric, causing reindentation when they are
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1366 preceded only by whitespace on the line. The keywords are those that
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1367 continue an earlier statement instead of starting a new one:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1368 @code{else}, @code{while}, @code{catch} (only in C++ and Java) and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1369 @code{finally} (only in Java).
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1370
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1371 An example:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1372
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1373 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1374 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1375 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
1376 if (a[i])
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1377 res += a[i]->offset;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1378 else
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1379 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1380 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1381
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1382 Here, the @code{else} should be indented like the preceding @code{if},
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1383 since it continues that statement. @ccmode{} will automatically
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1384 reindent it after the @code{else} has been typed in full, since only
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1385 then is it possible to decide whether it's a new statement or a
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1386 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
1387
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1388 @vindex abbrev-mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1389 @findex abbrev-mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1390 @cindex Abbrev mode
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1391 @ccmode{} uses Abbrev mode (@pxref{Abbrevs,,, @emacsman{}, @emacsmantitle{}})
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1392 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
1393 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
1394 @end deffn
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1395
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1396
Dave Love <fx@gnu.org>
parents:
diff changeset
1397 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1398 @node Auto-newlines, Hungry WS Deletion, Electric Keys, Commands
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1399 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1400 @section Auto-newline Insertion
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1401 @cindex auto-newline
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1402 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
1403
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1404 When you have @dfn{Auto-newline minor mode} enabled (@pxref{Minor
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1405 Modes}), @ccmode{} inserts newlines for you automatically (in certain
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1406 syntactic contexts) when you type a left or right brace, a colon, a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1407 semicolon, or a comma. Sometimes a newline appears before the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1408 character you type, sometimes after it, sometimes both.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1409
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1410 Auto-newline only triggers when the following conditions hold:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1411
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1412 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1413 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1414 Auto-newline minor mode is enabled, as evidenced by the indicator
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1415 @samp{a} after the mode name on the modeline (e.g. @samp{C/a} or
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1416 @samp{C/la}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1417
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1418 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1419 The character was typed at the end of a line, or with only whitespace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1420 after it, and possibly a @samp{\} escaping the newline.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1421
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1422 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1423 The character is not on its own line already. (This applies only to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1424 insertion of a newline @emph{before} the character.)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1425
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1426 @item
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1427 @cindex literal
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1428 @cindex syntactic whitespace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1429 The character was not typed inside of a literal @footnote{A
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1430 @dfn{literal} is defined as any comment, string, or preprocessor macro
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1431 definition. These constructs are also known as @dfn{syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1432 whitespace} since they are usually ignored when scanning C code.}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1433
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1434 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1435 No numeric argument was supplied to the command (i.e. it was typed as
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1436 normal, with no @kbd{C-u} prefix).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1437 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1438
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1439 You can configure the precise circumstances in which newlines get
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1440 inserted (see @pxref{Custom Auto-newlines}). Typically, the style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1441 system (@pxref{Styles}) will have set this up for you, so you probably
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1442 won't have to bother.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1443
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1444 Sometimes @ccmode{} inserts an auto-newline where you don't want one,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1445 such as after a @samp{@}} when you're about to type a @samp{;}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1446 Hungry deletion can help here (@pxref{Hungry WS Deletion}), or you can
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1447 activate an appropriate @dfn{clean-up}, which will remove the excess
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1448 whitespace after you've typed the @samp{;}. See @ref{Clean-ups} for a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1449 full description. See also @ref{Electric Keys} for a summary of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1450 clean-ups listed by key.
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
1451
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1452
Dave Love <fx@gnu.org>
parents:
diff changeset
1453 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1454 @node Hungry WS Deletion, Subword Movement, Auto-newlines, Commands
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1455 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1456 @section Hungry Deletion of Whitespace
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1457 @cindex hungry-deletion
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1458 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
1459
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1460 If you want to delete an entire block of whitespace at point, you can
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1461 use @dfn{hungry deletion}. This deletes all the contiguous whitespace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1462 either before point or after point in a single operation.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1463 ``Whitespace'' here includes tabs and newlines, but not comments or
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1464 preprocessor commands. Hungry deletion can markedly cut down on the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1465 number of times you have to hit deletion keys when, for example,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1466 you've made a mistake on the preceding line and have already pressed
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1467 @kbd{C-j}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1468
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1469 Hungry deletion is a simple feature that some people find extremely
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1470 useful. In fact, you might find yourself wanting it in @strong{all}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1471 your editing modes!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1472
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1473 Loosely speaking, in what follows, @dfn{@key{DEL}} means ``the
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1474 backspace key'' and @dfn{@key{DELETE}} means ``the forward delete
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1475 key''. This is discussed in more detail below.
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1476
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1477 There are two different ways you can use hungry deletion:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1478
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1479 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1480 @item Using @dfn{Hungry Delete Mode} with @kbd{@key{DEL}} and @kbd{C-d}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1481 Here you toggle Hungry Delete minor mode with @kbd{M-x
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1482 c-toggle-hungry-state}@footnote{Prior to @ccmode{} 5.31, this command
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1483 was bound to @kbd{C-c C-d}. @kbd{C-c C-d} is now the default binding
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1484 for @code{c-hungry-delete-forward}.} (@pxref{Minor Modes}.) This
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1485 makes @kbd{@key{DEL}} and @kbd{C-d} do backwards and forward hungry
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1486 deletion.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1487
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1488 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1489 @item @kbd{@key{DEL}} (@code{c-electric-backspace})
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1490 @kindex DEL
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1491 @findex c-electric-backspace
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1492 @findex electric-backspace (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1493 This command is run by default when you hit the @kbd{DEL} key. When
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1494 hungry delete mode is enabled, it deletes any amount of whitespace in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1495 the backwards direction. Otherwise, or when used with a prefix
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1496 argument or in a literal (@pxref{Auto-newlines}), the command just
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1497 deletes backwards in the usual way. (More precisely, it calls the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1498 function contained in the variable @code{c-backspace-function},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1499 passing it the prefix argument, if any.)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1500
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1501 @item @code{c-backspace-function}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1502 @vindex c-backspace-function
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1503 @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
1504 @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
1505 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
1506 do an ``electric'' deletion of the preceding whitespace. The default
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1507 value is @code{backward-delete-char-untabify}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1508 (@pxref{Deletion,,,@lispref{}, @lispreftitle{}}, the function which
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1509 deletes a single character.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1510
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1511 @item @kbd{C-d} (@code{c-electric-delete-forward})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1512 @kindex C-d
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1513 @findex c-electric-delete-forward
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1514 @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
1515 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
1516 @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
1517 doesn't do an ``electric'' deletion of the following whitespace, it
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1518 just does @code{delete-char}, more or less. (Strictly speaking, it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1519 calls the function in @code{c-delete-function} with the prefix
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1520 argument.)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1521
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1522 @item @code{c-delete-function}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1523 @vindex c-delete-function
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1524 @vindex delete-function (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1525 @findex delete-char
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1526 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
1527 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
1528 default value is @code{delete-char}.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1529 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1530
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1531 @item Using Distinct Bindings
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1532 The other (newer and recommended) way to use hungry deletion is to
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1533 perform @code{c-hungry-delete-backwards} and
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1534 @code{c-hungry-delete-forward} directly through their key sequences
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1535 rather than using the minor mode toggling.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1536
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1537 @table @asis
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1538 @item @kbd{C-c C-@key{DEL}}, or @kbd{C-c @key{DEL}} (@code{c-hungry-delete-backwards})@footnote{This command was formerly known as @code{c-hungry-backspace}.}
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1539 @kindex C-c C-<backspace>
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1540 @kindex C-c <backspace>
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1541 @kindex C-c C-DEL
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1542 @kindex C-c DEL
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1543 @findex c-hungry-delete-backwards
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1544 @findex hungry-delete-backwards (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1545 Delete any amount of whitespace in the backwards direction (regardless
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1546 whether hungry-delete mode is enabled or not). This command is bound
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1547 to both @kbd{C-c C-@key{DEL}} and @kbd{C-c @key{DEL}}, since the more
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1548 natural one, @kbd{C-c C-@key{DEL}}, is sometimes difficult to type at
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1549 a character terminal.
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1550
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1551 @item @kbd{C-c C-d}, @kbd{C-c C-@key{DELETE}}, or @kbd{C-c @key{DELETE}} (@code{c-hungry-delete-forward})
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1552 @kindex C-c C-d
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1553 @kindex C-c C-<DELETE>
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1554 @kindex C-c <DELETE>
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1555 @findex c-hungry-delete-forward
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1556 @findex hungry-delete-forward (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1557 Delete any amount of whitespace in the forward direction (regardless
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1558 whether hungry-delete mode is enabled or not). This command is bound
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1559 to both @kbd{C-c C-@key{DELETE}} and @kbd{C-c @key{DELETE}} for the
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1560 same reason as for @key{DEL} above.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1561 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1562 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1563
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1564 @kindex <delete>
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1565 @kindex <backspace>
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1566
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1567 When we talk about @kbd{@key{DEL}}, and @kbd{@key{DELETE}} above, we
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1568 actually do so without connecting them to the physical keys commonly
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1569 known as @key{Backspace} and @key{Delete}. The default bindings to
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1570 those two keys depends on the flavor of (X)Emacs you are using.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1571
Dave Love <fx@gnu.org>
parents:
diff changeset
1572 @findex c-electric-delete
Dave Love <fx@gnu.org>
parents:
diff changeset
1573 @findex electric-delete (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1574 @findex c-hungry-delete
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1575 @findex hungry-delete (c-)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1576 @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
1577 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
1578 @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
1579 @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
1580 setting the variable @code{delete-key-deletes-forward}, a standard
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1581 XEmacs variable.
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1582 @c This variable is encapsulated by XEmacs's (defsubst delete-forward-p ...).
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1583 When this variable is non-@code{nil}, @code{c-electric-delete} will do
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1584 forward deletion with @code{c-electric-delete-forward}, otherwise it
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1585 does backward deletion with @code{c-electric-backspace}. Similarly,
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1586 @kbd{C-c @key{Delete}} and @kbd{C-c C-@key{Delete}} are bound to
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1587 @code{c-hungry-delete} which is controlled in the same way by
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1588 @code{delete-key-deletes-forward}.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1589
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1590 @findex normal-erase-is-backspace-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1591
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1592 Emacs 21 and later automatically binds @key{Backspace} and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1593 @key{Delete} to @kbd{DEL} and @kbd{C-d} according to your environment,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1594 and @ccmode{} extends those bindings to @kbd{C-c C-@key{Backspace}}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1595 etc. If you need to change the bindings through
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1596 @code{normal-erase-is-backspace-mode} then @ccmode{} will also adapt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1597 its extended bindings accordingly.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1598
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1599 In earlier (X)Emacs versions, @ccmode{} doesn't bind either
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1600 @key{Backspace} or @key{Delete} directly. Only the key codes
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1601 @kbd{DEL} and @kbd{C-d} are bound, and it's up to the default bindings
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1602 to map the physical keys to them. You might need to modify this
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1603 yourself if the defaults are unsuitable.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1604
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1605 Getting your @key{Backspace} and @key{Delete} keys properly set up can
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1606 sometimes be tricky. The information in @ref{DEL Does Not
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1607 Delete,,,emacs, GNU Emacs Manual}, might be helpful if you're having
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1608 trouble with this in GNU Emacs.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1609
Dave Love <fx@gnu.org>
parents:
diff changeset
1610
Dave Love <fx@gnu.org>
parents:
diff changeset
1611 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1612 @node Subword Movement, Other Commands, Hungry WS Deletion, Commands
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1613 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1614 @section Subword Movement and Editing
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1615 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
1616
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1617 @cindex nomenclature
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1618 @cindex subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1619 In spite of the GNU Coding Standards, it is popular to name a symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1620 by mixing uppercase and lowercase letters, e.g. @samp{GtkWidget},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1621 @samp{EmacsFrameClass}, or @samp{NSGraphicsContext}. Here we call
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1622 these mixed case symbols @dfn{nomenclatures}. Also, each capitalized
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1623 (or completely uppercase) part of a nomenclature is called a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1624 @dfn{subword}. Here are some examples:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1625
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1626 @multitable {@samp{NSGraphicsContext}} {@samp{NS}, @samp{Graphics}, and @samp{Context}}
72600
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1627 @c This could be converted to @headitem when we require Texinfo 4.7
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1628 @iftex
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1629 @item @b{Nomenclature}
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1630 @tab @b{Subwords}
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1631 @end iftex
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1632 @ifnottex
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1633 @item Nomenclature
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1634 @tab Subwords
72600
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1635 @item ---------------------------------------------------------
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1636 @end ifnottex
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1637 @item @samp{GtkWindow}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1638 @tab @samp{Gtk} and @samp{Window}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1639 @item @samp{EmacsFrameClass}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1640 @tab @samp{Emacs}, @samp{Frame}, and @samp{Class}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1641 @item @samp{NSGraphicsContext}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1642 @tab @samp{NS}, @samp{Graphics}, and @samp{Context}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1643 @end multitable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1644
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1645 The subword minor mode replaces the basic word oriented movement and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1646 editing commands with variants that recognize subwords in a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1647 nomenclature and treat them as separate words:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1648
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1649 @findex c-forward-subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1650 @findex forward-subword (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1651 @findex c-backward-subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1652 @findex backward-subword (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1653 @findex c-mark-subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1654 @findex mark-subword (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1655 @findex c-kill-subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1656 @findex kill-subword (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1657 @findex c-backward-kill-subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1658 @findex backward-kill-subword (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1659 @findex c-transpose-subwords
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1660 @findex transpose-subwords (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1661 @findex c-capitalize-subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1662 @findex capitalize-subword (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1663 @findex c-upcase-subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1664 @findex upcase-subword (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1665 @findex c-downcase-subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1666 @findex downcase-subword (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1667 @multitable @columnfractions .20 .40 .40
72600
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1668 @c This could be converted to @headitem when we require Texinfo 4.7
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1669 @iftex
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1670 @item @b{Key} @tab @b{Word oriented command} @tab @b{Subword oriented command}
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1671 @end iftex
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1672 @ifnottex
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1673 @item Key @tab Word oriented command @tab Subword oriented command
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1674 @item ----------------------------------------------------------------------------
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1675 @end ifnottex
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1676 @item @kbd{M-f} @tab @code{forward-word} @tab @code{c-forward-subword}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1677 @item @kbd{M-b} @tab @code{backward-word} @tab @code{c-backward-subword}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1678 @item @kbd{M-@@} @tab @code{mark-word} @tab @code{c-mark-subword}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1679 @item @kbd{M-d} @tab @code{kill-word} @tab @code{c-kill-subword}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1680 @item @kbd{M-DEL} @tab @code{backward-kill-word} @tab @code{c-backward-kill-subword}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1681 @item @kbd{M-t} @tab @code{transpose-words} @tab @code{c-transpose-subwords}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1682 @item @kbd{M-c} @tab @code{capitalize-word} @tab @code{c-capitalize-subword}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1683 @item @kbd{M-u} @tab @code{upcase-word} @tab @code{c-upcase-subword}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1684 @item @kbd{M-l} @tab @code{downcase-word} @tab @code{c-downcase-subword}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1685 @end multitable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1686
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1687 Note that if you have changed the key bindings for the word oriented
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1688 commands in your @file{.emacs} or a similar place, the keys you have
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1689 configured are also used for the corresponding subword oriented
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1690 commands.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1691
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1692 Type @kbd{C-c C-w} to toggle subword mode on and off. To make the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1693 mode turn on automatically, put the following code in your
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1694 @file{.emacs}:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1695
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1696 @example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1697 (add-hook 'c-mode-common-hook
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1698 (lambda () (c-subword-mode 1)))
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1699 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1700
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1701 As a bonus, you can also use @code{c-subword-mode} in non-@ccmode{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1702 buffers by typing @kbd{M-x c-subword-mode}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1703
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1704 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1705 @node Other Commands, , Subword Movement, Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1706 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1707 @section Other Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1708 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1709
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1710 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
1711
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1712 @table @asis
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1713 @item @kbd{C-c .} (@code{c-set-style})
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1714 @kindex C-c .
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1715 @findex c-set-style
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1716 @findex set-style (c-)
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1717 Switch to the specified style in the current buffer. Use like this:
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1718
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1719 @example
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1720 @kbd{C-c . @var{style-name} @key{RET}}
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1721 @end example
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1722
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1723 You can use the @key{TAB} in the normal way to do completion on the
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1724 style name. Note that all style names are case insensitive, even the
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1725 ones you define yourself.
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1726
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1727 Setting a style in this way does @emph{not} automatically reindent your
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1728 file. For commands that you can use to view the effect of your changes,
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1729 see @ref{Indentation Commands} and @ref{Filling and Breaking}.
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1730
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1731 For details of the @ccmode{} style system, see @ref{Styles}.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1732 @item @kbd{C-c :} (@code{c-scope-operator})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1733 @kindex C-c :
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1734 @findex c-scope-operator
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1735 @findex scope-operator (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1736 In C++, it is also sometimes desirable to insert the double-colon scope
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1737 operator without performing the electric behavior of colon insertion.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1738 @kbd{C-c :} does just this.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1739
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1740 @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
1741 @kindex C-c C-\
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1742 @findex c-backslash-region
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1743 @findex backslash-region (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1744 This function inserts and aligns or deletes end-of-line backslashes in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1745 the current region. These are typically used in multi-line macros.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1746
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1747 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
1748 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
1749 @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
1750 deletes any backslashes.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1751
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1752 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
1753 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
1754 (if any) at the end of the previous line.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1755
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1756 To customize the precise workings of this command, @ref{Custom Macros}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1757 @end table
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1758
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1759 @noindent
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1760 The recommended line breaking function, @code{c-context-line-break}
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1761 (@pxref{Filling and Breaking}), is especially nice if you edit
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1762 multiline macros frequently. When used inside a macro, it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1763 automatically inserts and adjusts the mandatory backslash at the end
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1764 of the line to keep the macro together, and it leaves the point at the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1765 right indentation column for the code. Thus you can write code inside
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1766 macros almost exactly as you can elsewhere, without having to bother
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1767 with the trailing backslashes.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1768
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1769 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1770 @item @kbd{C-c C-e} (@code{c-macro-expand})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1771 @kindex C-c C-e
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1772 @findex c-macro-expand
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1773 @findex macro-expand (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1774 This command expands C, C++, Objective C or Pike macros in the region,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1775 using an appropriate external preprocessor program. Normally it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1776 displays its output in a temporary buffer, but if you give it a prefix
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1777 arg (with @kbd{C-u C-c C-e}) it will overwrite the original region
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1778 with the expansion.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1779
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1780 The command does not work in any of the other modes, and the key
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1781 sequence is not bound in these other modes.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1782
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1783 @code{c-macro-expand} isn't actually part of @ccmode{}, even though it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1784 is bound to a @ccmode{} key sequence. If you need help setting it up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1785 or have other problems with it, you can either read its source code or
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1786 ask for help in the standard (X)Emacs forums.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1787 @end table
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1788
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1789 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1790 @node Font Locking, Config Basics, Commands, Top
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1791 @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
1792 @chapter Font Locking
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1793 @cindex font locking
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1794 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1795
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1796 @cindex Font Lock mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1797
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1798 @ccmode{} provides font locking for its supported languages by
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1799 supplying patterns for use with Font Lock mode. This means that you
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1800 get distinct faces on the various syntactic parts such as comments,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1801 strings, keywords and types, which is very helpful in telling them
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1802 apart at a glance and discovering syntactic errors. @xref{Font
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1803 Lock,,, emacs, GNU Emacs Manual}, for ways to enable font locking in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1804 @ccmode{} buffers.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1805
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1806 @strong{Please note:} The font locking in AWK mode is currently not
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1807 integrated with the rest of @ccmode{}. Only the last section of this
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1808 chapter, @ref{AWK Mode Font Locking}, applies to AWK. The other
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1809 sections apply to the other languages.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1810
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1811 @menu
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1812 * Font Locking Preliminaries::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1813 * Faces::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1814 * Doc Comments::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1815 * AWK Mode Font Locking::
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1816 @end menu
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
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1819 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1820 @node Font Locking Preliminaries, Faces, Font Locking, Font Locking
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1821 @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
1822 @section Font Locking Preliminaries
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1823 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1824
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1825 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
1826 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
1827 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
1828 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
1829 mode, just like the indentation rules (although each language still has
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1830 some peculiarities of its own, of course). Since the languages
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1831 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
1832 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
1833
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1834 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
1835 a dependable aid in recognizing the various constructs. Some, like
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1836 strings and comments, are easy to recognize while others, like
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1837 declarations and types, can be very tricky. @ccmode{} can go to great
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1838 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
1839 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
1840 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
1841 therefore be disabled by choosing a lower decoration level with the
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1842 variable @code{font-lock-maximum-decoration} (@pxref{Font Lock,,,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1843 emacs, GNU Emacs Manual}).
53118
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 @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
1846
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1847 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
1848
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1849 @enumerate
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1850 @comment 1
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1851 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1852 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
1853 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
1854
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1855 @comment 2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1856 @item
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1857 Fast font locking: In addition to level 1, fontify keywords, simple
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1858 types and declarations that are easy to recognize. The variables
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1859 @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
1860 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
1861 comments like Javadoc are fontified according to
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1862 @code{c-doc-comment-style} (@pxref{Doc Comments}).
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1863
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1864 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
1865 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
1866
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1867 @comment 3
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1868 @item
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1869 Accurate font locking: Like level 2 but uses a different approach that
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1870 can recognize types and declarations much more accurately. The
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1871 @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
1872 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
1873 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
1874 that are uncertain.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1875
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1876 @cindex Lazy Lock mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1877 @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
1878
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1879 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
1880 support mode like Lazy Lock or Just-in-time Lock mode that only
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1881 fontifies the parts that are actually shown. Fontifying the whole
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1882 buffer at once can easily get bothersomely slow even on contemporary
77036
307c1e602f07 (Font Locking Preliminaries): Link to Emacs manual node on Font
Chong Yidong <cyd@stupidchicken.com>
parents: 76599
diff changeset
1883 hardware. @xref{Font Lock,,,@emacsman{}, @emacsmantitle{}}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1884 @end enumerate
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1885
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1886 @cindex user defined types
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1887 @cindex types, user defined
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1888
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1889 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
1890 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
1891
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1892 @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
1893 @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
1894 @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
1895 @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
1896 @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
1897 @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
1898 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
1899 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
1900 of regexps that matches identifiers that should be recognized as types,
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1901 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
1902 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
1903 single identifier.
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 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
1906 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
1907 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
1908 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
1909 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
1910
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1911 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
1912 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
1913 recognize types.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1914 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1915
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1916
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1917 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1918 @node Faces, Doc Comments, Font Locking Preliminaries, Font Locking
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1919 @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
1920 @section Faces
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1921 @cindex faces
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1922 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1923
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1924 @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
1925 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
1926 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
1927 @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
1928 @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
1929
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1930 @itemize @bullet
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1931 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1932 @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
1933 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
1934
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1935 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1936 @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
1937 @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
1938 @vindex font-lock-comment-face
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1939 Comments that are recognized as documentation (@pxref{Doc Comments})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1940 get @code{font-lock-doc-face} (Emacs) or
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1941 @code{font-lock-doc-string-face} (XEmacs) if those faces exist. If
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1942 they don't then @code{font-lock-comment-face} is used.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1943
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1944 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1945 @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
1946 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
1947 @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
1948
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1949 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1950 @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
1951 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
1952
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1953 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1954 @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
1955 @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
1956 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
1957 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
1958
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1959 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1960 @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
1961 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
1962 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
1963 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
1964
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1965 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1966 @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
1967 @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
1968 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
1969 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
1970 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
1971 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
1972 them somewhere.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1973
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1974 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1975 @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
1976 @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
1977 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
1978
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1979 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1980 @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
1981 @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
1982 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
1983 @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
1984
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1985 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1986 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
1987 labels.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1988
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1989 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1990 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
1991 labels.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1992
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1993 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1994 @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
1995 @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
1996 @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
1997 Preprocessor directives get @code{font-lock-preprocessor-face} if it
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1998 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
1999 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
2000
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2001 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2002 @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
2003 @vindex c-invalid-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2004 @vindex invalid-face (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2005 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
2006 @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
2007 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
2008 @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
2009 default.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2010
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2011 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
2012 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
2013 @end itemize
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2014
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2015
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2016 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2017 @node Doc Comments, AWK Mode Font Locking, Faces, Font Locking
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2018 @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
2019 @section Documentation Comments
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2020 @cindex documentation comments
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2021 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2022
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2023 There are various tools to supply documentation in the source as
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2024 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
2025 @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
2026 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
2027
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2028 @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
2029 @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
2030 This is a style variable that specifies which documentation comment
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2031 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
2032
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2033 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
2034 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
2035 conflict).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2036
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2037 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
2038 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
2039 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
2040 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
2041 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
2042
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2043 The default value for @code{c-doc-comment-style} is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2044 @w{@code{((java-mode . javadoc) (pike-mode . autodoc) (c-mode . gtkdoc))}}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2045
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2046 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
2047 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
2048 you switch to a style which sets this variable. Thus, if you change it
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2049 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
2050 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
2051 reinitialize.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2052
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2053 @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
2054 @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
2055 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
2056 modified before the mode hooks are run. If you change this variable in
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2057 a mode hook, you'll have to call @code{c-setup-doc-comment-style}
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2058 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
2059 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2060
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2061 @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
2062 styles:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2063
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2064 @table @code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2065 @item javadoc
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2066 @cindex Javadoc markup
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2067 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
2068
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2069 @item autodoc
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2070 @cindex Pike autodoc markup
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2071 For Pike autodoc markup, the standard in Pike.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2072
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2073 @item gtkdoc
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2074 @cindex GtkDoc markup
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2075 For GtkDoc markup, widely used in the Gnome community.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2076 @end table
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2077
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2078 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
2079 other doc comment styles, please let us know (@pxref{Mailing Lists and
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2080 Bug Reports}).
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2081
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2082 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
2083 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
2084 @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
2085 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
2086 @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
2087 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
2088 @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
2089
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2090 If you add support for another doc comment style, please consider
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2091 contributing it - send a note to @email{bug-cc-mode@@gnu.org}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2092
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2093
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2094 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2095 @node AWK Mode Font Locking, , Doc Comments, Font Locking
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2096 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2097 @section AWK Mode Font Locking
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2098 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2099
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2100 The general appearance of font-locking in AWK mode is much like in any
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2101 other programming mode. @xref{Faces For Font Lock,,,elisp, GNU Emacs
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2102 Lisp Reference Manual}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2103
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2104 The following faces are, however, used in a non-standard fashion in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2105 AWK mode:
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2106
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2107 @table @asis
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2108 @item @code{font-lock-variable-name-face}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2109 This face was intended for variable declarations. Since variables are
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2110 not declared in AWK, this face is used instead for AWK system
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2111 variables (such as @code{NF}) and ``Special File Names'' (such as
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2112 @code{"/dev/stderr"}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2113
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2114 @item @code{font-lock-builtin-face} (Emacs)/@code{font-lock-preprocessor-face} (XEmacs)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2115 This face is normally used for preprocessor directives in @ccmode{}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2116 There are no such things in AWK, so this face is used instead for
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2117 standard functions (such as @code{match}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2118
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2119 @item @code{font-lock-string-face}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2120 As well as being used for strings, including localizable strings,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2121 (delimited by @samp{"} and @samp{_"}), this face is also used for AWK
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2122 regular expressions (delimited by @samp{/}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2123
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2124 @item @code{font-lock-warning-face} (Emacs)/@code{c-invalid-face} (XEmacs)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2125 This face highlights the following syntactically invalid AWK
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2126 constructs:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2127
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2128 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2129 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2130 An unterminated string or regular expression. Here the opening
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2131 delimiter (@samp{"} or @samp{/} or @samp{_"}) is displayed in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2132 @code{font-lock-warning-face}. This is most noticeable when typing in a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2133 new string/regular expression into a buffer, when the warning-face
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2134 serves as a continual reminder to terminate the construct.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2135
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2136 AWK mode fontifies unterminated strings/regular expressions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2137 differently from other modes: Only the text up to the end of the line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2138 is fontified as a string (escaped newlines being handled correctly),
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2139 rather than the text up to the next string quote.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2140
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2141 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2142 A space between the function name and opening parenthesis when calling
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2143 a user function. The last character of the function name and the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2144 opening parenthesis are highlighted. This font-locking rule will
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2145 spuriously highlight a valid concatenation expression where an
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2146 identifier precedes a parenthesised expression. Unfortunately.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2147
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2148 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2149 Whitespace following the @samp{\} in what otherwise looks like an
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2150 escaped newline. The @samp{\} is highlighted.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2151 @end itemize
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2152 @end table
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2153
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2154
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2155 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2156 @node Config Basics, Custom Filling and Breaking, Font Locking, Top
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2157 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2158 @chapter Configuration Basics
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2159 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2160
71224
b7261e09f8e4 * cc-mode.texi (Getting Started, Indentation Commands, Config Basics)
Romain Francoise <romain@orebokech.com>
parents: 69681
diff changeset
2161 @cindex Emacs Initialization File
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2162 @cindex Configuration
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2163 You configure @ccmode{} by setting Lisp variables and calling (and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2164 perhaps writing) Lisp functions@footnote{DON'T PANIC!!! This isn't
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2165 difficult.}, which is usually done by adding code to an Emacs
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2166 initialization file. This file might be @file{site-start.el} or
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2167 @file{.emacs} or @file{init.el} or @file{default.el} or perhaps some
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2168 other file. @xref{Init File,,,@emacsman{}, @emacsmantitle{}}. For
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2169 the sake of conciseness, we just call this file ``your @file{.emacs}''
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2170 throughout the rest of the manual.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2171
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2172 Several of these variables (currently 16), are known collectively as
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2173 @dfn{style variables}. @ccmode{} provides a special mechanism, known
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2174 as @dfn{styles} to make it easier to set these variables as a group,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2175 to ``inherit'' settings from one style into another, and so on. Style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2176 variables remain ordinary Lisp variables, whose values can be read and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2177 changed independently of the style system. @xref{Style Variables}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2178
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2179 There are several ways you can write the code, depending on the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2180 precise effect you want---they are described further down on this page.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2181 If you are new to @ccmode{}, we suggest you begin with the simplest
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2182 method, ``Top-level commands or the customization interface''.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2183
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2184 If you make conflicting settings in several of these ways, the way
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2185 that takes precedence is the one that appears latest in this list:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2186 @itemize @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2187 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2188 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2189 @item Style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2190 @itemx Top-level command or ``customization interface''
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2191 @itemx Hook
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2192 @itemx File Style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2193 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2194 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2195
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2196 Here is a summary of the different ways of writing your configuration
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2197 settings:
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2198
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2199 @table @asis
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2200 @item Top-level commands or the ``customization interface''
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2201 Most simply, you can write @code{setq} and similar commands at the top
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2202 level of your @file{.emacs} file. When you load a @ccmode{} buffer,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2203 it initializes its configuration from these global values (at least,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2204 for those settings you have given values to), so it makes sense to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2205 have these @code{setq} commands run @emph{before} @ccmode{} is first
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2206 initialized---in particular, before any call to @code{desktop-read}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2207 (@pxref{Saving Emacs Sessions,,, emacs, GNU Emacs Manual}). For
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2208 example, you might set c-basic-offset thus:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2209
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2210 @example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2211 (setq c-basic-offset 4)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2212 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2213
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2214 You can use the more user friendly Customization interface instead,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2215 but this manual does not cover in detail how that works. To do this,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2216 start by typing @kbd{M-x customize-group @key{RET} c @key{RET}}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2217 @xref{Easy Customization,,,@emacsman{}, @emacsmantitle{}}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2218 @c The following note really belongs in the Emacs manual.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2219 Emacs normally writes the customizations at the end of your
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2220 @file{.emacs} file. If you use @code{desktop-read}, you should edit
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2221 your @file{.emacs} to place the call to @code{desktop-read} @emph{after}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2222 the customizations.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2223
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2224 The first initialization of @ccmode{} puts a snapshot of the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2225 configuration settings into the special style @code{user}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2226 @xref{Built-in Styles}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2227
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2228 For basic use of Emacs, either of these ways of configuring is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2229 adequate. However, the settings are then the same in all @ccmode{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2230 buffers and it can be clumsy to communicate them between programmers.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2231 For more flexibility, you'll want to use one (or both) of @ccmode{}'s
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2232 more sophisticated facilities, hooks and styles.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2233
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2234 @item Hooks
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2235 An Emacs @dfn{hook} is a place to put Lisp functions that you want
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2236 Emacs to execute later in specific circumstances.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2237 @xref{Hooks,,,@lispref{}, @lispreftitle{}}. @ccmode{} supplies a main
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2238 hook and a language-specific hook for each language it supports - any
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2239 functions you put onto these hooks get executed as the last part of a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2240 buffer's initialization. Typically you put most of your customization
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2241 within the main hook, and use the language-specific hooks to vary the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2242 customization settings between language modes. For example, if you
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2243 wanted different (non-standard) values of @code{c-basic-offset} in C
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2244 Mode and Java Mode buffers, you could do it like this:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2245
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2246 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2247 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2248 (defun my-c-mode-hook ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2249 (setq c-basic-offset 3))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2250 (add-hook 'c-mode-hook 'my-c-mode-hook)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2251
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2252 (defun my-java-mode-hook ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2253 (setq c-basic-offset 6))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2254 (add-hook 'java-mode-hook 'my-java-mode-hook)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2255 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2256 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2257
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2258 See @ref{CC Hooks} for more details on the use of @ccmode{} hooks.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2259
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2260 @item Styles
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2261 A @ccmode{} @dfn{style} is a coherent collection of customizations
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2262 with a name. At any time, exactly one style is active in each
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2263 @ccmode{} buffer, either the one you have selected or a default.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2264 @ccmode{} is delivered with several existing styles. Additionally,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2265 you can create your own styles, possibly based on these existing
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2266 styles. If you worked in a programming team called the ``Free
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2267 Group'', which had its own coding standards, you might well have this
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2268 in 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
2269
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2270 @example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2271 (setq c-default-style '((java-mode . "java")
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2272 (awk-mode . "awk")
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2273 (other . "free-group-style")))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2274 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2275
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2276 See @ref{Styles} for fuller details on using @ccmode{} styles and how
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2277 to create them.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2278
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2279 @item File Styles
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2280 A @dfn{file style} is a rarely used variant of the ``style'' mechanism
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2281 described above, which applies to an individual source file. To use
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2282 it, you set certain Emacs local variables in a special block at the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2283 end of the source file. @xref{File Styles}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2284
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2285 @item Hooks with Styles
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2286 For ultimate flexibility, you can use hooks and styles together. For
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2287 example, if your team were developing a product which required a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2288 Linux driver, you'd probably want to use the ``linux'' style for the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2289 driver, and your own team's style for the rest of the code. You
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2290 could achieve this with code 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
2291
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2292 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2293 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2294 (defun my-c-mode-hook ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2295 (c-set-style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2296 (if (and (buffer-file-name)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2297 (string-match "/usr/src/linux" (buffer-file-name)))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2298 "linux"
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2299 "free-group-style")))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2300 (add-hook 'c-mode-hook 'my-c-mode-hook)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2301 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2302 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2303
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2304 In a programming team, a hook is a also a good place for each member
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2305 to put his own personal preferences. For example, you might be the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2306 only person in your team who likes Auto-newline minor mode. You could
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2307 have it enabled by default by placing the following in your
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2308 @file{.emacs}:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2309
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2310 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2311 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2312 (defun my-turn-on-auto-newline ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2313 (c-toggle-auto-newline 1))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2314 (add-hook 'c-mode-common-hook 'my-turn-on-auto-newline)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2315 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2316 @end example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2317 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2318
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2319 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2320 * CC Hooks::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2321 * Style Variables::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2322 * Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2323 @end menu
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2324
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2325 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2326 @node CC Hooks, Style Variables, Config Basics, Config Basics
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2327 @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
2328 @section Hooks
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2329 @cindex mode hooks
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2330 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2331 @c The node name is "CC Hooks" rather than "Hooks" because of a bug in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2332 @c some older versions of Info, e.g. the info.el in GNU Emacs 21.3.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2333 @c If you go to "Config Basics" and hit <CR> on the xref to "CC
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2334 @c Hooks" the function Info-follow-reference searches for "*Note: CC
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2335 @c Hooks" from the beginning of the page. If this node were instead
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2336 @c named "Hooks", that search would spuriously find "*Note:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2337 @c Hooks(elisp)" and go to the wrong node.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2338
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2339 @ccmode{} provides several hooks that you can use to customize the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2340 mode for your coding style. The main hook is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2341 @code{c-mode-common-hook}; typically, you'll put the bulk of your
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2342 customizations here. In addition, each language mode has its own
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2343 hook, allowing you to fine tune your settings individually for the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2344 different @ccmode{} languages, and there is a package initialization
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2345 hook. Finally, there is @code{c-special-indent-hook}, which enables
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2346 you to solve anomalous indentation problems. It is described in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2347 @ref{Other Indentation}, not here. All these hooks adhere to the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2348 standard Emacs conventions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2349
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2350 When you open a buffer, @ccmode{} first initializes it with the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2351 currently active style (@pxref{Styles}). Then it calls
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2352 @code{c-mode-common-hook}, and finally it calls the language-specific
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2353 hook. Thus, any style settings done in these hooks will override
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2354 those set by @code{c-default-style}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2355
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2356 @defvar c-initialization-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2357 @vindex initialization-hook (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2358 Hook run only once per Emacs session, when @ccmode{} is initialized.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2359 This is a good place to change key bindings (or add new ones) in any
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2360 of the @ccmode{} key maps. @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
2361 @end defvar
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2362
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2363 @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
2364 @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
2365 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
2366 language specific hook.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2367 @end defvar
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2368
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2369 @defvar c-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2370 @defvarx c++-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2371 @defvarx objc-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2372 @defvarx java-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2373 @defvarx idl-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2374 @defvarx pike-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2375 @defvarx awk-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2376 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
2377 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
2378 @end defvar
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2379
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2380 Although these hooks are variables defined in @ccmode{}, you can give
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
2381 them values before @ccmode{}'s code is loaded---indeed, this is the
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2382 only way to use @code{c-initialization-hook}. Their values aren't
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2383 overwritten when @ccmode{} gets loaded.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2384
Dave Love <fx@gnu.org>
parents:
diff changeset
2385 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
2386 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
2387 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
2388 @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
2389 file.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2390
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2391 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2392 (defun my-c-mode-common-hook ()
Dave Love <fx@gnu.org>
parents:
diff changeset
2393 ;; 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
2394 (no-case-fold-search)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2395 )
Dave Love <fx@gnu.org>
parents:
diff changeset
2396 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
Dave Love <fx@gnu.org>
parents:
diff changeset
2397 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2398
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2399 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2400 @node Style Variables, Styles, CC Hooks, Config Basics
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2401 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2402 @section Style Variables
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2403 @cindex styles
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2404 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2405
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2406 @cindex style variables
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2407 The variables that @ccmode{}'s style system control are called
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2408 @dfn{style variables}. Note that style variables are ordinary Lisp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2409 variables, which the style system initializes; you can change their
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2410 values at any time (e.g. in a hook function). The style system can
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2411 also also set other variables, to some extent. @xref{Styles}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2412
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2413 @dfn{Style variables} are handled specially in several ways:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2414
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2415 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2416 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2417 Style variables are by default buffer-local variables. However, they
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2418 can instead be made global by setting
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2419 @code{c-style-variables-are-local-p} to @code{nil} before @ccmode{} is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2420 initialized.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2421
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2422 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2423 @vindex c-old-style-variable-behavior
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2424 @vindex old-style-variable-behavior (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2425 The default global binding of any style variable (with two exceptions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2426 - see below) is the special symbol @code{set-from-style}. When the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2427 style system initializes a buffer-local copy of a style variable for a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2428 @ccmode{} buffer, if its global binding is still that symbol then it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2429 will be set from the current style. Otherwise it will retain its
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2430 global default@footnote{This is a big change from versions of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2431 @ccmode{} earlier than 5.26, where such settings would get overridden
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2432 by the style system unless special precautions were taken. That was
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2433 changed since it was counterintuitive and confusing, especially to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2434 novice users. If your configuration depends on the old overriding
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2435 behavior, you can set the variable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2436 @code{c-old-style-variable-behavior} to non-@code{nil}.}. This
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2437 ``otherwise'' happens, for example, when you've set the variable with
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2438 @code{setq} at the top level of your @file{.emacs} (@pxref{Config
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2439 Basics}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2440
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2441 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2442 The style variable @code{c-offsets-alist} (@pxref{c-offsets-alist}) is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2443 an association list with an element for each syntactic symbol. It's
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2444 handled a little differently from the other style variables. It's
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2445 default global binding is the empty list @code{nil}, rather than
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2446 @code{set-from-style}. Before the style system is initialized, you
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2447 can add individual elements to @code{c-offsets-alist} by calling
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2448 @code{c-set-offset}(@pxref{c-offsets-alist}) just like you would set
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2449 other style variables with @code{setq}. Those elements will then
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2450 prevail when the style system later initializes a buffer-local copy of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2451 @code{c-offsets-alist}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2452
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2453 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2454 The style variable @code{c-special-indent-hook} is also handled in a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2455 special way. Styles can only add functions to this hook, not remove
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2456 them, so any global settings you put on it are always
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2457 preserved@footnote{This did not change in version 5.26.}. The value
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2458 you give this variable in a style definition can be either a function
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2459 or a list of functions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2460
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2461 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2462 The global bindings of the style variables get captured in the special
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2463 @code{user} style when the style system is first initialized.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2464 @xref{Built-in Styles}, for details.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2465 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2466
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2467 The style variables are:@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2468 @code{c-indent-comment-alist},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2469 @code{c-indent-comments-syntactically-p} (@pxref{Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2470 Commands});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2471 @code{c-doc-comment-style} (@pxref{Doc Comments});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2472 @code{c-block-comment-prefix}, @code{c-comment-prefix-regexp}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2473 (@pxref{Custom Filling and Breaking});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2474 @code{c-hanging-braces-alist} (@pxref{Hanging Braces});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2475 @code{c-hanging-colons-alist} (@pxref{Hanging Colons});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2476 @code{c-hanging-semi&comma-criteria} (@pxref{Hanging Semicolons and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2477 Commas});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2478 @code{c-cleanup-list} (@pxref{Clean-ups});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2479 @code{c-basic-offset} (@pxref{Customizing Indentation});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2480 @code{c-offsets-alist} (@pxref{c-offsets-alist});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2481 @code{c-comment-only-line-offset} (@pxref{Comment Line-Up});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2482 @code{c-special-indent-hook}, @code{c-label-minimum-indentation}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2483 (@pxref{Other Indentation});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2484 @code{c-backslash-column}, @code{c-backslash-max-column}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2485 (@pxref{Custom Macros}).
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2486
Dave Love <fx@gnu.org>
parents:
diff changeset
2487 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2488 @node Styles, , Style Variables, Config Basics
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2489 @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
2490 @section Styles
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2491 @cindex styles
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2492 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2493
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
2494 By @dfn{style} we mean the layout of the code---things like how many
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
2495 columns to indent a block of code, whether an opening brace gets
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
2496 indented to the level of the code it encloses, or of the construct
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
2497 that introduces it, or ``hangs'' at the end of a line.
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
2498
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2499 Most people only need to edit code formatted in just a few well-defined
Dave Love <fx@gnu.org>
parents:
diff changeset
2500 and consistent styles. For example, their organization might impose a
Dave Love <fx@gnu.org>
parents:
diff changeset
2501 ``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
2502 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
2503 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
2504 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
2505 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
2506 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
2507 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
2508 existing code using these styles.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2509
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2510 @menu
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2511 * Built-in Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2512 * Choosing a Style::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2513 * Adding Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2514 * File Styles::
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2515 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
2516
Dave Love <fx@gnu.org>
parents:
diff changeset
2517
Dave Love <fx@gnu.org>
parents:
diff changeset
2518 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2519 @node Built-in Styles, Choosing a Style, Styles, Styles
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2520 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2521 @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
2522 @cindex styles, built-in
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2523 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2524
Dave Love <fx@gnu.org>
parents:
diff changeset
2525 If you're lucky, one of @ccmode{}'s built-in styles might be just
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2526 what you're looking for. These are:
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2527
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2528 @table @code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2529 @item gnu
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2530 @cindex GNU style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2531 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
2532 for C code in GNU programs.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2533
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2534 @item k&r
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2535 @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
2536 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
2537
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2538 @item bsd
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2539 @cindex BSD style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2540 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
2541
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2542 @item whitesmith
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2543 @cindex Whitesmith style
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2544 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
2545 commercial C compiler.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2546
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2547 @item stroustrup
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2548 @cindex Stroustrup style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2549 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
2550
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2551 @item ellemtel
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2552 @cindex Ellemtel style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2553 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
2554 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
2555 Ellemtel@footnote{This document is available at
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2556 @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
2557 places.}.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2558 @c N.B. This URL was still valid at 2005/8/28 (ACM).
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2559
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2560 @item linux
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2561 @cindex Linux style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2562 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
2563
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2564 @item python
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2565 @cindex Python style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2566 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
2567 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
2568 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
2569
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2570 @item java
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2571 @cindex Java style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2572 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
2573 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
2574 @code{java-mode}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2575
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2576 @item awk
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2577 @cindex AWK style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2578 The style for editing AWK code. Note that the default value for
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2579 @code{c-default-style} installs this style when you enter
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2580 @code{awk-mode}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2581
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2582 @item user
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2583 @cindex User style
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2584 This is a special style created by you. It consists of the factory
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2585 defaults for all the style variables as modified by the customizations
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2586 you do either with the Customization interface or by writing
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2587 @code{setq}s and @code{c-set-offset}s at the top level of your
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2588 @file{.emacs} file (@pxref{Config Basics}). The style system creates
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2589 this style as part of its initialization and doesn't modify it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2590 afterwards.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2591 @end table
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2592
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2593
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2594 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2595 @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
2596 @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
2597 @subsection Choosing a Style
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2598 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2599
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
2600 When you create a new buffer, its style will be set from
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
2601 @code{c-default-style}. The factory default is the style @code{gnu},
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
2602 except in Java and AWK modes where it's @code{java} and @code{awk}.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2603
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2604 Remember that if you set a style variable with the Customization
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2605 interface or at the top level of your @file{.emacs} file before the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2606 style system is initialised (@pxref{Config Basics}), this setting will
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2607 override the one that the style system would have given the variable.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2608
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
2609 To set a buffer's style interactively, use the command @kbd{C-c .}
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
2610 (@pxref{Other Commands}). To set it from a file's local variable
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
2611 list, @ref{File Styles}.
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
2612
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2613 @defopt c-default-style
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2614 @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
2615 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
2616 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
2617 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
2618
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2619 @enumerate
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2620 @item
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2621 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
2622 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
2623
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2624 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2625 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
2626 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
2627
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2628 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2629 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
2630 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
2631 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
2632
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2633 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2634 If @samp{other} is not found then the @samp{gnu} style is used.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2635 @end enumerate
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2636
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
2637 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
2638 @emph{before} the language hooks are run, so you can always override
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
2639 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
2640 language mode hook, or in @code{c-mode-common-hook}.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2641
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2642 The standard value of @code{c-default-style} is @w{@code{((java-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2643 . "java") (awk-mode . "awk") (other . "gnu"))}}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2644 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2645
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2646 @defvar c-indentation-style
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2647 @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
2648 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
2649 string.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2650 @end defvar
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2651
Dave Love <fx@gnu.org>
parents:
diff changeset
2652
Dave Love <fx@gnu.org>
parents:
diff changeset
2653 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2654 @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
2655 @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
2656 @subsection Adding and Amending Styles
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2657 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2658
Dave Love <fx@gnu.org>
parents:
diff changeset
2659 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
2660 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
2661 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
2662 following format - the list can then be passed as an argument to the
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2663 function @code{c-add-style}. You can see an example of a style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2664 definition in @ref{Sample .emacs File}.
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2665
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2666 @cindex style definition
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2667 @c @defvr {List} style definition
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2668 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2669 @item Structure of a Style Definition List
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2670 ([@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
2671
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2672 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
2673 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
2674 one @var{base-style} is allowed in a style definition. If
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2675 @var{base-style} is not specified, the style inherits from the table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2676 of factory default values@footnote{This table is stored internally in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2677 the variable c-fallback-style.} instead. All styles eventually
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2678 inherit from this internal table. Style loops generate errors. The
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2679 list of pre-existing styles can be seen in @ref{Built-in Styles}.
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2680
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2681 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
2682 variable and the value it is to be set to when the style is later
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2683 activated.@footnote{Note that if the variable has been given a value
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2684 by the Customization interface or a @code{setq} at the top level of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2685 your @file{.emacs}, this value will override the one the style system
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2686 tries to give it. @xref{Config Basics}.} The variable can be either a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2687 @ccmode{} style variable or an arbitrary Emacs variable. In the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2688 latter case, it is @emph{not} made buffer-local by the @ccmode{} style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2689 system.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2690 @c @end defvr
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2691
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2692 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
2693
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2694 @table @code
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2695 @item c-offsets-alist
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2696 The value is in turn a list of dotted pairs of the form
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2697
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2698 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2699 (@r{@var{syntactic-symbol}} . @r{@var{offset}})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2700 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2701
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2702 as described in @ref{c-offsets-alist}. These are passed to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2703 @code{c-set-offset} so there is no need to set every syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2704 in your style, only those that are different from the inherited style.
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2705
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2706 @item c-special-indent-hook
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2707 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
2708 @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
2709 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
2710 @end table
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2711 @end table
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2712
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2713 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
2714 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
2715 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
2716
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2717 @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
2718 @findex add-style (c-)
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2719 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
2720 @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
2721 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
2722 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
2723 total. The old style is @emph{not} merged into the new one.)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2724 Otherwise, a new style is added.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2725
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2726 If the optional @var{set-p} is non-@code{nil} then the new style is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2727 applied to the current buffer as well. The use of this facility is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2728 deprecated and it might be removed from @ccmode{} in a future release.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2729 You should use @code{c-set-style} instead.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2730
Dave Love <fx@gnu.org>
parents:
diff changeset
2731 The sample @file{.emacs} file provides a concrete example of how a new
Dave Love <fx@gnu.org>
parents:
diff changeset
2732 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
2733 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2734
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2735 @defvar c-style-alist
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2736 @vindex style-alist (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2737 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
2738 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
2739 @end defvar
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2740
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2741
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2742 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2743 @node File Styles, , Adding Styles, Styles
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2744 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2745 @subsection File Styles
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2746 @cindex styles, file local
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2747 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2748
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2749 @cindex file local variables
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2750
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2751 The Emacs manual describes how you can customize certain variables on a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2752 per-file basis by including a @dfn{file local variable} block at the end
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2753 of the file (@pxref{File Variables,, Local Variables in Files, @emacsman{},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2754 @emacsmantitle{}}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2755
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2756 So far, you've only seen a functional interface for setting styles in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2757 @ccmode{}, and this can't be used here. @ccmode{} fills the gap by
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2758 providing two variables for use in a file's local variable list.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2759 Don't use them anywhere else! These allow you to customize the style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2760 on a per-file basis:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2761
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2762 @defvar c-file-style
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2763 @vindex file-style (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2764 Set this variable to a style name string in the Local Variables list.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2765 From now on, when you visit the file, @ccmode{} will automatically set
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2766 the file's style to this one using @code{c-set-style}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2767 @end defvar
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 @defvar c-file-offsets
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2770 @vindex file-offsets (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2771 Set this variable (in the Local Variables list) to an association list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2772 of the same format as @code{c-offsets-alist}. From now on, when you
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2773 visit the file, @ccmode{} will automatically institute these offsets
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2774 using @code{c-set-offset}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2775 @end defvar
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2776
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2777 Note that file style settings (i.e. @code{c-file-style}) are applied
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2778 before file offset settings
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2779 (i.e. @code{c-file-offsets})@footnote{Also, if either of these are set
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2780 in a file's local variable section, all the style variable values are
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2781 made local to that buffer, even if
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2782 @code{c-style-variables-are-local-p} is @code{nil}. Since this
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2783 variable is virtually always non-@code{nil} anyhow, you're unlikely to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2784 notice this effect.}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2785
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2786 If you set any variables, including style variables, by the file local
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2787 variables mechanism, these settings take priority over all other
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2788 settings, even those in your mode hooks (@pxref{CC Hooks}). If you
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2789 use @code{c-file-style} or @code{c-file-offsets} and also explicitly
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2790 set a style variable in a local variable block, the explicit setting
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2791 will take priority.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2792
Dave Love <fx@gnu.org>
parents:
diff changeset
2793 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2794 @node Custom Filling and Breaking, Custom Auto-newlines, Config Basics, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2795 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2796 @chapter Customizing Filling and Line Breaking
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2797 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2798
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2799 Since there's a lot of normal text in comments and string literals,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2800 @ccmode{} provides features to edit these like in text mode. It does
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2801 this by hooking in on the different line breaking functions and tuning
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2802 relevant variables as necessary.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2803
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2804 @vindex c-comment-prefix-regexp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2805 @vindex comment-prefix-regexp (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2806 @cindex comment line prefix
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2807 @vindex comment-start
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2808 @vindex comment-end
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2809 @vindex comment-start-skip
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2810 @vindex paragraph-start
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2811 @vindex paragraph-separate
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2812 @vindex paragraph-ignore-fill-prefix
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2813 @vindex adaptive-fill-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2814 @vindex adaptive-fill-regexp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2815 @vindex adaptive-fill-first-line-regexp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2816 To make Emacs recognize comments and treat text in them as normal
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2817 paragraphs, @ccmode{} makes several standard
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2818 variables@footnote{@code{comment-start}, @code{comment-end},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2819 @code{comment-start-skip}, @code{paragraph-start},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2820 @code{paragraph-separate}, @code{paragraph-ignore-fill-prefix},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2821 @code{adaptive-fill-mode}, @code{adaptive-fill-regexp}, and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2822 @code{adaptive-fill-first-line-regexp}.} buffer-local and modifies them
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2823 according to the language syntax and the comment line prefix.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2824
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2825 @defopt c-comment-prefix-regexp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2826 @vindex comment-prefix-regexp (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2827 This style variable contains the regexp used to recognize the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2828 @dfn{comment line prefix}, which is the line decoration that starts
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2829 every line in a comment. The variable is either the comment line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2830 prefix itself, or (more usually) an association list with different
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2831 values for different languages. The symbol for the major mode is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2832 looked up in the alist to get the regexp for the language, and if it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2833 isn't found then the special symbol @samp{other} is looked up instead.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2834
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2835 When a comment line gets divided by @kbd{M-j} or the like, @ccmode{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2836 inserts the comment line prefix from a neighbouring line at the start
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2837 of the new line. The default value of c-comment-prefix-regexp is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2838 @samp{//+\\|\\**}, which matches C++ style line comments like
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2839
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2840 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2841 // blah blah
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2842 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2843
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2844 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2845 with two or more slashes in front of them, and the second and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2846 subsequent lines of C style block comments like
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2847
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2848 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2849 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2850 /*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2851 * blah blah
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2852 */
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2853 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2854 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2855
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2856 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2857 with zero or more stars at the beginning of every line. If you change
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2858 this variable, please make sure it still matches the comment starter
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2859 (i.e. @code{//}) of line comments @emph{and} the line prefix inside
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2860 block comments.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2861
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2862 @findex c-setup-paragraph-variables
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2863 @findex setup-paragraph-variables (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2864 Also note that since @ccmode{} uses the value of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2865 @code{c-comment-prefix-regexp} to set up several other variables at
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2866 mode initialization, there won't be any effect if you just change it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2867 inside a @ccmode{} buffer. You need to call the command
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2868 @code{c-setup-paragraph-variables} too, to update those other
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2869 variables. That's also the case if you modify
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2870 @code{c-comment-prefix-regexp} in a mode hook, since @ccmode{} will
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2871 already have set up these variables before calling the hook.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2872 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2873
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2874 In comments, @ccmode{} uses @code{c-comment-prefix-regexp} to adapt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2875 the line prefix from the other lines in the comment.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2876
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2877 @vindex adaptive-fill-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2878 @cindex Adaptive Fill mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2879 @ccmode{} uses adaptive fill mode (@pxref{Adaptive Fill,,, emacs, GNU
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2880 Emacs Manual}) to make Emacs correctly keep the line prefix when
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2881 filling paragraphs. That also makes Emacs preserve the text
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2882 indentation @emph{inside} the comment line prefix. E.g. in the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2883 following comment, both paragraphs will be filled with the left
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2884 margins of the texts kept intact:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2885
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2886 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2887 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2888 /* Make a balanced b-tree of the nodes in the incoming
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2889 * stream. But, to quote the famous words of Donald E.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2890 * Knuth,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2891 *
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2892 * Beware of bugs in the above code; I have only
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2893 * proved it correct, not tried it.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2894 */
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2895 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2896 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2897
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2898 @findex c-setup-filladapt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2899 @findex setup-filladapt (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2900 @findex filladapt-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2901 @vindex filladapt-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2902 @cindex Filladapt mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2903 It's also possible to use other adaptive filling packages, notably Kyle
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2904 E. Jones' Filladapt package@footnote{It's available from
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2905 @uref{http://www.wonderworks.com/}. As of version 2.12, it does however
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2906 lack a feature that makes it work suboptimally when
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2907 @code{c-comment-prefix-regexp} matches the empty string (which it does
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2908 by default). A patch for that is available from
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2909 @uref{http://cc-mode.sourceforge.net/,, the CC Mode web site}.},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2910 @c 2005/11/22: The above is still believed to be the case.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2911 which handles things like bulleted lists nicely. There's a convenience
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2912 function @code{c-setup-filladapt} that tunes the relevant variables in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2913 Filladapt for use in @ccmode{}. Call it from a mode hook, e.g. with
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2914 something like this in your @file{.emacs}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2915
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2916 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2917 (defun my-c-mode-common-hook ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2918 (c-setup-filladapt)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2919 (filladapt-mode 1))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2920 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2921 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2922
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2923 @defopt c-block-comment-prefix
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2924 @vindex block-comment-prefix (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2925 @vindex c-comment-continuation-stars
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2926 @vindex comment-continuation-stars (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2927 Normally the comment line prefix inserted for a new line inside a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2928 comment is deduced from other lines in it. However there's one
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2929 situation when there's no hint about what the prefix should look like,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2930 namely when a block comment is broken for the first time. This style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2931 variable@footnote{In versions before 5.26, this variable was called
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2932 @code{c-comment-continuation-stars}. As a compatibility measure,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2933 @ccmode{} still uses the value on that variable if it's set.} is used
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2934 then as the comment prefix. It defaults to @samp{*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2935 }@footnote{Actually, this default setting of
71224
b7261e09f8e4 * cc-mode.texi (Getting Started, Indentation Commands, Config Basics)
Romain Francoise <romain@orebokech.com>
parents: 69681
diff changeset
2936 @code{c-block-comment-prefix} typically gets overridden by the default
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2937 style @code{gnu}, which sets it to blank. You can see the line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2938 splitting effect described here by setting a different style,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2939 e.g. @code{k&r} @xref{Choosing a Style}.}, which makes a comment
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2940
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2941 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2942 /* Got O(n^2) here, which is a Bad Thing. */
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2943 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2944
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2945 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2946 break into
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2947
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2948 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2949 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2950 /* Got O(n^2) here, which
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2951 * is a Bad Thing. */
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2952 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2953 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2954
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2955 Note that it won't work to adjust the indentation by putting leading
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2956 spaces in @code{c-block-comment-prefix}, since @ccmode{} still uses the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2957 normal indentation engine to indent the line. Thus, the right way to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2958 fix the indentation is by customizing the @code{c} syntactic symbol. It
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2959 defaults to @code{c-lineup-C-comments}, which handles the indentation of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2960 most common comment styles, see @ref{Line-Up Functions}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2961 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2962
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2963 @defopt c-ignore-auto-fill
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2964 @vindex ignore-auto-fill (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2965 When auto fill mode is enabled, @ccmode{} can selectively ignore it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2966 depending on the context the line break would occur in, e.g. to never
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2967 break a line automatically inside a string literal. This variable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2968 takes a list of symbols for the different contexts where auto-filling
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2969 never should occur:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2970
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2971 @table @code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2972 @item string
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2973 Inside a string or character literal.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2974 @item c
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2975 Inside a C style block comment.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2976 @item c++
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2977 Inside a C++ style line comment.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2978 @item cpp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2979 Inside a preprocessor directive.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2980 @item code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2981 Anywhere else, i.e. in normal code.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2982 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2983
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2984 By default, @code{c-ignore-auto-fill} is set to @code{(string cpp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2985 code)}, which means that when auto-fill mode is activated,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2986 auto-filling only occurs in comments. In literals, it's often
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2987 desirable to have explicit control over newlines. In preprocessor
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2988 directives, the necessary @samp{\} escape character before the newline
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2989 is not automatically inserted, so an automatic line break would
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2990 produce invalid code. In normal code, line breaks are normally
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2991 dictated by some logical structure in the code rather than the last
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2992 whitespace character, so automatic line breaks there will produce poor
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2993 results in the current implementation.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2994 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2995
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2996 @vindex comment-multi-line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2997 If inside a comment and @code{comment-multi-line} (@pxref{Auto Fill,,,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2998 @emacsman{}, @emacsmantitle{}} is non-@code{nil}, the indentation and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2999 line prefix are preserved. If inside a comment and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3000 @code{comment-multi-line} is @code{nil}, a new comment of the same
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3001 type is started on the next line and indented as appropriate for
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3002 comments.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3003
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3004 Note that @ccmode{} sets @code{comment-multi-line} to @code{t} at
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3005 startup. The reason is that @kbd{M-j} could otherwise produce sequences
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3006 of single line block comments for texts that should logically be treated
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3007 as one comment, and the rest of the paragraph handling code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3008 (e.g. @kbd{M-q} and @kbd{M-a}) can't cope with that, which would lead to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3009 inconsistent behavior.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3010
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3011 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3012 @node Custom Auto-newlines, Clean-ups, Custom Filling and Breaking, Top
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3013 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3014 @chapter Customizing Auto-newlines
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3015 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3016
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3017 @ccmode{} determines whether to insert auto-newlines in two basically
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3018 different ways, depending on the character just typed:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3019
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3020 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3021 @item Braces and Colons
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3022 @ccmode{} first determines the syntactic context of the brace or colon
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3023 (@pxref{Syntactic Symbols}), then looks for a corresponding element in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3024 an alist. This element specifies where to put newlines - this is any
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3025 combination of before and after the brace or colon. If no alist
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3026 element is found, newlines are inserted both before and after a brace,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3027 but none are inserted around a colon. See @ref{Hanging Braces} and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3028 @ref{Hanging Colons}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3029
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3030 @item Semicolons and Commas
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3031 The variable @code{c-hanging-semi&comma-criteria} contains a list of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3032 functions which determine whether to insert a newline after a newly
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3033 typed semicolon or comma. @xref{Hanging Semicolons and Commas}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3034 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3035
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3036 The names of these configuration variables contain @samp{hanging}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3037 because they let you @dfn{hang} the pertinent characters. A character
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3038 which introduces a C construct is said to @dfn{hang on the right} when
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3039 it appears at the end of a line after other code, being separated by a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3040 line break from the construct it introduces, like the opening brace in:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3041
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3042 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3043 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3044 while (i < MAX) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3045 total += entry[i];
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3046 entry [i++] = 0;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3047 @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3048 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
3049 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3050
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3051 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3052 A character @dfn{hangs on the left} when it appears at the start of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3053 the line after the construct it closes off, like the above closing
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3054 brace.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3055
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3056 The next chapter, ``Clean-ups'', describes how to configure @ccmode{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3057 to remove these automatically added newlines in certain specific
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3058 circumstances. @xref{Clean-ups}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3059
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3060 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3061 * Hanging Braces::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3062 * Hanging Colons::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3063 * Hanging Semicolons and Commas::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3064 @end menu
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3065
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3066
Dave Love <fx@gnu.org>
parents:
diff changeset
3067 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3068 @node Hanging Braces, Hanging Colons, Custom Auto-newlines, Custom Auto-newlines
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3069 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3070 @section Hanging Braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3071 @cindex hanging braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3072 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3073
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3074 To specify which kinds of braces you want auto-newlines put around,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3075 you set the style variable @code{c-hanging-braces-alist}. Its
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3076 structure and semantics are described in this section. Details of how
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3077 to set it up, and its relationship to CC Mode's style system are given
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3078 in @ref{Style Variables}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3079
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3080 Say you wanted an auto-newline after (but not before) the following
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3081 @samp{@{}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3082
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3083 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3084 if (foo < 17) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3085 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3086
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3087 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3088 First you need to find the @dfn{syntactic context} of the brace---type
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3089 a @key{RET} before the brace to get it on a line of its
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3090 own@footnote{Also insert a @samp{\} at the end of the previous line if
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3091 you're in AWK Mode.}, then type @kbd{C-c C-s}. That will tell you
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3092 something like:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3093
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3094 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3095 ((substatement-open 1061))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3096 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3097
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3098 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3099 So here you need to put the entry @code{(substatement-open . (after))}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3100 into @code{c-hanging-braces-alist}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3101
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3102 If you don't want any auto-newlines for a particular syntactic symbol,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3103 put this into @code{c-hanging-braces-alist}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3104
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3105 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3106 (brace-entry-open)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3107 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3108
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3109 If some brace syntactic symbol is not in @code{c-hanging-brace-alist},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3110 its entry is taken by default as @code{(before after)}---insert a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3111 newline both before and after the brace. In place of a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3112 ``before/after'' list you can specify a function in this alist---this
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3113 is useful when the auto newlines depend on the code around the brace.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3114
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3115 @defopt c-hanging-braces-alist
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3116 @vindex hanging-braces-alist (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3117
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3118 This variable is an association list which maps syntactic symbols to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3119 lists of places to insert a newline. @xref{Association
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3120 Lists,,,@lispref{}, @lispreftitle{}}. The key of each element is the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3121 syntactic symbol, the associated value is either @code{nil}, a list,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3122 or a function.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3123
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3124 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3125 @item The Key - the syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3126 The syntactic symbols that are useful as keys in this list are
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3127 @code{brace-list-intro}, @code{statement-cont},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3128 @code{inexpr-class-open}, @code{inexpr-class-close}, and all the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3129 @code{*-open} and @code{*-close} symbols. @xref{Syntactic Symbols},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3130 for a more detailed description of these syntactic symbols, except for
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3131 @code{inexpr-class-open} and @code{inexpr-class-close}, which aren't
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3132 actual syntactic symbols. Elements with any other value as a key get
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3133 ignored.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3134
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3135 The braces of anonymous inner classes in Java are given the special
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3136 symbols @code{inexpr-class-open} and @code{inexpr-class-close}, so that
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3137 they can be distinguished from the braces of normal classes@footnote{The
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3138 braces of anonymous classes produce a combination of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3139 @code{inexpr-class}, and @code{class-open} or @code{class-close} in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3140 normal indentation analysis.}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3141
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3142 Note that the aggregate constructs in Pike mode, @samp{(@{}, @samp{@})},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3143 @samp{([}, @samp{])}, and @samp{(<}, @samp{>)}, do not count as brace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3144 lists in this regard, even though they do for normal indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3145 purposes. It's currently not possible to set automatic newlines on
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3146 these constructs.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3147
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3148 @item The associated value - the ``ACTION'' list or function
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3149 The value associated with each syntactic symbol in this association
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3150 list is called an @var{action}, which can be either a list or a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3151 function which returns a list. @xref{Custom Braces}, for how to use
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3152 a function as a brace hanging @var{action}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3153
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3154 The list @var{action} (or the list returned by @var{action} when it's
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3155 a function) contains some combination of the symbols @code{before} and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3156 @code{after}, directing @ccmode{} where to put newlines in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3157 relationship to the brace being inserted. Thus, if the list contains
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3158 only the symbol @code{after}, then the brace hangs on the right side
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3159 of the line, as in:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3160
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3161 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3162 // here, open braces always `hang'
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3163 void spam( int i ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3164 if( i == 7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3165 dosomething(i);
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3166 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3167 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3168 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3169
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3170 When the list contains both @code{after} and @code{before}, the braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3171 will appear on a line by themselves, as shown by the close braces in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3172 the above example. The list can also be empty, in which case newlines
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3173 are added neither before nor after the brace.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3174 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3175
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3176 If a syntactic symbol is missing entirely from
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3177 @code{c-hanging-braces-alist}, it's treated in the same way as an
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3178 @var{action} with a list containing @code{before} and @code{after}, so
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3179 that braces by default end up on their own line.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3180
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3181 For example, the default value of @code{c-hanging-braces-alist} is:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3182
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3183 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3184 ((brace-list-open)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3185 (brace-entry-open)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3186 (statement-cont)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3187 (substatement-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3188 (block-close . c-snug-do-while)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3189 (extern-lang-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3190 (namespace-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3191 (module-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3192 (composition-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3193 (inexpr-class-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3194 (inexpr-class-close before))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3195 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3196
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3197 @noindent which says that @code{brace-list-open},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3198 @code{brace-entry-open} and @code{statement-cont}@footnote{Brace lists
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3199 inside statements, such as initializers for static array variables
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3200 inside functions in C, are recognized as @code{statement-cont}. All
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3201 normal substatement blocks are recognized with other symbols.} braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3202 should both hang on the right side and allow subsequent text to follow
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3203 on the same line as the brace. Also, @code{substatement-open},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3204 @code{extern-lang-open}, and @code{inexpr-class-open} braces should hang
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3205 on the right side, but subsequent text should follow on the next line.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3206 The opposite holds for @code{inexpr-class-close} braces; they won't
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3207 hang, but the following text continues on the same line. Here, in the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3208 @code{block-close} entry, you also see an example of using a function as
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3209 an @var{action}. In all other cases, braces are put on a line by
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3210 themselves.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3211 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3212
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3213 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3214 * Custom Braces::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3215 @end menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3216
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3217 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3218 @node Custom Braces, , Hanging Braces, Hanging Braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3219 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3220 @subsection Custom Brace Hanging
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3221 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3222
Dave Love <fx@gnu.org>
parents:
diff changeset
3223 @vindex c-hanging-braces-alist
Dave Love <fx@gnu.org>
parents:
diff changeset
3224 @vindex hanging-braces-alist (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3225 @cindex action functions
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3226 Syntactic symbols aren't the only place where you can customize
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3227 @ccmode{} with the lisp equivalent of callback functions. Remember
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3228 that @var{action}s are usually a list containing some combination of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3229 the symbols @code{before} and @code{after} (@pxref{Hanging Braces}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3230 For more flexibility, you can instead specify brace ``hanginess'' by
71224
b7261e09f8e4 * cc-mode.texi (Getting Started, Indentation Commands, Config Basics)
Romain Francoise <romain@orebokech.com>
parents: 69681
diff changeset
3231 giving a syntactic symbol an @dfn{action function} in
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3232 @code{c-hanging-braces-alist}; this function determines the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3233 ``hanginess'' of a brace, usually by looking at the code near it.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3234
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3235 @cindex customization, brace hanging
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3236 An action function is called with two arguments: the syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3237 for the brace (e.g. @code{substatement-open}), and the buffer position
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3238 where the brace has been inserted. Point is undefined on entry to an
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3239 action function, but the function must preserve it (e.g. by using
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3240 @code{save-excursion}). The return value should be a list containing
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3241 some combination of @code{before} and @code{after}, including neither
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3242 of them (i.e. @code{nil}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3243
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3244 @defvar c-syntactic-context
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3245 @vindex syntactic-context (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3246 During the call to the indentation or brace hanging @var{action}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3247 function, this variable is bound to the full syntactic analysis list.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3248 This might be, for example, @samp{((block-close 73))}. Don't ever
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3249 give @code{c-syntactic-context} a value yourself---this would disrupt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3250 the proper functioning of @ccmode{}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3251
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3252 This variable is also bound in three other circumstances:
72601
83343a303f0e (Custom Braces, Clean-ups): Don't use @tie.
Eli Zaretskii <eliz@gnu.org>
parents: 72600
diff changeset
3253 (i)@w{ }when calling a c-hanging-semi&comma-criteria function
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
3254 (@pxref{Hanging Semicolons and Commas}); (ii)@w{ }when calling a
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
3255 line-up function (@pxref{Custom Line-Up}); (iii)@w{ }when calling a
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3256 c-special-indent-hook function (@pxref{Other Indentation}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3257 @end defvar
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3258
Dave Love <fx@gnu.org>
parents:
diff changeset
3259 As an example, @ccmode{} itself uses this feature to dynamically
Dave Love <fx@gnu.org>
parents:
diff changeset
3260 determine the hanginess of braces which close ``do-while''
Dave Love <fx@gnu.org>
parents:
diff changeset
3261 constructs:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3262
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3263 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3264 void do_list( int count, char** atleast_one_string )
Dave Love <fx@gnu.org>
parents:
diff changeset
3265 @{
Dave Love <fx@gnu.org>
parents:
diff changeset
3266 int i=0;
Dave Love <fx@gnu.org>
parents:
diff changeset
3267 do @{
Dave Love <fx@gnu.org>
parents:
diff changeset
3268 handle_string( atleast_one_string[i] );
Dave Love <fx@gnu.org>
parents:
diff changeset
3269 i++;
Dave Love <fx@gnu.org>
parents:
diff changeset
3270 @} while( i < count );
Dave Love <fx@gnu.org>
parents:
diff changeset
3271 @}
Dave Love <fx@gnu.org>
parents:
diff changeset
3272 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3273
Dave Love <fx@gnu.org>
parents:
diff changeset
3274 @ccmode{} assigns the @code{block-close} syntactic symbol to the
Dave Love <fx@gnu.org>
parents:
diff changeset
3275 brace that closes the @code{do} construct, and normally we'd like the
Dave Love <fx@gnu.org>
parents:
diff changeset
3276 line that follows a @code{block-close} brace to begin on a separate
Dave Love <fx@gnu.org>
parents:
diff changeset
3277 line. However, with ``do-while'' constructs, we want the
Dave Love <fx@gnu.org>
parents:
diff changeset
3278 @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
3279 associate the @code{block-close} symbol with the @var{action} function
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3280 @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
3281
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3282 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3283 (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
3284 "Dynamically calculate brace hanginess for do-while statements."
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3285 (save-excursion
Dave Love <fx@gnu.org>
parents:
diff changeset
3286 (let (langelem)
Dave Love <fx@gnu.org>
parents:
diff changeset
3287 (if (and (eq syntax 'block-close)
Dave Love <fx@gnu.org>
parents:
diff changeset
3288 (setq langelem (assq 'block-close c-syntactic-context))
Dave Love <fx@gnu.org>
parents:
diff changeset
3289 (progn (goto-char (cdr langelem))
Dave Love <fx@gnu.org>
parents:
diff changeset
3290 (if (= (following-char) ?@{)
Dave Love <fx@gnu.org>
parents:
diff changeset
3291 (forward-sexp -1))
Dave Love <fx@gnu.org>
parents:
diff changeset
3292 (looking-at "\\<do\\>[^_]")))
Dave Love <fx@gnu.org>
parents:
diff changeset
3293 '(before)
Dave Love <fx@gnu.org>
parents:
diff changeset
3294 '(before after)))))
Dave Love <fx@gnu.org>
parents:
diff changeset
3295 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3296
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3297 @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
3298 @findex snug-do-while (c-)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3299 This function simply looks to see if the brace closes a ``do-while''
Dave Love <fx@gnu.org>
parents:
diff changeset
3300 clause and if so, returns the list @samp{(before)} indicating
Dave Love <fx@gnu.org>
parents:
diff changeset
3301 that a newline should be inserted before the brace, but not after it.
Dave Love <fx@gnu.org>
parents:
diff changeset
3302 In all other cases, it returns the list @samp{(before after)} so
Dave Love <fx@gnu.org>
parents:
diff changeset
3303 that the brace appears on a line by itself.
Dave Love <fx@gnu.org>
parents:
diff changeset
3304
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3305 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3306 @node Hanging Colons, Hanging Semicolons and Commas, Hanging Braces, Custom Auto-newlines
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3307 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3308 @section Hanging Colons
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3309 @cindex hanging colons
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3310 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3311
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3312 @cindex customization, colon hanging
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3313 @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
3314 @vindex hanging-colons-alist (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3315
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3316 Using a mechanism similar to brace hanging (@pxref{Hanging Braces}),
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3317 colons can also be made to hang using the style variable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3318 @code{c-hanging-colons-alist} - When a colon is typed, @ccmode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3319 determines its syntactic context, looks this up in the alist
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3320 @code{c-changing-colons-alist} and inserts up to two newlines
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3321 accordingly. Here, however, If @ccmode fails to find an entry for a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3322 syntactic symbol in the alist, no newlines are inserted around the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3323 newly typed colon.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3324
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3325 @defopt c-hanging-colons-alist
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3326 @vindex hanging-colons-alist (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3327
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3328 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3329 @item The Key - the syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3330 The syntactic symbols appropriate as keys in this association list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3331 are: @code{case-label}, @code{label}, @code{access-label},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3332 @code{member-init-intro}, and @code{inher-intro}. @xref{Syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3333 Symbols}. Elements with any other value as a key get ignored.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3334
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3335 @item The associate value - the ``ACTION'' list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3336 The @var{action} here is simply a list containing a combination of the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3337 symbols @code{before} and @code{after}. Unlike in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3338 @code{c-hanging-braces-alist}, functions as @var{actions} are not
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3339 supported - there doesn't seem to be any need for them.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3340 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3341 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3342
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3343 In C++, double-colons are used as a scope operator but because these
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3344 colons always appear right next to each other, newlines before and after
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3345 them are controlled by a different mechanism, called @dfn{clean-ups} in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3346 @ccmode{}. @xref{Clean-ups}, for details.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3347
Dave Love <fx@gnu.org>
parents:
diff changeset
3348 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3349 @node Hanging Semicolons and Commas, , Hanging Colons, Custom Auto-newlines
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3350 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3351 @section Hanging Semicolons and Commas
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3352 @cindex hanging semicolons
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3353 @cindex hanging commas
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3354 @cindex customization, semicolon newlines
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3355 @cindex customization, comma newlines
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3356 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3357
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3358 @defopt c-hanging-semi&comma-criteria
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3359 @vindex hanging-semi&comma-criteria (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3360 This style variable takes a list of functions; these get called when
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3361 you type a semicolon or comma. The functions are called in order
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3362 without arguments. When these functions are entered, point is just
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3363 after the newly inserted @samp{;} or @samp{,} and they must preserve
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3364 point (e.g., by using @code{save-excursion}). During the call, the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3365 variable @code{c-syntactic-context} is bound to the syntactic context
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3366 of the current line@footnote{This was first introduced in @ccmode{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3367 5.31.} @pxref{Custom Braces}. These functions don't insert newlines
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3368 themselves, rather they direct @ccmode{} whether or not to do so.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3369 They should return one of the following values:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3370
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3371 @table @code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3372 @item t
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3373 A newline is to be inserted after the @samp{;} or @samp{,}, and no
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3374 more functions from the list are to be called.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3375 @item stop
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3376 No more functions from the list are to be called, and no newline is to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3377 be inserted.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3378 @item nil
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3379 No determination has been made, and the next function in the list is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3380 to be called.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3381 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3382
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3383 Note that auto-newlines are never inserted @emph{before} a semicolon
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3384 or comma. If every function in the list is called without a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3385 determination being made, then no newline is added.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3386
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3387 In AWK mode, this variable is set by default to @code{nil}. In the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3388 other modes, the default value is a list containing a single function,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3389 @code{c-semi&comma-inside-parenlist}. This inserts newlines after all
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3390 semicolons, apart from those separating @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
3391 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3392
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3393 @defun c-semi&comma-no-newlines-before-nonblanks
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3394 @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
3395 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
3396 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
3397 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
3398 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
3399 @code{c-hanging-semi&comma-criteria} list.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3400
Dave Love <fx@gnu.org>
parents:
diff changeset
3401 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3402 (defun c-semi&comma-no-newlines-before-nonblanks ()
Dave Love <fx@gnu.org>
parents:
diff changeset
3403 (save-excursion
Dave Love <fx@gnu.org>
parents:
diff changeset
3404 (if (and (eq last-command-char ?\;)
Dave Love <fx@gnu.org>
parents:
diff changeset
3405 (zerop (forward-line 1))
Dave Love <fx@gnu.org>
parents:
diff changeset
3406 (not (looking-at "^[ \t]*$")))
Dave Love <fx@gnu.org>
parents:
diff changeset
3407 'stop
Dave Love <fx@gnu.org>
parents:
diff changeset
3408 nil)))
Dave Love <fx@gnu.org>
parents:
diff changeset
3409 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3410 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3411
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3412 @defun c-semi&comma-inside-parenlist
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3413 @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
3414 @defunx c-semi&comma-no-newlines-for-oneline-inliners
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3415 @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
3416 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
3417 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
3418 statements. In addition to
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3419 @code{c-semi&comma-no-newlines-before-nonblanks} described above,
Dave Love <fx@gnu.org>
parents:
diff changeset
3420 @ccmode{} also comes with the criteria function
Dave Love <fx@gnu.org>
parents:
diff changeset
3421 @code{c-semi&comma-no-newlines-for-oneline-inliners}, which suppresses
Dave Love <fx@gnu.org>
parents:
diff changeset
3422 newlines after semicolons inside one-line inline method definitions
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3423 (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
3424 @end defun
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3425
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3426
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3427 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3428 @node Clean-ups, Indentation Engine Basics, Custom Auto-newlines, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3429 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3430 @chapter Clean-ups
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3431 @cindex clean-ups
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3432 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3433
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3434 @dfn{Clean-ups} are mechanisms which remove (or exceptionally, add)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3435 whitespace in specific circumstances and are complementary to colon
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3436 and brace hanging. You enable a clean-up by adding its symbol into
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
3437 @code{c-cleanup-list}, e.g. like this:
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
3438
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
3439 @example
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
3440 (add-to-list 'c-cleanup-list 'space-before-funcall)
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
3441 @end example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3442
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3443 On the surface, it would seem that clean-ups overlap the functionality
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3444 provided by the @code{c-hanging-*-alist} variables. Clean-ups,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3445 however, are used to adjust code ``after-the-fact'', i.e. to adjust
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3446 the whitespace in constructs later than when they were typed.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3447
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3448 Most of the clean-ups remove automatically inserted newlines, and are
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3449 only active when auto-newline minor mode is turned on. Others will
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3450 work all the time. Note that clean-ups are only performed when there
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3451 is nothing but whitespace appearing between the individual components
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3452 of the construct, and (apart from @code{comment-close-slash}) when the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3453 construct does not occur within a literal (@pxref{Auto-newlines}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3454
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3455 @defopt c-cleanup-list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3456 @vindex cleanup-list (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3457 @cindex literal
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3458
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3459 You configure @ccmode{}'s clean-ups by setting the style variable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3460 @code{c-cleanup-list}, which is a list of clean-up symbols. By
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3461 default, @ccmode{} cleans up only the @code{scope-operator} construct,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3462 which is necessary for proper C++ support.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3463 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3464
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3465 These are the clean-ups that are only active when electric and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3466 auto-newline minor modes are enabled:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3467
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3468 @c TBD: Would like to use some sort of @deffoo here; @table indents a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3469 @c bit too much in dvi output.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3470 @table @code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3471 @item brace-else-brace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3472 Clean up @samp{@} else @{} constructs by placing the entire construct on
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3473 a single line. Clean up occurs when the open brace after the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3474 @samp{else} is typed. So for example, this:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3475
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3476 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3477 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3478 void spam(int i)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3479 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3480 if( i==7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3481 dosomething();
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3482 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3483 else
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3484 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3485 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3486 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3487
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3488 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3489 appears like this after the last open brace is typed:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3490
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3491 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3492 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3493 void spam(int i)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3494 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3495 if( i==7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3496 dosomething();
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3497 @} else @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3498 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3499 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3500
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3501 @item brace-elseif-brace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3502 Similar to the @code{brace-else-brace} clean-up, but this cleans up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3503 @samp{@} else if (...) @{} constructs. For example:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3504
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3505 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3506 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3507 void spam(int i)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3508 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3509 if( i==7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3510 dosomething();
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3511 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3512 else if( i==3 )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3513 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3514 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3515 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3516
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3517 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3518 appears like this after the last open parenthesis is typed:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3519
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3520 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3521 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3522 void spam(int i)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3523 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3524 if( i==7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3525 dosomething();
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3526 @} else if(
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3527 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3528 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3529
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3530 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3531 and like this after the last open brace is typed:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3532
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3533 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3534 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3535 void spam(int i)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3536 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3537 if( i==7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3538 dosomething();
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3539 @} else if( i==3 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3540 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3541 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3542
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3543 @item brace-catch-brace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3544 Analogous to @code{brace-elseif-brace}, but cleans up @samp{@} catch
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3545 (...) @{} in C++ and Java mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3546
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3547 @item empty-defun-braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3548 Clean up braces following a top-level function or class definition that
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3549 contains no body. Clean up occurs when the closing brace is typed.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3550 Thus the following:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3551
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3552 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3553 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3554 class Spam
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3555 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3556 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3557 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3558 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3559
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3560 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3561 is transformed into this when the close brace is typed:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3562
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3563 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3564 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3565 class Spam
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3566 @{@}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3567 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3568 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3569
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3570 @item defun-close-semi
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3571 Clean up the terminating semicolon on top-level function or class
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3572 definitions when they follow a close brace. Clean up occurs when the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3573 semicolon is typed. So for example, the following:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3574
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3575 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3576 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3577 class Spam
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3578 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3579 ...
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3580 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3581 ;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3582 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3583 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3584
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3585 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3586 is transformed into this when the semicolon is typed:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3587
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3588 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3589 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3590 class Spam
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3591 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3592 ...
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3593 @};
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3594 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3595 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3596
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3597 @item list-close-comma
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3598 Clean up commas following braces in array and aggregate initializers.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3599 Clean up occurs when the comma is typed. The space before the comma
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3600 is zapped just like the space before the semicolon in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3601 @code{defun-close-semi}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3602
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3603 @item scope-operator
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3604 Clean up double colons which might designate a C++ scope operator split
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3605 across multiple lines@footnote{Certain C++ constructs introduce
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3606 ambiguous situations, so @code{scope-operator} clean-ups might not
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3607 always be correct. This usually only occurs when scoped identifiers
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3608 appear in switch label tags.}. Clean up occurs when the second colon is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3609 typed. You will always want @code{scope-operator} in the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3610 @code{c-cleanup-list} when you are editing C++ code.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3611
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3612 @item one-liner-defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3613 Clean up a single line of code enclosed by defun braces by removing
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3614 the whitespace before and after the code. The clean-up happens when
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3615 the closing brace is typed. If the variable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3616 @code{c-max-one-liner-length} is set, the cleanup is only done if the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3617 resulting line would be no longer than the value of that variable.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3618
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3619 For example, consider this AWK code:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3620
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3621 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3622 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3623 BEGIN @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3624 FS = "\t" # use <TAB> as a field separator
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3625 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3626 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3627 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3628
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3629 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3630 It gets compacted to the following when the closing brace is typed:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3631
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3632 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3633 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3634 BEGIN @{FS = "\t"@} # use <TAB> as a field separator
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3635 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3636 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3637
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3638 @defopt c-max-one-liner-length
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3639 @vindex max-one-liner-length (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3640 The maximum length of the resulting line for which the clean-up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3641 @code{one-liner-defun} will be triggered. This length is that of the entire
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3642 line, including any leading whitespace and any trailing comment. Its
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3643 default value is 80. If the value is zero or @code{nil}, no limit
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3644 applies.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3645 @end defopt
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3646 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3647
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3648 The following clean-ups are always active when they occur on
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3649 @code{c-cleanup-list}, regardless of whether Electric minor mode or
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3650 Auto-newline minor mode are enabled:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3651
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3652 @table @code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3653 @item space-before-funcall
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3654 Insert a space between the function name and the opening parenthesis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3655 of a function call. This produces function calls in the style
72601
83343a303f0e (Custom Braces, Clean-ups): Don't use @tie.
Eli Zaretskii <eliz@gnu.org>
parents: 72600
diff changeset
3656 mandated by the GNU coding standards, e.g. @samp{signal@w{ }(SIGINT,
83343a303f0e (Custom Braces, Clean-ups): Don't use @tie.
Eli Zaretskii <eliz@gnu.org>
parents: 72600
diff changeset
3657 SIG_IGN)} and @samp{abort@w{ }()}. Clean up occurs when the opening
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3658 parenthesis is typed. This clean-up should never be active in AWK
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3659 Mode, since such a space is syntactically invalid for user defined
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3660 functions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3661
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3662 @item compact-empty-funcall
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3663 Clean up any space between the function name and the opening parenthesis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3664 of a function call that has no arguments. This is typically used
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3665 together with @code{space-before-funcall} if you prefer the GNU function
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3666 call style for functions with arguments but think it looks ugly when
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3667 it's only an empty parenthesis pair. I.e. you will get @samp{signal
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3668 (SIGINT, SIG_IGN)}, but @samp{abort()}. Clean up occurs when the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3669 closing parenthesis is typed.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3670
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3671 @item comment-close-slash
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
3672 When inside a block comment, terminate the comment when you type a slash
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
3673 at the beginning of a line (i.e. immediately after the comment prefix).
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
3674 This clean-up removes whitespace preceding the slash and if needed,
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
3675 inserts a star to complete the token @samp{*/}. Type @kbd{C-q /} in this
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
3676 situation if you just want a literal @samp{/} inserted.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3677 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3678
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3679
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3680 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3681 @node Indentation Engine Basics, Customizing Indentation, Clean-ups, Top
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3682 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3683 @chapter Indentation Engine Basics
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3684 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3685
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3686 This chapter will briefly cover how @ccmode{} indents lines of code.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3687 It is helpful to understand the indentation model being used so that
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3688 you will know how to customize @ccmode{} for your personal coding
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3689 style. All the details are in @ref{Customizing Indentation}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3690
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3691 @ccmode{} has an indentation engine that provides a flexible and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3692 general mechanism for customizing indentation. When @ccmode{} indents
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3693 a line of code, it separates its calculations into two steps:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3694
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3695 @enumerate
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3696 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3697 @cindex syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3698 @cindex anchor position
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3699 It analyzes the line to determine its @dfn{syntactic symbol(s)} (the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3700 kind of language construct it's looking at) and its @dfn{anchor
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3701 position} (the position earlier in the file that @ccmode{} will indent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3702 the line relative to). The anchor position might be the location of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3703 an opening brace in the previous line, for example. @xref{Syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3704 Analysis}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3705 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3706 @cindex offsets
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3707 @cindex indentation offset specifications
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3708 It looks up the syntactic symbol(s) in the configuration to get the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3709 corresponding @dfn{offset(s)}. The symbol @code{+}, which means
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3710 ``indent this line one more level'' is a typical offset. @ccmode{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3711 then applies these offset(s) to the anchor position, giving the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3712 indentation for the line. The different sorts of offsets are
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3713 described in @ref{c-offsets-alist}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3714 @end enumerate
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3715
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3716 In exceptional circumstances, the syntax directed indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3717 described here may be a nuisance rather than a help. You can disable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3718 it by setting @code{c-syntactic-indentation} to @code{nil}. (To set
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3719 the variable interactively, @ref{Minor Modes}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3720
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3721 @defopt c-syntactic-indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3722 @vindex syntactic-indentation (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3723 When this is non-@code{nil} (which it is by default), the indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3724 of code is done according to its syntactic structure. When it's
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3725 @code{nil}, every line is just indented to the same level as the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3726 previous one, and @kbd{TAB} (@code{c-indent-command}) adjusts the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3727 indentation in steps of @code{c-basic-offset}. The current style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3728 (@pxref{Config Basics}) then has no effect on indentation, nor do any
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3729 of the variables associated with indentation, not even
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3730 @code{c-special-indent-hook}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3731 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3732
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3733 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3734 * Syntactic Analysis::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3735 * Syntactic Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3736 * Indentation Calculation::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3737 @end menu
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3738
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3739
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3740 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3741 @node Syntactic Analysis, Syntactic Symbols, Indentation Engine Basics, Indentation Engine Basics
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3742 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3743 @section Syntactic Analysis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3744 @cindex syntactic analysis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3745 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3746
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3747 @cindex syntactic element
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3748 @cindex syntactic context
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3749 The first thing @ccmode{} does when indenting a line of code, is to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3750 analyze the line, determining the @dfn{syntactic context} of the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3751 (first) construct on that line. It's a list of @dfn{syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3752 elements}, where each syntactic element in turn is a list@footnote{In
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3753 @ccmode 5.28 and earlier, a syntactic element was a dotted pair; the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3754 cons was the syntactic symbol and the cdr was the anchor position.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3755 For compatibility's sake, the parameter passed to a line-up function
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3756 still has this dotted pair form (@pxref{Custom Line-Up}).} Here is a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3757 brief and typical example:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3758
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3759 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3760 ((defun-block-intro 1959))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3761 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3762
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3763 @cindex syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3764 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3765 The first thing inside each syntactic element is always a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3766 @dfn{syntactic symbol}. It describes the kind of construct that was
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3767 recognized, e.g. @code{statement}, @code{substatement},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3768 @code{class-open}, @code{class-close}, etc. @xref{Syntactic Symbols},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3769 for a complete list of currently recognized syntactic symbols and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3770 their semantics. The remaining entries are various data associated
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3771 with the recognized construct - there might be zero or more.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3772
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3773 @cindex anchor position
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3774 Conceptually, a line of code is always indented relative to some
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3775 position higher up in the buffer (typically the indentation of the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3776 previous line). That position is the @dfn{anchor position} in the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3777 syntactic element. If there is an entry after the syntactic symbol in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3778 the syntactic element list then it's either nil or that anchor position.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3779
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3780 Here is an example. Suppose we had the following code as the only thing
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3781 in a C++ buffer @footnote{The line numbers in this and future examples
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3782 don't actually appear in the buffer, of course!}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3783
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3784 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3785 1: void swap( int& a, int& b )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3786 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3787 3: int tmp = a;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3788 4: a = b;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3789 5: b = tmp;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3790 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3791 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3792
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3793 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3794 We can use @kbd{C-c C-s} (@code{c-show-syntactic-information}) to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3795 report what the syntactic analysis is for the current line:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3796
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3797 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3798 @item @kbd{C-c C-s} (@code{c-show-syntactic-information})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3799 @kindex C-c C-s
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3800 @findex c-show-syntactic-information
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3801 @findex show-syntactic-information (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3802 This command calculates the syntactic analysis of the current line and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3803 displays it in the minibuffer. The command also highlights the anchor
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3804 position(s).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3805 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3806
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3807 Running this command on line 4 of this example, we'd see in the echo
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3808 area@footnote{With a universal argument (i.e. @kbd{C-u C-c C-s}) the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3809 analysis is inserted into the buffer as a comment on the current
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3810 line.}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3811
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3812 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3813 ((statement 35))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3814 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3815
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3816 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3817 and the @samp{i} of @code{int} on line 3 would be highlighted. This
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3818 tells us that the line is a statement and it is indented relative to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3819 buffer position 35, the highlighted position. If you were to move
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3820 point to line 3 and hit @kbd{C-c C-s}, you would see:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3821
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3822 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3823 ((defun-block-intro 29))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3824 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3825
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3826 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3827 This indicates that the @samp{int} line is the first statement in a top
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3828 level function block, and is indented relative to buffer position 29,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3829 which is the brace just after the function header.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3830
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3831 Here's another example:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3832
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3833 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3834 1: int add( int val, int incr, int doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3835 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3836 3: if( doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3837 4: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3838 5: return( val + incr );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3839 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3840 7: return( val );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3841 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3842 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3843
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3844 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3845 Hitting @kbd{C-c C-s} on line 4 gives us:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3846
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3847 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3848 ((substatement-open 46))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3849 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3850
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3851 @cindex substatement
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3852 @cindex substatement block
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3853 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3854 which tells us that this is a brace that @emph{opens} a substatement
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3855 block. @footnote{A @dfn{substatement} is the line after a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3856 conditional statement, such as @code{if}, @code{else}, @code{while},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3857 @code{do}, @code{switch}, etc. A @dfn{substatement
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3858 block} is a brace block following one of these conditional statements.}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3859
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3860 @cindex comment-only line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3861 Syntactic contexts can contain more than one element, and syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3862 elements need not have anchor positions. The most common example of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3863 this is a @dfn{comment-only line}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3864
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3865 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3866 1: void draw_list( List<Drawables>& drawables )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3867 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3868 3: // call the virtual draw() method on each element in list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3869 4: for( int i=0; i < drawables.count(), ++i )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3870 5: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3871 6: drawables[i].draw();
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3872 7: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3873 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3874 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3875
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3876 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3877 Hitting @kbd{C-c C-s} on line 3 of this example gives:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3878
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3879 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3880 ((comment-intro) (defun-block-intro 46))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3881 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3882
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3883 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3884 and you can see that the syntactic context contains two syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3885 elements. Notice that the first element, @samp{(comment-intro)}, has no
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3886 anchor position.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3887
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3888
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3889 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3890 @node Syntactic Symbols, Indentation Calculation, Syntactic Analysis, Indentation Engine Basics
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3891 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3892 @section Syntactic Symbols
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3893 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3894
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3895 @cindex syntactic symbols, brief list
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3896 @vindex c-offsets-alist
Dave Love <fx@gnu.org>
parents:
diff changeset
3897 @vindex offsets-alist (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3898 This section is a complete list of the syntactic symbols which appear
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3899 in the @code{c-offsets-alist} style variable, along with brief
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3900 descriptions. The previous section (@pxref{Syntactic Analysis})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3901 states what syntactic symbols are and how the indentation engine uses
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3902 them.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3903
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3904 More detailed descriptions of these symbols, together with snippets of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3905 source code to which they apply, appear in the examples in the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3906 subsections below. Note that, in the interests of brevity, the anchor
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3907 position associated with most syntactic symbols is @emph{not}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3908 specified. In cases of doubt, type @kbd{C-c C-s} on a pertinent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3909 line---this highlights the anchor position.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3910
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3911 @ssindex -open symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3912 @ssindex -close symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3913 @ssindex -block-intro symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3914 The syntactic symbols which indicate brace constructs follow a general
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3915 naming convention. When a line begins with an open or close brace,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3916 its syntactic symbol will contain the suffix @code{-open} or
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3917 @code{-close} respectively. The first line within the brace block
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3918 construct will contain the suffix @code{-block-intro}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3919
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3920 @ssindex -intro symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3921 @ssindex -cont symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3922 In constructs which can span several lines, a distinction is usually
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3923 made between the first line that introduces the construct and the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3924 lines that continue it. The syntactic symbols that indicate these
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3925 lines will contain the suffixes @code{-intro} or @code{-cont}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3926 respectively.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3927
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3928 The best way to understand how all this works is by looking at some
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3929 examples. Remember that you can see the syntax of any source code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3930 line by using @kbd{C-c C-s}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3931
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3932 @table @code
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3933 @item string
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3934 Inside a multiline string. @ref{Literal Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3935 @item c
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3936 Inside a multiline C style block comment. @ref{Literal Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3937 @item defun-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3938 Brace that opens a top-level function definition. @ref{Function
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3939 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3940 @item defun-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3941 Brace that closes a top-level function definition. @ref{Function
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3942 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3943 @item defun-block-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3944 The first line in a top-level defun. @ref{Function Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3945 @item class-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3946 Brace that opens a class definition. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3947 @item class-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3948 Brace that closes a class definition. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3949 @item inline-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3950 Brace that opens an in-class inline method. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3951 @item inline-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3952 Brace that closes an in-class inline method. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3953 @item func-decl-cont
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3954 The region between a function definition's argument list and the
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3955 function opening brace (excluding K&R argument declarations). In C,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3956 you cannot put anything but whitespace and comments in this region,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3957 however in C++ and Java, @code{throws} declarations and other things
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3958 can appear here. @ref{Literal Symbols}. @c @emph{FIXME!!! Can it not
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3959 @c go somewhere better?}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3960 @item knr-argdecl-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3961 First line of a K&R C argument declaration. @ref{K&R Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3962 @item knr-argdecl
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3963 Subsequent lines in a K&R C argument declaration. @ref{K&R Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3964 @item topmost-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3965 The first line in a ``topmost'' definition. @ref{Function Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3966 @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
3967 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
3968 that aren't covered by other symbols such as @code{func-decl-cont} and
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3969 @code{knr-argdecl}. @ref{Function Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3970 @item member-init-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3971 First line in a member initialization list. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3972 @item member-init-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3973 Subsequent member initialization list lines. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3974 @item inher-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3975 First line of a multiple inheritance list. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3976 @item inher-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3977 Subsequent multiple inheritance lines. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3978 @item block-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3979 Statement block open brace. @ref{Literal Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3980 @item block-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3981 Statement block close brace. @ref{Conditional Construct Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3982 @item brace-list-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3983 Open brace of an enum or static array list. @ref{Brace List Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3984 @item brace-list-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3985 Close brace of an enum or static array list. @ref{Brace List Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3986 @item brace-list-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3987 First line in an enum or static array list. @ref{Brace List Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3988 @item brace-list-entry
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3989 Subsequent lines in an enum or static array list. @ref{Brace List
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3990 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3991 @item brace-entry-open
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3992 Subsequent lines in an enum or static array list where the line begins
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3993 with an open brace. @ref{Brace List Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3994 @item statement
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3995 A statement. @ref{Function Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3996 @item statement-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3997 A continuation of a statement. @ref{Function Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3998 @item statement-block-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3999 The first line in a new statement block. @ref{Conditional Construct
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4000 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4001 @item statement-case-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4002 The first line in a case block. @ref{Switch Statement Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4003 @item statement-case-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4004 The first line in a case block that starts with a brace. @ref{Switch
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4005 Statement Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4006 @item substatement
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4007 The first line after a conditional or loop construct.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4008 @ref{Conditional Construct Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4009 @item substatement-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4010 The brace that opens a substatement block. @ref{Conditional Construct
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4011 Symbols}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4012 @item substatement-label
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4013 The first line after a conditional or loop construct if it's a label.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4014 @ref{Conditional Construct Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4015 @item case-label
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4016 A label in a @code{switch} block. @ref{Switch Statement Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4017 @item access-label
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4018 C++ access control label. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4019 @item label
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4020 Any other label. @ref{Literal Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4021 @item do-while-closure
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4022 The @code{while} line that ends a @code{do}-@code{while} construct.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4023 @ref{Conditional Construct Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4024 @item else-clause
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4025 The @code{else} line of an @code{if}-@code{else} construct.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4026 @ref{Conditional Construct Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4027 @item catch-clause
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4028 The @code{catch} or @code{finally} (in Java) line of a
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4029 @code{try}-@code{catch} construct. @ref{Conditional Construct
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4030 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4031 @item comment-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4032 A line containing only a comment introduction. @ref{Literal Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4033 @item arglist-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4034 The first line in an argument list. @ref{Paren List Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4035 @item arglist-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4036 Subsequent argument list lines when no arguments follow on the same
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4037 line as the arglist opening paren. @ref{Paren List Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4038 @item arglist-cont-nonempty
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4039 Subsequent argument list lines when at least one argument follows on
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4040 the same line as the arglist opening paren. @ref{Paren List Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4041 @item arglist-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4042 The solo close paren of an argument list. @ref{Paren List Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4043 @item stream-op
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4044 Lines continuing a stream operator (C++ only). @ref{Literal
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4045 Symbols}. @c @emph{FIXME!!! Can this not be moved somewhere better?}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4046 @item inclass
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4047 The line is nested inside a class definition. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4048 @item cpp-macro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4049 The start of a preprocessor macro definition. @ref{Literal Symbols}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4050 @item cpp-define-intro
71224
b7261e09f8e4 * cc-mode.texi (Getting Started, Indentation Commands, Config Basics)
Romain Francoise <romain@orebokech.com>
parents: 69681
diff changeset
4051 The first line inside a multiline preprocessor macro if
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4052 @code{c-syntactic-indentation-in-macros} is set. @ref{Multiline Macro
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4053 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4054 @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
4055 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
4056 @code{c-syntactic-indentation-in-macros} is @code{nil}.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4057 @ref{Multiline Macro Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4058 @item friend
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4059 A C++ friend declaration. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4060 @item objc-method-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4061 The first line of an Objective-C method definition. @ref{Objective-C
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4062 Method Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4063 @item objc-method-args-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4064 Lines continuing an Objective-C method definition. @ref{Objective-C
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4065 Method Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4066 @item objc-method-call-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4067 Lines continuing an Objective-C method call. @ref{Objective-C Method
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4068 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4069 @item extern-lang-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4070 Brace that opens an @code{extern} block (e.g. @code{extern "C"
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4071 @{...@}}). @ref{External Scope Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4072 @item extern-lang-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4073 Brace that closes an @code{extern} block. @ref{External Scope
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4074 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4075 @item inextern-lang
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4076 Analogous to @code{inclass} syntactic symbol, but used inside
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4077 @code{extern} blocks. @ref{External Scope Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4078 @item namespace-open
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4079 @itemx namespace-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4080 @itemx innamespace
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4081 These are analogous to the three @code{extern-lang} symbols above, but
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4082 are returned for C++ namespace blocks. @ref{External Scope Symbols}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4083 @item module-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4084 @itemx module-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4085 @itemx inmodule
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4086 Analogous to the above, but for CORBA IDL @code{module} blocks.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4087 @ref{External Scope Symbols}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4088 @item composition-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4089 @itemx composition-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4090 @itemx incomposition
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4091 Analogous to the above, but for CORBA CIDL @code{composition} blocks.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4092 @ref{External Scope Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4093 @item template-args-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4094 C++ template argument list continuations. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4095 @item inlambda
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4096 Analogous to @code{inclass} syntactic symbol, but used inside lambda
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4097 (i.e. anonymous) functions. Only used in Pike mode. @ref{Statement
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4098 Block Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4099 @item lambda-intro-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4100 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
4101 @code{lambda} keyword and the function body. Only used in Pike mode.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4102 @ref{Statement Block Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4103 @item inexpr-statement
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4104 A statement block inside an expression. The gcc C and C++ extension
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4105 for this is recognized. It's also used for the special functions that
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4106 take a statement block as an argument in Pike. @ref{Statement Block
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4107 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4108 @item inexpr-class
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4109 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
4110 classes in Java. It's also used for anonymous array initializers in
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4111 Java. @ref{Anonymous Class Symbol}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4112 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4113
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4114 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4115 * Function Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4116 * Class Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4117 * Conditional Construct Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4118 * Switch Statement Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4119 * Brace List Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4120 * External Scope Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4121 * Paren List Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4122 * Literal Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4123 * Multiline Macro Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4124 * Objective-C Method Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4125 * Anonymous Class Symbol::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4126 * Statement Block Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4127 * K&R Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4128 @end menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4129
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4130 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4131 @node Function Symbols, Class Symbols, Syntactic Symbols, Syntactic Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4132 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4133 @subsection Function Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4134 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4135
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4136 This example shows a typical function declaration.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4137
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4138 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4139 1: void
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4140 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
4141 3: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4142 4: int tmp = a;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4143 5: a = b;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4144 6: b = tmp;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4145 7: int ignored =
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4146 8: a + b;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4147 9: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4148 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4149
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4150 @ssindex topmost-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4151 @ssindex topmost-intro-cont
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4152 @ssindex defun-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4153 @ssindex defun-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4154 @ssindex defun-block-intro
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4155 Line 1 shows a @code{topmost-intro} since it is the first line that
Dave Love <fx@gnu.org>
parents:
diff changeset
4156 introduces a top-level construct. Line 2 is a continuation of the
Dave Love <fx@gnu.org>
parents:
diff changeset
4157 top-level construct introduction so it has the syntax
Dave Love <fx@gnu.org>
parents:
diff changeset
4158 @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
4159 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
4160 corresponding
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4161 @code{defun-close} since it contains the brace that closes the top-level
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4162 function definition. Line 4 is a @code{defun-block-intro}, i.e. it is
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4163 the first line of a brace-block, enclosed in a
Dave Love <fx@gnu.org>
parents:
diff changeset
4164 top-level function definition.
Dave Love <fx@gnu.org>
parents:
diff changeset
4165
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4166 @ssindex statement
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4167 @ssindex statement-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4168 Lines 5, 6, and 7 are all given @code{statement} syntax since there
Dave Love <fx@gnu.org>
parents:
diff changeset
4169 isn't much special about them. Note however that line 8 is given
Dave Love <fx@gnu.org>
parents:
diff changeset
4170 @code{statement-cont} syntax since it continues the statement begun
Dave Love <fx@gnu.org>
parents:
diff changeset
4171 on the previous line.
Dave Love <fx@gnu.org>
parents:
diff changeset
4172
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4173 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4174 @node Class Symbols, Conditional Construct Symbols, Function Symbols, Syntactic Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4175 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4176 @subsection Class related Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4177 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4178
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4179 Here's an example which illustrates some C++ class syntactic symbols:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4180
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4181 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4182 1: class Bass
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4183 2: : public Guitar,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4184 3: public Amplifiable
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4185 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4186 5: public:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4187 6: Bass()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4188 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
4189 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
4190 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
4191 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
4192 11: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4193 12: eString.tune( 'E' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4194 13: aString.tune( 'A' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4195 14: dString.tune( 'D' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4196 15: gString.tune( 'G' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4197 16: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4198 17: friend class Luthier;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4199 18: @};
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4200 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4201
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4202 @ssindex class-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4203 @ssindex class-close
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4204 As in the previous example, line 1 has the @code{topmost-intro} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4205 Here however, the brace that opens a C++ class definition on line 4 is
Dave Love <fx@gnu.org>
parents:
diff changeset
4206 assigned the @code{class-open} syntax. Note that in C++, classes,
Dave Love <fx@gnu.org>
parents:
diff changeset
4207 structs, and unions are essentially equivalent syntactically (and are
Dave Love <fx@gnu.org>
parents:
diff changeset
4208 very similar semantically), so replacing the @code{class} keyword in the
Dave Love <fx@gnu.org>
parents:
diff changeset
4209 example above with @code{struct} or @code{union} would still result in a
Dave Love <fx@gnu.org>
parents:
diff changeset
4210 syntax of @code{class-open} for line 4 @footnote{This is the case even
Dave Love <fx@gnu.org>
parents:
diff changeset
4211 for C and Objective-C. For consistency, structs in all supported
Dave Love <fx@gnu.org>
parents:
diff changeset
4212 languages are syntactically equivalent to classes. Note however that
Dave Love <fx@gnu.org>
parents:
diff changeset
4213 the keyword @code{class} is meaningless in C and Objective-C.}.
Dave Love <fx@gnu.org>
parents:
diff changeset
4214 Similarly, line 18 is assigned @code{class-close} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4215
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4216 @ssindex inher-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4217 @ssindex inher-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4218 Line 2 introduces the inheritance list for the class so it is assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4219 the @code{inher-intro} syntax, and line 3, which continues the
Dave Love <fx@gnu.org>
parents:
diff changeset
4220 inheritance list is given @code{inher-cont} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4221
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4222 @ssindex access-label
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4223 @ssindex inclass
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4224 Hitting @kbd{C-c C-s} on line 5 shows the following analysis:
Dave Love <fx@gnu.org>
parents:
diff changeset
4225
Dave Love <fx@gnu.org>
parents:
diff changeset
4226 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4227 ((inclass 58) (access-label 58))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4228 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4229
Dave Love <fx@gnu.org>
parents:
diff changeset
4230 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
4231 The primary syntactic symbol for this line is @code{access-label} as
Dave Love <fx@gnu.org>
parents:
diff changeset
4232 this a label keyword that specifies access protection in C++. However,
Dave Love <fx@gnu.org>
parents:
diff changeset
4233 because this line is also a top-level construct inside a class
Dave Love <fx@gnu.org>
parents:
diff changeset
4234 definition, the analysis actually shows two syntactic symbols. The
Dave Love <fx@gnu.org>
parents:
diff changeset
4235 other syntactic symbol assigned to this line is @code{inclass}.
Dave Love <fx@gnu.org>
parents:
diff changeset
4236 Similarly, line 6 is given both @code{inclass} and @code{topmost-intro}
Dave Love <fx@gnu.org>
parents:
diff changeset
4237 syntax:
Dave Love <fx@gnu.org>
parents:
diff changeset
4238
Dave Love <fx@gnu.org>
parents:
diff changeset
4239 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4240 ((inclass 58) (topmost-intro 60))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4241 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4242
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4243 @ssindex member-init-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4244 @ssindex member-init-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4245 Line 7 introduces a C++ member initialization list and as such is given
Dave Love <fx@gnu.org>
parents:
diff changeset
4246 @code{member-init-intro} syntax. Note that in this case it is
Dave Love <fx@gnu.org>
parents:
diff changeset
4247 @emph{not} assigned @code{inclass} since this is not considered a
Dave Love <fx@gnu.org>
parents:
diff changeset
4248 top-level construct. Lines 8 through 10 are all assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4249 @code{member-init-cont} since they continue the member initialization
Dave Love <fx@gnu.org>
parents:
diff changeset
4250 list started on line 7.
Dave Love <fx@gnu.org>
parents:
diff changeset
4251
Dave Love <fx@gnu.org>
parents:
diff changeset
4252 @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
4253 @ssindex inline-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4254 @ssindex inline-close
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4255 Line 11's analysis is a bit more complicated:
Dave Love <fx@gnu.org>
parents:
diff changeset
4256
Dave Love <fx@gnu.org>
parents:
diff changeset
4257 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4258 ((inclass 58) (inline-open))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4259 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4260
Dave Love <fx@gnu.org>
parents:
diff changeset
4261 This line is assigned a syntax of both @code{inline-open} and
Dave Love <fx@gnu.org>
parents:
diff changeset
4262 @code{inclass} because it opens an @dfn{in-class} C++ inline method
Dave Love <fx@gnu.org>
parents:
diff changeset
4263 definition. This is distinct from, but related to, the C++ notion of an
Dave Love <fx@gnu.org>
parents:
diff changeset
4264 inline function in that its definition occurs inside an enclosing class
Dave Love <fx@gnu.org>
parents:
diff changeset
4265 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
4266 However, if the definition of the @code{Bass} constructor appeared
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4267 outside the class definition, the construct would be given the
Dave Love <fx@gnu.org>
parents:
diff changeset
4268 @code{defun-open} syntax, even if the keyword @code{inline} appeared
Dave Love <fx@gnu.org>
parents:
diff changeset
4269 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
4270
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4271 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4272 1: class Bass
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4273 2: : public Guitar,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4274 3: public Amplifiable
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4275 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4276 5: public:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4277 6: Bass();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4278 7: @};
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4279 8:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4280 9: inline
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4281 10: Bass::Bass()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4282 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
4283 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
4284 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
4285 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
4286 15: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4287 16: eString.tune( 'E' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4288 17: aString.tune( 'A' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4289 18: dString.tune( 'D' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4290 19: gString.tune( 'G' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4291 20: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4292 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4293
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4294 @ssindex friend
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4295 Returning to the previous example, line 16 is given @code{inline-close}
Dave Love <fx@gnu.org>
parents:
diff changeset
4296 syntax, while line 12 is given @code{defun-block-open} syntax, and lines
Dave Love <fx@gnu.org>
parents:
diff changeset
4297 13 through 15 are all given @code{statement} syntax. Line 17 is
Dave Love <fx@gnu.org>
parents:
diff changeset
4298 interesting in that its syntactic analysis list contains three
Dave Love <fx@gnu.org>
parents:
diff changeset
4299 elements:
Dave Love <fx@gnu.org>
parents:
diff changeset
4300
Dave Love <fx@gnu.org>
parents:
diff changeset
4301 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4302 ((inclass 58) (topmost-intro 380) (friend))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4303 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4304
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4305 The @code{friend} and @code{inline-open} syntactic symbols are
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4306 modifiers that do not have anchor positions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4307
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4308 @ssindex template-args-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4309 Template definitions introduce yet another syntactic symbol:
Dave Love <fx@gnu.org>
parents:
diff changeset
4310
Dave Love <fx@gnu.org>
parents:
diff changeset
4311 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4312 1: ThingManager <int,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4313 2: Framework::Callback *,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4314 3: Mutex> framework_callbacks;
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4315 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4316
Dave Love <fx@gnu.org>
parents:
diff changeset
4317 Here, line 1 is analyzed as a @code{topmost-intro}, but lines 2 and 3
Dave Love <fx@gnu.org>
parents:
diff changeset
4318 are both analyzed as @code{template-args-cont} lines.
Dave Love <fx@gnu.org>
parents:
diff changeset
4319
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4320 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4321 @node Conditional Construct Symbols, Switch Statement Symbols, Class Symbols, Syntactic Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4322 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4323 @subsection Conditional Construct Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4324 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4325
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4326 Here is a (totally contrived) example which illustrates how syntax is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4327 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
4328
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4329 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4330 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
4331 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4332 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
4333 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4334 5: if( i == 10 )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4335 6: do_something_special();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4336 7: else
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4337 8: silly_label:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4338 9: do_something( i );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4339 10: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4340 11: do @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4341 12: another_thing( i-- );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4342 13: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4343 14: while( i > 0 );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4344 15: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4345 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4346
Dave Love <fx@gnu.org>
parents:
diff changeset
4347 Only the lines that illustrate new syntactic symbols will be discussed.
Dave Love <fx@gnu.org>
parents:
diff changeset
4348
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4349 @ssindex substatement-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4350 @ssindex statement-block-intro
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4351 @ssindex block-close
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4352 Line 4 has a brace which opens a conditional's substatement block. It
Dave Love <fx@gnu.org>
parents:
diff changeset
4353 is thus assigned @code{substatement-open} syntax, and since line 5 is
Dave Love <fx@gnu.org>
parents:
diff changeset
4354 the first line in the substatement block, it is assigned
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4355 @code{statement-block-intro} syntax. Line 10 contains the brace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4356 that closes the inner substatement block, and is therefore given the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4357 syntax @code{block-close}@footnote{@code{block-open} is used only for
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4358 ``free-standing'' blocks, and is somewhat rare (@pxref{Literal
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4359 Symbols} for an example.)}. Line 13 is treated the same way.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4360
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4361 @ssindex substatement
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4362 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
4363 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
4364 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
4365
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4366 @ssindex substatement-label
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4367 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
4368 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
4369 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
4370 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
4371
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4372 @ssindex else-clause
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4373 @ssindex catch-clause
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4374 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
4375 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
4376 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
4377 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
4378 @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
4379 @code{catch-clause}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4380
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4381 @ssindex do-while-closure
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4382 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
4383 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
4384 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
4385 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
4386 @code{block-close} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4387
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4388 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4389 @node Switch Statement Symbols, Brace List Symbols, Conditional Construct Symbols, Syntactic Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4390 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4391 @subsection Switch Statement Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4392 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4393
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4394 Switch statements have their own set of syntactic symbols. Here's an
Dave Love <fx@gnu.org>
parents:
diff changeset
4395 example:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4396
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4397 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4398 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
4399 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4400 3: switch( i ) @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4401 4: case Ham:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4402 5: be_a_pig();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4403 6: break;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4404 7: case Salt:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4405 8: drink_some_water();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4406 9: break;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4407 10: default:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4408 11: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4409 12: what_is_it();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4410 13: break;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4411 14: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4412 15: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4413 14: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4414 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4415
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4416 @ssindex case-label
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4417 @ssindex statement-case-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4418 @ssindex statement-case-open
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4419 Here, lines 4, 7, and 10 are all assigned @code{case-label} syntax,
Dave Love <fx@gnu.org>
parents:
diff changeset
4420 while lines 5 and 8 are assigned @code{statement-case-intro}. Line 11
Dave Love <fx@gnu.org>
parents:
diff changeset
4421 is treated slightly differently since it contains a brace that opens a
Dave Love <fx@gnu.org>
parents:
diff changeset
4422 block --- it is given @code{statement-case-open} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4423
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4424 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4425 @node Brace List Symbols, External Scope Symbols, Switch Statement Symbols, Syntactic Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4426 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4427 @subsection Brace List Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4428 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4429
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4430 @cindex brace lists
Dave Love <fx@gnu.org>
parents:
diff changeset
4431 There are a set of syntactic symbols that are used to recognize
Dave Love <fx@gnu.org>
parents:
diff changeset
4432 constructs inside of brace lists. A brace list is defined as an
Dave Love <fx@gnu.org>
parents:
diff changeset
4433 @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
4434 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
4435 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
4436 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
4437
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4438 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4439 1: static char* ingredients[] =
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4440 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4441 3: "Ham",
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4442 4: "Salt",
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4443 5: NULL
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4444 6: @};
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4445 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4446
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4447 @ssindex brace-list-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4448 @ssindex brace-list-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4449 @ssindex brace-list-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4450 @ssindex brace-list-entry
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4451 Following convention, line 2 in this example is assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4452 @code{brace-list-open} syntax, and line 3 is assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4453 @code{brace-list-intro} syntax. Likewise, line 6 is assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4454 @code{brace-list-close} syntax. Lines 4 and 5 however, are assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4455 @code{brace-list-entry} syntax, as would all subsequent lines in this
Dave Love <fx@gnu.org>
parents:
diff changeset
4456 initializer list.
Dave Love <fx@gnu.org>
parents:
diff changeset
4457
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4458 @ssindex brace-entry-open
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4459 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
4460 example:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4461
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4462 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4463 1: struct intpairs[] =
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4464 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4465 3: @{ 1, 2 @},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4466 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4467 5: 3,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4468 6: 4
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4469 7: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4470 8: @{ 1,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4471 9: 2 @},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4472 10: @{ 3, 4 @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4473 11: @};
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4474 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4475
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4476 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
4477 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
4478 @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
4479 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
4480 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
4481 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
4482 line 10.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4483
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4484 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4485 @node External Scope Symbols, Paren List Symbols, Brace List Symbols, Syntactic Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4486 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4487 @subsection External Scope Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4488 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4489
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4490 External language definition blocks also have their own syntactic
Dave Love <fx@gnu.org>
parents:
diff changeset
4491 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
4492
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4493 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4494 1: extern "C"
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4495 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4496 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
4497 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
4498 5: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4499 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4500
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4501 @ssindex extern-lang-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4502 @ssindex extern-lang-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4503 @ssindex inextern-lang
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4504 @ssindex inclass
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4505 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
4506 line 2 is given the @code{extern-lang-open} syntax, while line 5 is given
Dave Love <fx@gnu.org>
parents:
diff changeset
4507 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
4508
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4509 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4510 ((inextern-lang) (topmost-intro 14))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4511 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4512
Dave Love <fx@gnu.org>
parents:
diff changeset
4513 @noindent
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4514 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
4515 @code{inclass}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4516
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4517 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
4518 are all treated in the same way except that the symbols are named after
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4519 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
4520 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
4521 @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
4522
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4523 @table @asis
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4524 @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
4525 @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
4526 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
4527 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
4528
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4529 @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
4530 @ssindex namespace-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4531 @ssindex namespace-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4532 @ssindex innamespace
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4533 @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
4534
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4535 @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
4536 @ssindex module-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4537 @ssindex module-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4538 @ssindex inmodule
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4539 @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
4540
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4541 @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
4542 @ssindex composition-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4543 @ssindex composition-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4544 @ssindex incomposition
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4545 @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
4546 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4547
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4548 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4549 @node Paren List Symbols, Literal Symbols, External Scope Symbols, Syntactic Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4550 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4551 @subsection Parenthesis (Argument) List Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4552 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4553
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4554 A number of syntactic symbols are associated with parenthesis lists,
Dave Love <fx@gnu.org>
parents:
diff changeset
4555 a.k.a argument lists, as found in function declarations and function
Dave Love <fx@gnu.org>
parents:
diff changeset
4556 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
4557
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4558 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4559 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
4560 2: int line2 );
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
4561 3:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4562 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
4563 5: int line1,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4564 6: int line2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4565 7: );
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
4566 8:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4567 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
4568 10: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4569 11: a_function(
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4570 12: line1,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4571 13: line2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4572 14: );
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
4573 15:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4574 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
4575 17: line2 );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4576 18: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4577 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4578
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4579 @ssindex arglist-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4580 @ssindex arglist-close
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4581 Lines 5 and 12 are assigned @code{arglist-intro} syntax since they are
Dave Love <fx@gnu.org>
parents:
diff changeset
4582 the first line following the open parenthesis, and lines 7 and 14 are
Dave Love <fx@gnu.org>
parents:
diff changeset
4583 assigned @code{arglist-close} syntax since they contain the parenthesis
Dave Love <fx@gnu.org>
parents:
diff changeset
4584 that closes the argument list.
Dave Love <fx@gnu.org>
parents:
diff changeset
4585
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4586 @ssindex arglist-cont-nonempty
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4587 @ssindex arglist-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4588 Lines that continue argument lists can be assigned one of two syntactic
Dave Love <fx@gnu.org>
parents:
diff changeset
4589 symbols. For example, Lines 2 and 17
Dave Love <fx@gnu.org>
parents:
diff changeset
4590 are assigned @code{arglist-cont-nonempty} syntax. What this means
Dave Love <fx@gnu.org>
parents:
diff changeset
4591 is that they continue an argument list, but that the line containing the
Dave Love <fx@gnu.org>
parents:
diff changeset
4592 parenthesis that opens the list is @emph{not empty} following the open
Dave Love <fx@gnu.org>
parents:
diff changeset
4593 parenthesis. Contrast this against lines 6 and 13 which are assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4594 @code{arglist-cont} syntax. This is because the parenthesis that opens
Dave Love <fx@gnu.org>
parents:
diff changeset
4595 their argument lists is the last character on that line.
Dave Love <fx@gnu.org>
parents:
diff changeset
4596
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4597 Syntactic elements with @code{arglist-intro},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4598 @code{arglist-cont-nonempty}, and @code{arglist-close} contain two
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4599 buffer positions: the anchor position (the beginning of the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4600 declaration or statement) and the position of the open parenthesis.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4601 The latter position can be used in a line-up function (@pxref{Line-Up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4602 Functions}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4603
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4604 Note that there is no @code{arglist-open} syntax. This is because any
Dave Love <fx@gnu.org>
parents:
diff changeset
4605 parenthesis that opens an argument list, appearing on a separate line,
Dave Love <fx@gnu.org>
parents:
diff changeset
4606 is assigned the @code{statement-cont} syntax instead.
Dave Love <fx@gnu.org>
parents:
diff changeset
4607
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4608 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4609 @node Literal Symbols, Multiline Macro Symbols, Paren List Symbols, Syntactic Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4610 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4611 @subsection Comment String Label and Macro Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4612 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4613
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4614 A few miscellaneous syntactic symbols that haven't been previously
Dave Love <fx@gnu.org>
parents:
diff changeset
4615 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
4616
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4617 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4618 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
4619 2: const
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4620 3: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4621 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
4622 5: * comment. This line should get `c' syntax */
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
4623 6:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4624 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
4625 8: string. This line should get `string' syntax.";
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
4626 9:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4627 10: note:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4628 11: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4629 12: #ifdef LOCK
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4630 13: Lock acquire();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4631 14: #endif // LOCK
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4632 15: slap_pop();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4633 16: cout << "I played "
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4634 17: << "a note\n";
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4635 18: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4636 19: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4637 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4638
Dave Love <fx@gnu.org>
parents:
diff changeset
4639 The lines to note in this example include:
Dave Love <fx@gnu.org>
parents:
diff changeset
4640
Dave Love <fx@gnu.org>
parents:
diff changeset
4641 @itemize @bullet
Dave Love <fx@gnu.org>
parents:
diff changeset
4642 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4643 @ssindex func-decl-cont
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4644 Line 2 is assigned the @code{func-decl-cont} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4645
Dave Love <fx@gnu.org>
parents:
diff changeset
4646 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4647 @ssindex comment-intro
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4648 Line 4 is assigned both @code{defun-block-intro} @emph{and}
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4649 @code{comment-intro} syntax. A syntactic element with
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4650 @code{comment-intro} has no anchor point --- It is always accompanied
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4651 by another syntactic element which does have one.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4652
Dave Love <fx@gnu.org>
parents:
diff changeset
4653 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4654 @ssindex c
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4655 Line 5 is assigned @code{c} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4656
Dave Love <fx@gnu.org>
parents:
diff changeset
4657 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
4658 @cindex syntactic whitespace
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4659 Line 6 which, even though it contains nothing but whitespace, is
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4660 assigned @code{defun-block-intro}. Note that the appearance of the
Dave Love <fx@gnu.org>
parents:
diff changeset
4661 comment on lines 4 and 5 do not cause line 6 to be assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4662 @code{statement} syntax because comments are considered to be
Dave Love <fx@gnu.org>
parents:
diff changeset
4663 @dfn{syntactic whitespace}, which are ignored when analyzing
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4664 code.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4665
Dave Love <fx@gnu.org>
parents:
diff changeset
4666 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4667 @ssindex string
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4668 Line 8 is assigned @code{string} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4669
Dave Love <fx@gnu.org>
parents:
diff changeset
4670 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4671 @ssindex label
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4672 Line 10 is assigned @code{label} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4673
Dave Love <fx@gnu.org>
parents:
diff changeset
4674 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4675 @ssindex block-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4676 Line 11 is assigned @code{block-open} as well as @code{statement}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4677 syntax. A @code{block-open} syntactic element doesn't have an anchor
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4678 position, since it always appears with another syntactic element which
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4679 does have one.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4680
Dave Love <fx@gnu.org>
parents:
diff changeset
4681 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4682 @ssindex cpp-macro
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4683 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
4684 normal syntactic symbols (@code{statement-block-intro} and
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4685 @code{statement}, respectively). Normally @code{cpp-macro} is
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4686 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
4687 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
4688 changed if you want preprocessor directives to be indented like the rest
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4689 of the code. Like @code{comment-intro}, a syntactic element with
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4690 @code{cpp-macro} doesn't contain an anchor position.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4691
Dave Love <fx@gnu.org>
parents:
diff changeset
4692 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4693 @ssindex stream-op
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4694 Line 17 is assigned @code{stream-op} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4695 @end itemize
Dave Love <fx@gnu.org>
parents:
diff changeset
4696
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4697 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4698 @node Multiline Macro Symbols, Objective-C Method Symbols, Literal Symbols, Syntactic Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4699 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4700 @subsection Multiline Macro Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4701 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4702
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4703 @cindex multiline macros
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4704 @cindex syntactic whitespace
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4705 @ssindex cpp-define-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4706 @ssindex cpp-macro-cont
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4707 Multiline preprocessor macro definitions are normally handled just like
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4708 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
4709 syntactic analysis of the preceding lines inside the macro. The first
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4710 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
4711 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
4712
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4713 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4714 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
4715 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
4716 3: if (!CONSP (cons)) \
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4717 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
4718 5: else
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4719 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4720
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4721 @noindent
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4722 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
4723 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
4724 @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
4725 some extra indentation. Lines 3 through 5 are then analyzed as normal
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4726 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
4727 on line 5.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4728
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4729 The syntactic analysis inside macros can be turned off with
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4730 @code{c-syntactic-indentation-in-macros} (@pxref{Custom Macros}). In
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4731 that case, lines 2 through 5 would all be given @code{cpp-macro-cont}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4732 with an anchor position pointing to the @code{#} which starts the cpp
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4733 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
4734 macros.}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4735
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4736 @xref{Custom Macros}, for more info about the treatment of macros.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4737
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4738 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4739 @node Objective-C Method Symbols, Anonymous Class Symbol, Multiline Macro Symbols, Syntactic Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4740 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4741 @subsection Objective-C Method Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4742 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4743
Dave Love <fx@gnu.org>
parents:
diff changeset
4744 In Objective-C buffers, there are three additional syntactic symbols
Dave Love <fx@gnu.org>
parents:
diff changeset
4745 assigned to various message calling constructs. Here's an example
Dave Love <fx@gnu.org>
parents:
diff changeset
4746 illustrating these:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4747
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4748 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4749 1: - (void)setDelegate:anObject
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4750 2: withStuff:stuff
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4751 3: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4752 4: [delegate masterWillRebind:self
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4753 5: toDelegate:anObject
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4754 6: withExtraStuff:stuff];
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4755 7: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4756 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4757
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4758 @ssindex objc-method-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4759 @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
4760 @ssindex objc-method-call-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4761 Here, line 1 is assigned @code{objc-method-intro} syntax, and line 2 is
Dave Love <fx@gnu.org>
parents:
diff changeset
4762 assigned @code{objc-method-args-cont} syntax. Lines 5 and 6 are both
Dave Love <fx@gnu.org>
parents:
diff changeset
4763 assigned @code{objc-method-call-cont} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4764
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4765 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4766 @node Anonymous Class Symbol, Statement Block Symbols, Objective-C Method Symbols, Syntactic Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4767 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4768 @subsection Anonymous Class Symbol (Java)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4769 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4770
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4771 Java has a concept of anonymous classes which can look something like
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4772 this:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4773
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4774 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4775 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
4776 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
4777 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
4778 4: history.addElement(arg);
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4779 5: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4780 6: @});
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4781 7: @}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4782 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4783
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4784 @ssindex inexpr-class
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4785 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
4786 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
4787 @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
4788 indented just like a normal class, with the added indentation given to
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4789 @code{inexpr-class}. An @code{inexpr-class} syntactic element doesn't
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4790 have an anchor position.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4791
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4792 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4793 @node Statement Block Symbols, K&R Symbols, Anonymous Class Symbol, Syntactic Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4794 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4795 @subsection Statement Block Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4796 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4797
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4798 There are a few occasions where a statement block might be used inside
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4799 an expression. One is in C or C++ code using the gcc extension for
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4800 this, e.g:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4801
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4802 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4803 1: int res = (@{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4804 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
4805 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
4806 4: z;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4807 5: @});
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4808 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4809
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4810 @ssindex inexpr-statement
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4811 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
4812 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
4813 @code{inexpr-statement} is added to the normal statement block
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4814 indentation. An @code{inexpr-statement} syntactic element doesn't
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4815 contain an anchor position.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4816
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4817 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
4818 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
4819
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4820 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4821 1: array itgob()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4822 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4823 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
4824 4: lambda
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4825 5: (mixed arg)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4826 6: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4827 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
4828 8: @}) * ", " + "\n";
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4829 9: return catch @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4830 10: write (s + "\n");
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4831 11: @};
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4832 12: @}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4833 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4834
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4835 @ssindex inlambda
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4836 @ssindex lambda-intro-cont
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4837 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
4838 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
4839 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
4840 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
4841 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
4842 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
4843 @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
4844 @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
4845 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
4846 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
4847 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
4848
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4849 @ssindex inexpr-statement
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4850 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
4851 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
4852 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
4853 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
4854 handled like this too.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4855
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4856 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4857 @node K&R Symbols, , Statement Block Symbols, Syntactic Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4858 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4859 @subsection K&R Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4860 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4861
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4862 @ssindex knr-argdecl-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4863 @ssindex knr-argdecl
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4864 Two other syntactic symbols can appear in old style, non-prototyped C
Dave Love <fx@gnu.org>
parents:
diff changeset
4865 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
4866
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4867 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4868 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
4869 2: int a;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4870 3: int b;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4871 4: int c;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4872 5: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4873 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
4874 7: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4875 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4876
Dave Love <fx@gnu.org>
parents:
diff changeset
4877 Here, line 2 is the first line in an argument declaration list and so is
Dave Love <fx@gnu.org>
parents:
diff changeset
4878 given the @code{knr-argdecl-intro} syntactic symbol. Subsequent lines
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4879 (i.e. lines 3 and 4 in this example), are given @code{knr-argdecl}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4880 syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4881
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4882
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4883 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4884 @node Indentation Calculation, , Syntactic Symbols, Indentation Engine Basics
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4885 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4886 @section Indentation Calculation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4887 @cindex indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4888 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4889
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4890 Indentation for a line is calculated from the syntactic context
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4891 (@pxref{Syntactic Analysis}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4892
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4893 First, a buffer position is found whose column will be the base for the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4894 indentation calculation. It's the anchor position in the first
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4895 syntactic element that provides one that is used. If no syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4896 element has an anchor position then column zero is used.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4897
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4898 Second, the syntactic symbols in each syntactic element are looked up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4899 in the @code{c-offsets-alist} style variable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4900 (@pxref{c-offsets-alist}), which is an association list of syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4901 symbols and the offsets to apply for those symbols. These offsets are
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4902 added together with the base column to produce the new indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4903 column.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4904
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4905 Let's use our two code examples above to see how this works. Here is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4906 our first example again:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4907
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4908 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4909 1: void swap( int& a, int& b )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4910 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4911 3: int tmp = a;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4912 4: a = b;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4913 5: b = tmp;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4914 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4915 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4916
68313
20ff812ba5b3 Use @key for TAB.
Eli Zaretskii <eliz@gnu.org>
parents: 67253
diff changeset
4917 Let's say point is on line 3 and we hit the @key{TAB} key to reindent
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4918 the line. The syntactic context for that line is:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4919
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4920 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4921 ((defun-block-intro 29))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4922 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4923
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4924 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4925 Since buffer position 29 is the first and only anchor position in the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4926 list, @ccmode{} goes there and asks for the current column. This brace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4927 is in column zero, so @ccmode{} uses @samp{0} as the base column.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4928
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4929 Next, @ccmode{} looks up @code{defun-block-intro} in the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4930 @code{c-offsets-alist} style variable. Let's say it finds the value
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4931 @samp{4}; it adds this to the base column @samp{0}, yielding a running
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4932 total indentation of 4 spaces.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4933
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4934 Since there is only one syntactic element on the list for this line,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4935 indentation calculation is complete, and the total indentation for the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4936 line is 4 spaces.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4937
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4938 Here's another example:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4939
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4940 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4941 1: int add( int val, int incr, int doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4942 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4943 3: if( doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4944 4: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4945 5: return( val + incr );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4946 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4947 7: return( val );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4948 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4949 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4950
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4951 If we were to hit @kbd{TAB} on line 4 in the above example, the same
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4952 basic process is performed, despite the differences in the syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4953 context. The context for this line is:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4954
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4955 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4956 ((substatement-open 46))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4957 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4958
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4959 Here, @ccmode{} goes to buffer position 46, which is the @samp{i} in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4960 @code{if} on line 3. This character is in the fourth column on that
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4961 line so the base column is @samp{4}. Then @ccmode{} looks up the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4962 @code{substatement-open} symbol in @code{c-offsets-alist}. Let's say it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4963 finds the value @samp{4}. It's added with the base column and yields an
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4964 indentation for the line of 8 spaces.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4965
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4966 Simple, huh?
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4967
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4968 Actually, it's a bit more complicated than that since the entries on
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4969 @code{c-offsets-alist} can be much more than plain offsets.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4970 @xref{c-offsets-alist}, for the full story.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4971
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4972 Anyway, the mode usually just does The Right Thing without you having to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4973 think about it in this much detail. But when customizing indentation,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4974 it's helpful to understand the general indentation model being used.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4975
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4976 As you configure @ccmode{}, you might want to set the variable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4977 @code{c-echo-syntactic-information-p} to non-@code{nil} so that the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4978 syntactic context and calculated offset always is echoed in the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4979 minibuffer when you hit @kbd{TAB}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4980
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4981
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4982 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4983 @node Customizing Indentation, Custom Macros, Indentation Engine Basics, Top
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4984 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4985 @chapter Customizing Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4986 @cindex customization, indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4987 @cindex indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4988 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4989
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4990 The principal variable for customizing indentation is the style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4991 variable @code{c-offsets-alist}, which gives an @dfn{offset} (an
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4992 indentation rule) for each syntactic symbol. Its structure and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4993 semantics are completely described in @ref{c-offsets-alist}. The
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4994 various ways you can set the variable, including the use of the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4995 @ccmode{} style system, are described in @ref{Config Basics} and its
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4996 sections, in particular @ref{Style Variables}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4997
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4998 The simplest and most used kind of ``offset'' setting in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4999 @code{c-offsets-alist} is in terms of multiples of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5000 @code{c-basic-offset}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5001
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5002 @defopt c-basic-offset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5003 @vindex basic-offset (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5004 This style variable holds the basic offset between indentation levels.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5005 It's factory default is 4, but all the built-in styles set it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5006 themselves, to some value between 2 (for @code{gnu} style) and 8 (for
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5007 @code{bsd}, @code{linux}, and @code{python} styles).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5008 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5009
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5010 The most flexible ``offset'' setting you can make in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5011 @code{c-offsets-alist} is a line-up function (or even a list of them),
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5012 either one supplied by @ccmode{} (@pxref{Line-Up Functions}) or one
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5013 you write yourself (@pxref{Custom Line-Up}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5014
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5015 Finally, in @ref{Other Indentation} you'll find the tool of last
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5016 resort: a hook which is called after a line has been indented. You
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5017 can install functions here to make ad-hoc adjustments to any line's
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5018 indentation.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5019
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5020 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5021 * c-offsets-alist::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5022 * Interactive Customization::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5023 * Line-Up Functions::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5024 * Custom Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5025 * Other Indentation::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5026 @end menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5027
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5028
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5029 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5030 @node c-offsets-alist, Interactive Customization, Customizing Indentation, Customizing Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5031 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5032 @section c-offsets-alist
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5033 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5034
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5035 This section explains the structure and semantics of the style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5036 variable @code{c-offset-alist}, the principal variable for configuring
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5037 indentation. Details of how to set it up, and its relationship to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5038 @ccmode{}'s style system are given in @ref{Style Variables}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5039
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5040 @defopt c-offsets-alist
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5041 @vindex offsets-alist (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5042 This is an alist which associates an offset with each syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5043 symbol. This @dfn{offset} is a rule specifying how to indent a line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5044 whose syntactic context matches the symbol. @xref{Syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5045 Analysis}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5046
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5047 Note that the buffer-local binding of this alist in a @ccmode{} buffer
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5048 contains an entry for @emph{every} syntactic symbol. Its global
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5049 binding and its settings within style specifications usually contain
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5050 only a few entries. @xref{Style Variables}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5051
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5052 The offset specification associated with any particular syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5053 symbol can be an integer, a variable name, a vector, a function or
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5054 lambda expression, a list, or one of the following special symbols:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5055 @code{+}, @code{-}, @code{++}, @code{--}, @code{*}, or @code{/}. The
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5056 meanings of these values are described in detail below.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5057
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5058 Here is an example fragment of a @code{c-offsets-alist}, showing some
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5059 of these kinds of offsets:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5060
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5061 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5062 ((statement . 0)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5063 (substatement . +)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5064 (cpp-macro . [0])
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5065 (topmost-intro-cont . c-lineup-topmost-intro-cont)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5066 (statement-block-intro . (add c-lineup-whitesmith-in-block
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5067 c-indent-multi-line-block))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5068 @dots{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5069 @*)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5070 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5071 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5072
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5073 @deffn Command c-set-offset (@kbd{C-c C-o})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5074 @findex set-offset (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5075 @kindex C-c C-o
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5076 This command changes the entry for a syntactic symbol in the current
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5077 binding of @code{c-offsets-alist}, or it inserts a new entry if there
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5078 isn't already one for that syntactic symbol.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5079
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5080 You can use @code{c-set-offsets} interactively within a @ccmode{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5081 buffer to make experimental changes to your indentation settings.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5082 @kbd{C-c C-o} prompts you for the syntactic symbol to change
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5083 (defaulting to that of the current line) and the new offset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5084 (defaulting to the current offset).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5085
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5086 @code{c-set-offsets} takes two arguments when used programmatically:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5087 @var{symbol}, the syntactic element symbol to change and @var{offset},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5088 the new offset for that syntactic element. You can call the command
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5089 in your @file{.emacs} to change the global binding of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5090 @code{c-offsets-alist} (@pxref{Style Variables}); you can use it in a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5091 hook function to make changes from the current style. @ccmode{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5092 itself uses this function when initializing styles.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5093 @end deffn
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5094
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5095 @cindex offset specification
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5096 The ``offset specifications'' in @code{c-offsets-alist} can be any of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5097 the following:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5098
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5099 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5100 @item An integer
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5101 The integer specifies a relative offset. All relative
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5102 offsets@footnote{The syntactic context @code{@w{((defun-block-intro
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5103 2724) (comment-intro))}} would likely have two relative offsets.} will
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5104 be added together and used to calculate the indentation relative to an
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5105 anchor position earlier in the buffer. @xref{Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5106 Calculation}, for details. Most of the time, it's probably better to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5107 use one of the special symbols like @code{+} than an integer (apart
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5108 from zero).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5109
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5110 @item One of the symbols @code{+}, @code{-}, @code{++}, @code{--}, @code{*}, or @code{/}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5111 These special symbols describe a relative offset in multiples of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5112 @code{c-basic-offset}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5113
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5114 By defining a style's indentation in terms of @code{c-basic-offset},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5115 you can change the amount of whitespace given to an indentation level
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5116 while maintaining the same basic shape of your code. Here are the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5117 values that the special symbols correspond to:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5118
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5119 @table @code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5120 @item +
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5121 @code{c-basic-offset} times 1
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5122 @item -
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5123 @code{c-basic-offset} times -1
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5124 @item ++
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5125 @code{c-basic-offset} times 2
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5126 @item --
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5127 @code{c-basic-offset} times -2
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5128 @item *
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5129 @code{c-basic-offset} times 0.5
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5130 @item /
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5131 @code{c-basic-offset} times -0.5
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5132 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5133
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5134 @item A vector
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5135 The first element of the vector, an integer, sets the absolute
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5136 indentation column. This will override any previously calculated
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5137 indentation, but won't override relative indentation calculated from
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5138 syntactic elements later on in the syntactic context of the line being
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5139 indented. @xref{Indentation Calculation}. Any elements in the vector
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5140 beyond the first will be ignored.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5141
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5142 @item A function or lambda expression
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5143 The function will be called and its return value will in turn be
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5144 evaluated as an offset specification. Functions are useful when more
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5145 context than just the syntactic symbol is needed to get the desired
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5146 indentation. @xref{Line-Up Functions}, and @ref{Custom Line-Up}, for
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5147 details about them.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5148
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5149 @item A symbol with a variable binding
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5150 If the symbol also has a function binding, the function takes
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5151 precedence over the variable. Otherwise the value of the variable is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5152 used. It must be an integer (which is used as relative offset) or a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5153 vector (an absolute offset).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5154
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5155 @item A list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5156 The offset can also be a list containing several offset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5157 specifications; these are evaluated recursively and combined. A list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5158 is typically only useful when some of the offsets are line-up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5159 functions. A common strategy is calling a sequence of functions in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5160 turn until one of them recognizes that it is appropriate for the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5161 source line and returns a non-@code{nil} value.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5162
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5163 @code{nil} values are always ignored when the offsets are combined.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5164 The first element of the list specifies the method of combining the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5165 non-@code{nil} offsets from the remaining elements:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5166
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5167 @table @code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5168 @item first
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5169 Use the first offset that doesn't evaluate to @code{nil}. Subsequent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5170 elements of the list don't get evaluated.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5171 @item min
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5172 Use the minimum of all the offsets. All must be either relative or
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5173 absolute - they can't be mixed.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5174 @item max
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5175 Use the maximum of all the offsets. All must be either relative or
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5176 absolute - they can't be mixed.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5177 @item add
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5178 Add all the evaluated offsets together. Exactly one of them may be
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5179 absolute, in which case the result is absolute. Any relative offsets
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5180 that preceded the absolute one in the list will be ignored in that case.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5181 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5182
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5183 As a compatibility measure, if the first element is none of the above
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5184 then it too will be taken as an offset specification and the whole list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5185 will be combined according to the method @code{first}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5186 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5187
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5188 @vindex c-strict-syntax-p
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5189 @vindex strict-syntax-p (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5190 If an offset specification evaluates to @code{nil}, then a relative
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5191 offset of 0 (zero) is used@footnote{There is however a variable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5192 @code{c-strict-syntax-p} that when set to non-@code{nil} will cause an
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5193 error to be signaled in that case. It's now considered obsolete since
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
5194 it doesn't work well with some of the alignment functions that return
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5195 @code{nil} instead of zero. You should therefore leave
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5196 @code{c-strict-syntax-p} set to @code{nil}.}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5197
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5198 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5199 @node Interactive Customization, Line-Up Functions, c-offsets-alist, Customizing Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5200 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5201 @section Interactive Customization
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5202 @cindex customization, interactive
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5203 @cindex interactive customization
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5204 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5205
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5206 As an example of how to customize indentation, let's change the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5207 style of this example@footnote{In this and subsequent examples, the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5208 original code is formatted using the @samp{gnu} style unless otherwise
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5209 indicated. @xref{Styles}.}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5210
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5211 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5212 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5213 1: int add( int val, int incr, int doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5214 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5215 3: if( doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5216 4: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5217 5: return( val + incr );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5218 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5219 7: return( val );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5220 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5221 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5222 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5223
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5224 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5225 to:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5226
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5227 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5228 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5229 1: int add( int val, int incr, int doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5230 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5231 3: if( doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5232 4: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5233 5: return( val + incr );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5234 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5235 7: return( val );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5236 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5237 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5238 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5239
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5240 In other words, we want to change the indentation of braces that open a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5241 block following a condition so that the braces line up under the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5242 conditional, instead of being indented. Notice that the construct we
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5243 want to change starts on line 4. To change the indentation of a line,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5244 we need to see which syntactic symbols affect the offset calculations
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5245 for that line. Hitting @kbd{C-c C-s} on line 4 yields:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5246
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5247 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5248 ((substatement-open 44))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5249 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5250
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5251 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5252 so we know that to change the offset of the open brace, we need to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5253 change the indentation for the @code{substatement-open} syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5254 symbol.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5255
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5256 To do this interactively, just hit @kbd{C-c C-o}. This prompts
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5257 you for the syntactic symbol to change, providing a reasonable default.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5258 In this case, the default is @code{substatement-open}, which is just the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5259 syntactic symbol we want to change!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5260
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5261 After you hit return, @ccmode{} will then prompt you for the new
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5262 offset value, with the old value as the default. The default in this
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5263 case is @samp{+}, but we want no extra indentation so enter
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5264 @samp{0} and @kbd{RET}. This will associate the offset 0 with the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5265 syntactic symbol @code{substatement-open}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5266
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5267 To check your changes quickly, just hit @kbd{C-c C-q}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5268 (@code{c-indent-defun}) to reindent the entire function. The example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5269 should now look like:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5270
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5271 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5272 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5273 1: int add( int val, int incr, int doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5274 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5275 3: if( doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5276 4: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5277 5: return( val + incr );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5278 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5279 7: return( val );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5280 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5281 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5282 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5283
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5284 Notice how just changing the open brace offset on line 4 is all we
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5285 needed to do. Since the other affected lines are indented relative to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5286 line 4, they are automatically indented the way you'd expect. For more
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5287 complicated examples, this might not always work. The general approach
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5288 to take is to always start adjusting offsets for lines higher up in the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5289 file, then reindent and see if any following lines need further
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5290 adjustments.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5291
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5292 @c Move this bit to "Styles" (2005/10/7)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5293 @deffn Command c-set-offset symbol offset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5294 @findex set-offset (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5295 @kindex C-c C-o
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5296 This is the command bound to @kbd{C-c C-o}. It provides a convenient
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5297 way to set offsets on @code{c-offsets-alist} both interactively (see
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5298 the example above) and from your mode hook.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5299
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5300 It takes two arguments when used programmatically: @var{symbol} is the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5301 syntactic element symbol to change and @var{offset} is the new offset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5302 for that syntactic element.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5303 @end deffn
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5304 @c End of MOVE THIS BIT.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5305
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5306 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5307 @node Line-Up Functions, Custom Line-Up, Interactive Customization, Customizing Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5308 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5309 @section Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5310 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5311
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5312 @cindex line-up function
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5313 @cindex indentation function
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5314 Often there are cases when a simple offset setting on a syntactic
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5315 symbol isn't enough to get the desired indentation---for example, you
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5316 might want to line up a closing parenthesis with the matching opening
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5317 one rather than indenting relative to its ``anchor point''. @ccmode{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5318 provides this flexibility with @dfn{line-up functions}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5319
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5320 The way you associate a line-up function with a syntactic symbol is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5321 described in @ref{c-offsets-alist}. @ccmode{} comes with many
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5322 predefined line-up functions for common situations. If none of these
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5323 does what you want, you can write your own. @xref{Custom Line-Up}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5324 Sometimes, it is easier to tweak the standard indentation by adding a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5325 function to @code{c-special-indent-hook} (@pxref{Other Indentation}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5326
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5327 The line-up functions haven't been adapted for AWK buffers or tested
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5328 with them. Some of them might work serendipitously. There shouldn't be
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5329 any problems writing custom line-up functions for AWK mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5330
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5331 The calling convention for line-up functions is described fully in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5332 @ref{Custom Line-Up}. Roughly speaking, the return value is either an
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5333 offset itself (such as @code{+} or @code{[0]}) or it's @code{nil},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5334 meaning ``this function is inappropriate in this case - try a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5335 different one''. @xref{c-offsets-alist}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5336
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5337 The subsections below describe all the standard line-up functions,
71224
b7261e09f8e4 * cc-mode.texi (Getting Started, Indentation Commands, Config Basics)
Romain Francoise <romain@orebokech.com>
parents: 69681
diff changeset
5338 categorized by the sort of token the lining-up centers around. For
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5339 each of these functions there is a ``works with'' list that indicates
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5340 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
5341
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5342 @macro workswith
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5343 @emph{Works with:@ }
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5344 @end macro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5345 @ifinfo
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5346 @unmacro workswith
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5347 @macro workswith
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5348 Works with:
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5349 @end macro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5350 @end ifinfo
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5351
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5352 @macro sssTBasicOffset
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5353 <--> @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
5354 @end macro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5355
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5356 @macro sssTsssTBasicOffset
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5357 <--><--> @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
5358 @end macro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5359
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5360 @macro hereFn{func}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5361 <- @i{\func\}@c
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5362 @end macro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5363
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5364 @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
5365 @iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5366 @unmacro hereFn
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5367 @macro hereFn{func}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5368 <-@i{\func\}@c
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5369 @end macro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5370 @end iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5371
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5372 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5373 * Brace/Paren Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5374 * List Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5375 * Operator Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5376 * Comment Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5377 * Misc Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5378 @end menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5379
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5380 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5381 @node Brace/Paren Line-Up, List Line-Up, Line-Up Functions, Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5382 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5383 @subsection Brace and Parenthesis Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5384 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5385
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5386 The line-up functions here calculate the indentation for braces,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5387 parentheses and statements within brace blocks.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5388
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5389 @defun c-lineup-close-paren
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5390 @findex lineup-close-paren (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5391 Line up the closing paren under its corresponding open paren if the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5392 open paren is followed by code. If the open paren ends its line, no
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5393 indentation is added. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5394
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5395 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5396 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5397 main (int,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5398 char **
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5399 ) @hereFn{c-lineup-close-paren}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5400 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5401 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5402
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5403 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5404 and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5405
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5406 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5407 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5408 main (
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5409 int, char **
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5410 ) @hereFn{c-lineup-close-paren}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5411 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5412 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5413
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5414 As a special case, if a brace block is opened at the same line as the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5415 open parenthesis of the argument list, the indentation is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5416 @code{c-basic-offset} instead of the open paren column. See
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5417 @code{c-lineup-arglist} for further discussion of this ``DWIM'' measure.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5418
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5419 @workswith All @code{*-close} symbols.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5420 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5421
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5422 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5423
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5424 @anchor{c-lineup-arglist-close-under-paren}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5425 @defun c-lineup-arglist-close-under-paren
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5426 @findex lineup-arglist-close-under-paren (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5427 Set your @code{arglist-close} syntactic symbol to this line-up function
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5428 so that parentheses that close argument lists will line up under the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5429 parenthesis that opened the argument list. It can also be used with
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5430 @code{arglist-cont} and @code{arglist-cont-nonempty} to line up all
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5431 lines inside a parenthesis under the open paren.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5432
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5433 As a special case, if a brace block is opened at the same line as the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5434 open parenthesis of the argument list, the indentation is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5435 @code{c-basic-offset} only. See @code{c-lineup-arglist} for further
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5436 discussion of this ``DWIM'' measure.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5437
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5438 @workswith Almost all symbols, but are typically most useful on
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5439 @code{arglist-close}, @code{brace-list-close}, @code{arglist-cont} and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5440 @code{arglist-cont-nonempty}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5441 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5442
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5443 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5444
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5445 @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
5446 @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
5447 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
5448
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
5449 @example
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
5450 @group
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5451 if (n > 0)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5452 @{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
5453 @sssTBasicOffset{}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5454 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5455 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5456
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5457 @noindent
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5458 and
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5459
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5460 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5461 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5462 if (n > 0)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5463 @{ @hereFn{c-indent-one-line-block}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5464 m+=n; n=0;
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5465 @}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5466 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5467 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5468
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5469 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
5470 @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
5471 which makes the function usable in list expressions.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5472
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5473 @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
5474 @code{-open} symbols.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5475 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5476
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5477 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5478
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5479 @defun c-indent-multi-line-block
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5480 @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
5481 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
5482
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5483 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5484 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5485 int *foo[] = @{
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
5486 NULL,
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5487 @{17@}, @hereFn{c-indent-multi-line-block}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5488 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5489 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5490
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5491 @noindent
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5492 and
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5493
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5494 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5495 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5496 int *foo[] = @{
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5497 NULL,
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5498 @{ @hereFn{c-indent-multi-line-block}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5499 17
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5500 @},
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5501 @sssTBasicOffset{}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5502 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5503 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5504
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5505 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
5506 @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
5507 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
5508
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5509 @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
5510 @code{-open} symbols.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5511 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5512
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5513 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5514
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5515 @defun c-lineup-runin-statements
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5516 @findex lineup-runin-statements (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5517 Line up statements for coding standards which place the first statement
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5518 in a block on the same line as the block opening brace@footnote{Run-in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5519 style doesn't really work too well. You might need to write your own
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5520 custom line-up functions to better support this style.}. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5521
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5522 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5523 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5524 int main()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5525 @{ puts ("Hello!");
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5526 return 0; @hereFn{c-lineup-runin-statements}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5527 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5528 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5529 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5530
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5531 If there is no statement after the opening brace to align with,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5532 @code{nil} is returned. This makes the function usable in list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5533 expressions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5534
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5535 @workswith The @code{statement} syntactic symbol.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5536 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5537
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5538 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5539
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5540 @defun c-lineup-inexpr-block
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5541 @findex lineup-inexpr-block (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5542 This can be used with the in-expression block symbols to indent the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5543 whole block to the column where the construct is started. E.g. for Java
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5544 anonymous classes, this lines up the class under the @samp{new} keyword,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5545 and in Pike it lines up the lambda function body under the @samp{lambda}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5546 keyword. Returns @code{nil} if the block isn't part of such a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5547 construct.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5548
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5549 @workswith @code{inlambda}, @code{inexpr-statement},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5550 @code{inexpr-class}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5551 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5552
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5553 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5554
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5555 @defun c-lineup-after-whitesmith-blocks
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5556 @findex lineup-after-whitesmith-blocks (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5557 Compensate for Whitesmith style indentation of blocks. Due to the way
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5558 @ccmode{} calculates anchor positions for normal lines inside blocks,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5559 this function is necessary for those lines to get correct Whitesmith
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5560 style indentation. Consider the following examples:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5561
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5562 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5563 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5564 int foo()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5565 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5566 a;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5567 x; @hereFn{c-lineup-after-whitesmith-blocks}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5568 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5569 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5570
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5571 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5572 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5573 int foo()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5574 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5575 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5576 a;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5577 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5578 x; @hereFn{c-lineup-after-whitesmith-blocks}
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5579 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5580 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5581
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5582 The fact that the line with @code{x} is preceded by a Whitesmith style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5583 indented block in the latter case and not the first should not affect
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5584 its indentation. But since CC Mode in cases like this uses the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5585 indentation of the preceding statement as anchor position, the @code{x}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5586 would in the second case be indented too much if the offset for
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5587 @code{statement} was set simply to zero.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5588
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5589 This lineup function corrects for this situation by detecting if the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5590 anchor position is at an open paren character. In that case, it instead
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5591 indents relative to the surrounding block just like
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5592 @code{c-lineup-whitesmith-in-block}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5593
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5594 @workswith @code{brace-list-entry}, @code{brace-entry-open},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5595 @code{statement}, @code{arglist-cont}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5596 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5597
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5598 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5599
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5600 @defun c-lineup-whitesmith-in-block
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5601 @findex lineup-whitesmith-in-block (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5602 Line up lines inside a block in Whitesmith style. It's done in a way
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5603 that works both when the opening brace hangs and when it doesn't. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5604
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5605 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5606 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5607 something
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5608 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5609 foo; @hereFn{c-lineup-whitesmith-in-block}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5610 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5611 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5612 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5613
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5614 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5615 and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5616
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5617 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5618 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5619 something @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5620 foo; @hereFn{c-lineup-whitesmith-in-block}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5621 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5622 @sssTBasicOffset{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5623 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5624 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5625
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5626 In the first case the indentation is kept unchanged, in the second
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5627 @code{c-basic-offset} is added.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5628
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5629 @workswith @code{defun-close}, @code{defun-block-intro},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5630 @code{inline-close}, @code{block-close}, @code{brace-list-close},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5631 @code{brace-list-intro}, @code{statement-block-intro},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5632 @code{arglist-intro}, @code{arglist-cont-nonempty},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5633 @code{arglist-close}, and all @code{in*} symbols, e.g. @code{inclass}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5634 and @code{inextern-lang}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5635 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5636
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5637 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5638 @node List Line-Up, Operator Line-Up, Brace/Paren Line-Up, Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5639 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5640 @subsection List Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5641 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5642
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5643 The line-up functions here calculate the indentation for lines which
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5644 form lists of items, usually separated by commas.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5645
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5646 The function @ref{c-lineup-arglist-close-under-paren}, which is mainly
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5647 for indenting a close parenthesis, is also useful for the lines
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5648 contained within parentheses.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5649
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5650 @defun c-lineup-arglist
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5651 @findex lineup-arglist (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5652 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
5653
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5654 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
5655 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
5656 @code{c-basic-offset} only. This is intended as a ``DWIM'' measure in
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5657 cases like macros that contain statement blocks, e.g:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5658
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5659 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5660 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5661 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
5662 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
5663 @});
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5664 @sssTBasicOffset{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5665 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5666 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5667
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5668 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
5669 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
5670 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
5671 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
5672
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5673 @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
5674 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5675
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5676 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5677
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5678 @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
5679 @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
5680 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
5681 brace block.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5682
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5683 @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
5684 @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
5685 @code{arglist-intro}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5686 @end defun
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
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5690 @defun c-lineup-multi-inher
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5691 @findex lineup-multi-inher (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5692 Line up the classes in C++ multiple inheritance clauses and member
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5693 initializers under each other. E.g:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5694
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5695 @example
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5696 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5697 Foo::Foo (int a, int b):
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5698 Cyphr (a),
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5699 Bar (b) @hereFn{c-lineup-multi-inher}
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5700 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5701 @end example
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 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5704 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5705
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5706 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5707 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5708 class Foo
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5709 : public Cyphr,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5710 public Bar @hereFn{c-lineup-multi-inher}
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5711 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5712 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5713
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5714 @noindent
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5715 and
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5716
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5717 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5718 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5719 Foo::Foo (int a, int b)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5720 : Cyphr (a)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5721 , Bar (b) @hereFn{c-lineup-multi-inher}
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5722 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5723 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5724
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5725 @workswith @code{inher-cont}, @code{member-init-cont}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5726 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5727
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5728 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5729
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5730 @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
5731 @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
5732 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
5733 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
5734 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
5735 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
5736 E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5737
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5738 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5739 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5740 class Foo
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
5741 extends
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5742 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
5743 @sssTBasicOffset{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5744 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5745 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5746
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5747 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5748 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5749
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5750 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5751 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5752 class Foo
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5753 extends Cyphr,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5754 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
5755 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5756 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5757
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5758 @workswith @code{inher-cont}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5759 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5760
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5761 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5762
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5763 @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
5764 @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
5765 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
5766 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
5767 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
5768 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
5769 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
5770 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
5771
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5772 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5773 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5774 int foo()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5775 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
5776 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
5777 @sssTsssTBasicOffset{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5778 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5779 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5780
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5781 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5782 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5783
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5784 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5785 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5786 int foo() throws Cyphr,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5787 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
5788 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
5789 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5790 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5791
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5792 @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
5793 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5794
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5795 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5796
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5797 @defun c-lineup-template-args
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5798 @findex lineup-template-args (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5799 Line up the arguments of a template argument list under each other, but
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5800 only in the case where the first argument is on the same line as the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5801 opening @samp{<}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5802
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5803 To allow this function to be used in a list expression, @code{nil} is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5804 returned if there's no template argument on the first line.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5805
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5806 @workswith @code{template-args-cont}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5807 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5808
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5809 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5810
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5811 @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
5812 @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
5813 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
5814 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
5815 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
5816 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
5817 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
5818 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
5819
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5820 @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
5821 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5822
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5823 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5824
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5825 @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
5826 @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
5827 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
5828 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
5829
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5830 @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
5831 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5832
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5833 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5834
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5835 @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
5836 @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
5837 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
5838 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
5839
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5840 @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
5841 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5842
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5843 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5844 @node Operator Line-Up, Comment Line-Up, List Line-Up, Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5845 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5846 @subsection Operator Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5847 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5848
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5849 The line-up functions here calculate the indentation for lines which
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5850 start with an operator, by lining it up with something on the previous
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5851 line.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5852
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5853 @defun c-lineup-argcont
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5854 @findex lineup-argcont (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5855 Line up a continued argument. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5856
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5857 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5858 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5859 foo (xyz, aaa + bbb + ccc
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5860 + ddd + eee + fff); @hereFn{c-lineup-argcont}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5861 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5862 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5863
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5864 Only continuation lines like this are touched, @code{nil} is returned on
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5865 lines which are the start of an argument.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5866
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5867 Within a gcc @code{asm} block, @code{:} is recognised as an argument
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5868 separator, but of course only between operand specifications, not in the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5869 expressions for the operands.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5870
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5871 @workswith @code{arglist-cont}, @code{arglist-cont-nonempty}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5872 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5873
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5874 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5875
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5876 @defun c-lineup-arglist-operators
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5877 @findex lineup-arglist-operators (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5878 Line up lines starting with an infix operator under the open paren.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5879 Return @code{nil} on lines that don't start with an operator, to leave
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5880 those cases to other line-up functions. Example:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5881
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5882 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5883 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5884 if ( x < 10
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5885 || at_limit (x, @hereFn{c-lineup-arglist-operators}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5886 list) @hereFn{c-lineup-arglist-operators@r{ returns nil}}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5887 )
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5888 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5889 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5890
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5891 Since this function doesn't do anything for lines without an infix
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5892 operator you typically want to use it together with some other lineup
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5893 settings, e.g. as follows (the @code{arglist-close} setting is just a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5894 suggestion to get a consistent style):
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5895
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5896 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5897 (c-set-offset 'arglist-cont
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5898 '(c-lineup-arglist-operators 0))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5899 (c-set-offset 'arglist-cont-nonempty
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5900 '(c-lineup-arglist-operators c-lineup-arglist))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5901 (c-set-offset 'arglist-close
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5902 '(c-lineup-arglist-close-under-paren))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5903 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5904
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5905 @workswith @code{arglist-cont}, @code{arglist-cont-nonempty}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5906 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5907
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5908 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5909
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5910 @defun c-lineup-assignments
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5911 @findex lineup-assignments (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5912 Line up the current line after the assignment operator on the first line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5913 in the statement. If there isn't any, return nil to allow stacking with
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5914 other line-up functions. If the current line contains an assignment
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5915 operator too, try to align it with the first one.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5916
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5917 @workswith @code{topmost-intro-cont}, @code{statement-cont},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5918 @code{arglist-cont}, @code{arglist-cont-nonempty}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5919
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5920 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5921
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5922 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5923
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5924 @defun c-lineup-math
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5925 @findex lineup-math (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5926 Like @code{c-lineup-assignments} but indent with @code{c-basic-offset}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5927 if no assignment operator was found on the first line. I.e. this
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5928 function is the same as specifying a list @code{(c-lineup-assignments
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5929 +)}. It's provided for compatibility with old configurations.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5930
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5931 @workswith @code{topmost-intro-cont}, @code{statement-cont},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5932 @code{arglist-cont}, @code{arglist-cont-nonempty}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5933 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5934
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5935 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5936
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5937 @defun c-lineup-cascaded-calls
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5938 @findex lineup-cascaded-calls (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5939 Line up ``cascaded calls'' under each other. If the line begins with
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5940 @code{->} or @code{.} and the preceding line ends with one or more
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5941 function calls preceded by the same token, then the arrow is lined up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5942 with the first of those tokens. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5943
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5944 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5945 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5946 r = proc->add(17)->add(18)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5947 ->add(19) + @hereFn{c-lineup-cascaded-calls}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5948 offset; @hereFn{c-lineup-cascaded-calls@r{ (inactive)}}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5949 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5950 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5951
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5952 In any other situation @code{nil} is returned to allow use in list
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5953 expressions.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5954
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5955 @workswith @code{topmost-intro-cont}, @code{statement-cont},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5956 @code{arglist-cont}, @code{arglist-cont-nonempty}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5957 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5958
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5959 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5960
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5961 @defun c-lineup-streamop
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5962 @findex lineup-streamop (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5963 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
5964
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5965 @workswith @code{stream-op}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5966 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5967
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5968 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5969
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5970 @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
5971 @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
5972 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
5973 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
5974 another one. E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5975
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5976 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5977 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5978 result = prefix + "A message "
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5979 "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
5980 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5981 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5982
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5983 @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
5984 lineup functions.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5985
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5986 @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
5987 @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
5988 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5989
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5990
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5991 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5992 @node Comment Line-Up, Misc Line-Up, Operator Line-Up, Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5993 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5994 @subsection Comment Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5995 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5996
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5997 The lineup functions here calculate the indentation for several types
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5998 of comment structure.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5999
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6000 @defun c-lineup-C-comments
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6001 @findex lineup-C-comments (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6002 Line up C block comment continuation lines. Various heuristics are used
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6003 to handle most of the common comment styles. Some examples:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6004
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6005 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6006 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6007 /* /** /*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6008 * text * text text
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6009 */ */ */
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6010 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6011 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6012
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6013 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6014 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6015 /* text /* /**
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6016 text ** text ** text
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6017 */ */ */
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6018 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6019 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6020
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6021 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6022 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6023 /**************************************************
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6024 * text
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6025 *************************************************/
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6026 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6027 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6028
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6029 @vindex comment-start-skip
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6030 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6031 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6032 /**************************************************
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6033 Free form text comments:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6034 In comments with a long delimiter line at the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6035 start, the indentation is kept unchanged for lines
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6036 that start with an empty comment line prefix. The
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6037 delimiter line is whatever matches the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6038 @code{comment-start-skip} regexp.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6039 **************************************************/
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6040 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6041 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6042
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6043 The style variable @code{c-comment-prefix-regexp} is used to recognize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6044 the comment line prefix, e.g. the @samp{*} that usually starts every
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6045 line inside a comment.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6046
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6047 @workswith The @code{c} syntactic symbol.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6048 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6049
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6050 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6051
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6052 @defun c-lineup-comment
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6053 @findex lineup-comment (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6054 Line up a comment-only line according to the style variable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6055 @code{c-comment-only-line-offset}. If the comment is lined up with a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6056 comment starter on the previous line, that alignment is preserved.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6057
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6058 @defopt c-comment-only-line-offset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6059 @vindex comment-only-line-offset (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6060 This style variable specifies the extra offset for the line. It can
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6061 contain an integer or a cons cell of the form
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6062
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6063 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6064 (@r{@var{non-anchored-offset}} . @r{@var{anchored-offset}})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6065 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6066
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6067 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6068 where @var{non-anchored-offset} is the amount of offset given to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6069 non-column-zero anchored lines, and @var{anchored-offset} is the amount
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6070 of offset to give column-zero anchored lines. Just an integer as value
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6071 is equivalent to @code{(@r{@var{value}} . -1000)}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6072 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6073
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6074 @workswith @code{comment-intro}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6075 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6076
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6077 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6078
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6079 @defun c-lineup-knr-region-comment
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6080 @findex lineup-knr-region-comment (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6081 Line up a comment in the ``K&R region'' with the declaration. That is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6082 the region between the function or class header and the beginning of the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6083 block. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6084
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6085 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6086 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6087 int main()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6088 /* Called at startup. */ @hereFn{c-lineup-knr-region-comment}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6089 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6090 return 0;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6091 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6092 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6093 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6094
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6095 Return @code{nil} if called in any other situation, to be useful in list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6096 expressions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6097
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6098 @workswith @code{comment-intro}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6099 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6100
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6101 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6102 @node Misc Line-Up, , Comment Line-Up, Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6103 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6104 @subsection Miscellaneous Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6105 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6106
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6107 The line-up functions here are the odds and ends which didn't fit into
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6108 any earlier category.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6109
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6110 @defun c-lineup-dont-change
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6111 @findex lineup-dont-change (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6112 This lineup function makes the line stay at whatever indentation it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6113 already has; think of it as an identity function for lineups.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6114
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6115 @workswith Any syntactic symbol.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6116 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6117
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6118 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6119
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6120 @defun c-lineup-cpp-define
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6121 @findex lineup-cpp-define (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6122 Line up macro continuation lines according to the indentation of the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6123 construct preceding the macro. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6124
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6125 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6126 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6127 const char msg[] = @hereFn{@r{The beginning of the preceding construct.}}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6128 \"Some text.\";
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6129
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6130 #define X(A, B) \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6131 do @{ \ @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6132 printf (A, B); \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6133 @} while (0)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6134 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6135 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6136
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6137 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6138 and:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6139
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6140 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6141 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6142 int dribble() @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6143 if (!running) @hereFn{@r{The beginning of the preceding construct.}}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6144 error(\"Not running!\");
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6145
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6146 #define X(A, B) \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6147 do @{ \ @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6148 printf (A, B); \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6149 @} while (0)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6150 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6151 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6152
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6153 If @code{c-syntactic-indentation-in-macros} is non-@code{nil}, the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6154 function returns the relative indentation to the macro start line to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6155 allow accumulation with other offsets. E.g. in the following cases,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6156 @code{cpp-define-intro} is combined with the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6157 @code{statement-block-intro} that comes from the @samp{do @{} that hangs
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6158 on the @samp{#define} line:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6159
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6160 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6161 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6162 const char msg[] =
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6163 \"Some text.\";
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6164
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6165 #define X(A, B) do @{ \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6166 printf (A, B); \ @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6167 this->refs++; \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6168 @} while (0) @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6169 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6170 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6171
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6172 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6173 and:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6174
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6175 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6176 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6177 int dribble() @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6178 if (!running)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6179 error(\"Not running!\");
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6180
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6181 #define X(A, B) do @{ \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6182 printf (A, B); \ @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6183 this->refs++; \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6184 @} while (0) @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6185 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6186 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6187
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6188 The relative indentation returned by @code{c-lineup-cpp-define} is zero
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6189 and two, respectively, on the two lines in each of these examples. They
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6190 are then added to the two column indentation that
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6191 @code{statement-block-intro} gives in both cases here.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6192
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6193 If the relative indentation is zero, then @code{nil} is returned
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6194 instead. That is useful in a list expression to specify the default
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6195 indentation on the top level.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6196
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6197 If @code{c-syntactic-indentation-in-macros} is @code{nil} then this
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6198 function keeps the current indentation, except for empty lines (ignoring
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6199 the ending backslash) where it takes the indentation from the closest
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6200 preceding nonempty line in the macro. If there's no such line in the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6201 macro then the indentation is taken from the construct preceding it, as
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6202 described above.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6203
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6204 @workswith @code{cpp-define-intro}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6205 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6206
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6207 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6208
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6209 @defun c-lineup-gcc-asm-reg
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6210 @findex lineup-gcc-asm-reg (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6211 Line up a gcc asm register under one on a previous line.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6212
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6213 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6214 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6215 asm ("foo %1, %0\n"
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6216 "bar %0, %1"
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6217 : "=r" (w),
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6218 "=r" (x)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6219 : "0" (y),
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6220 "1" (z));
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6221 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6222 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6223
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6224 The @samp{x} line is aligned to the text after the @samp{:} on the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6225 @samp{w} line, and similarly @samp{z} under @samp{y}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6226
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6227 This is done only in an @samp{asm} or @samp{__asm__} block, and only to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6228 those lines mentioned. Anywhere else @code{nil} is returned. The usual
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6229 arrangement is to have this routine as an extra feature at the start of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6230 arglist lineups, e.g.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6231
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6232 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6233 (c-lineup-gcc-asm-reg c-lineup-arglist)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6234 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6235
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6236 @workswith @code{arglist-cont}, @code{arglist-cont-nonempty}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6237 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6238
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6239 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6240
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6241 @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
6242 @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
6243 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
6244 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
6245 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
6246 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
6247 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
6248 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
6249 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
6250 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
6251
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6252 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6253 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6254 int
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6255 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
6256 @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6257 return -i;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6258 @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6259 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6260 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6261
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6262 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6263 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6264
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6265 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6266 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6267 struct
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6268 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
6269 @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6270 double height;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6271 @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6272 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
6273 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
6274 @sssTBasicOffset{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6275 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6276 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6277
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6278 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6279 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6280
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6281 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6282 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6283 struct larch
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6284 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
6285 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
6286 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6287 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6288
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6289 @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
6290 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6291
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6292 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6293 @node Custom Line-Up, Other Indentation, Line-Up Functions, Customizing Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6294 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6295 @section Custom Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6296 @cindex customization, indentation functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6297 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6298
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6299 The most flexible way to customize indentation is by writing custom
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6300 line-up functions, and associating them with specific syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6301 symbols (@pxref{c-offsets-alist}). Depending on the effect you want,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6302 it might be better to write a @code{c-special-indent-hook} function
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6303 rather than a line-up function (@pxref{Other Indentation}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6304
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6305 @ccmode{} comes with an extensive set of predefined line-up functions,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6306 not all of which are used by the default styles. So there's a good
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6307 chance the function you want already exists. @xref{Line-Up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6308 Functions}, for a list of them. If you write your own line-up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6309 function, it's probably a good idea to start working from one of these
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6310 predefined functions, which can be found in the file
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6311 @file{cc-align.el}. If you have written a line-up function that you
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6312 think is generally useful, you're very welcome to contribute it;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6313 please contact @email{bug-cc-mode@@gnu.org}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6314
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6315 Line-up functions are passed a single argument, the syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6316 element (see below). The return value is a @code{c-offsets-alist}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6317 offset specification: for example, an integer, a symbol such as
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6318 @code{+}, a vector, @code{nil}@footnote{Returning @code{nil} is useful
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6319 when the offset specification for a syntactic element is a list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6320 containing the line-up function (@pxref{c-offsets-alist}).}, or even
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6321 another line-up function. Full details of these are in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6322 @ref{c-offsets-alist}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6323
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6324 Line-up functions must not move point or change the content of the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6325 buffer (except temporarily). They are however allowed to do
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6326 @dfn{hidden buffer changes}, i.e. setting text properties for caching
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6327 purposes etc. Buffer undo recording is disabled while they run.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6328
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6329 The syntactic element passed as the parameter to a line-up function is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6330 a cons cell of the form
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6331
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6332 @example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6333 (@r{@var{syntactic-symbol}} . @r{@var{anchor-position}})
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6334 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6335
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6336 @noindent
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6337 @c FIXME!!! The following sentence might be better omitted, since the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6338 @c information is in the cross reference "Syntactic Analysis". 2005/10/2.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6339 where @var{syntactic-symbol} is the symbol that the function was
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6340 called for, and @var{anchor-position} is the anchor position (if any)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6341 for the construct that triggered the syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6342 (@pxref{Syntactic Analysis}). This cons cell is how the syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6343 element of a line used to be represented in @ccmode{} 5.28 and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6344 earlier. Line-up functions are still passed this cons cell, so as to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6345 preserve compatibility with older configurations. In the future, we
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6346 may decide to convert to using the full list format---you can prepare
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6347 your setup for this by using the access functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6348 (@code{c-langelem-sym}, etc.) described below.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6349
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6350 @vindex c-syntactic-element
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6351 @vindex syntactic-element (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6352 @vindex c-syntactic-context
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6353 @vindex syntactic-context (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6354 Some syntactic symbols, e.g. @code{arglist-cont-nonempty}, have more
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6355 info in the syntactic element - typically other positions that can be
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6356 interesting besides the anchor position. That info can't be accessed
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6357 through the passed argument, which is a cons cell. Instead, you can
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6358 get this information from the variable @code{c-syntactic-element},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6359 which is dynamically bound to the complete syntactic element. The
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6360 variable @code{c-syntactic-context} might also be useful - it gets
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6361 dynamically bound to the complete syntactic context. @xref{Custom
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6362 Braces}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6363
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6364 @ccmode{} provides a few functions to access parts of syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6365 elements in a more abstract way. Besides making the code easier to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6366 read, they also hide the difference between the old cons cell form
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6367 used in the line-up function argument and the new list form used in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6368 @code{c-syntactic-element} and everywhere else. The functions are:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6369
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6370 @defun c-langelem-sym langelem
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6371 @findex langelem-sym (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6372 Return the syntactic symbol in @var{langelem}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6373 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6374
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6375 @defun c-langelem-pos langelem
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6376 @findex langelem-pos (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6377 Return the anchor position in @var{langelem}, or nil if there is none.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6378 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6379
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6380 @defun c-langelem-col langelem &optional preserve-point
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6381 @findex langelem-col (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6382 Return the column of the anchor position in @var{langelem}. Also move
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6383 the point to that position unless @var{preserve-point} is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6384 non-@code{nil}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6385 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6386
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6387 @defun c-langelem-2nd-pos langelem
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6388 @findex langelem-2nd-pos (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6389 Return the secondary position in @var{langelem}, or @code{nil} if there
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6390 is none.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6391
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6392 Note that the return value of this function is always @code{nil} if
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6393 @var{langelem} is in the old cons cell form. Thus this function is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6394 only meaningful when used on syntactic elements taken from
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6395 @code{c-syntactic-element} or @code{c-syntactic-context}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6396 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6397
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6398 Custom line-up functions can be as simple or as complex as you like, and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6399 any syntactic symbol that appears in @code{c-offsets-alist} can have a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6400 custom line-up function associated with it.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6401
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6402 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6403 @node Other Indentation, , Custom Line-Up, Customizing Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6404 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6405 @section Other Special Indentations
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6406 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6407
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6408 Here are the remaining odds and ends regarding indentation:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6409
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6410 @defopt c-label-minimum-indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6411 @vindex label-minimum-indentation (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6412 In @samp{gnu} style (@pxref{Built-in Styles}), a minimum indentation is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6413 imposed on lines inside code blocks. This minimum indentation is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6414 controlled by this style variable. The default value is 1.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6415
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6416 @findex c-gnu-impose-minimum
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6417 @findex gnu-impose-minimum (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6418 It's the function @code{c-gnu-impose-minimum} that enforces this minimum
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6419 indentation. It must be present on @code{c-special-indent-hook} to
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6420 work.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6421 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6422
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6423 @defopt c-special-indent-hook
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6424 @vindex special-indent-hook (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6425 This style variable is a standard hook variable that is called after
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6426 every line is indented by @ccmode{}. It is called only if
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6427 @code{c-syntactic-indentation} is non-@code{nil} (which it is by
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6428 default (@pxref{Indentation Engine Basics})). You can put a function
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6429 on this hook to do any special indentation or ad hoc line adjustments
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6430 your style dictates, such as adding extra indentation to constructors
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6431 or destructor declarations in a class definition, etc. Sometimes it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6432 is better to write a custom Line-up Function instead (@pxref{Custom
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6433 Line-Up}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6434
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6435 When the indentation engine calls this hook, the variable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6436 @code{c-syntactic-context} is bound to the current syntactic context
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6437 (i.e. what you would get by typing @kbd{C-c C-s} on the source line.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6438 @xref{Custom Braces}.). Note that you should not change point or mark
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6439 inside a @code{c-special-indent-hook} function, i.e. you'll probably
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6440 want to wrap your function in a @code{save-excursion}@footnote{The
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6441 numerical value returned by @code{point} will change if you change the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6442 indentation of the line within a @code{save-excursion} form, but point
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6443 itself will still be over the same piece of text.}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6444
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6445 Setting @code{c-special-indent-hook} in style definitions is handled
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6446 slightly differently from other variables---A style can only add
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6447 functions to this hook, not remove them. @xref{Style Variables}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6448 @end defopt
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6449
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6450
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6451 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6452 @node Custom Macros, Odds and Ends, Customizing Indentation, Top
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6453 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6454 @chapter Customizing Macros
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6455 @cindex macros
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6456 @cindex preprocessor directives
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6457 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6458
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6459 Normally, the lines in a multi-line macro are indented relative to
71224
b7261e09f8e4 * cc-mode.texi (Getting Started, Indentation Commands, Config Basics)
Romain Francoise <romain@orebokech.com>
parents: 69681
diff changeset
6460 each other as though they were code. You can suppress this behaviour
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6461 by setting the following user option:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6462
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6463 @defopt c-syntactic-indentation-in-macros
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6464 @vindex syntactic-indentation-in-macros (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6465 Enable syntactic analysis inside macros, which is the default. If this
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6466 is @code{nil}, all lines inside macro definitions are analyzed as
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6467 @code{cpp-macro-cont}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6468 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6469
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6470 @ccmode{} provides some tools to help keep the line continuation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6471 backslashes in macros neat and tidy. Their precise action is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6472 customized with these variables:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6473
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6474 @defopt c-backslash-column
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6475 @vindex backslash-column (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6476 @defoptx c-backslash-max-column
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6477 @vindex backslash-max-column (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6478 These variables control the alignment columns for line continuation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6479 backslashes in multiline macros. They are used by the functions that
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6480 automatically insert or align such backslashes,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6481 e.g. @code{c-backslash-region} and @code{c-context-line-break}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6482
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6483 @code{c-backslash-column} specifies the minimum column for the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6484 backslashes. If any line in the macro goes past this column, then the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6485 next tab stop (i.e. next multiple of @code{tab-width}) in that line is
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6486 used as the alignment column for all the backslashes, so that they
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6487 remain in a single column. However, if any lines go past
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6488 @code{c-backslash-max-column} then the backslashes in the rest of the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6489 macro will be kept at that column, so that the lines which are too
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6490 long ``stick out'' instead.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6491
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6492 Don't ever set these variables to @code{nil}. If you want to disable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6493 the automatic alignment of backslashes, use
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6494 @code{c-auto-align-backslashes}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6495 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6496
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6497 @defopt c-auto-align-backslashes
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6498 @vindex auto-align-backslashes (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6499 Align automatically inserted line continuation backslashes if
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6500 non-@code{nil}. When line continuation backslashes are inserted
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6501 automatically for line breaks in multiline macros, e.g. by
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6502 @code{c-context-line-break}, they are aligned with the other
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6503 backslashes in the same macro if this flag is set.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6504
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6505 If @code{c-auto-align-backslashes} is @code{nil}, automatically
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6506 inserted backslashes are preceded by a single space, and backslashes
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6507 get aligned only when you explicitly invoke the command
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6508 @code{c-backslash-region} (@kbd{C-c C-\}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6509 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6510
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6511 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6512 @node Odds and Ends, Sample .emacs File, Custom Macros, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6513 @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
6514 @chapter Odds and Ends
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6515 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
6516
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6517 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
6518
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6519 @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
6520 @vindex require-final-newline (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6521 Controls whether a final newline is enforced when the file is saved.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6522 The value is an association list that for each language mode specifies
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6523 the value to give to @code{require-final-newline} (@pxref{Saving
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6524 Buffers,,, @lispref{}, @lispreftitle{}}) at mode initialization. If a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6525 language isn't 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
6526 @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
6527
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6528 The default is to set @code{require-final-newline} to @code{t} in the
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6529 languages that mandate that source files should end with newlines.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6530 These are 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
6531 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6532
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6533 @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
6534 @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
6535 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
6536 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
6537 @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
6538 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
6539 want.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6540 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6541
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6542 @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
6543 @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
6544 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
6545 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
6546 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
6547
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6548 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
6549 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
6550 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
6551 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
6552 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6553
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6554
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6555 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6556 @node Sample .emacs File, Performance Issues, Odds and Ends, Top
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6557 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6558 @appendix Sample .emacs File
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6559 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6560
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6561 Here's a sample .emacs file fragment that might help you along the way.
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6562 Just copy this region and paste it into your .emacs file. You might want
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6563 to change some of the actual values.
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6564
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6565 @verbatim
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6566 ;; Make a non-standard key binding. We can put this in
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6567 ;; c-mode-base-map because c-mode-map, c++-mode-map, and so on,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6568 ;; inherit from it.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6569 (defun my-c-initialization-hook ()
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6570 (define-key c-mode-base-map "\C-m" 'c-context-line-break))
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6571 (add-hook 'c-initialization-hook 'my-c-initialization-hook)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6572
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6573 ;; offset customizations not in my-c-style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6574 ;; This will take precedence over any setting of the syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6575 ;; made by a style.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6576 (setq c-offsets-alist '((member-init-intro . ++)))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6577
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6578 ;; Create my personal style.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6579 (defconst my-c-style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6580 '((c-tab-always-indent . t)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6581 (c-comment-only-line-offset . 4)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6582 (c-hanging-braces-alist . ((substatement-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6583 (brace-list-open)))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6584 (c-hanging-colons-alist . ((member-init-intro before)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6585 (inher-intro)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6586 (case-label after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6587 (label after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6588 (access-label after)))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6589 (c-cleanup-list . (scope-operator
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6590 empty-defun-braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6591 defun-close-semi))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6592 (c-offsets-alist . ((arglist-close . c-lineup-arglist)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6593 (substatement-open . 0)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6594 (case-label . 4)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6595 (block-open . 0)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6596 (knr-argdecl-intro . -)))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6597 (c-echo-syntactic-information-p . t))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6598 "My C Programming Style")
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6599 (c-add-style "PERSONAL" my-c-style)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6600
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6601 ;; Customizations for all modes in CC Mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6602 (defun my-c-mode-common-hook ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6603 ;; set my personal style for the current buffer
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6604 (c-set-style "PERSONAL")
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6605 ;; other customizations
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6606 (setq tab-width 8
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6607 ;; this will make sure spaces are used instead of tabs
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6608 indent-tabs-mode nil)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6609 ;; we like auto-newline, but not hungry-delete
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6610 (c-toggle-auto-newline 1))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6611 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6612 @end verbatim
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6613
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6614 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6615 @node Performance Issues, Limitations and Known Bugs, Sample .emacs File, Top
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6616 @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
6617 @chapter Performance Issues
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6618 @cindex performance
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6619 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6620
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6621 @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
6622
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6623 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
6624 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
6625 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
6626 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
6627 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
6628 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
6629
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6630 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
6631 more than a fraction of a second) in any interactive operation.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6632 I.e. it's tuned to limit the maximum response time in single operations,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6633 which is sometimes at the expense of batch-like operations like
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6634 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
6635 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
6636 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
6637 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
6638 it, unless it's something that's mentioned in this section.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6639
Dave Love <fx@gnu.org>
parents:
diff changeset
6640 Because @ccmode{} has to scan the buffer backwards from the current
Dave Love <fx@gnu.org>
parents:
diff changeset
6641 insertion point, and because C's syntax is fairly difficult to parse in
Dave Love <fx@gnu.org>
parents:
diff changeset
6642 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
6643 position higher up in the buffer from which to begin a forward scan
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6644 (it's typically an opening or closing parenthesis of some kind). The
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6645 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
6646 gets.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6647
Dave Love <fx@gnu.org>
parents:
diff changeset
6648 @findex beginning-of-defun
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6649 In earlier versions of @ccmode{}, we used to recommend putting the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6650 opening brace of a top-level construct@footnote{E.g. a function in C,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6651 or outermost class definition in C++ or Java.} into the leftmost
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6652 column. Earlier still, this used to be a rigid Emacs constraint, as
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6653 embodied in the @code{beginning-of-defun} function. @ccmode now
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6654 caches syntactic information much better, so that the delay caused by
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6655 searching for such a brace when it's not in column 0 is minimal,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6656 except perhaps when you've just moved a long way inside the file.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6657
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6658 @findex defun-prompt-regexp
Dave Love <fx@gnu.org>
parents:
diff changeset
6659 @vindex c-Java-defun-prompt-regexp
Dave Love <fx@gnu.org>
parents:
diff changeset
6660 @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
6661 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
6662 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
6663 right side of the line, and that doesn't work well with the Emacs
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6664 approach. @ccmode{} comes with a constant
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6665 @code{c-Java-defun-prompt-regexp} which tries to define a regular
Dave Love <fx@gnu.org>
parents:
diff changeset
6666 expression usable for this style, but there are problems with it. In
Dave Love <fx@gnu.org>
parents:
diff changeset
6667 some cases it can cause @code{beginning-of-defun} to hang@footnote{This
Dave Love <fx@gnu.org>
parents:
diff changeset
6668 has been observed in Emacs 19.34 and XEmacs 19.15.}. For this reason,
Dave Love <fx@gnu.org>
parents:
diff changeset
6669 it is not used by default, but if you feel adventurous, you can set
Dave Love <fx@gnu.org>
parents:
diff changeset
6670 @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
6671 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
6672 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
6673 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
6674
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6675 @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
6676 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
6677 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
6678 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
6679 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
6680 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
6681 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
6682 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
6683 Emacs approach to finding the defun starts.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6684
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6685 @vindex c-enable-xemacs-performance-kludge-p
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6686 @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
6687 XEmacs users can set the variable
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6688 @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
6689 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
6690 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
6691 @code{beginning-of-defun}. Preliminary testing has shown that for
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6692 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
6693 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
6694 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
6695 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
6696 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
6697 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
6698 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
6699 in Emacs since the necessary built-in functions don't exist (in Emacs
76599
b57f15fb2d75 (Performance Issues): Update note about 21.3 to 22.1.
Chong Yidong <cyd@stupidchicken.com>
parents: 75348
diff changeset
6700 22.1 as of this writing in February 2007).
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6701
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6702 Text properties are used to speed up skipping over syntactic whitespace,
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6703 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
6704 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
6705 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
6706 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
6707
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6708 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
6709 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
6710 level is designed to be used with a font lock support mode that only
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6711 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
6712 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
6713 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
6714 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
6715
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6716 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
6717 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
6718 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
6719 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
6720 more info.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6721
Dave Love <fx@gnu.org>
parents:
diff changeset
6722
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6723 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6724 @node Limitations and Known Bugs, FAQ, Performance Issues, Top
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6725 @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
6726 @chapter Limitations and Known Bugs
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6727 @cindex limitations
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6728 @cindex bugs
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6729 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6730
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6731 @itemize @bullet
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6732 @item
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6733 @ccmode{} doesn't support trigraphs. (These are character sequences
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6734 such as @samp{??(}, which represents @samp{[}. They date from a time
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6735 when some character sets didn't have all the characters that C needs,
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6736 and are now utterly obsolete.)
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6737
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6738 @item
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6739 There is no way to apply auto newline settings (@pxref{Auto-newlines})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6740 on already typed lines. That's only a feature to ease interactive
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6741 editing.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6742
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6743 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
6744 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
6745 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
6746 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
6747 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
6748
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6749 If you want to reformat old code, you're probably better off using some
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6750 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
6751 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
6752 @ccmode{}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6753
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6754 @item
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6755 The support for C++ templates (in angle brackets) is not yet complete.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6756 When a non-nested template is used in a declaration, @ccmode{} indents
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6757 it and font-locks it OK. Templates used in expressions, and nested
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6758 templates do not fare so well. Sometimes a workaround is to refontify
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6759 the expression after typing the closing @samp{>}.
75028
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6760
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6761 @item
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6762 On loading @ccmode{}, sometimes this error message appears:
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6763
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6764 @example
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6765 File mode specification error: (void-variable c-font-lock-keywords-3)
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6766 @end example
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6767
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6768 This is due to a bug in the function @code{eval-after-load} in some
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6769 versions of (X)Emacs. It can manifest itself when there is a symbolic
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6770 link in the path of the directory which contains (X)Emacs. As a
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6771 workaround, put the following into your @file{.emacs} file, fairly
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6772 early on:
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6773
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6774 @example
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6775 (defun my-load-cc-fonts ()
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6776 (require "cc-fonts"))
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6777 (add-hook 'c-initialization-hook 'my-load-cc-fonts)
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6778 @end example
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6779 @end itemize
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6780
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6781 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6782 @node FAQ, Updating CC Mode, Limitations and Known Bugs, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6783 @comment node-name, next, previous, up
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6784 @appendix Frequently Asked Questions
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6785 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
6786
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6787 @itemize @bullet
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6788 @item
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6789 @emph{How can I change the indent level from 4 spaces to 2 spaces?}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6790
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6791 Set the variable @code{c-basic-offset}. @xref{Getting Started}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6792
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6793 @item
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6794 @kindex RET
Dave Love <fx@gnu.org>
parents:
diff changeset
6795 @kindex C-j
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6796 @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
6797
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6798 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
6799 @kbd{C-j} adds a newline and indents it. You can make @kbd{RET} do this
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6800 too by adding this to your @code{c-initialization-hook}:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6801
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6802 @example
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6803 (define-key c-mode-base-map "\C-m" 'c-context-line-break)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6804 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
6805
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6806 @xref{Getting Started}. This is a very common question. If you want
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6807 this to be the default behavior, don't lobby us, lobby RMS! @t{:-)}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6808
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6809 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6810 @emph{How do I stop my code jumping all over the place when I type?}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6811
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6812 Deactivate ``electric minor mode'' with @kbd{C-c C-l}. @xref{Getting
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6813 Started}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6814
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6815 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6816 @kindex C-x h
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6817 @kindex C-M-\
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6818 @emph{How do I reindent the whole file?}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6819
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6820 Visit the file and hit @kbd{C-x h} to mark the whole buffer. Then hit
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6821 @kbd{C-M-\}. @xref{Indentation Commands}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6822
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6823 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6824 @kindex C-M-q
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6825 @kindex C-M-u
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6826 @emph{How do I reindent the current block?}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6827
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6828 First move to the brace which opens the block with @kbd{C-M-u}, then
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6829 reindent that expression with @kbd{C-M-q}. @xref{Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6830 Commands}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6831
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6832 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6833 @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
6834 @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
6835 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
6836
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6837 This means that @ccmode{} hasn't yet been loaded into your Emacs
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6838 session by the time the @code{c-set-offset} call is reached, most
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6839 likely because @ccmode{} is being autoloaded. Instead of putting the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6840 @code{c-set-offset} line in your top-level @file{.emacs} file, put it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6841 in your @code{c-initialization-hook} (@pxref{CC Hooks}), or simply
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6842 modify @code{c-offsets-alist} directly:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6843
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6844 @example
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
6845 (setq c-offsets-alist '((substatement-open . 0)))
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6846 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6847
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6848 @item
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6849 @cindex open paren in column zero
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6850 @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
6851 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
6852 indentation to go haywire. What gives?}
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6853
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6854 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
6855 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
6856 other top-level block constructs in the @ccmode{} languages).
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6857 @ifset XEMACS
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6858 @xref{Defuns,,, xemacs, XEmacs User's Manual}, for details.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6859 @end ifset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6860 @ifclear XEMACS
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6861 @xref{Left Margin Paren,,, emacs, GNU Emacs Manual}, for details
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6862 (@xref{Defuns,,, emacs, GNU Emacs Manual}, in the Emacs 20 manual).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6863 @end ifclear
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6864
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6865 This heuristic is built into the core syntax analysis routines in
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6866 (X)Emacs, so it's not really a @ccmode{} issue. However, in Emacs
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6867 21.1 it became possible to turn it off@footnote{Using the variable
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6868 @code{open-paren-in-column-0-is-defun-start}.} and @ccmode{} does so
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6869 there since it's got its own system to keep track of blocks.
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6870
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6871 @end itemize
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6872
Dave Love <fx@gnu.org>
parents:
diff changeset
6873
Dave Love <fx@gnu.org>
parents:
diff changeset
6874 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6875 @node Updating CC Mode, Mailing Lists and Bug Reports, FAQ, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6876 @comment node-name, next, previous, up
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6877 @appendix Getting the Latest CC Mode Release
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6878 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
6879
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6880 @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
6881 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
6882
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6883 @cindex web site
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6884 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
6885 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
6886 @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
6887 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
6888
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6889 @quotation
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6890 @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
6891 @end quotation
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6892
Dave Love <fx@gnu.org>
parents:
diff changeset
6893
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6894 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6895 @node Mailing Lists and Bug Reports, Command and Function Index, Updating CC Mode, Top
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6896 @comment node-name, next, previous, up
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6897 @appendix Mailing Lists and Submitting Bug Reports
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6898 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6899
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6900 @kindex C-c C-b
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6901 @findex c-submit-bug-report
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6902 @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
6903 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
6904 @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
6905 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
6906 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
6907 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
6908 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
6909 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
6910 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
6911
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6912 Please try to produce the problem in an Emacs instance without any
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6913 customizations loaded (i.e. start it with the @samp{-q -no-site-file}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6914 arguments). If it works correctly there, the problem might be caused
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6915 by faulty customizations in either your own or your site
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6916 configuration. In that case, we'd appreciate if you isolate the Emacs
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6917 Lisp code that triggers the bug and include it in your report.
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6918
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6919 @cindex bug report mailing list
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6920 Bug reports should be sent to @email{bug-cc-mode@@gnu.org}. You can
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6921 also send other questions and suggestions (kudos? @t{;-)} to that
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6922 address. It's a mailing list which you can join or browse an archive
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6923 of; see the web site at @uref{http://cc-mode.sourceforge.net/} for
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6924 further details.
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6925
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6926 @cindex announcement mailing list
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6927 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
6928 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
6929 @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
6930 to subscribe from the web site too. Announcements will also be posted
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6931 to the Usenet newsgroups @code{gnu.emacs.sources}, @code{comp.emacs},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6932 @code{comp.emacs.xemacs}, @code{comp.lang.c}, @code{comp.lang.c++},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6933 @code{comp.lang.objective-c}, @code{comp.lang.java.softwaretools},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6934 @code{comp.lang.idl}, and @code{comp.lang.awk}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6935 @c There is no newsgroup for Pike. :-(
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6936
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6937 @c Removed the tentative node "Mode Initialization" from here, 2005/8/27.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6938 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6939 @node Command and Function Index, Variable Index, Mailing Lists and Bug Reports, Top
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6940 @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
6941 @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
6942 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6943
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6944 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
6945 @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
6946 @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
6947 @iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6948 @sp 2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6949 @end iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6950 @printindex fn
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6951
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6952
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6953 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6954 @node Variable Index, Concept and Key Index, Command and Function Index, Top
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6955 @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
6956 @unnumbered Variable Index
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6957 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6958
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6959 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
6960 @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
6961 @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
6962 @iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6963 @sp 2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6964 @end iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6965 @printindex vr
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6966
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6967
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6968 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6969 @node Concept and Key Index, , Variable Index, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6970 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6971 @unnumbered Concept and Key Index
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6972 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6973
Dave Love <fx@gnu.org>
parents:
diff changeset
6974 @printindex cp
Dave Love <fx@gnu.org>
parents:
diff changeset
6975
Dave Love <fx@gnu.org>
parents:
diff changeset
6976
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6977 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6978 @comment Epilogue.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6979 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6980
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6981 @iftex
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6982 @page
Dave Love <fx@gnu.org>
parents:
diff changeset
6983 @summarycontents
Dave Love <fx@gnu.org>
parents:
diff changeset
6984 @contents
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6985 @end iftex
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6986
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6987 @bye
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
6988
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
6989 @ignore
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
6990 arch-tag: c4cab162-5e57-4366-bdce-4a9db2fc97f0
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
6991 @end ignore