annotate man/cc-mode.texi @ 76023:70e00d4c1216

(list-buffers-noselect): Use explicit unicode code rather than the corresponding unicode char, to make the code more readable.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Mon, 19 Feb 2007 15:46:25 +0000
parents 3d45362f1d38
children b57f15fb2d75 b8d9a391daf3 95d0cdf160ea
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
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1883 hardware.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1884 @c ACM, 2005/8/28: There should be a page in the (X)Emacs manual
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1885 @c describing these support modes. There wasn't in the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1886 @c fourteenth edition of the Emacs manual (released with Emacs 21.3).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1887 @c There might be one in the Emacs CVS for 22.1.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1888 @end enumerate
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1889
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1890 @cindex user defined types
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1891 @cindex types, user defined
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1892
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1893 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
1894 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
1895
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1896 @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
1897 @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
1898 @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
1899 @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
1900 @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
1901 @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
1902 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
1903 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
1904 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
1905 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
1906 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
1907 single identifier.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1908
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1909 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
1910 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
1911 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
1912 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
1913 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
1914
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1915 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
1916 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
1917 recognize types.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1918 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1919
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1920
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1921 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1922 @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
1923 @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
1924 @section Faces
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1925 @cindex faces
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1926 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1927
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1928 @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
1929 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
1930 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
1931 @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
1932 @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
1933
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1934 @itemize @bullet
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-comment-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1937 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
1938
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1939 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1940 @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
1941 @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
1942 @vindex font-lock-comment-face
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1943 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
1944 get @code{font-lock-doc-face} (Emacs) or
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1945 @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
1946 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
1947
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1948 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1949 @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
1950 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
1951 @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
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-keyword-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1955 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
1956
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1957 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1958 @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
1959 @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
1960 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
1961 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
1962
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1963 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1964 @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
1965 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
1966 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
1967 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
1968
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1969 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1970 @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
1971 @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
1972 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
1973 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
1974 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
1975 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
1976 them somewhere.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1977
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1978 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1979 @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
1980 @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
1981 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
1982
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1983 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1984 @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
1985 @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
1986 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
1987 @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
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 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
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 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
1995 labels.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1996
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1997 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1998 @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
1999 @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
2000 @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
2001 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
2002 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
2003 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
2004
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2005 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2006 @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
2007 @vindex c-invalid-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2008 @vindex invalid-face (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2009 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
2010 @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
2011 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
2012 @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
2013 default.
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 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
2016 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
2017 @end itemize
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2018
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2019
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2020 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2021 @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
2022 @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
2023 @section Documentation Comments
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2024 @cindex documentation comments
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2025 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2026
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2027 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
2028 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
2029 @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
2030 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
2031
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2032 @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
2033 @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
2034 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
2035 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
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 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
2038 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
2039 conflict).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2040
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2041 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
2042 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
2043 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
2044 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
2045 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
2046
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2047 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
2048 @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
2049
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2050 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
2051 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
2052 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
2053 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
2054 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
2055 reinitialize.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2056
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2057 @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
2058 @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
2059 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
2060 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
2061 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
2062 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
2063 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2064
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2065 @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
2066 styles:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2067
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2068 @table @code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2069 @item javadoc
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2070 @cindex Javadoc markup
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2071 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
2072
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2073 @item autodoc
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2074 @cindex Pike autodoc markup
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2075 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
2076
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2077 @item gtkdoc
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2078 @cindex GtkDoc markup
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2079 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
2080 @end table
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 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
2083 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
2084 Bug Reports}).
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2085
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2086 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
2087 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
2088 @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
2089 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
2090 @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
2091 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
2092 @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
2093
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2094 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
2095 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
2096
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2097
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 @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
2100 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2101 @section AWK Mode Font Locking
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2102 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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 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
2105 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
2106 Lisp Reference Manual}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2107
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2108 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
2109 AWK mode:
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2110
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2111 @table @asis
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2112 @item @code{font-lock-variable-name-face}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2113 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
2114 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
2115 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
2116 @code{"/dev/stderr"}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2117
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2118 @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
2119 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
2120 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
2121 standard functions (such as @code{match}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2122
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2123 @item @code{font-lock-string-face}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2124 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
2125 (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
2126 regular expressions (delimited by @samp{/}).
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 @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
2129 This face highlights the following syntactically invalid AWK
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2130 constructs:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2131
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2132 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2133 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2134 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
2135 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
2136 @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
2137 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
2138 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
2139
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2140 AWK mode fontifies unterminated strings/regular expressions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2141 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
2142 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
2143 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
2144
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2145 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2146 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
2147 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
2148 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
2149 spuriously highlight a valid concatenation expression where an
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2150 identifier precedes a parenthesised expression. Unfortunately.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2151
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2152 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2153 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
2154 escaped newline. The @samp{\} is highlighted.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2155 @end itemize
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2156 @end table
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2157
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2158
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2159 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2160 @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
2161 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2162 @chapter Configuration Basics
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2163 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2164
71224
b7261e09f8e4 * cc-mode.texi (Getting Started, Indentation Commands, Config Basics)
Romain Francoise <romain@orebokech.com>
parents: 69681
diff changeset
2165 @cindex Emacs Initialization File
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2166 @cindex Configuration
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2167 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
2168 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
2169 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
2170 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
2171 @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
2172 other file. @xref{Init File,,,@emacsman{}, @emacsmantitle{}}. For
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2173 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
2174 throughout the rest of the manual.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2175
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2176 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
2177 @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
2178 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
2179 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
2180 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
2181 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
2182
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2183 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
2184 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
2185 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
2186 method, ``Top-level commands or the customization interface''.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2187
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2188 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
2189 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
2190 @itemize @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2191 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2192 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2193 @item Style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2194 @itemx Top-level command or ``customization interface''
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2195 @itemx Hook
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2196 @itemx File Style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2197 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2198 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2199
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2200 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
2201 settings:
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2202
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2203 @table @asis
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2204 @item Top-level commands or the ``customization interface''
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2205 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
2206 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
2207 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
2208 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
2209 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
2210 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
2211 (@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
2212 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
2213
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2214 @example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2215 (setq c-basic-offset 4)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2216 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2217
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2218 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
2219 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
2220 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
2221 @xref{Easy Customization,,,@emacsman{}, @emacsmantitle{}}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2222 @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
2223 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
2224 @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
2225 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
2226 the customizations.
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 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
2229 configuration settings into the special style @code{user}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2230 @xref{Built-in Styles}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2231
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2232 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
2233 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
2234 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
2235 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
2236 more sophisticated facilities, hooks and styles.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2237
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2238 @item Hooks
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2239 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
2240 Emacs to execute later in specific circumstances.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2241 @xref{Hooks,,,@lispref{}, @lispreftitle{}}. @ccmode{} supplies a main
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2242 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
2243 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
2244 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
2245 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
2246 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
2247 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
2248 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
2249
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2250 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2251 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2252 (defun my-c-mode-hook ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2253 (setq c-basic-offset 3))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2254 (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
2255
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2256 (defun my-java-mode-hook ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2257 (setq c-basic-offset 6))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2258 (add-hook 'java-mode-hook 'my-java-mode-hook)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2259 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2260 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2261
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2262 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
2263
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2264 @item Styles
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2265 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
2266 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
2267 @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
2268 @ccmode{} is delivered with several existing styles. Additionally,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2269 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
2270 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
2271 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
2272 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
2273
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2274 @example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2275 (setq c-default-style '((java-mode . "java")
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2276 (awk-mode . "awk")
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2277 (other . "free-group-style")))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2278 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2279
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2280 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
2281 to create them.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2282
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2283 @item File Styles
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2284 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
2285 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
2286 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
2287 end of the source file. @xref{File Styles}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2288
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2289 @item Hooks with Styles
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2290 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
2291 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
2292 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
2293 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
2294 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
2295
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2296 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2297 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2298 (defun my-c-mode-hook ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2299 (c-set-style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2300 (if (and (buffer-file-name)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2301 (string-match "/usr/src/linux" (buffer-file-name)))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2302 "linux"
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2303 "free-group-style")))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2304 (add-hook 'c-mode-hook 'my-c-mode-hook)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2305 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2306 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2307
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2308 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
2309 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
2310 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
2311 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
2312 @file{.emacs}:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2313
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2314 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2315 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2316 (defun my-turn-on-auto-newline ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2317 (c-toggle-auto-newline 1))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2318 (add-hook 'c-mode-common-hook 'my-turn-on-auto-newline)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2319 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2320 @end example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2321 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2322
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2323 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2324 * CC Hooks::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2325 * Style Variables::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2326 * Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2327 @end menu
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2328
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2329 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2330 @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
2331 @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
2332 @section Hooks
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2333 @cindex mode hooks
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2334 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2335 @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
2336 @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
2337 @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
2338 @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
2339 @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
2340 @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
2341 @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
2342
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2343 @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
2344 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
2345 @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
2346 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
2347 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
2348 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
2349 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
2350 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
2351 @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
2352 standard Emacs conventions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2353
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2354 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
2355 currently active style (@pxref{Styles}). Then it calls
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2356 @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
2357 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
2358 those set by @code{c-default-style}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2359
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2360 @defvar c-initialization-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2361 @vindex initialization-hook (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2362 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
2363 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
2364 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
2365 @end defvar
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2366
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2367 @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
2368 @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
2369 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
2370 language specific hook.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2371 @end defvar
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2372
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2373 @defvar c-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2374 @defvarx c++-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2375 @defvarx objc-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2376 @defvarx java-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2377 @defvarx idl-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2378 @defvarx pike-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2379 @defvarx awk-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2380 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
2381 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
2382 @end defvar
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2383
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2384 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
2385 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
2386 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
2387 overwritten when @ccmode{} gets loaded.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2388
Dave Love <fx@gnu.org>
parents:
diff changeset
2389 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
2390 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
2391 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
2392 @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
2393 file.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2394
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2395 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2396 (defun my-c-mode-common-hook ()
Dave Love <fx@gnu.org>
parents:
diff changeset
2397 ;; 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
2398 (no-case-fold-search)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2399 )
Dave Love <fx@gnu.org>
parents:
diff changeset
2400 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
Dave Love <fx@gnu.org>
parents:
diff changeset
2401 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2402
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2403 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2404 @node Style Variables, Styles, CC Hooks, Config Basics
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2405 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2406 @section Style Variables
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2407 @cindex styles
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2408 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2409
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2410 @cindex style variables
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2411 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
2412 @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
2413 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
2414 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
2415 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
2416
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2417 @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
2418
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2419 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2420 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2421 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
2422 can instead be made global by setting
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2423 @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
2424 initialized.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2425
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2426 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2427 @vindex c-old-style-variable-behavior
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2428 @vindex old-style-variable-behavior (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2429 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
2430 - 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
2431 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
2432 @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
2433 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
2434 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
2435 @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
2436 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
2437 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
2438 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
2439 behavior, you can set the variable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2440 @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
2441 ``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
2442 @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
2443 Basics}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2444
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2445 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2446 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
2447 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
2448 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
2449 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
2450 @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
2451 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
2452 @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
2453 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
2454 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
2455 @code{c-offsets-alist}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2456
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2457 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2458 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
2459 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
2460 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
2461 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
2462 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
2463 or a list of functions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2464
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2465 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2466 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
2467 @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
2468 @xref{Built-in Styles}, for details.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2469 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2470
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2471 The style variables are:@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2472 @code{c-indent-comment-alist},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2473 @code{c-indent-comments-syntactically-p} (@pxref{Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2474 Commands});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2475 @code{c-doc-comment-style} (@pxref{Doc Comments});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2476 @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
2477 (@pxref{Custom Filling and Breaking});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2478 @code{c-hanging-braces-alist} (@pxref{Hanging Braces});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2479 @code{c-hanging-colons-alist} (@pxref{Hanging Colons});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2480 @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
2481 Commas});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2482 @code{c-cleanup-list} (@pxref{Clean-ups});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2483 @code{c-basic-offset} (@pxref{Customizing Indentation});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2484 @code{c-offsets-alist} (@pxref{c-offsets-alist});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2485 @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
2486 @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
2487 (@pxref{Other Indentation});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2488 @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
2489 (@pxref{Custom Macros}).
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2490
Dave Love <fx@gnu.org>
parents:
diff changeset
2491 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2492 @node Styles, , Style Variables, Config Basics
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2493 @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
2494 @section Styles
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2495 @cindex styles
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2496 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2497
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
2498 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
2499 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
2500 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
2501 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
2502
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2503 Most people only need to edit code formatted in just a few well-defined
Dave Love <fx@gnu.org>
parents:
diff changeset
2504 and consistent styles. For example, their organization might impose a
Dave Love <fx@gnu.org>
parents:
diff changeset
2505 ``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
2506 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
2507 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
2508 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
2509 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
2510 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
2511 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
2512 existing code using these styles.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2513
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2514 @menu
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2515 * Built-in Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2516 * Choosing a Style::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2517 * Adding Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2518 * File Styles::
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2519 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
2520
Dave Love <fx@gnu.org>
parents:
diff changeset
2521
Dave Love <fx@gnu.org>
parents:
diff changeset
2522 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2523 @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
2524 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2525 @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
2526 @cindex styles, built-in
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2527 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2528
Dave Love <fx@gnu.org>
parents:
diff changeset
2529 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
2530 what you're looking for. These are:
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2531
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2532 @table @code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2533 @item gnu
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2534 @cindex GNU style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2535 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
2536 for C code in GNU programs.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2537
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2538 @item k&r
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2539 @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
2540 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
2541
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2542 @item bsd
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2543 @cindex BSD style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2544 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
2545
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2546 @item whitesmith
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2547 @cindex Whitesmith style
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2548 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
2549 commercial C compiler.
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 stroustrup
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2552 @cindex Stroustrup style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2553 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
2554
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2555 @item ellemtel
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2556 @cindex Ellemtel style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2557 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
2558 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
2559 Ellemtel@footnote{This document is available at
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2560 @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
2561 places.}.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2562 @c N.B. This URL was still valid at 2005/8/28 (ACM).
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2563
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2564 @item linux
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2565 @cindex Linux 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 Linux (the kernel).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2567
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2568 @item python
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2569 @cindex Python style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2570 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
2571 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
2572 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
2573
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2574 @item java
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2575 @cindex Java style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2576 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
2577 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
2578 @code{java-mode}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2579
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2580 @item awk
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2581 @cindex AWK style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2582 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
2583 @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
2584 @code{awk-mode}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2585
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2586 @item user
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2587 @cindex User style
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2588 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
2589 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
2590 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
2591 @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
2592 @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
2593 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
2594 afterwards.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2595 @end table
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2596
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2597
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 @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
2600 @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
2601 @subsection Choosing a Style
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2602 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2603
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
2604 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
2605 @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
2606 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
2607
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2608 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
2609 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
2610 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
2611 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
2612
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
2613 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
2614 (@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
2615 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
2616
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2617 @defopt c-default-style
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2618 @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
2619 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
2620 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
2621 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
2622
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2623 @enumerate
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2624 @item
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2625 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
2626 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
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 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
2630 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
2631
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2632 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2633 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
2634 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
2635 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
2636
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2637 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2638 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
2639 @end enumerate
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2640
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
2641 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
2642 @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
2643 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
2644 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
2645
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2646 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
2647 . "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
2648 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2649
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2650 @defvar c-indentation-style
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2651 @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
2652 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
2653 string.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2654 @end defvar
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2655
Dave Love <fx@gnu.org>
parents:
diff changeset
2656
Dave Love <fx@gnu.org>
parents:
diff changeset
2657 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2658 @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
2659 @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
2660 @subsection Adding and Amending Styles
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2661 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2662
Dave Love <fx@gnu.org>
parents:
diff changeset
2663 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
2664 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
2665 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
2666 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
2667 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
2668 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
2669
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2670 @cindex style definition
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2671 @c @defvr {List} style definition
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2672 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2673 @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
2674 ([@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
2675
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2676 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
2677 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
2678 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
2679 @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
2680 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
2681 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
2682 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
2683 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
2684
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2685 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
2686 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
2687 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
2688 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
2689 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
2690 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
2691 @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
2692 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
2693 system.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2694 @c @end defvr
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2695
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2696 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
2697
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2698 @table @code
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2699 @item c-offsets-alist
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2700 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
2701
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2702 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2703 (@r{@var{syntactic-symbol}} . @r{@var{offset}})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2704 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2705
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2706 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
2707 @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
2708 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
2709
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2710 @item c-special-indent-hook
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2711 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
2712 @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
2713 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
2714 @end table
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2715 @end table
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2716
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2717 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
2718 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
2719 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
2720
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2721 @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
2722 @findex add-style (c-)
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2723 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
2724 @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
2725 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
2726 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
2727 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
2728 Otherwise, a new style is added.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2729
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2730 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
2731 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
2732 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
2733 You should use @code{c-set-style} instead.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2734
Dave Love <fx@gnu.org>
parents:
diff changeset
2735 The sample @file{.emacs} file provides a concrete example of how a new
Dave Love <fx@gnu.org>
parents:
diff changeset
2736 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
2737 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2738
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2739 @defvar c-style-alist
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2740 @vindex style-alist (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2741 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
2742 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
2743 @end defvar
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2744
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2745
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2746 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2747 @node File Styles, , Adding Styles, Styles
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2748 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2749 @subsection File Styles
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2750 @cindex styles, file local
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2751 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2752
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2753 @cindex file local variables
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2754
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2755 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
2756 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
2757 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
2758 @emacsmantitle{}}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2759
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2760 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
2761 @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
2762 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
2763 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
2764 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
2765
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2766 @defvar c-file-style
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2767 @vindex file-style (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2768 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
2769 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
2770 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
2771 @end defvar
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2772
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2773 @defvar c-file-offsets
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2774 @vindex file-offsets (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2775 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
2776 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
2777 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
2778 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
2779 @end defvar
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2780
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2781 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
2782 before file offset settings
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2783 (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
2784 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
2785 made local to that buffer, even if
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2786 @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
2787 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
2788 notice this effect.}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2789
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2790 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
2791 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
2792 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
2793 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
2794 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
2795 will take priority.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2796
Dave Love <fx@gnu.org>
parents:
diff changeset
2797 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2798 @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
2799 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2800 @chapter Customizing Filling and Line Breaking
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2801 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2802
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2803 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
2804 @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
2805 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
2806 relevant variables as necessary.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2807
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2808 @vindex c-comment-prefix-regexp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2809 @vindex comment-prefix-regexp (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2810 @cindex comment line prefix
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2811 @vindex comment-start
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2812 @vindex comment-end
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2813 @vindex comment-start-skip
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2814 @vindex paragraph-start
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2815 @vindex paragraph-separate
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2816 @vindex paragraph-ignore-fill-prefix
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2817 @vindex adaptive-fill-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2818 @vindex adaptive-fill-regexp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2819 @vindex adaptive-fill-first-line-regexp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2820 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
2821 paragraphs, @ccmode{} makes several standard
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2822 variables@footnote{@code{comment-start}, @code{comment-end},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2823 @code{comment-start-skip}, @code{paragraph-start},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2824 @code{paragraph-separate}, @code{paragraph-ignore-fill-prefix},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2825 @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
2826 @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
2827 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
2828
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2829 @defopt c-comment-prefix-regexp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2830 @vindex comment-prefix-regexp (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2831 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
2832 @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
2833 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
2834 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
2835 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
2836 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
2837 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
2838
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2839 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
2840 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
2841 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
2842 @samp{//+\\|\\**}, which matches C++ style line comments like
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2845 // blah blah
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2846 @end example
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 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2849 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
2850 subsequent lines of C style block comments like
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2851
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2852 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2853 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2854 /*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2855 * blah blah
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2856 */
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2857 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2858 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2859
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2860 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2861 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
2862 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
2863 (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
2864 block comments.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2865
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2866 @findex c-setup-paragraph-variables
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2867 @findex setup-paragraph-variables (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2868 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
2869 @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
2870 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
2871 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
2872 @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
2873 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
2874 @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
2875 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
2876 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2877
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2878 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
2879 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
2880
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2881 @vindex adaptive-fill-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2882 @cindex Adaptive Fill mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2883 @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
2884 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
2885 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
2886 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
2887 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
2888 margins of the texts kept intact:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2889
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2890 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2891 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2892 /* 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
2893 * 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
2894 * Knuth,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2895 *
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2896 * 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
2897 * proved it correct, not tried it.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2898 */
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2899 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2900 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2901
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2902 @findex c-setup-filladapt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2903 @findex setup-filladapt (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2904 @findex filladapt-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2905 @vindex filladapt-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2906 @cindex Filladapt mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2907 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
2908 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
2909 @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
2910 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
2911 @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
2912 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
2913 @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
2914 @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
2915 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
2916 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
2917 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
2918 something like this in your @file{.emacs}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2919
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2920 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2921 (defun my-c-mode-common-hook ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2922 (c-setup-filladapt)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2923 (filladapt-mode 1))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2924 (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
2925 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2926
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2927 @defopt c-block-comment-prefix
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2928 @vindex block-comment-prefix (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2929 @vindex c-comment-continuation-stars
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2930 @vindex comment-continuation-stars (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2931 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
2932 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
2933 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
2934 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
2935 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
2936 @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
2937 @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
2938 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
2939 }@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
2940 @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
2941 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
2942 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
2943 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
2944
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2945 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2946 /* 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
2947 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2948
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2949 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2950 break into
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2951
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2952 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2953 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2954 /* Got O(n^2) here, which
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2955 * is a Bad Thing. */
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2956 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2957 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2958
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2959 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
2960 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
2961 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
2962 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
2963 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
2964 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
2965 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2966
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2967 @defopt c-ignore-auto-fill
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2968 @vindex ignore-auto-fill (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2969 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
2970 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
2971 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
2972 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
2973 never should occur:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2974
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2975 @table @code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2976 @item string
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2977 Inside a string or character literal.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2978 @item c
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2979 Inside a C style block comment.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2980 @item c++
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2981 Inside a C++ style line comment.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2982 @item cpp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2983 Inside a preprocessor directive.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2984 @item code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2985 Anywhere else, i.e. in normal code.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2986 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2987
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2988 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
2989 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
2990 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
2991 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
2992 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
2993 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
2994 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
2995 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
2996 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
2997 results in the current implementation.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2998 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2999
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3000 @vindex comment-multi-line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3001 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
3002 @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
3003 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
3004 @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
3005 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
3006 comments.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3007
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3008 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
3009 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
3010 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
3011 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
3012 (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
3013 inconsistent behavior.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3014
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 @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
3017 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3018 @chapter Customizing Auto-newlines
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3019 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3020
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3021 @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
3022 different ways, depending on the character just typed:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3023
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3024 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3025 @item Braces and Colons
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3026 @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
3027 (@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
3028 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
3029 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
3030 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
3031 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
3032 @ref{Hanging Colons}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3033
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3034 @item Semicolons and Commas
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3035 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
3036 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
3037 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
3038 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3039
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3040 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
3041 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
3042 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
3043 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
3044 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
3045
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3046 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3047 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3048 while (i < MAX) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3049 total += entry[i];
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3050 entry [i++] = 0;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3051 @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3052 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
3053 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3054
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3055 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3056 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
3057 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
3058 brace.
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 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
3061 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
3062 circumstances. @xref{Clean-ups}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3063
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3064 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3065 * Hanging Braces::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3066 * Hanging Colons::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3067 * Hanging Semicolons and Commas::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3068 @end menu
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3069
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3070
Dave Love <fx@gnu.org>
parents:
diff changeset
3071 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3072 @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
3073 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3074 @section Hanging Braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3075 @cindex hanging braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3076 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3077
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3078 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
3079 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
3080 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
3081 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
3082 in @ref{Style Variables}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3083
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3084 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
3085 @samp{@{}:
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3088 if (foo < 17) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3089 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3090
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3091 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3092 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
3093 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
3094 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
3095 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
3096 something like:
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3099 ((substatement-open 1061))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3100 @end example
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 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3103 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
3104 into @code{c-hanging-braces-alist}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3105
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3106 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
3107 put this into @code{c-hanging-braces-alist}:
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3110 (brace-entry-open)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3111 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3112
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3113 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
3114 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
3115 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
3116 ``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
3117 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
3118
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3119 @defopt c-hanging-braces-alist
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3120 @vindex hanging-braces-alist (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3121
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3122 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
3123 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
3124 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
3125 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
3126 or a function.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3127
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3128 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3129 @item The Key - the syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3130 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
3131 @code{brace-list-intro}, @code{statement-cont},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3132 @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
3133 @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
3134 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
3135 @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
3136 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
3137 ignored.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3138
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3139 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
3140 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
3141 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
3142 braces of anonymous classes produce a combination of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3143 @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
3144 normal indentation analysis.}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3145
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3146 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
3147 @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
3148 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
3149 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
3150 these constructs.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3151
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3152 @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
3153 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
3154 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
3155 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
3156 a function as a brace hanging @var{action}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3157
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3158 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
3159 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
3160 @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
3161 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
3162 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
3163 of the line, as in:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3164
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3165 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3166 // here, open braces always `hang'
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3167 void spam( int i ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3168 if( i == 7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3169 dosomething(i);
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3170 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3171 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3172 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3173
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3174 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
3175 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
3176 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
3177 are added neither before nor after the brace.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3178 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3179
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3180 If a syntactic symbol is missing entirely from
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3181 @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
3182 @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
3183 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
3184
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3185 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
3186
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3187 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3188 ((brace-list-open)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3189 (brace-entry-open)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3190 (statement-cont)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3191 (substatement-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3192 (block-close . c-snug-do-while)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3193 (extern-lang-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3194 (namespace-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3195 (module-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3196 (composition-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3197 (inexpr-class-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3198 (inexpr-class-close before))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3199 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3200
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3201 @noindent which says that @code{brace-list-open},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3202 @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
3203 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
3204 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
3205 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
3206 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
3207 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
3208 @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
3209 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
3210 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
3211 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
3212 @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
3213 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
3214 themselves.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3215 @end defopt
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 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3218 * Custom Braces::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3219 @end menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3220
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3221 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3222 @node Custom Braces, , Hanging Braces, Hanging Braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3223 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3224 @subsection Custom Brace Hanging
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3225 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3226
Dave Love <fx@gnu.org>
parents:
diff changeset
3227 @vindex c-hanging-braces-alist
Dave Love <fx@gnu.org>
parents:
diff changeset
3228 @vindex hanging-braces-alist (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3229 @cindex action functions
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3230 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
3231 @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
3232 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
3233 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
3234 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
3235 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
3236 @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
3237 ``hanginess'' of a brace, usually by looking at the code near it.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3238
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3239 @cindex customization, brace hanging
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3240 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
3241 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
3242 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
3243 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
3244 @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
3245 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
3246 of them (i.e. @code{nil}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3247
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3248 @defvar c-syntactic-context
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3249 @vindex syntactic-context (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3250 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
3251 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
3252 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
3253 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
3254 the proper functioning of @ccmode{}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3255
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3256 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
3257 (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
3258 (@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
3259 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
3260 c-special-indent-hook function (@pxref{Other Indentation}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3261 @end defvar
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3262
Dave Love <fx@gnu.org>
parents:
diff changeset
3263 As an example, @ccmode{} itself uses this feature to dynamically
Dave Love <fx@gnu.org>
parents:
diff changeset
3264 determine the hanginess of braces which close ``do-while''
Dave Love <fx@gnu.org>
parents:
diff changeset
3265 constructs:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3266
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3267 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3268 void do_list( int count, char** atleast_one_string )
Dave Love <fx@gnu.org>
parents:
diff changeset
3269 @{
Dave Love <fx@gnu.org>
parents:
diff changeset
3270 int i=0;
Dave Love <fx@gnu.org>
parents:
diff changeset
3271 do @{
Dave Love <fx@gnu.org>
parents:
diff changeset
3272 handle_string( atleast_one_string[i] );
Dave Love <fx@gnu.org>
parents:
diff changeset
3273 i++;
Dave Love <fx@gnu.org>
parents:
diff changeset
3274 @} while( i < count );
Dave Love <fx@gnu.org>
parents:
diff changeset
3275 @}
Dave Love <fx@gnu.org>
parents:
diff changeset
3276 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3277
Dave Love <fx@gnu.org>
parents:
diff changeset
3278 @ccmode{} assigns the @code{block-close} syntactic symbol to the
Dave Love <fx@gnu.org>
parents:
diff changeset
3279 brace that closes the @code{do} construct, and normally we'd like the
Dave Love <fx@gnu.org>
parents:
diff changeset
3280 line that follows a @code{block-close} brace to begin on a separate
Dave Love <fx@gnu.org>
parents:
diff changeset
3281 line. However, with ``do-while'' constructs, we want the
Dave Love <fx@gnu.org>
parents:
diff changeset
3282 @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
3283 associate the @code{block-close} symbol with the @var{action} function
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3284 @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
3285
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3286 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3287 (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
3288 "Dynamically calculate brace hanginess for do-while statements."
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3289 (save-excursion
Dave Love <fx@gnu.org>
parents:
diff changeset
3290 (let (langelem)
Dave Love <fx@gnu.org>
parents:
diff changeset
3291 (if (and (eq syntax 'block-close)
Dave Love <fx@gnu.org>
parents:
diff changeset
3292 (setq langelem (assq 'block-close c-syntactic-context))
Dave Love <fx@gnu.org>
parents:
diff changeset
3293 (progn (goto-char (cdr langelem))
Dave Love <fx@gnu.org>
parents:
diff changeset
3294 (if (= (following-char) ?@{)
Dave Love <fx@gnu.org>
parents:
diff changeset
3295 (forward-sexp -1))
Dave Love <fx@gnu.org>
parents:
diff changeset
3296 (looking-at "\\<do\\>[^_]")))
Dave Love <fx@gnu.org>
parents:
diff changeset
3297 '(before)
Dave Love <fx@gnu.org>
parents:
diff changeset
3298 '(before after)))))
Dave Love <fx@gnu.org>
parents:
diff changeset
3299 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3300
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3301 @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
3302 @findex snug-do-while (c-)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3303 This function simply looks to see if the brace closes a ``do-while''
Dave Love <fx@gnu.org>
parents:
diff changeset
3304 clause and if so, returns the list @samp{(before)} indicating
Dave Love <fx@gnu.org>
parents:
diff changeset
3305 that a newline should be inserted before the brace, but not after it.
Dave Love <fx@gnu.org>
parents:
diff changeset
3306 In all other cases, it returns the list @samp{(before after)} so
Dave Love <fx@gnu.org>
parents:
diff changeset
3307 that the brace appears on a line by itself.
Dave Love <fx@gnu.org>
parents:
diff changeset
3308
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3309 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3310 @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
3311 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3312 @section Hanging Colons
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3313 @cindex hanging colons
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3314 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3315
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3316 @cindex customization, colon hanging
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3317 @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
3318 @vindex hanging-colons-alist (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3319
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3320 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
3321 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
3322 @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
3323 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
3324 @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
3325 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
3326 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
3327 newly typed colon.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3328
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3329 @defopt c-hanging-colons-alist
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3330 @vindex hanging-colons-alist (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3331
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3332 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3333 @item The Key - the syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3334 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
3335 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
3336 @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
3337 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
3338
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3339 @item The associate value - the ``ACTION'' list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3340 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
3341 symbols @code{before} and @code{after}. Unlike in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3342 @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
3343 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
3344 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3345 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3346
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3347 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
3348 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
3349 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
3350 @ccmode{}. @xref{Clean-ups}, for details.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3351
Dave Love <fx@gnu.org>
parents:
diff changeset
3352 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3353 @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
3354 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3355 @section Hanging Semicolons and Commas
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3356 @cindex hanging semicolons
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3357 @cindex hanging commas
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3358 @cindex customization, semicolon newlines
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3359 @cindex customization, comma newlines
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3360 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3361
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3362 @defopt c-hanging-semi&comma-criteria
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3363 @vindex hanging-semi&comma-criteria (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3364 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
3365 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
3366 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
3367 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
3368 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
3369 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
3370 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
3371 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
3372 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
3373 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
3374
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3375 @table @code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3376 @item t
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3377 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
3378 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
3379 @item stop
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3380 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
3381 be inserted.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3382 @item nil
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3383 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
3384 to be called.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3385 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3386
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3387 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
3388 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
3389 determination being made, then no newline is added.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3390
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3391 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
3392 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
3393 @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
3394 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
3395 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3396
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3397 @defun c-semi&comma-no-newlines-before-nonblanks
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3398 @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
3399 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
3400 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
3401 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
3402 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
3403 @code{c-hanging-semi&comma-criteria} list.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3404
Dave Love <fx@gnu.org>
parents:
diff changeset
3405 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3406 (defun c-semi&comma-no-newlines-before-nonblanks ()
Dave Love <fx@gnu.org>
parents:
diff changeset
3407 (save-excursion
Dave Love <fx@gnu.org>
parents:
diff changeset
3408 (if (and (eq last-command-char ?\;)
Dave Love <fx@gnu.org>
parents:
diff changeset
3409 (zerop (forward-line 1))
Dave Love <fx@gnu.org>
parents:
diff changeset
3410 (not (looking-at "^[ \t]*$")))
Dave Love <fx@gnu.org>
parents:
diff changeset
3411 'stop
Dave Love <fx@gnu.org>
parents:
diff changeset
3412 nil)))
Dave Love <fx@gnu.org>
parents:
diff changeset
3413 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3414 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3415
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3416 @defun c-semi&comma-inside-parenlist
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3417 @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
3418 @defunx c-semi&comma-no-newlines-for-oneline-inliners
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3419 @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
3420 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
3421 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
3422 statements. In addition to
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3423 @code{c-semi&comma-no-newlines-before-nonblanks} described above,
Dave Love <fx@gnu.org>
parents:
diff changeset
3424 @ccmode{} also comes with the criteria function
Dave Love <fx@gnu.org>
parents:
diff changeset
3425 @code{c-semi&comma-no-newlines-for-oneline-inliners}, which suppresses
Dave Love <fx@gnu.org>
parents:
diff changeset
3426 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
3427 (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
3428 @end defun
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3429
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3430
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3431 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3432 @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
3433 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3434 @chapter Clean-ups
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3435 @cindex clean-ups
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3436 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3437
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3438 @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
3439 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
3440 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
3441 @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
3442
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
3443 @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
3444 (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
3445 @end example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3446
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3447 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
3448 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
3449 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
3450 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
3451
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3452 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
3453 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
3454 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
3455 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
3456 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
3457 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
3458
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3459 @defopt c-cleanup-list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3460 @vindex cleanup-list (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3461 @cindex literal
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3462
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3463 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
3464 @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
3465 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
3466 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
3467 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3468
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3469 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
3470 auto-newline minor modes are enabled:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3471
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3472 @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
3473 @c bit too much in dvi output.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3474 @table @code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3475 @item brace-else-brace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3476 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
3477 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
3478 @samp{else} is typed. So for example, this:
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3481 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3482 void spam(int i)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3483 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3484 if( i==7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3485 dosomething();
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3486 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3487 else
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3488 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3489 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3490 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3491
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3492 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3493 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
3494
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3495 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3496 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3497 void spam(int i)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3498 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3499 if( i==7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3500 dosomething();
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3501 @} else @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3502 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3503 @end 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 @item brace-elseif-brace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3506 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
3507 @samp{@} else if (...) @{} constructs. For example:
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3510 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3511 void spam(int i)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3512 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3513 if( i==7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3514 dosomething();
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3515 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3516 else if( i==3 )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3517 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3518 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3519 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3520
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3521 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3522 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
3523
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3524 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3525 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3526 void spam(int i)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3527 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3528 if( i==7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3529 dosomething();
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3530 @} else if(
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3531 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3532 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3533
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3534 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3535 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
3536
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3537 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3538 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3539 void spam(int i)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3540 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3541 if( i==7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3542 dosomething();
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3543 @} else if( i==3 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3544 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3545 @end example
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 brace-catch-brace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3548 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
3549 (...) @{} in C++ and Java mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3550
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3551 @item empty-defun-braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3552 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
3553 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
3554 Thus the following:
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3557 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3558 class Spam
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 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3561 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3562 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3563
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3564 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3565 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
3566
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3567 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3568 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3569 class Spam
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3570 @{@}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3571 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3572 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3573
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3574 @item defun-close-semi
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3575 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
3576 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
3577 semicolon is typed. So for example, the following:
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3580 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3581 class Spam
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3582 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3583 ...
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 ;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3586 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3587 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3588
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3589 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3590 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
3591
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3592 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3593 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3594 class Spam
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3595 @{
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 @};
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3598 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3599 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3600
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3601 @item list-close-comma
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3602 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
3603 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
3604 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
3605 @code{defun-close-semi}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3606
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3607 @item scope-operator
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3608 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
3609 across multiple lines@footnote{Certain C++ constructs introduce
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3610 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
3611 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
3612 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
3613 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
3614 @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
3615
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3616 @item one-liner-defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3617 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
3618 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
3619 the closing brace is typed. If the variable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3620 @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
3621 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
3622
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3623 For example, consider this AWK code:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3624
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3625 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3626 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3627 BEGIN @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3628 FS = "\t" # use <TAB> as a field separator
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3629 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3630 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3631 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3632
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3633 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3634 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
3635
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3636 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3637 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3638 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
3639 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3640 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3641
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3642 @defopt c-max-one-liner-length
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3643 @vindex max-one-liner-length (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3644 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
3645 @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
3646 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
3647 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
3648 applies.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3649 @end defopt
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3650 @end table
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 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
3653 @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
3654 Auto-newline minor mode are enabled:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3655
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3656 @table @code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3657 @item space-before-funcall
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3658 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
3659 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
3660 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
3661 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
3662 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
3663 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
3664 functions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3665
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3666 @item compact-empty-funcall
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3667 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
3668 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
3669 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
3670 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
3671 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
3672 (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
3673 closing parenthesis is typed.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3674
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3675 @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
3676 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
3677 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
3678 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
3679 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
3680 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
3681 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3682
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3683
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 @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
3686 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3687 @chapter Indentation Engine Basics
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3688 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3689
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3690 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
3691 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
3692 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
3693 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
3694
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3695 @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
3696 general mechanism for customizing indentation. When @ccmode{} indents
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3697 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
3698
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3699 @enumerate
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3700 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3701 @cindex syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3702 @cindex anchor position
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3703 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
3704 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
3705 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
3706 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
3707 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
3708 Analysis}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3709 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3710 @cindex offsets
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3711 @cindex indentation offset specifications
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3712 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
3713 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
3714 ``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
3715 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
3716 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
3717 described in @ref{c-offsets-alist}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3718 @end enumerate
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3719
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3720 In exceptional circumstances, the syntax directed indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3721 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
3722 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
3723 the variable interactively, @ref{Minor Modes}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3724
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3725 @defopt c-syntactic-indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3726 @vindex syntactic-indentation (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3727 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
3728 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
3729 @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
3730 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
3731 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
3732 (@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
3733 of the variables associated with indentation, not even
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3734 @code{c-special-indent-hook}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3735 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3736
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3737 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3738 * Syntactic Analysis::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3739 * Syntactic Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3740 * Indentation Calculation::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3741 @end menu
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3742
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3743
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3744 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3745 @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
3746 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3747 @section Syntactic Analysis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3748 @cindex syntactic analysis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3749 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3750
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3751 @cindex syntactic element
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3752 @cindex syntactic context
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3753 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
3754 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
3755 (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
3756 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
3757 @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
3758 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
3759 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
3760 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
3761 brief and typical 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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3764 ((defun-block-intro 1959))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3765 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3766
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3767 @cindex syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3768 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3769 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
3770 @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
3771 recognized, e.g. @code{statement}, @code{substatement},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3772 @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
3773 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
3774 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
3775 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
3776
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3777 @cindex anchor position
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3778 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
3779 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
3780 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
3781 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
3782 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
3783
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3784 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
3785 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
3786 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
3787
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3788 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3789 1: void swap( int& a, int& b )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3790 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3791 3: int tmp = a;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3792 4: a = b;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3793 5: b = tmp;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3794 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3795 @end example
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 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3798 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
3799 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
3800
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3801 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3802 @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
3803 @kindex C-c C-s
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3804 @findex c-show-syntactic-information
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3805 @findex show-syntactic-information (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3806 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
3807 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
3808 position(s).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3809 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3810
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3811 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
3812 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
3813 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
3814 line.}:
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3817 ((statement 35))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3818 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3819
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3820 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3821 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
3822 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
3823 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
3824 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
3825
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3826 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3827 ((defun-block-intro 29))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3828 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3829
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3830 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3831 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
3832 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
3833 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
3834
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3835 Here's another example:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3836
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3837 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3838 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
3839 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3840 3: if( doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3841 4: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3842 5: return( val + incr );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3843 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3844 7: return( val );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3845 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3846 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3847
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3848 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3849 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
3850
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3851 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3852 ((substatement-open 46))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3853 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3854
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3855 @cindex substatement
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3856 @cindex substatement block
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3857 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3858 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
3859 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
3860 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
3861 @code{do}, @code{switch}, etc. A @dfn{substatement
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3862 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
3863
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3864 @cindex comment-only line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3865 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
3866 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
3867 this is a @dfn{comment-only line}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3868
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3869 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3870 1: void draw_list( List<Drawables>& drawables )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3871 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3872 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
3873 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
3874 5: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3875 6: drawables[i].draw();
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3876 7: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3877 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3878 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3879
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3880 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3881 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
3882
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3883 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3884 ((comment-intro) (defun-block-intro 46))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3885 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3886
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3887 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3888 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
3889 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
3890 anchor position.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3891
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3892
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3893 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3894 @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
3895 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3896 @section Syntactic Symbols
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3897 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3898
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3899 @cindex syntactic symbols, brief list
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3900 @vindex c-offsets-alist
Dave Love <fx@gnu.org>
parents:
diff changeset
3901 @vindex offsets-alist (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3902 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
3903 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
3904 descriptions. The previous section (@pxref{Syntactic Analysis})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3905 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
3906 them.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3907
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3908 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
3909 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
3910 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
3911 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
3912 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
3913 line---this highlights the anchor position.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3914
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3915 @ssindex -open symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3916 @ssindex -close symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3917 @ssindex -block-intro symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3918 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
3919 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
3920 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
3921 @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
3922 construct will contain the suffix @code{-block-intro}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3923
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3924 @ssindex -intro symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3925 @ssindex -cont symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3926 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
3927 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
3928 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
3929 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
3930 respectively.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3931
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3932 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
3933 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
3934 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
3935
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3936 @table @code
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3937 @item string
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3938 Inside a multiline string. @ref{Literal Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3939 @item c
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3940 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
3941 @item defun-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3942 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
3943 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3944 @item defun-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3945 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
3946 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3947 @item defun-block-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3948 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
3949 @item class-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3950 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
3951 @item class-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3952 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
3953 @item inline-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3954 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
3955 @item inline-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3956 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
3957 @item func-decl-cont
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3958 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
3959 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
3960 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
3961 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
3962 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
3963 @c go somewhere better?}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3964 @item knr-argdecl-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3965 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
3966 @item knr-argdecl
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3967 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
3968 @item topmost-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3969 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
3970 @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
3971 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
3972 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
3973 @code{knr-argdecl}. @ref{Function Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3974 @item member-init-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3975 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
3976 @item member-init-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3977 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
3978 @item inher-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3979 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
3980 @item inher-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3981 Subsequent multiple inheritance lines. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3982 @item block-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3983 Statement block open brace. @ref{Literal Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3984 @item block-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3985 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
3986 @item brace-list-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3987 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
3988 @item brace-list-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3989 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
3990 @item brace-list-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3991 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
3992 @item brace-list-entry
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3993 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
3994 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3995 @item brace-entry-open
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3996 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
3997 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
3998 @item statement
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3999 A statement. @ref{Function Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4000 @item statement-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4001 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
4002 @item statement-block-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4003 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
4004 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4005 @item statement-case-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4006 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
4007 @item statement-case-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4008 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
4009 Statement Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4010 @item substatement
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4011 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
4012 @ref{Conditional Construct Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4013 @item substatement-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4014 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
4015 Symbols}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4016 @item substatement-label
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4017 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
4018 @ref{Conditional Construct Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4019 @item case-label
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4020 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
4021 @item access-label
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4022 C++ access control label. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4023 @item label
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4024 Any other label. @ref{Literal Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4025 @item do-while-closure
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4026 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
4027 @ref{Conditional Construct Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4028 @item else-clause
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4029 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
4030 @ref{Conditional Construct Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4031 @item catch-clause
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4032 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
4033 @code{try}-@code{catch} construct. @ref{Conditional Construct
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4034 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4035 @item comment-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4036 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
4037 @item arglist-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4038 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
4039 @item arglist-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4040 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
4041 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
4042 @item arglist-cont-nonempty
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4043 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
4044 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
4045 @item arglist-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4046 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
4047 @item stream-op
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4048 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
4049 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
4050 @item inclass
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4051 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
4052 @item cpp-macro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4053 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
4054 @item cpp-define-intro
71224
b7261e09f8e4 * cc-mode.texi (Getting Started, Indentation Commands, Config Basics)
Romain Francoise <romain@orebokech.com>
parents: 69681
diff changeset
4055 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
4056 @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
4057 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4058 @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
4059 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
4060 @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
4061 @ref{Multiline Macro Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4062 @item friend
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4063 A C++ friend declaration. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4064 @item objc-method-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4065 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
4066 Method Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4067 @item objc-method-args-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4068 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
4069 Method Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4070 @item objc-method-call-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4071 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
4072 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4073 @item extern-lang-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4074 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
4075 @{...@}}). @ref{External Scope Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4076 @item extern-lang-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4077 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
4078 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4079 @item inextern-lang
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4080 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
4081 @code{extern} blocks. @ref{External Scope Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4082 @item namespace-open
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4083 @itemx namespace-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4084 @itemx innamespace
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4085 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
4086 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
4087 @item module-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4088 @itemx module-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4089 @itemx inmodule
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4090 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
4091 @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
4092 @item composition-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4093 @itemx composition-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4094 @itemx incomposition
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4095 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
4096 @ref{External Scope Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4097 @item template-args-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4098 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
4099 @item inlambda
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4100 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
4101 (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
4102 Block Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4103 @item lambda-intro-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4104 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
4105 @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
4106 @ref{Statement Block Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4107 @item inexpr-statement
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4108 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
4109 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
4110 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
4111 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4112 @item inexpr-class
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4113 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
4114 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
4115 Java. @ref{Anonymous Class Symbol}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4116 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4117
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4118 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4119 * Function Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4120 * Class Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4121 * Conditional Construct Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4122 * Switch Statement Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4123 * Brace List Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4124 * External Scope Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4125 * Paren List Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4126 * Literal Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4127 * Multiline Macro Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4128 * Objective-C Method Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4129 * Anonymous Class Symbol::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4130 * Statement Block Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4131 * K&R Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4132 @end menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4133
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 @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
4136 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4137 @subsection Function Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4138 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4139
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4140 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
4141
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4142 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4143 1: void
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4144 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
4145 3: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4146 4: int tmp = a;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4147 5: a = b;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4148 6: b = tmp;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4149 7: int ignored =
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4150 8: a + b;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4151 9: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4152 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4153
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4154 @ssindex topmost-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4155 @ssindex topmost-intro-cont
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4156 @ssindex defun-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4157 @ssindex defun-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4158 @ssindex defun-block-intro
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4159 Line 1 shows a @code{topmost-intro} since it is the first line that
Dave Love <fx@gnu.org>
parents:
diff changeset
4160 introduces a top-level construct. Line 2 is a continuation of the
Dave Love <fx@gnu.org>
parents:
diff changeset
4161 top-level construct introduction so it has the syntax
Dave Love <fx@gnu.org>
parents:
diff changeset
4162 @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
4163 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
4164 corresponding
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4165 @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
4166 function definition. Line 4 is a @code{defun-block-intro}, i.e. it is
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4167 the first line of a brace-block, enclosed in a
Dave Love <fx@gnu.org>
parents:
diff changeset
4168 top-level function definition.
Dave Love <fx@gnu.org>
parents:
diff changeset
4169
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4170 @ssindex statement
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4171 @ssindex statement-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4172 Lines 5, 6, and 7 are all given @code{statement} syntax since there
Dave Love <fx@gnu.org>
parents:
diff changeset
4173 isn't much special about them. Note however that line 8 is given
Dave Love <fx@gnu.org>
parents:
diff changeset
4174 @code{statement-cont} syntax since it continues the statement begun
Dave Love <fx@gnu.org>
parents:
diff changeset
4175 on the previous line.
Dave Love <fx@gnu.org>
parents:
diff changeset
4176
67253
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 @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
4179 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4180 @subsection Class related Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4181 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4182
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4183 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
4184
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4185 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4186 1: class Bass
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4187 2: : public Guitar,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4188 3: public Amplifiable
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4189 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4190 5: public:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4191 6: Bass()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4192 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
4193 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
4194 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
4195 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
4196 11: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4197 12: eString.tune( 'E' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4198 13: aString.tune( 'A' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4199 14: dString.tune( 'D' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4200 15: gString.tune( 'G' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4201 16: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4202 17: friend class Luthier;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4203 18: @};
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4204 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4205
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4206 @ssindex class-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4207 @ssindex class-close
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4208 As in the previous example, line 1 has the @code{topmost-intro} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4209 Here however, the brace that opens a C++ class definition on line 4 is
Dave Love <fx@gnu.org>
parents:
diff changeset
4210 assigned the @code{class-open} syntax. Note that in C++, classes,
Dave Love <fx@gnu.org>
parents:
diff changeset
4211 structs, and unions are essentially equivalent syntactically (and are
Dave Love <fx@gnu.org>
parents:
diff changeset
4212 very similar semantically), so replacing the @code{class} keyword in the
Dave Love <fx@gnu.org>
parents:
diff changeset
4213 example above with @code{struct} or @code{union} would still result in a
Dave Love <fx@gnu.org>
parents:
diff changeset
4214 syntax of @code{class-open} for line 4 @footnote{This is the case even
Dave Love <fx@gnu.org>
parents:
diff changeset
4215 for C and Objective-C. For consistency, structs in all supported
Dave Love <fx@gnu.org>
parents:
diff changeset
4216 languages are syntactically equivalent to classes. Note however that
Dave Love <fx@gnu.org>
parents:
diff changeset
4217 the keyword @code{class} is meaningless in C and Objective-C.}.
Dave Love <fx@gnu.org>
parents:
diff changeset
4218 Similarly, line 18 is assigned @code{class-close} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4219
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4220 @ssindex inher-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4221 @ssindex inher-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4222 Line 2 introduces the inheritance list for the class so it is assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4223 the @code{inher-intro} syntax, and line 3, which continues the
Dave Love <fx@gnu.org>
parents:
diff changeset
4224 inheritance list is given @code{inher-cont} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4225
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4226 @ssindex access-label
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4227 @ssindex inclass
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4228 Hitting @kbd{C-c C-s} on line 5 shows the following analysis:
Dave Love <fx@gnu.org>
parents:
diff changeset
4229
Dave Love <fx@gnu.org>
parents:
diff changeset
4230 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4231 ((inclass 58) (access-label 58))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4232 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4233
Dave Love <fx@gnu.org>
parents:
diff changeset
4234 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
4235 The primary syntactic symbol for this line is @code{access-label} as
Dave Love <fx@gnu.org>
parents:
diff changeset
4236 this a label keyword that specifies access protection in C++. However,
Dave Love <fx@gnu.org>
parents:
diff changeset
4237 because this line is also a top-level construct inside a class
Dave Love <fx@gnu.org>
parents:
diff changeset
4238 definition, the analysis actually shows two syntactic symbols. The
Dave Love <fx@gnu.org>
parents:
diff changeset
4239 other syntactic symbol assigned to this line is @code{inclass}.
Dave Love <fx@gnu.org>
parents:
diff changeset
4240 Similarly, line 6 is given both @code{inclass} and @code{topmost-intro}
Dave Love <fx@gnu.org>
parents:
diff changeset
4241 syntax:
Dave Love <fx@gnu.org>
parents:
diff changeset
4242
Dave Love <fx@gnu.org>
parents:
diff changeset
4243 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4244 ((inclass 58) (topmost-intro 60))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4245 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4246
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4247 @ssindex member-init-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4248 @ssindex member-init-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4249 Line 7 introduces a C++ member initialization list and as such is given
Dave Love <fx@gnu.org>
parents:
diff changeset
4250 @code{member-init-intro} syntax. Note that in this case it is
Dave Love <fx@gnu.org>
parents:
diff changeset
4251 @emph{not} assigned @code{inclass} since this is not considered a
Dave Love <fx@gnu.org>
parents:
diff changeset
4252 top-level construct. Lines 8 through 10 are all assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4253 @code{member-init-cont} since they continue the member initialization
Dave Love <fx@gnu.org>
parents:
diff changeset
4254 list started on line 7.
Dave Love <fx@gnu.org>
parents:
diff changeset
4255
Dave Love <fx@gnu.org>
parents:
diff changeset
4256 @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
4257 @ssindex inline-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4258 @ssindex inline-close
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4259 Line 11's analysis is a bit more complicated:
Dave Love <fx@gnu.org>
parents:
diff changeset
4260
Dave Love <fx@gnu.org>
parents:
diff changeset
4261 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4262 ((inclass 58) (inline-open))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4263 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4264
Dave Love <fx@gnu.org>
parents:
diff changeset
4265 This line is assigned a syntax of both @code{inline-open} and
Dave Love <fx@gnu.org>
parents:
diff changeset
4266 @code{inclass} because it opens an @dfn{in-class} C++ inline method
Dave Love <fx@gnu.org>
parents:
diff changeset
4267 definition. This is distinct from, but related to, the C++ notion of an
Dave Love <fx@gnu.org>
parents:
diff changeset
4268 inline function in that its definition occurs inside an enclosing class
Dave Love <fx@gnu.org>
parents:
diff changeset
4269 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
4270 However, if the definition of the @code{Bass} constructor appeared
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4271 outside the class definition, the construct would be given the
Dave Love <fx@gnu.org>
parents:
diff changeset
4272 @code{defun-open} syntax, even if the keyword @code{inline} appeared
Dave Love <fx@gnu.org>
parents:
diff changeset
4273 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
4274
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4275 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4276 1: class Bass
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4277 2: : public Guitar,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4278 3: public Amplifiable
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4279 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4280 5: public:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4281 6: Bass();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4282 7: @};
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4283 8:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4284 9: inline
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4285 10: Bass::Bass()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4286 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
4287 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
4288 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
4289 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
4290 15: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4291 16: eString.tune( 'E' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4292 17: aString.tune( 'A' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4293 18: dString.tune( 'D' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4294 19: gString.tune( 'G' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4295 20: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4296 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4297
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4298 @ssindex friend
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4299 Returning to the previous example, line 16 is given @code{inline-close}
Dave Love <fx@gnu.org>
parents:
diff changeset
4300 syntax, while line 12 is given @code{defun-block-open} syntax, and lines
Dave Love <fx@gnu.org>
parents:
diff changeset
4301 13 through 15 are all given @code{statement} syntax. Line 17 is
Dave Love <fx@gnu.org>
parents:
diff changeset
4302 interesting in that its syntactic analysis list contains three
Dave Love <fx@gnu.org>
parents:
diff changeset
4303 elements:
Dave Love <fx@gnu.org>
parents:
diff changeset
4304
Dave Love <fx@gnu.org>
parents:
diff changeset
4305 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4306 ((inclass 58) (topmost-intro 380) (friend))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4307 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4308
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4309 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
4310 modifiers that do not have anchor positions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4311
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4312 @ssindex template-args-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4313 Template definitions introduce yet another syntactic symbol:
Dave Love <fx@gnu.org>
parents:
diff changeset
4314
Dave Love <fx@gnu.org>
parents:
diff changeset
4315 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4316 1: ThingManager <int,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4317 2: Framework::Callback *,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4318 3: Mutex> framework_callbacks;
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4319 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4320
Dave Love <fx@gnu.org>
parents:
diff changeset
4321 Here, line 1 is analyzed as a @code{topmost-intro}, but lines 2 and 3
Dave Love <fx@gnu.org>
parents:
diff changeset
4322 are both analyzed as @code{template-args-cont} lines.
Dave Love <fx@gnu.org>
parents:
diff changeset
4323
67253
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 @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
4326 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4327 @subsection Conditional Construct Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4328 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4329
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4330 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
4331 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
4332
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4333 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4334 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
4335 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4336 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
4337 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4338 5: if( i == 10 )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4339 6: do_something_special();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4340 7: else
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4341 8: silly_label:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4342 9: do_something( i );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4343 10: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4344 11: do @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4345 12: another_thing( i-- );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4346 13: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4347 14: while( i > 0 );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4348 15: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4349 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4350
Dave Love <fx@gnu.org>
parents:
diff changeset
4351 Only the lines that illustrate new syntactic symbols will be discussed.
Dave Love <fx@gnu.org>
parents:
diff changeset
4352
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4353 @ssindex substatement-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4354 @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
4355 @ssindex block-close
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4356 Line 4 has a brace which opens a conditional's substatement block. It
Dave Love <fx@gnu.org>
parents:
diff changeset
4357 is thus assigned @code{substatement-open} syntax, and since line 5 is
Dave Love <fx@gnu.org>
parents:
diff changeset
4358 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
4359 @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
4360 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
4361 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
4362 ``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
4363 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
4364
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4365 @ssindex substatement
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4366 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
4367 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
4368 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
4369
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4370 @ssindex substatement-label
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4371 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
4372 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
4373 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
4374 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
4375
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4376 @ssindex else-clause
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4377 @ssindex catch-clause
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4378 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
4379 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
4380 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
4381 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
4382 @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
4383 @code{catch-clause}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4384
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4385 @ssindex do-while-closure
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4386 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
4387 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
4388 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
4389 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
4390 @code{block-close} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4391
67253
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 @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
4394 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4395 @subsection Switch Statement Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4396 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4397
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4398 Switch statements have their own set of syntactic symbols. Here's an
Dave Love <fx@gnu.org>
parents:
diff changeset
4399 example:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4400
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4401 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4402 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
4403 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4404 3: switch( i ) @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4405 4: case Ham:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4406 5: be_a_pig();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4407 6: break;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4408 7: case Salt:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4409 8: drink_some_water();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4410 9: break;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4411 10: default:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4412 11: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4413 12: what_is_it();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4414 13: break;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4415 14: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4416 15: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4417 14: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4418 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4419
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4420 @ssindex case-label
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4421 @ssindex statement-case-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4422 @ssindex statement-case-open
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4423 Here, lines 4, 7, and 10 are all assigned @code{case-label} syntax,
Dave Love <fx@gnu.org>
parents:
diff changeset
4424 while lines 5 and 8 are assigned @code{statement-case-intro}. Line 11
Dave Love <fx@gnu.org>
parents:
diff changeset
4425 is treated slightly differently since it contains a brace that opens a
Dave Love <fx@gnu.org>
parents:
diff changeset
4426 block --- it is given @code{statement-case-open} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4427
67253
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 @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
4430 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4431 @subsection Brace List Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4432 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4433
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4434 @cindex brace lists
Dave Love <fx@gnu.org>
parents:
diff changeset
4435 There are a set of syntactic symbols that are used to recognize
Dave Love <fx@gnu.org>
parents:
diff changeset
4436 constructs inside of brace lists. A brace list is defined as an
Dave Love <fx@gnu.org>
parents:
diff changeset
4437 @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
4438 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
4439 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
4440 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
4441
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4442 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4443 1: static char* ingredients[] =
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4444 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4445 3: "Ham",
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4446 4: "Salt",
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4447 5: NULL
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4448 6: @};
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4449 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4450
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4451 @ssindex brace-list-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4452 @ssindex brace-list-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4453 @ssindex brace-list-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4454 @ssindex brace-list-entry
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4455 Following convention, line 2 in this example is assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4456 @code{brace-list-open} syntax, and line 3 is assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4457 @code{brace-list-intro} syntax. Likewise, line 6 is assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4458 @code{brace-list-close} syntax. Lines 4 and 5 however, are assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4459 @code{brace-list-entry} syntax, as would all subsequent lines in this
Dave Love <fx@gnu.org>
parents:
diff changeset
4460 initializer list.
Dave Love <fx@gnu.org>
parents:
diff changeset
4461
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4462 @ssindex brace-entry-open
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4463 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
4464 example:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4465
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4466 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4467 1: struct intpairs[] =
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4468 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4469 3: @{ 1, 2 @},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4470 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4471 5: 3,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4472 6: 4
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4473 7: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4474 8: @{ 1,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4475 9: 2 @},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4476 10: @{ 3, 4 @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4477 11: @};
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4478 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4479
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4480 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
4481 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
4482 @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
4483 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
4484 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
4485 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
4486 line 10.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4487
67253
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 @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
4490 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4491 @subsection External Scope Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4492 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4493
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4494 External language definition blocks also have their own syntactic
Dave Love <fx@gnu.org>
parents:
diff changeset
4495 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
4496
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4497 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4498 1: extern "C"
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4499 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4500 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
4501 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
4502 5: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4503 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4504
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4505 @ssindex extern-lang-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4506 @ssindex extern-lang-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4507 @ssindex inextern-lang
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4508 @ssindex inclass
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4509 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
4510 line 2 is given the @code{extern-lang-open} syntax, while line 5 is given
Dave Love <fx@gnu.org>
parents:
diff changeset
4511 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
4512
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4513 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4514 ((inextern-lang) (topmost-intro 14))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4515 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4516
Dave Love <fx@gnu.org>
parents:
diff changeset
4517 @noindent
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4518 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
4519 @code{inclass}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4520
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4521 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
4522 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
4523 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
4524 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
4525 @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
4526
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4527 @table @asis
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4528 @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
4529 @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
4530 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
4531 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
4532
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4533 @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
4534 @ssindex namespace-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4535 @ssindex namespace-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4536 @ssindex innamespace
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4537 @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
4538
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4539 @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
4540 @ssindex module-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4541 @ssindex module-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4542 @ssindex inmodule
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4543 @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
4544
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4545 @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
4546 @ssindex composition-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4547 @ssindex composition-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4548 @ssindex incomposition
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4549 @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
4550 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4551
67253
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 @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
4554 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4555 @subsection Parenthesis (Argument) List Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4556 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4557
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4558 A number of syntactic symbols are associated with parenthesis lists,
Dave Love <fx@gnu.org>
parents:
diff changeset
4559 a.k.a argument lists, as found in function declarations and function
Dave Love <fx@gnu.org>
parents:
diff changeset
4560 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
4561
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4562 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4563 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
4564 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
4565 3:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4566 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
4567 5: int line1,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4568 6: int line2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4569 7: );
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
4570 8:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4571 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
4572 10: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4573 11: a_function(
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4574 12: line1,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4575 13: line2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4576 14: );
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
4577 15:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4578 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
4579 17: line2 );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4580 18: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4581 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4582
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4583 @ssindex arglist-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4584 @ssindex arglist-close
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4585 Lines 5 and 12 are assigned @code{arglist-intro} syntax since they are
Dave Love <fx@gnu.org>
parents:
diff changeset
4586 the first line following the open parenthesis, and lines 7 and 14 are
Dave Love <fx@gnu.org>
parents:
diff changeset
4587 assigned @code{arglist-close} syntax since they contain the parenthesis
Dave Love <fx@gnu.org>
parents:
diff changeset
4588 that closes the argument list.
Dave Love <fx@gnu.org>
parents:
diff changeset
4589
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4590 @ssindex arglist-cont-nonempty
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4591 @ssindex arglist-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4592 Lines that continue argument lists can be assigned one of two syntactic
Dave Love <fx@gnu.org>
parents:
diff changeset
4593 symbols. For example, Lines 2 and 17
Dave Love <fx@gnu.org>
parents:
diff changeset
4594 are assigned @code{arglist-cont-nonempty} syntax. What this means
Dave Love <fx@gnu.org>
parents:
diff changeset
4595 is that they continue an argument list, but that the line containing the
Dave Love <fx@gnu.org>
parents:
diff changeset
4596 parenthesis that opens the list is @emph{not empty} following the open
Dave Love <fx@gnu.org>
parents:
diff changeset
4597 parenthesis. Contrast this against lines 6 and 13 which are assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4598 @code{arglist-cont} syntax. This is because the parenthesis that opens
Dave Love <fx@gnu.org>
parents:
diff changeset
4599 their argument lists is the last character on that line.
Dave Love <fx@gnu.org>
parents:
diff changeset
4600
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4601 Syntactic elements with @code{arglist-intro},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4602 @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
4603 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
4604 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
4605 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
4606 Functions}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4607
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4608 Note that there is no @code{arglist-open} syntax. This is because any
Dave Love <fx@gnu.org>
parents:
diff changeset
4609 parenthesis that opens an argument list, appearing on a separate line,
Dave Love <fx@gnu.org>
parents:
diff changeset
4610 is assigned the @code{statement-cont} syntax instead.
Dave Love <fx@gnu.org>
parents:
diff changeset
4611
67253
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 @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
4614 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4615 @subsection Comment String Label and Macro Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4616 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4617
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4618 A few miscellaneous syntactic symbols that haven't been previously
Dave Love <fx@gnu.org>
parents:
diff changeset
4619 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
4620
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4621 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4622 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
4623 2: const
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4624 3: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4625 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
4626 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
4627 6:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4628 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
4629 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
4630 9:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4631 10: note:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4632 11: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4633 12: #ifdef LOCK
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4634 13: Lock acquire();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4635 14: #endif // LOCK
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4636 15: slap_pop();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4637 16: cout << "I played "
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4638 17: << "a note\n";
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4639 18: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4640 19: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4641 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4642
Dave Love <fx@gnu.org>
parents:
diff changeset
4643 The lines to note in this example include:
Dave Love <fx@gnu.org>
parents:
diff changeset
4644
Dave Love <fx@gnu.org>
parents:
diff changeset
4645 @itemize @bullet
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 func-decl-cont
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4648 Line 2 is assigned the @code{func-decl-cont} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4649
Dave Love <fx@gnu.org>
parents:
diff changeset
4650 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4651 @ssindex comment-intro
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4652 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
4653 @code{comment-intro} syntax. A syntactic element with
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4654 @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
4655 by another syntactic element which does have one.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4656
Dave Love <fx@gnu.org>
parents:
diff changeset
4657 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4658 @ssindex c
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4659 Line 5 is assigned @code{c} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4660
Dave Love <fx@gnu.org>
parents:
diff changeset
4661 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
4662 @cindex syntactic whitespace
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4663 Line 6 which, even though it contains nothing but whitespace, is
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4664 assigned @code{defun-block-intro}. Note that the appearance of the
Dave Love <fx@gnu.org>
parents:
diff changeset
4665 comment on lines 4 and 5 do not cause line 6 to be assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4666 @code{statement} syntax because comments are considered to be
Dave Love <fx@gnu.org>
parents:
diff changeset
4667 @dfn{syntactic whitespace}, which are ignored when analyzing
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4668 code.
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 string
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4672 Line 8 is assigned @code{string} 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 label
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4676 Line 10 is assigned @code{label} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4677
Dave Love <fx@gnu.org>
parents:
diff changeset
4678 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4679 @ssindex block-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4680 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
4681 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
4682 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
4683 does have one.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4684
Dave Love <fx@gnu.org>
parents:
diff changeset
4685 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4686 @ssindex cpp-macro
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4687 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
4688 normal syntactic symbols (@code{statement-block-intro} and
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4689 @code{statement}, respectively). Normally @code{cpp-macro} is
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4690 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
4691 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
4692 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
4693 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
4694 @code{cpp-macro} doesn't contain an anchor position.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4695
Dave Love <fx@gnu.org>
parents:
diff changeset
4696 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4697 @ssindex stream-op
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4698 Line 17 is assigned @code{stream-op} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4699 @end itemize
Dave Love <fx@gnu.org>
parents:
diff changeset
4700
67253
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 @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
4703 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4704 @subsection Multiline Macro Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4705 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4706
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4707 @cindex multiline macros
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4708 @cindex syntactic whitespace
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4709 @ssindex cpp-define-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4710 @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
4711 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
4712 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
4713 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
4714 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
4715 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
4716
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4717 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4718 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
4719 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
4720 3: if (!CONSP (cons)) \
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4721 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
4722 5: else
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4723 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4724
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4725 @noindent
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4726 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
4727 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
4728 @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
4729 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
4730 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
4731 on line 5.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4732
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4733 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
4734 @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
4735 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
4736 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
4737 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
4738 macros.}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4739
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4740 @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
4741
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4742 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4743 @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
4744 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4745 @subsection Objective-C Method Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4746 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4747
Dave Love <fx@gnu.org>
parents:
diff changeset
4748 In Objective-C buffers, there are three additional syntactic symbols
Dave Love <fx@gnu.org>
parents:
diff changeset
4749 assigned to various message calling constructs. Here's an example
Dave Love <fx@gnu.org>
parents:
diff changeset
4750 illustrating these:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4751
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4752 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4753 1: - (void)setDelegate:anObject
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4754 2: withStuff:stuff
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4755 3: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4756 4: [delegate masterWillRebind:self
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4757 5: toDelegate:anObject
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4758 6: withExtraStuff:stuff];
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4759 7: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4760 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4761
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4762 @ssindex objc-method-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4763 @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
4764 @ssindex objc-method-call-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4765 Here, line 1 is assigned @code{objc-method-intro} syntax, and line 2 is
Dave Love <fx@gnu.org>
parents:
diff changeset
4766 assigned @code{objc-method-args-cont} syntax. Lines 5 and 6 are both
Dave Love <fx@gnu.org>
parents:
diff changeset
4767 assigned @code{objc-method-call-cont} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4768
67253
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 @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
4771 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4772 @subsection Anonymous Class Symbol (Java)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4773 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4774
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4775 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
4776 this:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4777
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4778 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4779 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
4780 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
4781 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
4782 4: history.addElement(arg);
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4783 5: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4784 6: @});
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4785 7: @}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4786 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4787
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4788 @ssindex inexpr-class
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4789 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
4790 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
4791 @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
4792 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
4793 @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
4794 have an anchor position.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4795
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 @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
4798 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4799 @subsection Statement Block Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4800 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4801
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4802 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
4803 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
4804 this, e.g:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4805
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4806 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4807 1: int res = (@{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4808 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
4809 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
4810 4: z;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4811 5: @});
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4812 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4813
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4814 @ssindex inexpr-statement
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4815 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
4816 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
4817 @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
4818 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
4819 contain an anchor position.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4820
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4821 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
4822 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
4823
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4824 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4825 1: array itgob()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4826 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4827 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
4828 4: lambda
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4829 5: (mixed arg)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4830 6: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4831 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
4832 8: @}) * ", " + "\n";
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4833 9: return catch @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4834 10: write (s + "\n");
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4835 11: @};
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4836 12: @}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4837 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4838
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4839 @ssindex inlambda
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4840 @ssindex lambda-intro-cont
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4841 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
4842 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
4843 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
4844 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
4845 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
4846 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
4847 @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
4848 @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
4849 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
4850 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
4851 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
4852
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4853 @ssindex inexpr-statement
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4854 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
4855 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
4856 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
4857 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
4858 handled like this too.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4859
67253
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 @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
4862 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4863 @subsection K&R Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4864 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4865
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4866 @ssindex knr-argdecl-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4867 @ssindex knr-argdecl
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4868 Two other syntactic symbols can appear in old style, non-prototyped C
Dave Love <fx@gnu.org>
parents:
diff changeset
4869 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
4870
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4871 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4872 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
4873 2: int a;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4874 3: int b;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4875 4: int c;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4876 5: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4877 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
4878 7: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4879 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4880
Dave Love <fx@gnu.org>
parents:
diff changeset
4881 Here, line 2 is the first line in an argument declaration list and so is
Dave Love <fx@gnu.org>
parents:
diff changeset
4882 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
4883 (i.e. lines 3 and 4 in this example), are given @code{knr-argdecl}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4884 syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4885
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4886
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4887 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4888 @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
4889 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4890 @section Indentation Calculation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4891 @cindex indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4892 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4893
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4894 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
4895 (@pxref{Syntactic Analysis}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4896
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4897 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
4898 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
4899 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
4900 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
4901
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4902 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
4903 in the @code{c-offsets-alist} style variable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4904 (@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
4905 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
4906 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
4907 column.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4908
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4909 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
4910 our first example again:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4911
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4912 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4913 1: void swap( int& a, int& b )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4914 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4915 3: int tmp = a;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4916 4: a = b;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4917 5: b = tmp;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4918 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4919 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4920
68313
20ff812ba5b3 Use @key for TAB.
Eli Zaretskii <eliz@gnu.org>
parents: 67253
diff changeset
4921 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
4922 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
4923
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4924 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4925 ((defun-block-intro 29))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4926 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4927
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4928 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4929 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
4930 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
4931 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
4932
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4933 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
4934 @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
4935 @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
4936 total indentation of 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 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
4939 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
4940 line is 4 spaces.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4941
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4942 Here's another example:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4943
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4944 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4945 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
4946 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4947 3: if( doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4948 4: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4949 5: return( val + incr );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4950 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4951 7: return( val );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4952 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4953 @end example
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 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
4956 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
4957 context. The context for this line is:
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4960 ((substatement-open 46))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4961 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4962
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4963 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
4964 @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
4965 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
4966 @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
4967 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
4968 indentation for the line of 8 spaces.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4969
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4970 Simple, huh?
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 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
4973 @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
4974 @xref{c-offsets-alist}, for the full story.
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 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
4977 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
4978 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
4979
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4980 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
4981 @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
4982 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
4983 minibuffer when you hit @kbd{TAB}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4984
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4985
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4986 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4987 @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
4988 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4989 @chapter Customizing Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4990 @cindex customization, indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4991 @cindex indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4992 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4993
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4994 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
4995 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
4996 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
4997 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
4998 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
4999 @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
5000 sections, in particular @ref{Style Variables}.
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 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
5003 @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
5004 @code{c-basic-offset}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5005
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5006 @defopt c-basic-offset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5007 @vindex basic-offset (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5008 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
5009 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
5010 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
5011 @code{bsd}, @code{linux}, and @code{python} styles).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5012 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5013
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5014 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
5015 @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
5016 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
5017 you write yourself (@pxref{Custom Line-Up}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5018
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5019 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
5020 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
5021 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
5022 indentation.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5023
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5024 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5025 * c-offsets-alist::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5026 * Interactive Customization::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5027 * Line-Up Functions::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5028 * Custom Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5029 * Other Indentation::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5030 @end menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5031
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5032
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5033 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5034 @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
5035 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5036 @section c-offsets-alist
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5037 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5038
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5039 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
5040 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
5041 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
5042 @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
5043
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5044 @defopt c-offsets-alist
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5045 @vindex offsets-alist (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5046 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
5047 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
5048 whose syntactic context matches the symbol. @xref{Syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5049 Analysis}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5050
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5051 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
5052 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
5053 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
5054 only a few entries. @xref{Style Variables}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5055
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5056 The offset specification associated with any particular syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5057 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
5058 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
5059 @code{+}, @code{-}, @code{++}, @code{--}, @code{*}, or @code{/}. The
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5060 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
5061
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5062 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
5063 of these kinds of offsets:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5064
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5065 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5066 ((statement . 0)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5067 (substatement . +)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5068 (cpp-macro . [0])
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5069 (topmost-intro-cont . c-lineup-topmost-intro-cont)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5070 (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
5071 c-indent-multi-line-block))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5072 @dots{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5073 @*)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5074 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5075 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5076
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5077 @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
5078 @findex set-offset (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5079 @kindex C-c C-o
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5080 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
5081 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
5082 isn't already one for that syntactic symbol.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5083
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5084 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
5085 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
5086 @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
5087 (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
5088 (defaulting to the current offset).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5089
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5090 @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
5091 @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
5092 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
5093 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
5094 @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
5095 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
5096 itself uses this function when initializing styles.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5097 @end deffn
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 @cindex offset specification
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5100 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
5101 the following:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5102
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5103 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5104 @item An integer
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5105 The integer specifies a relative offset. All relative
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5106 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
5107 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
5108 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
5109 anchor position earlier in the buffer. @xref{Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5110 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
5111 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
5112 from zero).
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 @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
5115 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
5116 @code{c-basic-offset}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5117
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5118 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
5119 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
5120 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
5121 values that the special symbols correspond to:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5122
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5123 @table @code
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 1
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 -1
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 2
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 -2
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5132 @item *
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5133 @code{c-basic-offset} times 0.5
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5134 @item /
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5135 @code{c-basic-offset} times -0.5
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5136 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5137
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5138 @item A vector
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5139 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
5140 indentation column. This will override any previously calculated
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5141 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
5142 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
5143 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
5144 beyond the first will be ignored.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5145
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5146 @item A function or lambda expression
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5147 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
5148 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
5149 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
5150 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
5151 details about them.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5152
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5153 @item A symbol with a variable binding
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5154 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
5155 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
5156 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
5157 vector (an absolute offset).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5158
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5159 @item A list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5160 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
5161 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
5162 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
5163 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
5164 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
5165 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
5166
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5167 @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
5168 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
5169 non-@code{nil} offsets from the remaining elements:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5170
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5171 @table @code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5172 @item first
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5173 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
5174 elements of the list don't get evaluated.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5175 @item min
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5176 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
5177 absolute - they can't be mixed.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5178 @item max
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5179 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
5180 absolute - they can't be mixed.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5181 @item add
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5182 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
5183 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
5184 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
5185 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5186
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5187 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
5188 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
5189 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
5190 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5191
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5192 @vindex c-strict-syntax-p
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5193 @vindex strict-syntax-p (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5194 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
5195 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
5196 @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
5197 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
5198 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
5199 @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
5200 @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
5201
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5202 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5203 @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
5204 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5205 @section Interactive Customization
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5206 @cindex customization, interactive
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5207 @cindex interactive customization
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5208 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5209
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5210 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
5211 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
5212 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
5213 indicated. @xref{Styles}.}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5214
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5215 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5216 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5217 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
5218 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5219 3: if( doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5220 4: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5221 5: return( val + incr );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5222 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5223 7: return( val );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5224 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5225 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5226 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5227
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5228 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5229 to:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5230
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5231 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5232 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5233 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
5234 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5235 3: if( doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5236 4: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5237 5: return( val + incr );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5238 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5239 7: return( val );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5240 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5241 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5242 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5243
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5244 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
5245 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
5246 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
5247 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
5248 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
5249 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
5250
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5251 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5252 ((substatement-open 44))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5253 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5254
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5255 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5256 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
5257 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
5258 symbol.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5259
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5260 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
5261 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
5262 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
5263 syntactic symbol we want to change!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5264
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5265 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
5266 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
5267 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
5268 @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
5269 syntactic symbol @code{substatement-open}.
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 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
5272 (@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
5273 should now look like:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5274
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5275 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5276 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5277 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
5278 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5279 3: if( doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5280 4: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5281 5: return( val + incr );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5282 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5283 7: return( val );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5284 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5285 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5286 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5287
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5288 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
5289 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
5290 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
5291 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
5292 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
5293 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
5294 adjustments.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5295
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5296 @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
5297 @deffn Command c-set-offset symbol offset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5298 @findex set-offset (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5299 @kindex C-c C-o
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5300 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
5301 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
5302 the example above) and from your mode hook.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5303
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5304 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
5305 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
5306 for that syntactic element.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5307 @end deffn
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5308 @c End of MOVE THIS BIT.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5309
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 @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
5312 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5313 @section Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5314 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5315
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5316 @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
5317 @cindex indentation function
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5318 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
5319 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
5320 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
5321 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
5322 provides this flexibility with @dfn{line-up functions}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5323
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5324 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
5325 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
5326 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
5327 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
5328 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
5329 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
5330
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5331 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
5332 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
5333 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
5334
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5335 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
5336 @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
5337 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
5338 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
5339 different one''. @xref{c-offsets-alist}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5340
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5341 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
5342 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
5343 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
5344 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
5345
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5346 @macro workswith
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5347 @emph{Works with:@ }
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5348 @end macro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5349 @ifinfo
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5350 @unmacro workswith
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5351 @macro workswith
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5352 Works with:
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5353 @end macro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5354 @end ifinfo
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5355
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5356 @macro sssTBasicOffset
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 sssTsssTBasicOffset
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5361 <--><--> @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
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 @macro hereFn{func}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5365 <- @i{\func\}@c
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5366 @end macro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5367
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5368 @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
5369 @iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5370 @unmacro hereFn
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5371 @macro hereFn{func}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5372 <-@i{\func\}@c
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5373 @end macro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5374 @end iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5375
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5376 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5377 * Brace/Paren Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5378 * List Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5379 * Operator Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5380 * Comment Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5381 * Misc Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5382 @end menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5383
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 @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
5386 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5387 @subsection Brace and Parenthesis Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5388 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5389
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5390 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
5391 parentheses and statements within brace blocks.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5392
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5393 @defun c-lineup-close-paren
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5394 @findex lineup-close-paren (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5395 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
5396 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
5397 indentation is added. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5398
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5399 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5400 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5401 main (int,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5402 char **
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5403 ) @hereFn{c-lineup-close-paren}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5404 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5405 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5406
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5407 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5408 and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5409
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5410 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5411 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5412 main (
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5413 int, char **
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5414 ) @hereFn{c-lineup-close-paren}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5415 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5416 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5417
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5418 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
5419 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
5420 @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
5421 @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
5422
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5423 @workswith All @code{*-close} symbols.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5424 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5425
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5426 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5427
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5428 @anchor{c-lineup-arglist-close-under-paren}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5429 @defun c-lineup-arglist-close-under-paren
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5430 @findex lineup-arglist-close-under-paren (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5431 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
5432 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
5433 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
5434 @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
5435 lines inside a parenthesis under the open paren.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5436
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5437 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
5438 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
5439 @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
5440 discussion of this ``DWIM'' measure.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5441
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5442 @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
5443 @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
5444 @code{arglist-cont-nonempty}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5445 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5446
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5447 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5448
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5449 @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
5450 @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
5451 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
5452
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
5453 @example
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
5454 @group
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5455 if (n > 0)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5456 @{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
5457 @sssTBasicOffset{}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5458 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5459 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5460
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5461 @noindent
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5462 and
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5463
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5464 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5465 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5466 if (n > 0)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5467 @{ @hereFn{c-indent-one-line-block}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5468 m+=n; n=0;
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5469 @}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5470 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5471 @end example
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 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
5474 @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
5475 which makes the function usable in list expressions.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5476
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5477 @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
5478 @code{-open} symbols.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5479 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5480
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5481 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5482
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5483 @defun c-indent-multi-line-block
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5484 @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
5485 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
5486
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5487 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5488 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5489 int *foo[] = @{
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
5490 NULL,
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5491 @{17@}, @hereFn{c-indent-multi-line-block}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5492 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5493 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5494
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5495 @noindent
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5496 and
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5497
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5498 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5499 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5500 int *foo[] = @{
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5501 NULL,
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5502 @{ @hereFn{c-indent-multi-line-block}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5503 17
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5504 @},
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5505 @sssTBasicOffset{}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5506 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5507 @end example
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 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
5510 @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
5511 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
5512
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5513 @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
5514 @code{-open} symbols.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5515 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5516
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5517 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5518
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5519 @defun c-lineup-runin-statements
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5520 @findex lineup-runin-statements (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5521 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
5522 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
5523 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
5524 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
5525
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5526 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5527 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5528 int main()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5529 @{ puts ("Hello!");
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5530 return 0; @hereFn{c-lineup-runin-statements}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5531 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5532 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5533 @end example
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 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
5536 @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
5537 expressions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5538
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5539 @workswith The @code{statement} syntactic symbol.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5540 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5541
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5542 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5543
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5544 @defun c-lineup-inexpr-block
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5545 @findex lineup-inexpr-block (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5546 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
5547 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
5548 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
5549 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
5550 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
5551 construct.
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 @workswith @code{inlambda}, @code{inexpr-statement},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5554 @code{inexpr-class}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5555 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5556
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5557 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5558
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5559 @defun c-lineup-after-whitesmith-blocks
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5560 @findex lineup-after-whitesmith-blocks (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5561 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
5562 @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
5563 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
5564 style indentation. Consider the following examples:
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5567 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5568 int foo()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5569 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5570 a;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5571 x; @hereFn{c-lineup-after-whitesmith-blocks}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5572 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5573 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5574
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5575 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5576 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5577 int foo()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5578 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5579 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5580 a;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5581 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5582 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
5583 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5584 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5585
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5586 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
5587 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
5588 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
5589 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
5590 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
5591 @code{statement} was set simply to zero.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5592
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5593 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
5594 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
5595 indents relative to the surrounding block just like
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5596 @code{c-lineup-whitesmith-in-block}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5597
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5598 @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
5599 @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
5600 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5601
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5602 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5603
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5604 @defun c-lineup-whitesmith-in-block
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5605 @findex lineup-whitesmith-in-block (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5606 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
5607 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
5608
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5609 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5610 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5611 something
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5612 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5613 foo; @hereFn{c-lineup-whitesmith-in-block}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5614 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5615 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5616 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5617
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5618 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5619 and
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5620
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5621 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5622 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5623 something @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5624 foo; @hereFn{c-lineup-whitesmith-in-block}
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 @sssTBasicOffset{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5627 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5628 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5629
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5630 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
5631 @code{c-basic-offset} is added.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5632
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5633 @workswith @code{defun-close}, @code{defun-block-intro},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5634 @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
5635 @code{brace-list-intro}, @code{statement-block-intro},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5636 @code{arglist-intro}, @code{arglist-cont-nonempty},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5637 @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
5638 and @code{inextern-lang}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5639 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5640
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 @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
5643 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5644 @subsection List Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5645 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5646
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5647 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
5648 form lists of items, usually separated by commas.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5649
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5650 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
5651 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
5652 contained within parentheses.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5653
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5654 @defun c-lineup-arglist
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5655 @findex lineup-arglist (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5656 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
5657
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5658 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
5659 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
5660 @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
5661 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
5662
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5663 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5664 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5665 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
5666 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
5667 @});
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5668 @sssTBasicOffset{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5669 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5670 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5671
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5672 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
5673 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
5674 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
5675 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
5676
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5677 @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
5678 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5679
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5680 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5681
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5682 @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
5683 @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
5684 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
5685 brace block.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5686
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5687 @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
5688 @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
5689 @code{arglist-intro}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5690 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5691
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5692 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5693
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5694 @defun c-lineup-multi-inher
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5695 @findex lineup-multi-inher (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5696 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
5697 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
5698
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5699 @example
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5700 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5701 Foo::Foo (int a, int b):
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5702 Cyphr (a),
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5703 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
5704 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5705 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5706
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5707 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5708 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5709
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5710 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5711 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5712 class Foo
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5713 : public Cyphr,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5714 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
5715 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5716 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5717
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5718 @noindent
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5719 and
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5720
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5721 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5722 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5723 Foo::Foo (int a, int b)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5724 : Cyphr (a)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5725 , 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
5726 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5727 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5728
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5729 @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
5730 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5731
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5732 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5733
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5734 @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
5735 @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
5736 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
5737 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
5738 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
5739 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
5740 E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5741
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5742 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5743 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5744 class Foo
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
5745 extends
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5746 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
5747 @sssTBasicOffset{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5748 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5749 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5750
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5751 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5752 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5753
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5754 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5755 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5756 class Foo
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5757 extends Cyphr,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5758 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
5759 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5760 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5761
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5762 @workswith @code{inher-cont}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5763 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5764
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5765 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5766
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5767 @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
5768 @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
5769 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
5770 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
5771 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
5772 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
5773 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
5774 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
5775
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5776 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5777 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5778 int foo()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5779 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
5780 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
5781 @sssTsssTBasicOffset{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5782 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5783 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5784
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5785 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5786 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5787
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5788 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5789 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5790 int foo() throws Cyphr,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5791 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
5792 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
5793 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5794 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5795
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5796 @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
5797 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5798
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5799 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5800
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5801 @defun c-lineup-template-args
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5802 @findex lineup-template-args (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5803 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
5804 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
5805 opening @samp{<}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5806
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5807 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
5808 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
5809
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5810 @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
5811 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5812
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5813 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5814
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5815 @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
5816 @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
5817 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
5818 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
5819 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
5820 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
5821 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
5822 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
5823
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5824 @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
5825 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5826
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5827 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5828
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5829 @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
5830 @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
5831 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
5832 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
5833
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5834 @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
5835 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5836
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5837 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5838
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5839 @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
5840 @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
5841 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
5842 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
5843
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5844 @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
5845 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5846
67253
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 @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
5849 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5850 @subsection Operator Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5851 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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 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
5854 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
5855 line.
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 @defun c-lineup-argcont
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5858 @findex lineup-argcont (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5859 Line up a continued argument. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5860
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5861 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5862 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5863 foo (xyz, aaa + bbb + ccc
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5864 + ddd + eee + fff); @hereFn{c-lineup-argcont}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5865 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5866 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5867
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5868 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
5869 lines which are the start of an argument.
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 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
5872 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
5873 expressions for the operands.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5874
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5875 @workswith @code{arglist-cont}, @code{arglist-cont-nonempty}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5876 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5877
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5878 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5879
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5880 @defun c-lineup-arglist-operators
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5881 @findex lineup-arglist-operators (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5882 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
5883 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
5884 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
5885
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5886 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5887 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5888 if ( x < 10
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5889 || at_limit (x, @hereFn{c-lineup-arglist-operators}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5890 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
5891 )
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5892 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5893 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5894
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5895 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
5896 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
5897 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
5898 suggestion to get a consistent style):
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5899
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5900 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5901 (c-set-offset 'arglist-cont
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5902 '(c-lineup-arglist-operators 0))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5903 (c-set-offset 'arglist-cont-nonempty
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5904 '(c-lineup-arglist-operators c-lineup-arglist))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5905 (c-set-offset 'arglist-close
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5906 '(c-lineup-arglist-close-under-paren))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5907 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5908
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5909 @workswith @code{arglist-cont}, @code{arglist-cont-nonempty}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5910 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5911
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5912 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5913
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5914 @defun c-lineup-assignments
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5915 @findex lineup-assignments (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5916 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
5917 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
5918 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
5919 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
5920
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5921 @workswith @code{topmost-intro-cont}, @code{statement-cont},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5922 @code{arglist-cont}, @code{arglist-cont-nonempty}.
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 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5925
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5926 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5927
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5928 @defun c-lineup-math
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5929 @findex lineup-math (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5930 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
5931 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
5932 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
5933 +)}. It's provided for compatibility with old configurations.
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 @workswith @code{topmost-intro-cont}, @code{statement-cont},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5936 @code{arglist-cont}, @code{arglist-cont-nonempty}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5937 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5938
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5939 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5940
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5941 @defun c-lineup-cascaded-calls
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5942 @findex lineup-cascaded-calls (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5943 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
5944 @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
5945 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
5946 with the first of those tokens. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5947
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5948 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5949 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5950 r = proc->add(17)->add(18)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5951 ->add(19) + @hereFn{c-lineup-cascaded-calls}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5952 offset; @hereFn{c-lineup-cascaded-calls@r{ (inactive)}}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5953 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5954 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5955
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5956 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
5957 expressions.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5958
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5959 @workswith @code{topmost-intro-cont}, @code{statement-cont},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5960 @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
5961 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5962
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5963 @comment ------------------------------------------------------------
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 @defun c-lineup-streamop
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5966 @findex lineup-streamop (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5967 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
5968
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5969 @workswith @code{stream-op}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5970 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5971
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5972 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5973
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5974 @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
5975 @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
5976 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
5977 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
5978 another one. E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5979
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5980 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5981 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5982 result = prefix + "A message "
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5983 "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
5984 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5985 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5986
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5987 @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
5988 lineup functions.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5989
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5990 @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
5991 @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
5992 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5993
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5994
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 @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
5997 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5998 @subsection Comment Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5999 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6000
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6001 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
6002 of comment structure.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6003
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6004 @defun c-lineup-C-comments
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6005 @findex lineup-C-comments (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6006 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
6007 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
6008
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6009 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6010 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6011 /* /** /*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6012 * text * text text
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6013 */ */ */
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6014 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6015 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6016
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6017 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6018 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6019 /* text /* /**
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6020 text ** text ** text
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6021 */ */ */
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6022 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6023 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6024
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6025 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6026 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6027 /**************************************************
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6028 * text
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6029 *************************************************/
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6030 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6031 @end example
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 @vindex comment-start-skip
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6034 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6035 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6036 /**************************************************
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6037 Free form text comments:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6038 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
6039 start, the indentation is kept unchanged for lines
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6040 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
6041 delimiter line is whatever matches the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6042 @code{comment-start-skip} regexp.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6043 **************************************************/
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6044 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6045 @end example
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 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
6048 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
6049 line inside a comment.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6050
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6051 @workswith The @code{c} syntactic symbol.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6052 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6053
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6054 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6055
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6056 @defun c-lineup-comment
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6057 @findex lineup-comment (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6058 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
6059 @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
6060 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
6061
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6062 @defopt c-comment-only-line-offset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6063 @vindex comment-only-line-offset (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6064 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
6065 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
6066
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6067 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6068 (@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
6069 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6070
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6071 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6072 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
6073 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
6074 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
6075 is equivalent to @code{(@r{@var{value}} . -1000)}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6076 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6077
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6078 @workswith @code{comment-intro}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6079 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6080
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6081 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6082
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6083 @defun c-lineup-knr-region-comment
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6084 @findex lineup-knr-region-comment (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6085 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
6086 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
6087 block. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6088
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6089 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6090 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6091 int main()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6092 /* 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
6093 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6094 return 0;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6095 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6096 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6097 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6098
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6099 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
6100 expressions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6101
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6102 @workswith @code{comment-intro}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6103 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6104
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 @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
6107 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6108 @subsection Miscellaneous Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6109 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6110
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6111 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
6112 any earlier category.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6113
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6114 @defun c-lineup-dont-change
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6115 @findex lineup-dont-change (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6116 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
6117 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
6118
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6119 @workswith Any syntactic symbol.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6120 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6121
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6122 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6123
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6124 @defun c-lineup-cpp-define
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6125 @findex lineup-cpp-define (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6126 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
6127 construct preceding the macro. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6128
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6129 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6130 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6131 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
6132 \"Some text.\";
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6133
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6134 #define X(A, B) \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6135 do @{ \ @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6136 printf (A, B); \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6137 @} while (0)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6138 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6139 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6140
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6141 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6142 and:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6143
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6144 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6145 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6146 int dribble() @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6147 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
6148 error(\"Not running!\");
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6149
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6150 #define X(A, B) \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6151 do @{ \ @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6152 printf (A, B); \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6153 @} while (0)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6154 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6155 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6156
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6157 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
6158 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
6159 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
6160 @code{cpp-define-intro} is combined with the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6161 @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
6162 on the @samp{#define} line:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6163
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6164 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6165 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6166 const char msg[] =
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6167 \"Some text.\";
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6168
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6169 #define X(A, B) do @{ \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6170 printf (A, B); \ @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6171 this->refs++; \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6172 @} while (0) @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6173 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6174 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6175
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6176 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6177 and:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6178
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6179 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6180 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6181 int dribble() @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6182 if (!running)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6183 error(\"Not running!\");
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6184
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6185 #define X(A, B) do @{ \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6186 printf (A, B); \ @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6187 this->refs++; \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6188 @} while (0) @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6189 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6190 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6191
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6192 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
6193 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
6194 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
6195 @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
6196
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6197 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
6198 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
6199 indentation on the top level.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6200
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6201 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
6202 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
6203 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
6204 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
6205 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
6206 described above.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6207
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6208 @workswith @code{cpp-define-intro}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6209 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6210
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6211 @comment ------------------------------------------------------------
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 @defun c-lineup-gcc-asm-reg
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6214 @findex lineup-gcc-asm-reg (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6215 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
6216
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6217 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6218 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6219 asm ("foo %1, %0\n"
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6220 "bar %0, %1"
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6221 : "=r" (w),
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6222 "=r" (x)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6223 : "0" (y),
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6224 "1" (z));
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6225 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6226 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6227
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6228 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
6229 @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
6230
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6231 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
6232 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
6233 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
6234 arglist lineups, e.g.
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6237 (c-lineup-gcc-asm-reg c-lineup-arglist)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6238 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6239
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6240 @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
6241 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6242
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6243 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6244
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6245 @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
6246 @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
6247 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
6248 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
6249 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
6250 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
6251 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
6252 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
6253 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
6254 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
6255
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6256 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6257 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6258 int
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6259 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
6260 @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6261 return -i;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6262 @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6263 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6264 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6265
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6266 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6267 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6268
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6269 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6270 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6271 struct
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6272 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 @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6274 double height;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6275 @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6276 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
6277 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
6278 @sssTBasicOffset{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6279 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6280 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6281
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6282 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6283 and
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6284
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6285 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6286 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6287 struct larch
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6288 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
6289 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
6290 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6291 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6292
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6293 @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
6294 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6295
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6296 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6297 @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
6298 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6299 @section Custom Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6300 @cindex customization, indentation functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6301 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6302
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6303 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
6304 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
6305 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
6306 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
6307 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
6308
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6309 @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
6310 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
6311 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
6312 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
6313 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
6314 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
6315 @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
6316 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
6317 please contact @email{bug-cc-mode@@gnu.org}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6318
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6319 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
6320 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
6321 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
6322 @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
6323 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
6324 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
6325 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
6326 @ref{c-offsets-alist}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6327
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6328 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
6329 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
6330 @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
6331 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
6332
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6333 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
6334 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
6335
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6336 @example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6337 (@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
6338 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6339
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6340 @noindent
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6341 @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
6342 @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
6343 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
6344 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
6345 for the construct that triggered the syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6346 (@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
6347 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
6348 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
6349 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
6350 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
6351 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
6352 (@code{c-langelem-sym}, etc.) described below.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6353
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6354 @vindex c-syntactic-element
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6355 @vindex syntactic-element (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6356 @vindex c-syntactic-context
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6357 @vindex syntactic-context (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6358 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
6359 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
6360 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
6361 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
6362 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
6363 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
6364 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
6365 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
6366 Braces}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6367
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6368 @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
6369 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
6370 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
6371 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
6372 @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
6373
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6374 @defun c-langelem-sym langelem
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6375 @findex langelem-sym (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6376 Return the syntactic symbol in @var{langelem}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6377 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6378
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6379 @defun c-langelem-pos langelem
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6380 @findex langelem-pos (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6381 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
6382 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6383
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6384 @defun c-langelem-col langelem &optional preserve-point
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6385 @findex langelem-col (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6386 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
6387 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
6388 non-@code{nil}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6389 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6390
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6391 @defun c-langelem-2nd-pos langelem
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6392 @findex langelem-2nd-pos (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6393 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
6394 is none.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6395
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6396 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
6397 @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
6398 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
6399 @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
6400 @end defun
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 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
6403 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
6404 custom line-up function associated with it.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6405
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 @node Other Indentation, , Custom Line-Up, Customizing Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6408 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6409 @section Other Special Indentations
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6410 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6411
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6412 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
6413
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6414 @defopt c-label-minimum-indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6415 @vindex label-minimum-indentation (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6416 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
6417 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
6418 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
6419
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6420 @findex c-gnu-impose-minimum
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6421 @findex gnu-impose-minimum (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6422 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
6423 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
6424 work.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6425 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6426
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6427 @defopt c-special-indent-hook
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6428 @vindex special-indent-hook (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6429 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
6430 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
6431 @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
6432 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
6433 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
6434 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
6435 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
6436 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
6437 Line-Up}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6438
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6439 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
6440 @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
6441 (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
6442 @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
6443 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
6444 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
6445 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
6446 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
6447 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
6448
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6449 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
6450 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
6451 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
6452 @end defopt
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6453
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6454
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6455 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6456 @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
6457 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6458 @chapter Customizing Macros
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6459 @cindex macros
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6460 @cindex preprocessor directives
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6461 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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 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
6464 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
6465 by setting the following user option:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6466
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6467 @defopt c-syntactic-indentation-in-macros
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6468 @vindex syntactic-indentation-in-macros (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6469 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
6470 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
6471 @code{cpp-macro-cont}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6472 @end defopt
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 @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
6475 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
6476 customized with these variables:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6477
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6478 @defopt c-backslash-column
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6479 @vindex backslash-column (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6480 @defoptx c-backslash-max-column
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6481 @vindex backslash-max-column (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6482 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
6483 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
6484 automatically insert or align such backslashes,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6485 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
6486
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6487 @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
6488 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
6489 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
6490 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
6491 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
6492 @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
6493 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
6494 long ``stick out'' instead.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6495
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6496 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
6497 the automatic alignment of backslashes, use
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6498 @code{c-auto-align-backslashes}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6499 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6500
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6501 @defopt c-auto-align-backslashes
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6502 @vindex auto-align-backslashes (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6503 Align automatically inserted line continuation backslashes if
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6504 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
6505 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
6506 @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
6507 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
6508
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6509 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
6510 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
6511 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
6512 @code{c-backslash-region} (@kbd{C-c C-\}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6513 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6514
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6515 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6516 @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
6517 @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
6518 @chapter Odds and Ends
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6519 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
6520
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6521 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
6522
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6523 @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
6524 @vindex require-final-newline (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6525 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
6526 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
6527 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
6528 Buffers,,, @lispref{}, @lispreftitle{}}) at mode initialization. If a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6529 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
6530 @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
6531
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6532 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
6533 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
6534 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
6535 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6536
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6537 @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
6538 @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
6539 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
6540 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
6541 @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
6542 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
6543 want.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6544 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6545
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6546 @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
6547 @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
6548 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
6549 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
6550 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
6551
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6552 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
6553 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
6554 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
6555 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
6556 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6557
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6558
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6559 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6560 @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
6561 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6562 @appendix Sample .emacs File
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6563 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6564
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
6565 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
6566 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
6567 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
6568
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6569 @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
6570 ;; 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
6571 ;; 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
6572 ;; inherit from it.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6573 (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
6574 (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
6575 (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
6576
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6577 ;; offset customizations not in my-c-style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6578 ;; 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
6579 ;; made by a style.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6580 (setq c-offsets-alist '((member-init-intro . ++)))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6581
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6582 ;; Create my personal style.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6583 (defconst my-c-style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6584 '((c-tab-always-indent . t)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6585 (c-comment-only-line-offset . 4)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6586 (c-hanging-braces-alist . ((substatement-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6587 (brace-list-open)))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6588 (c-hanging-colons-alist . ((member-init-intro before)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6589 (inher-intro)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6590 (case-label after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6591 (label after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6592 (access-label after)))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6593 (c-cleanup-list . (scope-operator
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6594 empty-defun-braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6595 defun-close-semi))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6596 (c-offsets-alist . ((arglist-close . c-lineup-arglist)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6597 (substatement-open . 0)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6598 (case-label . 4)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6599 (block-open . 0)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6600 (knr-argdecl-intro . -)))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6601 (c-echo-syntactic-information-p . t))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6602 "My C Programming Style")
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6603 (c-add-style "PERSONAL" my-c-style)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6604
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6605 ;; Customizations for all modes in CC Mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6606 (defun my-c-mode-common-hook ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6607 ;; set my personal style for the current buffer
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6608 (c-set-style "PERSONAL")
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6609 ;; other customizations
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6610 (setq tab-width 8
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6611 ;; 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
6612 indent-tabs-mode nil)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6613 ;; we like auto-newline, but not hungry-delete
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6614 (c-toggle-auto-newline 1))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6615 (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
6616 @end verbatim
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6617
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6618 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6619 @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
6620 @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
6621 @chapter Performance Issues
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6622 @cindex performance
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6623 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6624
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6625 @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
6626
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6627 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
6628 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
6629 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
6630 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
6631 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
6632 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
6633
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6634 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
6635 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
6636 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
6637 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
6638 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
6639 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
6640 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
6641 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
6642 it, unless it's something that's mentioned in this section.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6643
Dave Love <fx@gnu.org>
parents:
diff changeset
6644 Because @ccmode{} has to scan the buffer backwards from the current
Dave Love <fx@gnu.org>
parents:
diff changeset
6645 insertion point, and because C's syntax is fairly difficult to parse in
Dave Love <fx@gnu.org>
parents:
diff changeset
6646 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
6647 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
6648 (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
6649 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
6650 gets.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6651
Dave Love <fx@gnu.org>
parents:
diff changeset
6652 @findex beginning-of-defun
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6653 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
6654 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
6655 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
6656 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
6657 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
6658 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
6659 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
6660 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
6661
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6662 @findex defun-prompt-regexp
Dave Love <fx@gnu.org>
parents:
diff changeset
6663 @vindex c-Java-defun-prompt-regexp
Dave Love <fx@gnu.org>
parents:
diff changeset
6664 @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
6665 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
6666 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
6667 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
6668 approach. @ccmode{} comes with a constant
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6669 @code{c-Java-defun-prompt-regexp} which tries to define a regular
Dave Love <fx@gnu.org>
parents:
diff changeset
6670 expression usable for this style, but there are problems with it. In
Dave Love <fx@gnu.org>
parents:
diff changeset
6671 some cases it can cause @code{beginning-of-defun} to hang@footnote{This
Dave Love <fx@gnu.org>
parents:
diff changeset
6672 has been observed in Emacs 19.34 and XEmacs 19.15.}. For this reason,
Dave Love <fx@gnu.org>
parents:
diff changeset
6673 it is not used by default, but if you feel adventurous, you can set
Dave Love <fx@gnu.org>
parents:
diff changeset
6674 @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
6675 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
6676 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
6677 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
6678
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6679 @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
6680 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
6681 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
6682 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
6683 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
6684 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
6685 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
6686 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
6687 Emacs approach to finding the defun starts.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6688
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6689 @vindex c-enable-xemacs-performance-kludge-p
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6690 @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
6691 XEmacs users can set the variable
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6692 @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
6693 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
6694 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
6695 @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
6696 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
6697 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
6698 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
6699 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
6700 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
6701 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
6702 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
6703 in Emacs since the necessary built-in functions don't exist (in Emacs
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6704 21.3 as of this writing in May 2003).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6705
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6706 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
6707 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
6708 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
6709 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
6710 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
6711
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6712 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
6713 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
6714 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
6715 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
6716 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
6717 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
6718 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
6719
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6720 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
6721 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
6722 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
6723 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
6724 more info.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6725
Dave Love <fx@gnu.org>
parents:
diff changeset
6726
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6727 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6728 @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
6729 @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
6730 @chapter Limitations and Known Bugs
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6731 @cindex limitations
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6732 @cindex bugs
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6733 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6734
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6735 @itemize @bullet
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6736 @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
6737 @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
6738 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
6739 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
6740 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
6741
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6742 @item
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6743 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
6744 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
6745 editing.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6746
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6747 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
6748 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
6749 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
6750 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
6751 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
6752
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6753 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
6754 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
6755 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
6756 @ccmode{}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6757
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6758 @item
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6759 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
6760 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
6761 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
6762 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
6763 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
6764
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 @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
6766 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
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 @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
6769 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
6770 @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
6771
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 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
6773 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
6774 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
6775 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
6776 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
6777
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 @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
6779 (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
6780 (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
6781 (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
6782 @end example
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6783 @end itemize
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6784
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6785 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6786 @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
6787 @comment node-name, next, previous, up
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6788 @appendix Frequently Asked Questions
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6789 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
6790
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6791 @itemize @bullet
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6792 @item
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6793 @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
6794
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6795 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
6796
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6797 @item
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6798 @kindex RET
Dave Love <fx@gnu.org>
parents:
diff changeset
6799 @kindex C-j
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6800 @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
6801
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6802 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
6803 @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
6804 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
6805
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6806 @example
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6807 (define-key c-mode-base-map "\C-m" 'c-context-line-break)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6808 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
6809
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6810 @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
6811 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
6812
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6813 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6814 @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
6815
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6816 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
6817 Started}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6818
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6819 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6820 @kindex C-x h
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6821 @kindex C-M-\
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6822 @emph{How do I reindent the whole file?}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6823
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6824 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
6825 @kbd{C-M-\}. @xref{Indentation Commands}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6826
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6827 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6828 @kindex C-M-q
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6829 @kindex C-M-u
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6830 @emph{How do I reindent the current block?}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6831
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6832 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
6833 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
6834 Commands}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6835
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6836 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6837 @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
6838 @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
6839 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
6840
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6841 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
6842 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
6843 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
6844 @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
6845 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
6846 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
6847
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6848 @example
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
6849 (setq c-offsets-alist '((substatement-open . 0)))
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6850 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6851
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6852 @item
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6853 @cindex open paren in column zero
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6854 @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
6855 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
6856 indentation to go haywire. What gives?}
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6857
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6858 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
6859 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
6860 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
6861 @ifset XEMACS
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6862 @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
6863 @end ifset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6864 @ifclear XEMACS
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6865 @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
6866 (@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
6867 @end ifclear
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6868
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6869 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
6870 (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
6871 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
6872 @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
6873 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
6874
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6875 @end itemize
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6876
Dave Love <fx@gnu.org>
parents:
diff changeset
6877
Dave Love <fx@gnu.org>
parents:
diff changeset
6878 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6879 @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
6880 @comment node-name, next, previous, up
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6881 @appendix Getting the Latest CC Mode Release
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6882 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
6883
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6884 @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
6885 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
6886
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6887 @cindex web site
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6888 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
6889 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
6890 @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
6891 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
6892
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6893 @quotation
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6894 @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
6895 @end quotation
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6896
Dave Love <fx@gnu.org>
parents:
diff changeset
6897
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6898 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6899 @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
6900 @comment node-name, next, previous, up
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6901 @appendix Mailing Lists and Submitting Bug Reports
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6902 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6903
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6904 @kindex C-c C-b
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6905 @findex c-submit-bug-report
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6906 @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
6907 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
6908 @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
6909 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
6910 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
6911 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
6912 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
6913 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
6914 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
6915
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6916 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
6917 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
6918 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
6919 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
6920 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
6921 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
6922
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6923 @cindex bug report mailing list
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6924 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
6925 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
6926 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
6927 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
6928 further details.
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6929
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6930 @cindex announcement mailing list
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6931 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
6932 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
6933 @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
6934 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
6935 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
6936 @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
6937 @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
6938 @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
6939 @c There is no newsgroup for Pike. :-(
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6940
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6941 @c Removed the tentative node "Mode Initialization" from here, 2005/8/27.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6942 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6943 @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
6944 @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
6945 @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
6946 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6947
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6948 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
6949 @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
6950 @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
6951 @iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6952 @sp 2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6953 @end iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6954 @printindex fn
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6955
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6956
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6957 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6958 @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
6959 @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
6960 @unnumbered Variable Index
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6961 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6962
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6963 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
6964 @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
6965 @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
6966 @iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6967 @sp 2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6968 @end iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6969 @printindex vr
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6970
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6971
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6972 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6973 @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
6974 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6975 @unnumbered Concept and Key Index
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6976 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6977
Dave Love <fx@gnu.org>
parents:
diff changeset
6978 @printindex cp
Dave Love <fx@gnu.org>
parents:
diff changeset
6979
Dave Love <fx@gnu.org>
parents:
diff changeset
6980
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6981 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6982 @comment Epilogue.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6983 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6984
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6985 @iftex
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6986 @page
Dave Love <fx@gnu.org>
parents:
diff changeset
6987 @summarycontents
Dave Love <fx@gnu.org>
parents:
diff changeset
6988 @contents
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6989 @end iftex
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6990
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6991 @bye
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
6992
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
6993 @ignore
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
6994 arch-tag: c4cab162-5e57-4366-bdce-4a9db2fc97f0
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
6995 @end ignore