annotate man/cc-mode.texi @ 81004:74965b1ffc6f

(t-mouse-mode): Reset t-mouse-mode to nil if there is an error.
author Nick Roberts <nickrob@snap.net.nz>
date Sun, 20 May 2007 08:30:57 +0000
parents 88224dc74061
children d032c1095c4d dc002877ce12 e6fdae9180d4
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::
77235
88224dc74061 Include GFDL.
Chong Yidong <cyd@stupidchicken.com>
parents: 77036
diff changeset
258 * GNU Free Documentation License::
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
259 * Command and Function Index::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
260 * Variable Index::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
261 * 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
262
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
263 @detailmenu
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
264 --- The Detailed Node Listing ---
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
265
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
266 Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
267
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
268 * Indentation Commands::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
269 * Comment Commands::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
270 * Movement Commands::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
271 * Filling and Breaking::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
272 * Minor Modes::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
273 * Electric Keys::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
274 * Auto-newlines::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
275 * Hungry WS Deletion::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
276 * Subword Movement::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
277 * Other Commands::
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
278
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
279 Font Locking
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
280
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
281 * Font Locking Preliminaries::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
282 * Faces::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
283 * Doc Comments::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
284 * AWK Mode Font Locking::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
285
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
286 Configuration Basics
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
287
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
288 * CC Hooks::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
289 * Style Variables::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
290 * Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
291
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
292 Styles
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
293
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
294 * Built-in Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
295 * Choosing a Style::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
296 * Adding Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
297 * File Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
298
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
299 Customizing Auto-newlines
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
300
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
301 * Hanging Braces::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
302 * Hanging Colons::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
303 * Hanging Semicolons and Commas::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
304
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
305 Hanging Braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
306
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
307 * Custom Braces::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
308
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
309 Indentation Engine Basics
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
310
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
311 * Syntactic Analysis::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
312 * Syntactic Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
313 * Indentation Calculation::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
314
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
315 Syntactic Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
316
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
317 * Function Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
318 * Class Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
319 * Conditional Construct Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
320 * Switch Statement Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
321 * Brace List Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
322 * External Scope Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
323 * Paren List Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
324 * Literal Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
325 * Multiline Macro Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
326 * Objective-C Method Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
327 * Anonymous Class Symbol::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
328 * Statement Block Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
329 * K&R Symbols::
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
330
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
331 Customizing Indentation
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
332
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
333 * c-offsets-alist::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
334 * Interactive Customization::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
335 * Line-Up Functions::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
336 * Custom Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
337 * Other Indentation::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
338
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
339 Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
340
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
341 * Brace/Paren Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
342 * List Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
343 * Operator Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
344 * Comment Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
345 * Misc Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
346
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
347 @end detailmenu
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
348 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
349
Dave Love <fx@gnu.org>
parents:
diff changeset
350 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
351 @node Introduction, Overview, Top, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
352 @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
353 @chapter Introduction
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
354 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
355
Dave Love <fx@gnu.org>
parents:
diff changeset
356 @cindex BOCM
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
357 @cindex history
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
358 @cindex awk-mode.el
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
359 @cindex c-mode.el
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
360 @cindex c++-mode.el
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
361
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
362 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
363 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
364 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
365 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
366 @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
367 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
368 in the (X)Emacs base.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
369
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
370 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
371 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
372 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
373 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
374 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
375 was added in version 5.30.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
376
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
377 This manual describes @ccmode{}
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
378 @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
379 version 5.31.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
380 @comment Release.py script can update the version number automatically
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
381
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
382 @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
383 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
384 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
385 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
386 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
387 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
388 uniformly integrated as the other languages.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
389
Dave Love <fx@gnu.org>
parents:
diff changeset
390 @findex c-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
391 @findex c++-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
392 @findex objc-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
393 @findex java-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
394 @findex idl-mode
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
395 @findex pike-mode
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
396 @findex awk-mode
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
397 Note that the name of this package is ``@ccmode{}'', but there is no top
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
398 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
399 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
400 @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
401 @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
402 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
403 @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
404
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
405 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
406 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
407 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
408 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
409
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
410 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
411 @node Overview, Getting Started, Introduction, Top
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
412 @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
413 @chapter Overview of the Manual
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
414 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
415
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
416 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
417 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
418 one).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
419
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
420 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
421 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
422 @ccmode{} (as contrasted with how to customize it).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
423
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
424 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
425 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
426 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
427 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
428 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
429 how to customize these features.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
430
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
431 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
432 ``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
433 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
434 over at a first reading.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
435 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
436
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
437 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
438 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
439 @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
440 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
441 increasing detail.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
442
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
443 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
444 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
445 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
446 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
447 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
448 lists the standard styles that @ccmode{} supplies.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
449
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
450 @item
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
451 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
452 features of @ccmode{}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
453
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
454 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
455 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
456 in creating your own customization.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
457 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
458
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
459 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
460 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
461 into any of the previous chunks.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
462
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
463 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
464 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
465 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
466 bugs/limitations.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
467
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
468 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
469 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
470
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
471 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
472 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
473 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
474 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
475
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
476 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
477 Finally, there are the customary indices.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
478
Dave Love <fx@gnu.org>
parents:
diff changeset
479 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
480 @node Getting Started, Commands, Overview, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
481 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
482 @chapter Getting Started
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
483 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
484
Dave Love <fx@gnu.org>
parents:
diff changeset
485 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
486 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
487 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
488 (see below).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
489
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
490 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
491 @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
492
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
493 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
494 @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
495 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
496 want to change:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
497
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
498 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
499 @item c-basic-offset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
500 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
501 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
502 @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
503
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
504 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
505 (setq c-basic-offset 6)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
506 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
507
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
508 @item The (indentation) style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
509 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
510 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
511 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
512 @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
513 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
514 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
515 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
516
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
517 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
518 (setq c-default-style '((java-mode . "java")
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
519 (awk-mode . "awk")
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
520 (other . "linux")))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
521 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
522
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
523 @item Electric Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
524 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
525 @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
526 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
527 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
528 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
529 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
530 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
531
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
532 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
533 (setq-default c-electric-flag nil)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
534 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
535
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
536 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
537 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
538 section @ref{Minor Modes}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
539
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
540 @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
541 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
542 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
543 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
544 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
545 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
546
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
547 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
548 (defun my-make-CR-do-indent ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
549 (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
550 (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
551 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
552
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
553 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
554 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
555 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
556 in @ref{CC Hooks}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
557 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
558
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
559 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
560 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
561 @code{desktop-read}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
562
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
563 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
564 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
565 reading the chapter @ref{Config Basics}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
566
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
567 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
568 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
569 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
570 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
571 @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
572 @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
573 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
574 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
575 (@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
576
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
577 @deffn Command c-version
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
578 @findex version (c-)
Dave Love <fx@gnu.org>
parents:
diff changeset
579 You can find out what version of @ccmode{} you are using by visiting a C
Dave Love <fx@gnu.org>
parents:
diff changeset
580 file and entering @kbd{M-x c-version RET}. You should see this message in
Dave Love <fx@gnu.org>
parents:
diff changeset
581 the echo area:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
582
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
583 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
584 Using CC Mode version 5.XX
Dave Love <fx@gnu.org>
parents:
diff changeset
585 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
586
Dave Love <fx@gnu.org>
parents:
diff changeset
587 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
588 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
589 @end deffn
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
590
Dave Love <fx@gnu.org>
parents:
diff changeset
591 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
592 @node Commands, Font Locking, Getting Started, Top
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
593 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
594 @chapter Commands
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
595 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
596
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
597 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
598 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
599 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
600 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
601 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
602 buffer, also do other things.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
603
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
604 You might well want to review
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
605 @ifset XEMACS
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
606 @ref{Lists,,,@emacsman{}, @emacsmantitle{}},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
607 @end ifset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
608 @ifclear XEMACS
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
609 @ref{Moving by Parens,,,@emacsman{}, @emacsmantitle{}},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
610 @end ifclear
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
611 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
612 structures.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
613
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
614
Dave Love <fx@gnu.org>
parents:
diff changeset
615 @menu
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
616 * Indentation Commands::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
617 * Comment Commands::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
618 * Movement Commands::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
619 * Filling and Breaking::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
620 * Minor Modes::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
621 * Electric Keys::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
622 * Auto-newlines::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
623 * Hungry WS Deletion::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
624 * Subword Movement::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
625 * Other Commands::
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
626 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
627
Dave Love <fx@gnu.org>
parents:
diff changeset
628 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
629 @node Indentation Commands, Comment Commands, Commands, Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
630 @comment node-name, next, previous,up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
631 @section Indentation Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
632 @cindex indentation
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
633 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
634
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
635 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
636 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
637 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
638 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
639 of your changes.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
640
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
641 @cindex GNU indent program
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
642 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
643 (@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
644 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
645 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
646 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
647 which will rearrange brace location, amongst other things.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
648
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
649 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
650 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
651 indentation of the surrounding code, just like comments.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
652
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
653 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
654 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
655 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
656 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
657 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
658 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
659 out correctly most of the time, though.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
660
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
661 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
662 @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
663 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
664
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
665 These commands indent code:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
666
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
667 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
668 @item @kbd{@key{TAB}} (@code{c-indent-command})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
669 @kindex TAB
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
670 @findex c-indent-command
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
671 @findex indent-command (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
672 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
673 about it for normal use.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
674
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
675 @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
676 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
677 Basics}):
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
678
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
679 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
680 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
681 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
682 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
683 (@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
684 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
685 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
686 that begins at the line's left margin.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
687
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
688 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
689 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
690 @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
691 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
692 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
693 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
694
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
695 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
696 @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
697 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
698 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
699 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
700 @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
701 you want only spaces. @xref{Just Spaces,,, @emacsman{},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
702 @emacsmantitle{}}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
703
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
704 @defopt c-tab-always-indent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
705 @vindex tab-always-indent (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
706 @cindex literal
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
707 This variable modifies how @key{TAB} operates.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
708 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
709 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
710 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
711 current line.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
712 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
713 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
714 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
715 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
716 spaces - see below) at point.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
717 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
718 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
719 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
720 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
721 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
722
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
723 @defopt c-insert-tab-function
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
724 @vindex insert-tab-function (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
725 @findex tab-to-tab-stop
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
726 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
727 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
728 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
729 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
730 @code{indent-tabs-mode}). Some people, however, set
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
731 @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
732 hard tab stops when indenting.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
733 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
734 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
735
Dave Love <fx@gnu.org>
parents:
diff changeset
736 @noindent
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
737 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
738 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
739 Basics}):
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
740 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
741 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
742 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
743 according to their syntactic context;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
744 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
745 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
746 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
747 very useful in this case.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
748 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
749
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
750 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
751 @item @kbd{C-j} (@code{newline-and-indent})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
752 @kindex C-j
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
753 @findex newline-and-indent
68453
72d32b7559c2 (Indentation Commands): Inserts newline, not "linefeed".
Richard M. Stallman <rms@gnu.org>
parents: 68313
diff changeset
754 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
755 typing. This is a standard (X)Emacs command.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
756
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
757 @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
758 @kindex C-M-q
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
759 @findex c-indent-exp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
760 @findex indent-exp (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
761 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
762 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
763 you want to indent.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
764
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
765 @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
766 @kindex C-c C-q
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
767 @findex c-indent-defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
768 @findex indent-defun (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
769 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
770 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
771 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
772 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
773 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
774 brace.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
775
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
776 @item @kbd{C-M-\} (@code{indent-region})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
777 @kindex C-M-\
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
778 @findex indent-region
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
779 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
780 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
781 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
782
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
783 @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
784 @kindex C-M-h
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
785 @findex c-mark-function
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
786 @findex mark-function (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
787 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
788 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
789 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
790 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
791 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
792
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
793 These variables are also useful when indenting code:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
794
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
795 @defopt indent-tabs-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
796 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
797 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
798 indentation, otherwise only spaces are used.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
799 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
800
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
801 @defopt c-progress-interval
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
802 @vindex progress-interval (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
803 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
804 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
805 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
806 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
807 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
808
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
809 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
810 @node Comment Commands, Movement Commands, Indentation Commands, Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
811 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
812 @section Comment Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
813 @cindex comments (insertion of)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
814 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
815
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
816 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
817 @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
818 @kindex C-c C-c
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
819 @findex comment-region
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
820 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
821 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
822 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
823 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
824 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
825 convenience.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
826
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
827 @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
828 @kindex M-;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
829 @findex comment-dwim
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
830 @findex indent-for-comment
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
831 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
832 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
833 @ifclear XEMACS
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
834 (@pxref{Options for Comments,,, emacs, GNU Emacs Manual})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
835 @end ifclear
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
836 @ifset XEMACS
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
837 (@pxref{Comments,,, xemacs, XEmacs User's Manual})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
838 @end ifset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
839 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
840 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
841 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
842 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
843
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
844 @defopt c-indent-comment-alist
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
845 @vindex indent-comment-alist (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
846 @vindex comment-column
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
847 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
848 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
849 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
850 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
851 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
852 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
853 specified by @code{comment-column}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
854
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
855 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
856 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
857 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
858
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
859 @defopt c-indent-comments-syntactically-p
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
860 @vindex indent-comments-syntactically-p (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
861 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
862 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
863 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
864 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
865 lines you can get that by setting
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
866 @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
867
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
868 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
869 @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
870 lines.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
871 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
872 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
873
Dave Love <fx@gnu.org>
parents:
diff changeset
874 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
875 @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
876 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
877 @section Movement Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
878 @cindex movement
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
879 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
880
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
881 @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
882
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
883 @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
884 @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
885 @itemx @kbd{C-M-e}
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
886 @findex c-beginning-of-defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
887 @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
888
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 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
890 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
891 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
892 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
893
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 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
895 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
896 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
897 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
898 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
899 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
900
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
901 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
902 @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
903 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
904 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
905 @emacsmantitle{}}, for more information.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
906
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
907 @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
908 @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
909 @kindex C-M-a (AWK Mode)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
910 @kindex C-M-e (AWK Mode)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
911 @findex c-awk-beginning-of-defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
912 @findex awk-beginning-of-defun (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
913 @findex c-awk-end-of-defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
914 @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
915 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
916 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
917 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
918
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
919 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
920 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
921 @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
922 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
923
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
924 @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
925 @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
926 @kindex M-a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
927 @kindex M-e
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
928 @findex c-beginning-of-statement
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
929 @findex c-end-of-statement
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
930 @findex beginning-of-statement (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
931 @findex end-of-statement (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
932 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
933 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
934 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
935 @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
936 means move over @var{n} statements.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
937
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
938 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
939 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
940
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
941 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
942 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
943 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
944 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
945 strings.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
946
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
947 @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
948 @kindex C-c C-u
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
949 @findex c-up-conditional
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
950 @findex up-conditional (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
951 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
952 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
953 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
954 conditional.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
955
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
956 @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
957 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
958 forward.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
959
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
960 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
961 preprocessor statements.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
962
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
963 @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
964 @findex c-up-conditional-with-else
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
965 @findex up-conditional-with-else (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
966 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
967 lines. Normally those lines are ignored.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
968
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
969 @item @kbd{M-x c-down-conditional}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
970 @findex c-down-conditional
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
971 @findex down-conditional (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
972 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
973 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
974 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
975 conditional.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
976
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
977 @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
978 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
979
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
980 @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
981 @findex c-down-conditional-with-else
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
982 @findex down-conditional-with-else (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
983 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
984 lines. Normally those lines are ignored.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
985
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
986 @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
987 @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
988 @kindex C-c C-p
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
989 @kindex C-c C-n
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
990 @findex c-backward-conditional
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
991 @findex c-forward-conditional
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
992 @findex backward-conditional (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
993 @findex forward-conditional (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
994 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
995 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
996 negative argument, move in the opposite direction.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
997
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
998 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
999 preprocessor statements.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1000
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1001 @item @kbd{M-x c-backward-into-nomenclature}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1002 @itemx @kbd{M-x c-forward-into-nomenclature}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1003 @findex c-backward-into-nomenclature
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1004 @findex c-forward-into-nomenclature
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1005 @findex backward-into-nomenclature (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1006 @findex forward-into-nomenclature (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1007 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
1008 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
1009 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
1010 underscores. E.g. @samp{SymbolsWithMixedCaseAndNoUnderlines}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1011
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1012 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
1013 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
1014 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
1015
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1016 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
1017 @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
1018 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
1019 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1020
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1021 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1022 @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
1023 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1024 @section Filling and Line Breaking Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1025 @cindex text filling
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1026 @cindex line breaking
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1027 @cindex comment handling
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1028 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1029
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1030 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
1031 @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
1032 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
1033 paragraph movement, paragraph filling, adaptive filling etc. wherever
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1034 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
1035 @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
1036 and so on.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1037
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1038 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
1039 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
1040 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
1041 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
1042
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1043 @findex auto-fill-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1044 @cindex Auto Fill mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1045 @cindex paragraph filling
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1046 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
1047 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
1048 @emacsman{}, @emacsmantitle{}}), by paragraph filling (e.g. with
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1049 @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
1050 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
1051 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
1052 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
1053 and @pxref{Customizing Indentation})}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1054
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1055 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1056 @item @kbd{M-q} (@code{c-fill-paragraph})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1057 @kindex M-q
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1058 @findex c-fill-paragraph
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1059 @findex fill-paragraph (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1060 @cindex Javadoc markup
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1061 @cindex Pike autodoc markup
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1062 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
1063 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
1064 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
1065 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
1066
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1067 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
1068 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
1069 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
1070 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
1071 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
1072
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1073 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
1074 buffers.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1075
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1076 @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
1077 @kindex M-j
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1078 @findex c-indent-new-comment-line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1079 @findex indent-new-comment-line (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1080 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
1081 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
1082 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
1083 the line break. It is the replacement for
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1084 @code{indent-new-comment-line}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1085
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1086 @item @kbd{M-x c-context-line-break}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1087 @findex c-context-line-break
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1088 @findex context-line-break (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1089 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
1090 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
1091 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
1092 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
1093 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
1094 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
1095 @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
1096 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
1097 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
1098 valid.}.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1099
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1100 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
1101 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
1102 @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
1103 this function. @xref{Sample .emacs File}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1104
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1105 @item @kbd{M-x c-context-open-line}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1106 @findex c-context-open-line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1107 @findex context-open-line (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1108 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
1109 @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
1110 @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
1111 line break.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1112 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1113
Dave Love <fx@gnu.org>
parents:
diff changeset
1114
Dave Love <fx@gnu.org>
parents:
diff changeset
1115 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1116 @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
1117 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1118 @section Minor Modes
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1119 @cindex Minor Modes
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1120 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
1121
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1122 @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
1123 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
1124
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1125 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1126 @item electric mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1127 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
1128 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
1129 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
1130 especially for users who are new to @ccmode{}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1131 @item auto-newline mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1132 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
1133 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
1134 when electric mode is disabled.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1135 @item hungry-delete mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1136 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
1137 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
1138 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
1139 last statement.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1140 @item subword mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1141 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
1142 (@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
1143 parts of sillycapsed symbols as different words.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1144 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
1145 @samp{Graphics}, and @samp{Context}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1146 @item syntactic-indentation mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1147 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
1148 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
1149 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
1150 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
1151 of `c-basic-offset'.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1152 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1153
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1154 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
1155 @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
1156 and @ref{Indentation Engine Basics}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1157
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1158 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
1159 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
1160 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
1161 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
1162 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
1163
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1164 @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
1165 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
1166 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
1167 @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
1168 @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
1169 @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
1170 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
1171
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1172 Here are the commands to toggle these modes:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1173
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1174 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1175 @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
1176 @kindex C-c C-l
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1177 @findex c-toggle-electric-state
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1178 @findex toggle-electric-state (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1179 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
1180 also suppresses auto-newline mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1181
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1182 @item @kbd{C-c C-a} (@code{c-toggle-auto-newline})
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1183 @kindex C-c C-a
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1184 @findex c-toggle-auto-newline
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1185 @findex toggle-auto-newline (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1186 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
1187 it also enables electric minor mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1188
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1189 @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
1190 @findex c-toggle-hungry-state
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1191 @findex toggle-hungry-state (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1192 Toggle hungry-delete minor mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1193
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1194 @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
1195 @findex c-toggle-auto-hungry-state
Dave Love <fx@gnu.org>
parents:
diff changeset
1196 @findex toggle-auto-hungry-state (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1197 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
1198
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1199 @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
1200 @kindex C-c C-w
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1201 @findex c-subword-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1202 @findex subword-mode (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1203 Toggle subword mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1204
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1205 @item @kbd{M-x c-toggle-syntactic-indentation}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1206 @findex c-toggle-syntactic-indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1207 @findex toggle-syntactic-indentation (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1208 Toggle syntactic-indentation mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1209 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1210
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1211 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
1212 programmatically, they take an optional numerical argument. A
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1213 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
1214 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
1215 turn it (or them) off.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1216
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1217
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1218 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1219 @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
1220 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1221 @section Electric Keys and Keywords
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1222 @cindex electric characters
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1223 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
1224
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1225 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
1226 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
1227 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
1228 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
1229 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
1230
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1231 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
1232 electric minor mode (@pxref{Minor Modes}).
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1233
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1234 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
1235 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
1236 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
1237 @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
1238 does by default).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1239
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1240 These keys and keywords are:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1241 @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
1242 @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
1243 @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
1244
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1245 @table @kbd
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1246 @item #
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1247 @kindex #
Dave Love <fx@gnu.org>
parents:
diff changeset
1248 @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
1249 @findex electric-pound (c-)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1250 @vindex c-electric-pound-behavior
Dave Love <fx@gnu.org>
parents:
diff changeset
1251 @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
1252 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
1253 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
1254 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
1255 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
1256 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
1257 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
1258 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
1259
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1260 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
1261 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
1262 character.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1263 @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
1264 @c reindentation.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1265
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1266 @item *
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1267 @kindex *
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1268 @itemx /
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1269 @kindex /
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1270 @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
1271 @findex electric-star (c-)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1272 @findex c-electric-slash
Dave Love <fx@gnu.org>
parents:
diff changeset
1273 @findex electric-slash (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1274 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
1275 (@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
1276 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
1277 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
1278 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
1279 whitespace before it).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1280
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1281 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
1282 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
1283 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
1284 this behaviour. @xref{Clean-ups}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1285
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1286 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
1287 electric.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1288
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1289 @item <
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1290 @kindex <
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1291 @itemx >
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1292 @kindex >
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1293 @findex c-electric-lt-gt
Dave Love <fx@gnu.org>
parents:
diff changeset
1294 @findex electric-lt-gt (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1295 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
1296 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
1297 @samp{template} declaration (and similar constructs in other
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1298 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
1299 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
1300 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
1301 electric.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1302
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1303 @item (
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1304 @kindex (
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1305 @itemx )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1306 @kindex )
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1307 @findex c-electric-paren
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1308 @findex electric-paren (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1309 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
1310 @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
1311 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
1312 automatically.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1313
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1314 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
1315 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
1316 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
1317 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
1318 get these actions. @xref{Clean-ups}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1319
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1320 @item @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1321 @kindex @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1322 @itemx @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1323 @kindex @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1324 @findex c-electric-brace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1325 @findex electric-brace (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1326 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
1327 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
1328 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
1329 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
1330 inserted by auto-newline mode in certain circumstances.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1331 @xref{Clean-ups}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1332
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1333 @item :
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1334 @kindex :
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1335 @findex c-electric-colon
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1336 @findex electric-colon (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1337 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
1338 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
1339 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
1340 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
1341 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
1342 operator. @xref{Clean-ups}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1343
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1344 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
1345 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
1346 @xref{Other Commands}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1347
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1348 @item ;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1349 @kindex ;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1350 @itemx ,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1351 @kindex ,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1352 @findex c-electric-semi&comma
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1353 @findex electric-semi&comma (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1354 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
1355 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
1356 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
1357 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
1358 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
1359 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
1360
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1361 @end table
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1362
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1363 @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
1364 @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
1365
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1366 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
1367 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
1368 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
1369 @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
1370 @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
1371
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1372 An example:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1373
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1374 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1375 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1376 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
1377 if (a[i])
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1378 res += a[i]->offset;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1379 else
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1380 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1381 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1382
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1383 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
1384 since it continues that statement. @ccmode{} will automatically
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1385 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
1386 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
1387 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
1388
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1389 @vindex abbrev-mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1390 @findex abbrev-mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1391 @cindex Abbrev mode
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1392 @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
1393 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
1394 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
1395 @end deffn
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1396
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1397
Dave Love <fx@gnu.org>
parents:
diff changeset
1398 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1399 @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
1400 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1401 @section Auto-newline Insertion
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1402 @cindex auto-newline
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1403 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
1404
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1405 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
1406 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
1407 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
1408 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
1409 character you type, sometimes after it, sometimes both.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1410
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1411 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
1412
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1413 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1414 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1415 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
1416 @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
1417 @samp{C/la}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1418
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1419 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1420 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
1421 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
1422
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1423 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1424 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
1425 insertion of a newline @emph{before} the character.)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1426
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1427 @item
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1428 @cindex literal
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1429 @cindex syntactic whitespace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1430 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
1431 @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
1432 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
1433 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
1434
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1435 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1436 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
1437 normal, with no @kbd{C-u} prefix).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1438 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1439
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1440 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
1441 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
1442 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
1443 won't have to bother.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1444
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1445 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
1446 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
1447 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
1448 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
1449 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
1450 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
1451 clean-ups listed by key.
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
1452
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1453
Dave Love <fx@gnu.org>
parents:
diff changeset
1454 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1455 @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
1456 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1457 @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
1458 @cindex hungry-deletion
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1459 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
1460
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1461 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
1462 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
1463 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
1464 ``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
1465 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
1466 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
1467 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
1468 @kbd{C-j}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1469
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1470 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
1471 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
1472 your editing modes!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1473
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1474 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
1475 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
1476 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
1477
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1478 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
1479
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1480 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1481 @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
1482 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
1483 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
1484 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
1485 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
1486 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
1487 deletion.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1488
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1489 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1490 @item @kbd{@key{DEL}} (@code{c-electric-backspace})
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1491 @kindex DEL
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1492 @findex c-electric-backspace
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1493 @findex electric-backspace (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1494 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
1495 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
1496 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
1497 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
1498 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
1499 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
1500 passing it the prefix argument, if any.)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1501
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1502 @item @code{c-backspace-function}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1503 @vindex c-backspace-function
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1504 @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
1505 @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
1506 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
1507 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
1508 value is @code{backward-delete-char-untabify}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1509 (@pxref{Deletion,,,@lispref{}, @lispreftitle{}}, the function which
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1510 deletes a single character.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1511
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1512 @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
1513 @kindex C-d
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1514 @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
1515 @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
1516 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
1517 @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
1518 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
1519 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
1520 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
1521 argument.)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1522
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1523 @item @code{c-delete-function}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1524 @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
1525 @vindex delete-function (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1526 @findex delete-char
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1527 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
1528 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
1529 default value is @code{delete-char}.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1530 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1531
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1532 @item Using Distinct Bindings
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1533 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
1534 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
1535 @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
1536 rather than using the minor mode toggling.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1537
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1538 @table @asis
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1539 @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
1540 @kindex C-c C-<backspace>
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1541 @kindex C-c <backspace>
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1542 @kindex C-c C-DEL
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1543 @kindex C-c DEL
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1544 @findex c-hungry-delete-backwards
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1545 @findex hungry-delete-backwards (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1546 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
1547 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
1548 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
1549 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
1550 a character terminal.
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1551
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1552 @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
1553 @kindex C-c C-d
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1554 @kindex C-c C-<DELETE>
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1555 @kindex C-c <DELETE>
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1556 @findex c-hungry-delete-forward
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1557 @findex hungry-delete-forward (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1558 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
1559 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
1560 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
1561 same reason as for @key{DEL} above.
67253
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 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1564
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1565 @kindex <delete>
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1566 @kindex <backspace>
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1567
69139
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1568 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
1569 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
1570 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
1571 those two keys depends on the flavor of (X)Emacs you are using.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1572
Dave Love <fx@gnu.org>
parents:
diff changeset
1573 @findex c-electric-delete
Dave Love <fx@gnu.org>
parents:
diff changeset
1574 @findex electric-delete (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1575 @findex c-hungry-delete
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1576 @findex hungry-delete (c-)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1577 @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
1578 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
1579 @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
1580 @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
1581 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
1582 XEmacs variable.
85cd04b9bd25 (Hungry WS Deletion): Rename c-hungry-backspace to
Alan Mackenzie <acm@muc.de>
parents: 68639
diff changeset
1583 @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
1584 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
1585 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
1586 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
1587 @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
1588 @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
1589 @code{delete-key-deletes-forward}.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1590
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1591 @findex normal-erase-is-backspace-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1592
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1593 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
1594 @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
1595 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
1596 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
1597 @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
1598 its extended bindings accordingly.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1599
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1600 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
1601 @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
1602 @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
1603 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
1604 yourself if the defaults are unsuitable.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1605
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1606 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
1607 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
1608 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
1609 trouble with this in GNU Emacs.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1610
Dave Love <fx@gnu.org>
parents:
diff changeset
1611
Dave Love <fx@gnu.org>
parents:
diff changeset
1612 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1613 @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
1614 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1615 @section Subword Movement and Editing
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1616 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
1617
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1618 @cindex nomenclature
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1619 @cindex subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1620 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
1621 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
1622 @samp{EmacsFrameClass}, or @samp{NSGraphicsContext}. Here we call
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1623 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
1624 (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
1625 @dfn{subword}. Here are some examples:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1626
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1627 @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
1628 @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
1629 @iftex
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1630 @item @b{Nomenclature}
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1631 @tab @b{Subwords}
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1632 @end iftex
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1633 @ifnottex
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1634 @item Nomenclature
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1635 @tab Subwords
72600
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1636 @item ---------------------------------------------------------
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1637 @end ifnottex
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1638 @item @samp{GtkWindow}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1639 @tab @samp{Gtk} and @samp{Window}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1640 @item @samp{EmacsFrameClass}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1641 @tab @samp{Emacs}, @samp{Frame}, and @samp{Class}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1642 @item @samp{NSGraphicsContext}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1643 @tab @samp{NS}, @samp{Graphics}, and @samp{Context}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1644 @end multitable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1645
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1646 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
1647 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
1648 nomenclature and treat them as separate words:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1649
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1650 @findex c-forward-subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1651 @findex forward-subword (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1652 @findex c-backward-subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1653 @findex backward-subword (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1654 @findex c-mark-subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1655 @findex mark-subword (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1656 @findex c-kill-subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1657 @findex kill-subword (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1658 @findex c-backward-kill-subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1659 @findex backward-kill-subword (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1660 @findex c-transpose-subwords
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1661 @findex transpose-subwords (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1662 @findex c-capitalize-subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1663 @findex capitalize-subword (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1664 @findex c-upcase-subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1665 @findex upcase-subword (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1666 @findex c-downcase-subword
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1667 @findex downcase-subword (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1668 @multitable @columnfractions .20 .40 .40
72600
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1669 @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
1670 @iftex
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1671 @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
1672 @end iftex
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1673 @ifnottex
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1674 @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
1675 @item ----------------------------------------------------------------------------
3947a80cfe22 (Subword Movement): Don't use @headitem.
Eli Zaretskii <eliz@gnu.org>
parents: 71224
diff changeset
1676 @end ifnottex
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1677 @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
1678 @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
1679 @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
1680 @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
1681 @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
1682 @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
1683 @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
1684 @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
1685 @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
1686 @end multitable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1687
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1688 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
1689 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
1690 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
1691 commands.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1692
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1693 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
1694 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
1695 @file{.emacs}:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1696
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1697 @example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1698 (add-hook 'c-mode-common-hook
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1699 (lambda () (c-subword-mode 1)))
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1700 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1701
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1702 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
1703 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
1704
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1705 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1706 @node Other Commands, , Subword Movement, Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1707 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1708 @section Other Commands
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1709 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1710
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1711 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
1712
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
1713 @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
1714 @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
1715 @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
1716 @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
1717 @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
1718 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
1719
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 @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
1721 @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
1722 @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
1723
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 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
1725 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
1726 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
1727
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 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
1729 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
1730 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
1731
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
1732 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
1733 @item @kbd{C-c :} (@code{c-scope-operator})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1734 @kindex C-c :
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1735 @findex c-scope-operator
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1736 @findex scope-operator (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1737 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
1738 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
1739 @kbd{C-c :} does just this.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1740
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1741 @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
1742 @kindex C-c C-\
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1743 @findex c-backslash-region
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1744 @findex backslash-region (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1745 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
1746 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
1747
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1748 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
1749 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
1750 @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
1751 deletes any backslashes.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1752
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1753 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
1754 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
1755 (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
1756
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1757 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
1758 @end table
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1759
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1760 @noindent
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1761 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
1762 (@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
1763 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
1764 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
1765 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
1766 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
1767 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
1768 with the trailing backslashes.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1769
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1770 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1771 @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
1772 @kindex C-c C-e
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1773 @findex c-macro-expand
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1774 @findex macro-expand (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1775 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
1776 using an appropriate external preprocessor program. Normally it
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1777 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
1778 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
1779 with the expansion.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1780
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1781 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
1782 sequence is not bound in these other modes.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1783
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1784 @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
1785 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
1786 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
1787 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
1788 @end table
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1789
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1790 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1791 @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
1792 @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
1793 @chapter Font Locking
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1794 @cindex font locking
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1795 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1796
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1797 @cindex Font Lock mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1798
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1799 @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
1800 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
1801 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
1802 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
1803 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
1804 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
1805 @ccmode{} buffers.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1806
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1807 @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
1808 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
1809 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
1810 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
1811
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1812 @menu
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1813 * Font Locking Preliminaries::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1814 * Faces::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1815 * Doc Comments::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1816 * 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
1817 @end menu
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
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1820 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1821 @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
1822 @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
1823 @section Font Locking Preliminaries
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1824 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1825
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1826 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
1827 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
1828 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
1829 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
1830 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
1831 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
1832 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
1833 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
1834
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1835 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
1836 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
1837 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
1838 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
1839 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
1840 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
1841 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
1842 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
1843 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
1844 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
1845
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1846 @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
1847
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1848 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
1849
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1850 @enumerate
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1851 @comment 1
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1852 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1853 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
1854 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
1855
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1856 @comment 2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1857 @item
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1858 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
1859 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
1860 @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
1861 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
1862 comments like Javadoc are fontified according to
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1863 @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
1864
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1865 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
1866 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
1867
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1868 @comment 3
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1869 @item
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1870 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
1871 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
1872 @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
1873 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
1874 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
1875 that are uncertain.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1876
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1877 @cindex Lazy Lock mode
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1878 @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
1879
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1880 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
1881 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
1882 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
1883 buffer at once can easily get bothersomely slow even on contemporary
77036
307c1e602f07 (Font Locking Preliminaries): Link to Emacs manual node on Font
Chong Yidong <cyd@stupidchicken.com>
parents: 76599
diff changeset
1884 hardware. @xref{Font Lock,,,@emacsman{}, @emacsmantitle{}}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1885 @end enumerate
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1886
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1887 @cindex user defined types
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1888 @cindex types, user defined
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 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
1891 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
1892
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1893 @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
1894 @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
1895 @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
1896 @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
1897 @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
1898 @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
1899 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
1900 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
1901 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
1902 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
1903 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
1904 single identifier.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1905
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1906 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
1907 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
1908 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
1909 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
1910 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
1911
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1912 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
1913 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
1914 recognize types.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1915 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1916
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1917
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1918 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1919 @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
1920 @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
1921 @section Faces
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1922 @cindex faces
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1923 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1924
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1925 @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
1926 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
1927 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
1928 @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
1929 @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
1930
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1931 @itemize @bullet
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1932 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1933 @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
1934 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
1935
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1936 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1937 @vindex font-lock-doc-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1938 @vindex font-lock-doc-string-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1939 @vindex font-lock-comment-face
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1940 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
1941 get @code{font-lock-doc-face} (Emacs) or
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
1942 @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
1943 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
1944
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1945 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1946 @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
1947 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
1948 @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
1949
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1950 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1951 @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
1952 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
1953
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1954 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1955 @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
1956 @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
1957 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
1958 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
1959
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1960 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1961 @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
1962 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
1963 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
1964 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
1965
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1966 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1967 @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
1968 @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
1969 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
1970 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
1971 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
1972 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
1973 them somewhere.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1974
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1975 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1976 @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
1977 @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
1978 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
1979
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1980 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1981 @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
1982 @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
1983 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
1984 @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
1985
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1986 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1987 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
1988 labels.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1989
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1990 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1991 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
1992 labels.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1993
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1994 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
1995 @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
1996 @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
1997 @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
1998 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
1999 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
2000 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
2001
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2002 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2003 @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
2004 @vindex c-invalid-face
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2005 @vindex invalid-face (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2006 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
2007 @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
2008 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
2009 @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
2010 default.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2011
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2012 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
2013 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
2014 @end itemize
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2015
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2016
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2017 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2018 @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
2019 @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
2020 @section Documentation Comments
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2021 @cindex documentation comments
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2022 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2023
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2024 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
2025 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
2026 @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
2027 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
2028
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2029 @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
2030 @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
2031 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
2032 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
2033
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2034 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
2035 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
2036 conflict).
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2037
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2038 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
2039 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
2040 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
2041 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
2042 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
2043
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2044 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
2045 @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
2046
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2047 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
2048 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
2049 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
2050 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
2051 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
2052 reinitialize.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2053
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2054 @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
2055 @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
2056 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
2057 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
2058 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
2059 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
2060 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2061
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2062 @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
2063 styles:
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 @table @code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2066 @item javadoc
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2067 @cindex Javadoc markup
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2068 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
2069
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2070 @item autodoc
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2071 @cindex Pike autodoc markup
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2072 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
2073
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2074 @item gtkdoc
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2075 @cindex GtkDoc markup
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2076 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
2077 @end table
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2078
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2079 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
2080 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
2081 Bug Reports}).
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2082
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2083 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
2084 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
2085 @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
2086 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
2087 @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
2088 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
2089 @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
2090
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2091 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
2092 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
2093
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2094
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2095 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2096 @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
2097 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2098 @section AWK Mode Font Locking
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2099 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2100
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2101 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
2102 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
2103 Lisp Reference Manual}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2104
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2105 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
2106 AWK mode:
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2107
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2108 @table @asis
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2109 @item @code{font-lock-variable-name-face}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2110 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
2111 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
2112 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
2113 @code{"/dev/stderr"}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2114
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2115 @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
2116 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
2117 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
2118 standard functions (such as @code{match}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2119
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2120 @item @code{font-lock-string-face}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2121 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
2122 (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
2123 regular expressions (delimited by @samp{/}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2124
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2125 @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
2126 This face highlights the following syntactically invalid AWK
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2127 constructs:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2128
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2129 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2130 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2131 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
2132 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
2133 @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
2134 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
2135 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
2136
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2137 AWK mode fontifies unterminated strings/regular expressions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2138 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
2139 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
2140 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
2141
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2142 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2143 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
2144 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
2145 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
2146 spuriously highlight a valid concatenation expression where an
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2147 identifier precedes a parenthesised expression. Unfortunately.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2148
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2149 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2150 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
2151 escaped newline. The @samp{\} is highlighted.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2152 @end itemize
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2153 @end table
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2154
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2155
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2156 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2157 @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
2158 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2159 @chapter Configuration Basics
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2160 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2161
71224
b7261e09f8e4 * cc-mode.texi (Getting Started, Indentation Commands, Config Basics)
Romain Francoise <romain@orebokech.com>
parents: 69681
diff changeset
2162 @cindex Emacs Initialization File
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2163 @cindex Configuration
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2164 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
2165 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
2166 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
2167 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
2168 @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
2169 other file. @xref{Init File,,,@emacsman{}, @emacsmantitle{}}. For
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2170 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
2171 throughout the rest of the manual.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2172
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2173 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
2174 @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
2175 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
2176 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
2177 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
2178 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
2179
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2180 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
2181 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
2182 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
2183 method, ``Top-level commands or the customization interface''.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2184
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2185 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
2186 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
2187 @itemize @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2188 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2189 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2190 @item Style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2191 @itemx Top-level command or ``customization interface''
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2192 @itemx Hook
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2193 @itemx File Style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2194 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2195 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2196
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2197 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
2198 settings:
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2199
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2200 @table @asis
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2201 @item Top-level commands or the ``customization interface''
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2202 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
2203 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
2204 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
2205 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
2206 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
2207 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
2208 (@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
2209 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
2210
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2211 @example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2212 (setq c-basic-offset 4)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2213 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2214
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2215 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
2216 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
2217 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
2218 @xref{Easy Customization,,,@emacsman{}, @emacsmantitle{}}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2219 @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
2220 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
2221 @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
2222 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
2223 the customizations.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2224
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2225 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
2226 configuration settings into the special style @code{user}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2227 @xref{Built-in Styles}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2228
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2229 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
2230 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
2231 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
2232 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
2233 more sophisticated facilities, hooks and styles.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2234
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2235 @item Hooks
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2236 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
2237 Emacs to execute later in specific circumstances.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2238 @xref{Hooks,,,@lispref{}, @lispreftitle{}}. @ccmode{} supplies a main
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2239 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
2240 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
2241 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
2242 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
2243 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
2244 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
2245 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
2246
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2247 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2248 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2249 (defun my-c-mode-hook ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2250 (setq c-basic-offset 3))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2251 (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
2252
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2253 (defun my-java-mode-hook ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2254 (setq c-basic-offset 6))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2255 (add-hook 'java-mode-hook 'my-java-mode-hook)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2256 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2257 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2258
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2259 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
2260
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2261 @item Styles
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2262 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
2263 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
2264 @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
2265 @ccmode{} is delivered with several existing styles. Additionally,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2266 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
2267 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
2268 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
2269 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
2270
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2271 @example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2272 (setq c-default-style '((java-mode . "java")
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2273 (awk-mode . "awk")
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2274 (other . "free-group-style")))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2275 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2276
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2277 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
2278 to create them.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2279
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2280 @item File Styles
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2281 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
2282 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
2283 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
2284 end of the source file. @xref{File Styles}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2285
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2286 @item Hooks with Styles
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2287 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
2288 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
2289 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
2290 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
2291 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
2292
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2293 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2294 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2295 (defun my-c-mode-hook ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2296 (c-set-style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2297 (if (and (buffer-file-name)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2298 (string-match "/usr/src/linux" (buffer-file-name)))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2299 "linux"
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2300 "free-group-style")))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2301 (add-hook 'c-mode-hook 'my-c-mode-hook)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2302 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2303 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2304
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2305 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
2306 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
2307 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
2308 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
2309 @file{.emacs}:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2310
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2311 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2312 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2313 (defun my-turn-on-auto-newline ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2314 (c-toggle-auto-newline 1))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2315 (add-hook 'c-mode-common-hook 'my-turn-on-auto-newline)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2316 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2317 @end example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2318 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2319
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2320 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2321 * CC Hooks::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2322 * Style Variables::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2323 * Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2324 @end menu
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2325
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2326 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2327 @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
2328 @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
2329 @section Hooks
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2330 @cindex mode hooks
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2331 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2332 @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
2333 @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
2334 @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
2335 @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
2336 @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
2337 @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
2338 @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
2339
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2340 @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
2341 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
2342 @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
2343 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
2344 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
2345 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
2346 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
2347 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
2348 @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
2349 standard Emacs conventions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2350
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2351 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
2352 currently active style (@pxref{Styles}). Then it calls
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2353 @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
2354 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
2355 those set by @code{c-default-style}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2356
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2357 @defvar c-initialization-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2358 @vindex initialization-hook (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2359 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
2360 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
2361 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
2362 @end defvar
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2363
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2364 @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
2365 @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
2366 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
2367 language specific hook.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2368 @end defvar
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2369
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2370 @defvar c-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2371 @defvarx c++-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2372 @defvarx objc-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2373 @defvarx java-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2374 @defvarx idl-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2375 @defvarx pike-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2376 @defvarx awk-mode-hook
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2377 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
2378 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
2379 @end defvar
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
2380
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2381 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
2382 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
2383 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
2384 overwritten when @ccmode{} gets loaded.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2385
Dave Love <fx@gnu.org>
parents:
diff changeset
2386 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
2387 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
2388 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
2389 @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
2390 file.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2391
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2392 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2393 (defun my-c-mode-common-hook ()
Dave Love <fx@gnu.org>
parents:
diff changeset
2394 ;; 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
2395 (no-case-fold-search)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2396 )
Dave Love <fx@gnu.org>
parents:
diff changeset
2397 (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
Dave Love <fx@gnu.org>
parents:
diff changeset
2398 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2399
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2400 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2401 @node Style Variables, Styles, CC Hooks, Config Basics
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2402 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2403 @section Style Variables
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2404 @cindex styles
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2405 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2406
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2407 @cindex style variables
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2408 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
2409 @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
2410 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
2411 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
2412 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
2413
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2414 @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
2415
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2416 @itemize @bullet
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2417 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2418 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
2419 can instead be made global by setting
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2420 @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
2421 initialized.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2422
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2423 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2424 @vindex c-old-style-variable-behavior
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2425 @vindex old-style-variable-behavior (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2426 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
2427 - 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
2428 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
2429 @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
2430 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
2431 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
2432 @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
2433 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
2434 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
2435 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
2436 behavior, you can set the variable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2437 @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
2438 ``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
2439 @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
2440 Basics}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2441
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2442 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2443 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
2444 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
2445 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
2446 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
2447 @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
2448 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
2449 @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
2450 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
2451 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
2452 @code{c-offsets-alist}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2453
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2454 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2455 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
2456 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
2457 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
2458 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
2459 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
2460 or a list of functions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2461
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2462 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2463 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
2464 @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
2465 @xref{Built-in Styles}, for details.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2466 @end itemize
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2467
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2468 The style variables are:@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2469 @code{c-indent-comment-alist},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2470 @code{c-indent-comments-syntactically-p} (@pxref{Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2471 Commands});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2472 @code{c-doc-comment-style} (@pxref{Doc Comments});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2473 @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
2474 (@pxref{Custom Filling and Breaking});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2475 @code{c-hanging-braces-alist} (@pxref{Hanging Braces});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2476 @code{c-hanging-colons-alist} (@pxref{Hanging Colons});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2477 @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
2478 Commas});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2479 @code{c-cleanup-list} (@pxref{Clean-ups});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2480 @code{c-basic-offset} (@pxref{Customizing Indentation});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2481 @code{c-offsets-alist} (@pxref{c-offsets-alist});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2482 @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
2483 @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
2484 (@pxref{Other Indentation});@*
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2485 @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
2486 (@pxref{Custom Macros}).
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2487
Dave Love <fx@gnu.org>
parents:
diff changeset
2488 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2489 @node Styles, , Style Variables, Config Basics
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2490 @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
2491 @section Styles
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2492 @cindex styles
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2493 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2494
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
2495 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
2496 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
2497 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
2498 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
2499
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2500 Most people only need to edit code formatted in just a few well-defined
Dave Love <fx@gnu.org>
parents:
diff changeset
2501 and consistent styles. For example, their organization might impose a
Dave Love <fx@gnu.org>
parents:
diff changeset
2502 ``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
2503 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
2504 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
2505 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
2506 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
2507 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
2508 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
2509 existing code using these styles.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2510
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2511 @menu
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2512 * Built-in Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2513 * Choosing a Style::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2514 * Adding Styles::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2515 * File Styles::
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2516 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
2517
Dave Love <fx@gnu.org>
parents:
diff changeset
2518
Dave Love <fx@gnu.org>
parents:
diff changeset
2519 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2520 @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
2521 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2522 @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
2523 @cindex styles, built-in
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2524 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2525
Dave Love <fx@gnu.org>
parents:
diff changeset
2526 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
2527 what you're looking for. These are:
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2528
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2529 @table @code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2530 @item gnu
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2531 @cindex GNU style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2532 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
2533 for C code in GNU programs.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2534
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2535 @item k&r
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2536 @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
2537 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
2538
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2539 @item bsd
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2540 @cindex BSD style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2541 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
2542
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2543 @item whitesmith
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2544 @cindex Whitesmith style
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2545 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
2546 commercial C compiler.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2547
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2548 @item stroustrup
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2549 @cindex Stroustrup style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2550 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
2551
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2552 @item ellemtel
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2553 @cindex Ellemtel style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2554 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
2555 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
2556 Ellemtel@footnote{This document is available at
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2557 @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
2558 places.}.
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2559 @c N.B. This URL was still valid at 2005/8/28 (ACM).
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2560
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2561 @item linux
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2562 @cindex Linux style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2563 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
2564
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2565 @item python
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2566 @cindex Python style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2567 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
2568 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
2569 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
2570
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2571 @item java
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2572 @cindex Java style
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2573 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
2574 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
2575 @code{java-mode}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2576
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2577 @item awk
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2578 @cindex AWK style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2579 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
2580 @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
2581 @code{awk-mode}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2582
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2583 @item user
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2584 @cindex User style
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2585 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
2586 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
2587 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
2588 @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
2589 @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
2590 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
2591 afterwards.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2592 @end table
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2593
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2594
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2595 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2596 @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
2597 @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
2598 @subsection Choosing a Style
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2599 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2600
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
2601 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
2602 @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
2603 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
2604
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2605 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
2606 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
2607 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
2608 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
2609
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
2610 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
2611 (@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
2612 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
2613
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2614 @defopt c-default-style
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2615 @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
2616 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
2617 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
2618 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
2619
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2620 @enumerate
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2621 @item
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2622 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
2623 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
2624
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2625 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2626 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
2627 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
2628
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2629 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2630 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
2631 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
2632 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
2633
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2634 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2635 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
2636 @end enumerate
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2637
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
2638 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
2639 @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
2640 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
2641 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
2642
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2643 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
2644 . "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
2645 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2646
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2647 @defvar c-indentation-style
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2648 @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
2649 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
2650 string.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2651 @end defvar
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2652
Dave Love <fx@gnu.org>
parents:
diff changeset
2653
Dave Love <fx@gnu.org>
parents:
diff changeset
2654 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2655 @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
2656 @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
2657 @subsection Adding and Amending Styles
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2658 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2659
Dave Love <fx@gnu.org>
parents:
diff changeset
2660 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
2661 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
2662 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
2663 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
2664 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
2665 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
2666
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2667 @cindex style definition
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2668 @c @defvr {List} style definition
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2669 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2670 @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
2671 ([@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
2672
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2673 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
2674 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
2675 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
2676 @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
2677 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
2678 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
2679 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
2680 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
2681
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2682 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
2683 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
2684 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
2685 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
2686 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
2687 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
2688 @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
2689 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
2690 system.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2691 @c @end defvr
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2692
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2693 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
2694
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2695 @table @code
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2696 @item c-offsets-alist
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2697 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
2698
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2699 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2700 (@r{@var{syntactic-symbol}} . @r{@var{offset}})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2701 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2702
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2703 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
2704 @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
2705 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
2706
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2707 @item c-special-indent-hook
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2708 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
2709 @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
2710 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
2711 @end table
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2712 @end table
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2713
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2714 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
2715 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
2716 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
2717
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2718 @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
2719 @findex add-style (c-)
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
2720 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
2721 @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
2722 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
2723 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
2724 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
2725 Otherwise, a new style is added.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2726
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2727 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
2728 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
2729 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
2730 You should use @code{c-set-style} instead.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2731
Dave Love <fx@gnu.org>
parents:
diff changeset
2732 The sample @file{.emacs} file provides a concrete example of how a new
Dave Love <fx@gnu.org>
parents:
diff changeset
2733 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
2734 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2735
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2736 @defvar c-style-alist
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2737 @vindex style-alist (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2738 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
2739 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
2740 @end defvar
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2741
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2742
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2743 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2744 @node File Styles, , Adding Styles, Styles
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2745 @comment node-name, next, previous, up
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
2746 @subsection File Styles
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2747 @cindex styles, file local
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2748 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2749
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2750 @cindex file local variables
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2751
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2752 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
2753 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
2754 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
2755 @emacsmantitle{}}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2756
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2757 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
2758 @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
2759 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
2760 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
2761 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
2762
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2763 @defvar c-file-style
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2764 @vindex file-style (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2765 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
2766 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
2767 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
2768 @end defvar
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2769
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2770 @defvar c-file-offsets
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2771 @vindex file-offsets (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2772 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
2773 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
2774 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
2775 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
2776 @end defvar
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2777
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2778 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
2779 before file offset settings
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2780 (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
2781 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
2782 made local to that buffer, even if
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2783 @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
2784 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
2785 notice this effect.}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2786
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2787 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
2788 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
2789 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
2790 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
2791 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
2792 will take priority.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2793
Dave Love <fx@gnu.org>
parents:
diff changeset
2794 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2795 @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
2796 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2797 @chapter Customizing Filling and Line Breaking
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2798 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
2799
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2800 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
2801 @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
2802 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
2803 relevant variables as necessary.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2804
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2805 @vindex c-comment-prefix-regexp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2806 @vindex comment-prefix-regexp (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2807 @cindex comment line prefix
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2808 @vindex comment-start
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2809 @vindex comment-end
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2810 @vindex comment-start-skip
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2811 @vindex paragraph-start
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2812 @vindex paragraph-separate
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2813 @vindex paragraph-ignore-fill-prefix
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2814 @vindex adaptive-fill-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2815 @vindex adaptive-fill-regexp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2816 @vindex adaptive-fill-first-line-regexp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2817 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
2818 paragraphs, @ccmode{} makes several standard
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2819 variables@footnote{@code{comment-start}, @code{comment-end},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2820 @code{comment-start-skip}, @code{paragraph-start},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2821 @code{paragraph-separate}, @code{paragraph-ignore-fill-prefix},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2822 @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
2823 @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
2824 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
2825
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2826 @defopt c-comment-prefix-regexp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2827 @vindex comment-prefix-regexp (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2828 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
2829 @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
2830 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
2831 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
2832 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
2833 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
2834 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
2835
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2836 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
2837 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
2838 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
2839 @samp{//+\\|\\**}, which matches C++ style line comments like
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2840
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2841 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2842 // blah blah
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2843 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2844
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2845 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2846 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
2847 subsequent lines of C style block comments like
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2848
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2849 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2850 @group
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 * blah blah
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2853 */
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2854 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2855 @end example
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 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2858 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
2859 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
2860 (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
2861 block comments.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2862
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2863 @findex c-setup-paragraph-variables
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2864 @findex setup-paragraph-variables (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2865 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
2866 @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
2867 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
2868 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
2869 @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
2870 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
2871 @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
2872 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
2873 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2874
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2875 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
2876 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
2877
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2878 @vindex adaptive-fill-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2879 @cindex Adaptive Fill mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2880 @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
2881 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
2882 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
2883 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
2884 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
2885 margins of the texts kept intact:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2886
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2887 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2888 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2889 /* 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
2890 * 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
2891 * Knuth,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2892 *
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2893 * 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
2894 * proved it correct, not tried it.
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 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2897 @end example
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 @findex c-setup-filladapt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2900 @findex setup-filladapt (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2901 @findex filladapt-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2902 @vindex filladapt-mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2903 @cindex Filladapt mode
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2904 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
2905 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
2906 @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
2907 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
2908 @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
2909 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
2910 @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
2911 @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
2912 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
2913 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
2914 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
2915 something like this in your @file{.emacs}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2916
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2917 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2918 (defun my-c-mode-common-hook ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2919 (c-setup-filladapt)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2920 (filladapt-mode 1))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2921 (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
2922 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2923
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2924 @defopt c-block-comment-prefix
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2925 @vindex block-comment-prefix (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2926 @vindex c-comment-continuation-stars
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2927 @vindex comment-continuation-stars (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2928 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
2929 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
2930 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
2931 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
2932 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
2933 @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
2934 @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
2935 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
2936 }@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
2937 @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
2938 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
2939 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
2940 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
2941
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2942 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2943 /* 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
2944 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2945
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2946 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2947 break into
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2948
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2949 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
2950 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2951 /* Got O(n^2) here, which
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2952 * is a Bad Thing. */
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
2953 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
2954 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
2955
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2956 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
2957 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
2958 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
2959 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
2960 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
2961 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
2962 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2963
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2964 @defopt c-ignore-auto-fill
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2965 @vindex ignore-auto-fill (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2966 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
2967 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
2968 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
2969 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
2970 never should occur:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2971
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2972 @table @code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2973 @item string
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2974 Inside a string or character literal.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2975 @item c
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2976 Inside a C style block comment.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2977 @item c++
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2978 Inside a C++ style line comment.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2979 @item cpp
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2980 Inside a preprocessor directive.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2981 @item code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2982 Anywhere else, i.e. in normal code.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2983 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2984
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2985 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
2986 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
2987 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
2988 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
2989 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
2990 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
2991 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
2992 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
2993 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
2994 results in the current implementation.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2995 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2996
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2997 @vindex comment-multi-line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
2998 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
2999 @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
3000 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
3001 @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
3002 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
3003 comments.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3004
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3005 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
3006 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
3007 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
3008 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
3009 (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
3010 inconsistent behavior.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3011
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3012 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3013 @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
3014 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3015 @chapter Customizing Auto-newlines
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3016 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3017
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3018 @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
3019 different ways, depending on the character just typed:
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 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3022 @item Braces and Colons
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3023 @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
3024 (@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
3025 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
3026 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
3027 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
3028 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
3029 @ref{Hanging Colons}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3030
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3031 @item Semicolons and Commas
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3032 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
3033 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
3034 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
3035 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3036
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3037 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
3038 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
3039 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
3040 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
3041 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
3042
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3043 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3044 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3045 while (i < MAX) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3046 total += entry[i];
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3047 entry [i++] = 0;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3048 @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3049 @end group
Dave Love <fx@gnu.org>
parents:
diff changeset
3050 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3051
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3052 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3053 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
3054 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
3055 brace.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3056
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3057 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
3058 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
3059 circumstances. @xref{Clean-ups}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3060
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3061 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3062 * Hanging Braces::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3063 * Hanging Colons::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3064 * Hanging Semicolons and Commas::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3065 @end menu
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3066
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3067
Dave Love <fx@gnu.org>
parents:
diff changeset
3068 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3069 @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
3070 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3071 @section Hanging Braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3072 @cindex hanging braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3073 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3074
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3075 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
3076 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
3077 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
3078 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
3079 in @ref{Style Variables}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3080
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3081 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
3082 @samp{@{}:
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3085 if (foo < 17) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3086 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3087
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3088 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3089 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
3090 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
3091 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
3092 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
3093 something like:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3094
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3095 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3096 ((substatement-open 1061))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3097 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3098
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3099 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3100 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
3101 into @code{c-hanging-braces-alist}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3102
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3103 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
3104 put this 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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3107 (brace-entry-open)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3108 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3109
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3110 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
3111 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
3112 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
3113 ``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
3114 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
3115
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3116 @defopt c-hanging-braces-alist
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3117 @vindex hanging-braces-alist (c-)
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 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
3120 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
3121 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
3122 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
3123 or a function.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3124
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3125 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3126 @item The Key - the syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3127 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
3128 @code{brace-list-intro}, @code{statement-cont},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3129 @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
3130 @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
3131 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
3132 @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
3133 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
3134 ignored.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3135
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3136 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
3137 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
3138 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
3139 braces of anonymous classes produce a combination of
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3140 @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
3141 normal indentation analysis.}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3142
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3143 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
3144 @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
3145 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
3146 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
3147 these constructs.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3148
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3149 @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
3150 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
3151 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
3152 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
3153 a function as a brace hanging @var{action}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3154
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3155 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
3156 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
3157 @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
3158 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
3159 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
3160 of the line, as in:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3161
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3162 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3163 // here, open braces always `hang'
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3164 void spam( int i ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3165 if( i == 7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3166 dosomething(i);
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3167 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3168 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3169 @end example
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 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
3172 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
3173 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
3174 are added neither before nor after the brace.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3175 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3176
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3177 If a syntactic symbol is missing entirely from
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3178 @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
3179 @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
3180 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
3181
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3182 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
3183
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3184 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3185 ((brace-list-open)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3186 (brace-entry-open)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3187 (statement-cont)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3188 (substatement-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3189 (block-close . c-snug-do-while)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3190 (extern-lang-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3191 (namespace-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3192 (module-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3193 (composition-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3194 (inexpr-class-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3195 (inexpr-class-close before))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3196 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3197
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3198 @noindent which says that @code{brace-list-open},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3199 @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
3200 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
3201 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
3202 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
3203 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
3204 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
3205 @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
3206 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
3207 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
3208 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
3209 @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
3210 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
3211 themselves.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3212 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3213
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3214 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3215 * Custom Braces::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3216 @end menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3217
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3218 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3219 @node Custom Braces, , Hanging Braces, Hanging Braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3220 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3221 @subsection Custom Brace Hanging
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3222 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3223
Dave Love <fx@gnu.org>
parents:
diff changeset
3224 @vindex c-hanging-braces-alist
Dave Love <fx@gnu.org>
parents:
diff changeset
3225 @vindex hanging-braces-alist (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3226 @cindex action functions
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3227 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
3228 @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
3229 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
3230 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
3231 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
3232 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
3233 @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
3234 ``hanginess'' of a brace, usually by looking at the code near it.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3235
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3236 @cindex customization, brace hanging
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3237 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
3238 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
3239 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
3240 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
3241 @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
3242 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
3243 of them (i.e. @code{nil}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3244
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3245 @defvar c-syntactic-context
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3246 @vindex syntactic-context (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3247 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
3248 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
3249 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
3250 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
3251 the proper functioning of @ccmode{}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3252
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3253 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
3254 (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
3255 (@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
3256 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
3257 c-special-indent-hook function (@pxref{Other Indentation}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3258 @end defvar
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3259
Dave Love <fx@gnu.org>
parents:
diff changeset
3260 As an example, @ccmode{} itself uses this feature to dynamically
Dave Love <fx@gnu.org>
parents:
diff changeset
3261 determine the hanginess of braces which close ``do-while''
Dave Love <fx@gnu.org>
parents:
diff changeset
3262 constructs:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3263
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3264 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3265 void do_list( int count, char** atleast_one_string )
Dave Love <fx@gnu.org>
parents:
diff changeset
3266 @{
Dave Love <fx@gnu.org>
parents:
diff changeset
3267 int i=0;
Dave Love <fx@gnu.org>
parents:
diff changeset
3268 do @{
Dave Love <fx@gnu.org>
parents:
diff changeset
3269 handle_string( atleast_one_string[i] );
Dave Love <fx@gnu.org>
parents:
diff changeset
3270 i++;
Dave Love <fx@gnu.org>
parents:
diff changeset
3271 @} while( i < count );
Dave Love <fx@gnu.org>
parents:
diff changeset
3272 @}
Dave Love <fx@gnu.org>
parents:
diff changeset
3273 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3274
Dave Love <fx@gnu.org>
parents:
diff changeset
3275 @ccmode{} assigns the @code{block-close} syntactic symbol to the
Dave Love <fx@gnu.org>
parents:
diff changeset
3276 brace that closes the @code{do} construct, and normally we'd like the
Dave Love <fx@gnu.org>
parents:
diff changeset
3277 line that follows a @code{block-close} brace to begin on a separate
Dave Love <fx@gnu.org>
parents:
diff changeset
3278 line. However, with ``do-while'' constructs, we want the
Dave Love <fx@gnu.org>
parents:
diff changeset
3279 @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
3280 associate the @code{block-close} symbol with the @var{action} function
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3281 @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
3282
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3283 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3284 (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
3285 "Dynamically calculate brace hanginess for do-while statements."
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3286 (save-excursion
Dave Love <fx@gnu.org>
parents:
diff changeset
3287 (let (langelem)
Dave Love <fx@gnu.org>
parents:
diff changeset
3288 (if (and (eq syntax 'block-close)
Dave Love <fx@gnu.org>
parents:
diff changeset
3289 (setq langelem (assq 'block-close c-syntactic-context))
Dave Love <fx@gnu.org>
parents:
diff changeset
3290 (progn (goto-char (cdr langelem))
Dave Love <fx@gnu.org>
parents:
diff changeset
3291 (if (= (following-char) ?@{)
Dave Love <fx@gnu.org>
parents:
diff changeset
3292 (forward-sexp -1))
Dave Love <fx@gnu.org>
parents:
diff changeset
3293 (looking-at "\\<do\\>[^_]")))
Dave Love <fx@gnu.org>
parents:
diff changeset
3294 '(before)
Dave Love <fx@gnu.org>
parents:
diff changeset
3295 '(before after)))))
Dave Love <fx@gnu.org>
parents:
diff changeset
3296 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
3297
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3298 @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
3299 @findex snug-do-while (c-)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3300 This function simply looks to see if the brace closes a ``do-while''
Dave Love <fx@gnu.org>
parents:
diff changeset
3301 clause and if so, returns the list @samp{(before)} indicating
Dave Love <fx@gnu.org>
parents:
diff changeset
3302 that a newline should be inserted before the brace, but not after it.
Dave Love <fx@gnu.org>
parents:
diff changeset
3303 In all other cases, it returns the list @samp{(before after)} so
Dave Love <fx@gnu.org>
parents:
diff changeset
3304 that the brace appears on a line by itself.
Dave Love <fx@gnu.org>
parents:
diff changeset
3305
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3306 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3307 @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
3308 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3309 @section Hanging Colons
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3310 @cindex hanging colons
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3311 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3312
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3313 @cindex customization, colon hanging
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3314 @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
3315 @vindex hanging-colons-alist (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3316
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3317 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
3318 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
3319 @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
3320 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
3321 @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
3322 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
3323 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
3324 newly typed colon.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3325
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3326 @defopt c-hanging-colons-alist
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3327 @vindex hanging-colons-alist (c-)
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 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3330 @item The Key - the syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3331 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
3332 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
3333 @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
3334 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
3335
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3336 @item The associate value - the ``ACTION'' list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3337 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
3338 symbols @code{before} and @code{after}. Unlike in
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3339 @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
3340 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
3341 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3342 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3343
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3344 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
3345 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
3346 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
3347 @ccmode{}. @xref{Clean-ups}, for details.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3348
Dave Love <fx@gnu.org>
parents:
diff changeset
3349 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3350 @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
3351 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3352 @section Hanging Semicolons and Commas
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3353 @cindex hanging semicolons
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3354 @cindex hanging commas
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3355 @cindex customization, semicolon newlines
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3356 @cindex customization, comma newlines
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3357 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3358
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3359 @defopt c-hanging-semi&comma-criteria
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3360 @vindex hanging-semi&comma-criteria (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3361 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
3362 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
3363 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
3364 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
3365 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
3366 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
3367 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
3368 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
3369 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
3370 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
3371
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3372 @table @code
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3373 @item t
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3374 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
3375 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
3376 @item stop
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3377 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
3378 be inserted.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3379 @item nil
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3380 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
3381 to be called.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3382 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3383
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3384 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
3385 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
3386 determination being made, then no newline is added.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3387
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3388 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
3389 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
3390 @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
3391 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
3392 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3393
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3394 @defun c-semi&comma-no-newlines-before-nonblanks
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3395 @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
3396 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
3397 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
3398 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
3399 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
3400 @code{c-hanging-semi&comma-criteria} list.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3401
Dave Love <fx@gnu.org>
parents:
diff changeset
3402 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
3403 (defun c-semi&comma-no-newlines-before-nonblanks ()
Dave Love <fx@gnu.org>
parents:
diff changeset
3404 (save-excursion
Dave Love <fx@gnu.org>
parents:
diff changeset
3405 (if (and (eq last-command-char ?\;)
Dave Love <fx@gnu.org>
parents:
diff changeset
3406 (zerop (forward-line 1))
Dave Love <fx@gnu.org>
parents:
diff changeset
3407 (not (looking-at "^[ \t]*$")))
Dave Love <fx@gnu.org>
parents:
diff changeset
3408 'stop
Dave Love <fx@gnu.org>
parents:
diff changeset
3409 nil)))
Dave Love <fx@gnu.org>
parents:
diff changeset
3410 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3411 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3412
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3413 @defun c-semi&comma-inside-parenlist
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3414 @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
3415 @defunx c-semi&comma-no-newlines-for-oneline-inliners
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3416 @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
3417 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
3418 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
3419 statements. In addition to
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3420 @code{c-semi&comma-no-newlines-before-nonblanks} described above,
Dave Love <fx@gnu.org>
parents:
diff changeset
3421 @ccmode{} also comes with the criteria function
Dave Love <fx@gnu.org>
parents:
diff changeset
3422 @code{c-semi&comma-no-newlines-for-oneline-inliners}, which suppresses
Dave Love <fx@gnu.org>
parents:
diff changeset
3423 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
3424 (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
3425 @end defun
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3426
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3427
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3428 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3429 @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
3430 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3431 @chapter Clean-ups
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3432 @cindex clean-ups
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3433 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3434
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3435 @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
3436 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
3437 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
3438 @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
3439
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
3440 @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
3441 (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
3442 @end example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3443
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3444 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
3445 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
3446 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
3447 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
3448
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3449 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
3450 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
3451 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
3452 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
3453 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
3454 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
3455
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3456 @defopt c-cleanup-list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3457 @vindex cleanup-list (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3458 @cindex literal
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3459
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3460 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
3461 @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
3462 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
3463 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
3464 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3465
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3466 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
3467 auto-newline minor modes are enabled:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3468
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3469 @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
3470 @c bit too much in dvi output.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3471 @table @code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3472 @item brace-else-brace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3473 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
3474 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
3475 @samp{else} is typed. So for example, this:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3476
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3477 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3478 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3479 void spam(int i)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3480 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3481 if( i==7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3482 dosomething();
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 else
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3485 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3486 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3487 @end example
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 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3490 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
3491
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3492 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3493 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3494 void spam(int i)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3495 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3496 if( i==7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3497 dosomething();
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3498 @} else @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3499 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3500 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3501
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3502 @item brace-elseif-brace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3503 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
3504 @samp{@} else if (...) @{} constructs. For example:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3505
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3506 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3507 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3508 void spam(int i)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3509 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3510 if( i==7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3511 dosomething();
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 else if( i==3 )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3514 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3515 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3516 @end example
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 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3519 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
3520
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3521 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3522 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3523 void spam(int i)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3524 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3525 if( i==7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3526 dosomething();
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3527 @} else if(
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3528 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3529 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3530
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3531 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3532 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
3533
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3534 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3535 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3536 void spam(int i)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3537 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3538 if( i==7 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3539 dosomething();
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3540 @} else if( i==3 ) @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3541 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3542 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3543
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3544 @item brace-catch-brace
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3545 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
3546 (...) @{} in C++ and Java mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3547
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3548 @item empty-defun-braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3549 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
3550 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
3551 Thus the following:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3552
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3553 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3554 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3555 class Spam
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3556 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3557 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3558 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3559 @end example
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 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3562 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
3563
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3564 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3565 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3566 class Spam
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3567 @{@}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3568 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3569 @end example
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 @item defun-close-semi
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3572 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
3573 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
3574 semicolon is typed. So for example, the following:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3575
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3576 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3577 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3578 class Spam
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3579 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3580 ...
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3581 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3582 ;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3583 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3584 @end example
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 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3587 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
3588
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3589 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3590 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3591 class Spam
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3592 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3593 ...
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3594 @};
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3595 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3596 @end example
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 @item list-close-comma
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3599 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
3600 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
3601 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
3602 @code{defun-close-semi}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3603
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3604 @item scope-operator
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3605 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
3606 across multiple lines@footnote{Certain C++ constructs introduce
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3607 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
3608 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
3609 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
3610 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
3611 @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
3612
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3613 @item one-liner-defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3614 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
3615 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
3616 the closing brace is typed. If the variable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3617 @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
3618 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
3619
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3620 For example, consider this AWK code:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3621
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3622 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3623 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3624 BEGIN @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3625 FS = "\t" # use <TAB> as a field separator
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3626 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3627 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3628 @end example
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 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3631 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
3632
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3633 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3634 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3635 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
3636 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3637 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3638
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3639 @defopt c-max-one-liner-length
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3640 @vindex max-one-liner-length (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3641 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
3642 @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
3643 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
3644 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
3645 applies.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3646 @end defopt
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3647 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3648
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3649 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
3650 @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
3651 Auto-newline minor mode are enabled:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3652
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3653 @table @code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3654 @item space-before-funcall
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3655 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
3656 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
3657 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
3658 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
3659 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
3660 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
3661 functions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3662
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3663 @item compact-empty-funcall
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3664 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
3665 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
3666 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
3667 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
3668 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
3669 (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
3670 closing parenthesis is typed.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3671
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3672 @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
3673 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
3674 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
3675 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
3676 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
3677 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
3678 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3679
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3680
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3681 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3682 @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
3683 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3684 @chapter Indentation Engine Basics
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3685 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3686
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3687 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
3688 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
3689 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
3690 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
3691
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3692 @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
3693 general mechanism for customizing indentation. When @ccmode{} indents
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3694 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
3695
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3696 @enumerate
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3697 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3698 @cindex syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3699 @cindex anchor position
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3700 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
3701 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
3702 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
3703 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
3704 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
3705 Analysis}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3706 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3707 @cindex offsets
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3708 @cindex indentation offset specifications
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3709 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
3710 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
3711 ``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
3712 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
3713 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
3714 described in @ref{c-offsets-alist}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3715 @end enumerate
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3716
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3717 In exceptional circumstances, the syntax directed indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3718 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
3719 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
3720 the variable interactively, @ref{Minor Modes}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3721
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3722 @defopt c-syntactic-indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3723 @vindex syntactic-indentation (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3724 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
3725 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
3726 @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
3727 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
3728 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
3729 (@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
3730 of the variables associated with indentation, not even
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3731 @code{c-special-indent-hook}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3732 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3733
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3734 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3735 * Syntactic Analysis::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3736 * Syntactic Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3737 * Indentation Calculation::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3738 @end menu
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3739
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3740
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3741 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3742 @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
3743 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3744 @section Syntactic Analysis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3745 @cindex syntactic analysis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3746 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3747
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3748 @cindex syntactic element
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3749 @cindex syntactic context
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3750 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
3751 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
3752 (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
3753 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
3754 @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
3755 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
3756 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
3757 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
3758 brief and typical example:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3759
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3760 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3761 ((defun-block-intro 1959))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3762 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3763
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3764 @cindex syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3765 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3766 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
3767 @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
3768 recognized, e.g. @code{statement}, @code{substatement},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3769 @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
3770 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
3771 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
3772 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
3773
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3774 @cindex anchor position
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3775 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
3776 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
3777 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
3778 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
3779 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
3780
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3781 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
3782 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
3783 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
3784
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3785 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3786 1: void swap( int& a, int& b )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3787 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3788 3: int tmp = a;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3789 4: a = b;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3790 5: b = tmp;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3791 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3792 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3793
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3794 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3795 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
3796 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
3797
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3798 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3799 @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
3800 @kindex C-c C-s
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3801 @findex c-show-syntactic-information
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3802 @findex show-syntactic-information (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3803 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
3804 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
3805 position(s).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3806 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3807
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3808 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
3809 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
3810 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
3811 line.}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3812
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3813 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3814 ((statement 35))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3815 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3816
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3817 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3818 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
3819 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
3820 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
3821 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
3822
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3823 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3824 ((defun-block-intro 29))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3825 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3826
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3827 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3828 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
3829 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
3830 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
3831
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3832 Here's another example:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3833
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3834 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3835 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
3836 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3837 3: if( doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3838 4: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3839 5: return( val + incr );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3840 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3841 7: return( val );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3842 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3843 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3844
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3845 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3846 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
3847
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3848 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3849 ((substatement-open 46))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3850 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3851
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3852 @cindex substatement
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3853 @cindex substatement block
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3854 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3855 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
3856 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
3857 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
3858 @code{do}, @code{switch}, etc. A @dfn{substatement
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3859 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
3860
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3861 @cindex comment-only line
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3862 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
3863 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
3864 this is a @dfn{comment-only line}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3865
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3866 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3867 1: void draw_list( List<Drawables>& drawables )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3868 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3869 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
3870 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
3871 5: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3872 6: drawables[i].draw();
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3873 7: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3874 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3875 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3876
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3877 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3878 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
3879
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3880 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3881 ((comment-intro) (defun-block-intro 46))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3882 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3883
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3884 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3885 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
3886 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
3887 anchor position.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3888
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3889
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3890 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3891 @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
3892 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3893 @section Syntactic Symbols
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3894 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
3895
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
3896 @cindex syntactic symbols, brief list
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3897 @vindex c-offsets-alist
Dave Love <fx@gnu.org>
parents:
diff changeset
3898 @vindex offsets-alist (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3899 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
3900 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
3901 descriptions. The previous section (@pxref{Syntactic Analysis})
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3902 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
3903 them.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3904
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3905 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
3906 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
3907 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
3908 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
3909 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
3910 line---this highlights the anchor position.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3911
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3912 @ssindex -open symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3913 @ssindex -close symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3914 @ssindex -block-intro symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3915 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
3916 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
3917 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
3918 @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
3919 construct will contain the suffix @code{-block-intro}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3920
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3921 @ssindex -intro symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3922 @ssindex -cont symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3923 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
3924 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
3925 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
3926 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
3927 respectively.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3928
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3929 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
3930 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
3931 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
3932
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3933 @table @code
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3934 @item string
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3935 Inside a multiline string. @ref{Literal Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3936 @item c
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3937 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
3938 @item defun-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3939 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
3940 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3941 @item defun-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3942 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
3943 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3944 @item defun-block-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3945 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
3946 @item class-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3947 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
3948 @item class-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3949 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
3950 @item inline-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3951 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
3952 @item inline-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3953 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
3954 @item func-decl-cont
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3955 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
3956 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
3957 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
3958 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
3959 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
3960 @c go somewhere better?}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3961 @item knr-argdecl-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3962 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
3963 @item knr-argdecl
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3964 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
3965 @item topmost-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3966 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
3967 @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
3968 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
3969 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
3970 @code{knr-argdecl}. @ref{Function Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3971 @item member-init-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3972 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
3973 @item member-init-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3974 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
3975 @item inher-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3976 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
3977 @item inher-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3978 Subsequent multiple inheritance lines. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3979 @item block-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3980 Statement block open brace. @ref{Literal Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3981 @item block-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3982 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
3983 @item brace-list-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3984 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
3985 @item brace-list-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3986 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
3987 @item brace-list-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3988 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
3989 @item brace-list-entry
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3990 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
3991 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3992 @item brace-entry-open
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3993 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
3994 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
3995 @item statement
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3996 A statement. @ref{Function Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
3997 @item statement-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
3998 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
3999 @item statement-block-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4000 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
4001 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4002 @item statement-case-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4003 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
4004 @item statement-case-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4005 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
4006 Statement Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4007 @item substatement
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4008 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
4009 @ref{Conditional Construct Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4010 @item substatement-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4011 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
4012 Symbols}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4013 @item substatement-label
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4014 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
4015 @ref{Conditional Construct Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4016 @item case-label
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4017 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
4018 @item access-label
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4019 C++ access control label. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4020 @item label
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4021 Any other label. @ref{Literal Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4022 @item do-while-closure
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4023 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
4024 @ref{Conditional Construct Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4025 @item else-clause
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4026 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
4027 @ref{Conditional Construct Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4028 @item catch-clause
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4029 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
4030 @code{try}-@code{catch} construct. @ref{Conditional Construct
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4031 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4032 @item comment-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4033 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
4034 @item arglist-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4035 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
4036 @item arglist-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4037 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
4038 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
4039 @item arglist-cont-nonempty
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4040 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
4041 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
4042 @item arglist-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4043 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
4044 @item stream-op
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4045 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
4046 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
4047 @item inclass
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4048 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
4049 @item cpp-macro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4050 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
4051 @item cpp-define-intro
71224
b7261e09f8e4 * cc-mode.texi (Getting Started, Indentation Commands, Config Basics)
Romain Francoise <romain@orebokech.com>
parents: 69681
diff changeset
4052 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
4053 @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
4054 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4055 @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
4056 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
4057 @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
4058 @ref{Multiline Macro Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4059 @item friend
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4060 A C++ friend declaration. @ref{Class Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4061 @item objc-method-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4062 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
4063 Method Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4064 @item objc-method-args-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4065 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
4066 Method Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4067 @item objc-method-call-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 call. @ref{Objective-C Method
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4069 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4070 @item extern-lang-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4071 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
4072 @{...@}}). @ref{External Scope Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4073 @item extern-lang-close
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4074 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
4075 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4076 @item inextern-lang
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4077 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
4078 @code{extern} blocks. @ref{External Scope Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4079 @item namespace-open
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4080 @itemx namespace-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4081 @itemx innamespace
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4082 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
4083 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
4084 @item module-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4085 @itemx module-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4086 @itemx inmodule
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4087 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
4088 @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
4089 @item composition-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4090 @itemx composition-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4091 @itemx incomposition
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4092 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
4093 @ref{External Scope Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4094 @item template-args-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4095 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
4096 @item inlambda
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4097 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
4098 (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
4099 Block Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4100 @item lambda-intro-cont
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4101 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
4102 @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
4103 @ref{Statement Block Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4104 @item inexpr-statement
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4105 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
4106 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
4107 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
4108 Symbols}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4109 @item inexpr-class
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4110 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
4111 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
4112 Java. @ref{Anonymous Class Symbol}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4113 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4114
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4115 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4116 * Function Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4117 * Class Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4118 * Conditional Construct Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4119 * Switch Statement Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4120 * Brace List Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4121 * External Scope Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4122 * Paren List Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4123 * Literal Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4124 * Multiline Macro Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4125 * Objective-C Method Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4126 * Anonymous Class Symbol::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4127 * Statement Block Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4128 * K&R Symbols::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4129 @end menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4130
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4131 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4132 @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
4133 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4134 @subsection Function Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4135 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4136
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4137 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
4138
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4139 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4140 1: void
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4141 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
4142 3: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4143 4: int tmp = a;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4144 5: a = b;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4145 6: b = tmp;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4146 7: int ignored =
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4147 8: a + b;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4148 9: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4149 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4150
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4151 @ssindex topmost-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4152 @ssindex topmost-intro-cont
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4153 @ssindex defun-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4154 @ssindex defun-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4155 @ssindex defun-block-intro
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4156 Line 1 shows a @code{topmost-intro} since it is the first line that
Dave Love <fx@gnu.org>
parents:
diff changeset
4157 introduces a top-level construct. Line 2 is a continuation of the
Dave Love <fx@gnu.org>
parents:
diff changeset
4158 top-level construct introduction so it has the syntax
Dave Love <fx@gnu.org>
parents:
diff changeset
4159 @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
4160 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
4161 corresponding
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4162 @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
4163 function definition. Line 4 is a @code{defun-block-intro}, i.e. it is
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4164 the first line of a brace-block, enclosed in a
Dave Love <fx@gnu.org>
parents:
diff changeset
4165 top-level function definition.
Dave Love <fx@gnu.org>
parents:
diff changeset
4166
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4167 @ssindex statement
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4168 @ssindex statement-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4169 Lines 5, 6, and 7 are all given @code{statement} syntax since there
Dave Love <fx@gnu.org>
parents:
diff changeset
4170 isn't much special about them. Note however that line 8 is given
Dave Love <fx@gnu.org>
parents:
diff changeset
4171 @code{statement-cont} syntax since it continues the statement begun
Dave Love <fx@gnu.org>
parents:
diff changeset
4172 on the previous line.
Dave Love <fx@gnu.org>
parents:
diff changeset
4173
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4174 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4175 @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
4176 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4177 @subsection Class related Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4178 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4179
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4180 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
4181
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4182 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4183 1: class Bass
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4184 2: : public Guitar,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4185 3: public Amplifiable
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4186 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4187 5: public:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4188 6: Bass()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4189 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
4190 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
4191 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
4192 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
4193 11: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4194 12: eString.tune( 'E' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4195 13: aString.tune( 'A' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4196 14: dString.tune( 'D' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4197 15: gString.tune( 'G' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4198 16: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4199 17: friend class Luthier;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4200 18: @};
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4201 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4202
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4203 @ssindex class-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4204 @ssindex class-close
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4205 As in the previous example, line 1 has the @code{topmost-intro} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4206 Here however, the brace that opens a C++ class definition on line 4 is
Dave Love <fx@gnu.org>
parents:
diff changeset
4207 assigned the @code{class-open} syntax. Note that in C++, classes,
Dave Love <fx@gnu.org>
parents:
diff changeset
4208 structs, and unions are essentially equivalent syntactically (and are
Dave Love <fx@gnu.org>
parents:
diff changeset
4209 very similar semantically), so replacing the @code{class} keyword in the
Dave Love <fx@gnu.org>
parents:
diff changeset
4210 example above with @code{struct} or @code{union} would still result in a
Dave Love <fx@gnu.org>
parents:
diff changeset
4211 syntax of @code{class-open} for line 4 @footnote{This is the case even
Dave Love <fx@gnu.org>
parents:
diff changeset
4212 for C and Objective-C. For consistency, structs in all supported
Dave Love <fx@gnu.org>
parents:
diff changeset
4213 languages are syntactically equivalent to classes. Note however that
Dave Love <fx@gnu.org>
parents:
diff changeset
4214 the keyword @code{class} is meaningless in C and Objective-C.}.
Dave Love <fx@gnu.org>
parents:
diff changeset
4215 Similarly, line 18 is assigned @code{class-close} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4216
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4217 @ssindex inher-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4218 @ssindex inher-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4219 Line 2 introduces the inheritance list for the class so it is assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4220 the @code{inher-intro} syntax, and line 3, which continues the
Dave Love <fx@gnu.org>
parents:
diff changeset
4221 inheritance list is given @code{inher-cont} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4222
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4223 @ssindex access-label
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4224 @ssindex inclass
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4225 Hitting @kbd{C-c C-s} on line 5 shows the following analysis:
Dave Love <fx@gnu.org>
parents:
diff changeset
4226
Dave Love <fx@gnu.org>
parents:
diff changeset
4227 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4228 ((inclass 58) (access-label 58))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4229 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4230
Dave Love <fx@gnu.org>
parents:
diff changeset
4231 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
4232 The primary syntactic symbol for this line is @code{access-label} as
Dave Love <fx@gnu.org>
parents:
diff changeset
4233 this a label keyword that specifies access protection in C++. However,
Dave Love <fx@gnu.org>
parents:
diff changeset
4234 because this line is also a top-level construct inside a class
Dave Love <fx@gnu.org>
parents:
diff changeset
4235 definition, the analysis actually shows two syntactic symbols. The
Dave Love <fx@gnu.org>
parents:
diff changeset
4236 other syntactic symbol assigned to this line is @code{inclass}.
Dave Love <fx@gnu.org>
parents:
diff changeset
4237 Similarly, line 6 is given both @code{inclass} and @code{topmost-intro}
Dave Love <fx@gnu.org>
parents:
diff changeset
4238 syntax:
Dave Love <fx@gnu.org>
parents:
diff changeset
4239
Dave Love <fx@gnu.org>
parents:
diff changeset
4240 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4241 ((inclass 58) (topmost-intro 60))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4242 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4243
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4244 @ssindex member-init-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4245 @ssindex member-init-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4246 Line 7 introduces a C++ member initialization list and as such is given
Dave Love <fx@gnu.org>
parents:
diff changeset
4247 @code{member-init-intro} syntax. Note that in this case it is
Dave Love <fx@gnu.org>
parents:
diff changeset
4248 @emph{not} assigned @code{inclass} since this is not considered a
Dave Love <fx@gnu.org>
parents:
diff changeset
4249 top-level construct. Lines 8 through 10 are all assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4250 @code{member-init-cont} since they continue the member initialization
Dave Love <fx@gnu.org>
parents:
diff changeset
4251 list started on line 7.
Dave Love <fx@gnu.org>
parents:
diff changeset
4252
Dave Love <fx@gnu.org>
parents:
diff changeset
4253 @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
4254 @ssindex inline-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4255 @ssindex inline-close
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4256 Line 11's analysis is a bit more complicated:
Dave Love <fx@gnu.org>
parents:
diff changeset
4257
Dave Love <fx@gnu.org>
parents:
diff changeset
4258 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4259 ((inclass 58) (inline-open))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4260 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4261
Dave Love <fx@gnu.org>
parents:
diff changeset
4262 This line is assigned a syntax of both @code{inline-open} and
Dave Love <fx@gnu.org>
parents:
diff changeset
4263 @code{inclass} because it opens an @dfn{in-class} C++ inline method
Dave Love <fx@gnu.org>
parents:
diff changeset
4264 definition. This is distinct from, but related to, the C++ notion of an
Dave Love <fx@gnu.org>
parents:
diff changeset
4265 inline function in that its definition occurs inside an enclosing class
Dave Love <fx@gnu.org>
parents:
diff changeset
4266 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
4267 However, if the definition of the @code{Bass} constructor appeared
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4268 outside the class definition, the construct would be given the
Dave Love <fx@gnu.org>
parents:
diff changeset
4269 @code{defun-open} syntax, even if the keyword @code{inline} appeared
Dave Love <fx@gnu.org>
parents:
diff changeset
4270 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
4271
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4272 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4273 1: class Bass
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4274 2: : public Guitar,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4275 3: public Amplifiable
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4276 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4277 5: public:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4278 6: Bass();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4279 7: @};
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4280 8:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4281 9: inline
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4282 10: Bass::Bass()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4283 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
4284 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
4285 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
4286 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
4287 15: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4288 16: eString.tune( 'E' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4289 17: aString.tune( 'A' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4290 18: dString.tune( 'D' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4291 19: gString.tune( 'G' );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4292 20: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4293 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4294
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4295 @ssindex friend
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4296 Returning to the previous example, line 16 is given @code{inline-close}
Dave Love <fx@gnu.org>
parents:
diff changeset
4297 syntax, while line 12 is given @code{defun-block-open} syntax, and lines
Dave Love <fx@gnu.org>
parents:
diff changeset
4298 13 through 15 are all given @code{statement} syntax. Line 17 is
Dave Love <fx@gnu.org>
parents:
diff changeset
4299 interesting in that its syntactic analysis list contains three
Dave Love <fx@gnu.org>
parents:
diff changeset
4300 elements:
Dave Love <fx@gnu.org>
parents:
diff changeset
4301
Dave Love <fx@gnu.org>
parents:
diff changeset
4302 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4303 ((inclass 58) (topmost-intro 380) (friend))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4304 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4305
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4306 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
4307 modifiers that do not have anchor positions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4308
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4309 @ssindex template-args-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4310 Template definitions introduce yet another syntactic symbol:
Dave Love <fx@gnu.org>
parents:
diff changeset
4311
Dave Love <fx@gnu.org>
parents:
diff changeset
4312 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4313 1: ThingManager <int,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4314 2: Framework::Callback *,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4315 3: Mutex> framework_callbacks;
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4316 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4317
Dave Love <fx@gnu.org>
parents:
diff changeset
4318 Here, line 1 is analyzed as a @code{topmost-intro}, but lines 2 and 3
Dave Love <fx@gnu.org>
parents:
diff changeset
4319 are both analyzed as @code{template-args-cont} lines.
Dave Love <fx@gnu.org>
parents:
diff changeset
4320
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4321 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4322 @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
4323 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4324 @subsection Conditional Construct Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4325 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4326
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4327 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
4328 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
4329
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4330 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4331 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
4332 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4333 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
4334 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4335 5: if( i == 10 )
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4336 6: do_something_special();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4337 7: else
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4338 8: silly_label:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4339 9: do_something( i );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4340 10: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4341 11: do @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4342 12: another_thing( i-- );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4343 13: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4344 14: while( i > 0 );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4345 15: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4346 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4347
Dave Love <fx@gnu.org>
parents:
diff changeset
4348 Only the lines that illustrate new syntactic symbols will be discussed.
Dave Love <fx@gnu.org>
parents:
diff changeset
4349
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4350 @ssindex substatement-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4351 @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
4352 @ssindex block-close
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4353 Line 4 has a brace which opens a conditional's substatement block. It
Dave Love <fx@gnu.org>
parents:
diff changeset
4354 is thus assigned @code{substatement-open} syntax, and since line 5 is
Dave Love <fx@gnu.org>
parents:
diff changeset
4355 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
4356 @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
4357 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
4358 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
4359 ``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
4360 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
4361
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4362 @ssindex substatement
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4363 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
4364 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
4365 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
4366
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4367 @ssindex substatement-label
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4368 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
4369 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
4370 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
4371 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
4372
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4373 @ssindex else-clause
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4374 @ssindex catch-clause
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4375 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
4376 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
4377 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
4378 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
4379 @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
4380 @code{catch-clause}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4381
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4382 @ssindex do-while-closure
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4383 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
4384 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
4385 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
4386 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
4387 @code{block-close} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4388
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4389 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4390 @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
4391 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4392 @subsection Switch Statement Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4393 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4394
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4395 Switch statements have their own set of syntactic symbols. Here's an
Dave Love <fx@gnu.org>
parents:
diff changeset
4396 example:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4397
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4398 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4399 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
4400 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4401 3: switch( i ) @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4402 4: case Ham:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4403 5: be_a_pig();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4404 6: break;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4405 7: case Salt:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4406 8: drink_some_water();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4407 9: break;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4408 10: default:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4409 11: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4410 12: what_is_it();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4411 13: break;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4412 14: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4413 15: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4414 14: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4415 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4416
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4417 @ssindex case-label
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4418 @ssindex statement-case-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4419 @ssindex statement-case-open
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4420 Here, lines 4, 7, and 10 are all assigned @code{case-label} syntax,
Dave Love <fx@gnu.org>
parents:
diff changeset
4421 while lines 5 and 8 are assigned @code{statement-case-intro}. Line 11
Dave Love <fx@gnu.org>
parents:
diff changeset
4422 is treated slightly differently since it contains a brace that opens a
Dave Love <fx@gnu.org>
parents:
diff changeset
4423 block --- it is given @code{statement-case-open} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4424
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4425 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4426 @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
4427 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4428 @subsection Brace List Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4429 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4430
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4431 @cindex brace lists
Dave Love <fx@gnu.org>
parents:
diff changeset
4432 There are a set of syntactic symbols that are used to recognize
Dave Love <fx@gnu.org>
parents:
diff changeset
4433 constructs inside of brace lists. A brace list is defined as an
Dave Love <fx@gnu.org>
parents:
diff changeset
4434 @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
4435 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
4436 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
4437 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
4438
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4439 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4440 1: static char* ingredients[] =
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4441 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4442 3: "Ham",
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4443 4: "Salt",
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4444 5: NULL
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4445 6: @};
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4446 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4447
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4448 @ssindex brace-list-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4449 @ssindex brace-list-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4450 @ssindex brace-list-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4451 @ssindex brace-list-entry
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4452 Following convention, line 2 in this example is assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4453 @code{brace-list-open} syntax, and line 3 is assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4454 @code{brace-list-intro} syntax. Likewise, line 6 is assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4455 @code{brace-list-close} syntax. Lines 4 and 5 however, are assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4456 @code{brace-list-entry} syntax, as would all subsequent lines in this
Dave Love <fx@gnu.org>
parents:
diff changeset
4457 initializer list.
Dave Love <fx@gnu.org>
parents:
diff changeset
4458
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4459 @ssindex brace-entry-open
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4460 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
4461 example:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4462
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4463 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4464 1: struct intpairs[] =
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4465 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4466 3: @{ 1, 2 @},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4467 4: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4468 5: 3,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4469 6: 4
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4470 7: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4471 8: @{ 1,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4472 9: 2 @},
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4473 10: @{ 3, 4 @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4474 11: @};
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4475 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4476
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4477 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
4478 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
4479 @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
4480 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
4481 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
4482 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
4483 line 10.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4484
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4485 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4486 @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
4487 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4488 @subsection External Scope Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4489 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4490
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4491 External language definition blocks also have their own syntactic
Dave Love <fx@gnu.org>
parents:
diff changeset
4492 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
4493
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4494 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4495 1: extern "C"
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4496 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4497 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
4498 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
4499 5: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4500 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4501
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4502 @ssindex extern-lang-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4503 @ssindex extern-lang-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4504 @ssindex inextern-lang
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4505 @ssindex inclass
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4506 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
4507 line 2 is given the @code{extern-lang-open} syntax, while line 5 is given
Dave Love <fx@gnu.org>
parents:
diff changeset
4508 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
4509
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4510 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4511 ((inextern-lang) (topmost-intro 14))
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4512 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4513
Dave Love <fx@gnu.org>
parents:
diff changeset
4514 @noindent
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4515 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
4516 @code{inclass}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4517
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4518 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
4519 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
4520 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
4521 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
4522 @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
4523
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4524 @table @asis
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4525 @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
4526 @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
4527 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
4528 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
4529
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4530 @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
4531 @ssindex namespace-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4532 @ssindex namespace-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4533 @ssindex innamespace
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4534 @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
4535
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4536 @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
4537 @ssindex module-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4538 @ssindex module-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4539 @ssindex inmodule
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4540 @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
4541
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4542 @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
4543 @ssindex composition-open
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4544 @ssindex composition-close
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4545 @ssindex incomposition
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4546 @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
4547 @end table
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4548
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4549 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4550 @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
4551 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4552 @subsection Parenthesis (Argument) List Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4553 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4554
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4555 A number of syntactic symbols are associated with parenthesis lists,
Dave Love <fx@gnu.org>
parents:
diff changeset
4556 a.k.a argument lists, as found in function declarations and function
Dave Love <fx@gnu.org>
parents:
diff changeset
4557 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
4558
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4559 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4560 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
4561 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
4562 3:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4563 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
4564 5: int line1,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4565 6: int line2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4566 7: );
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
4567 8:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4568 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
4569 10: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4570 11: a_function(
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4571 12: line1,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4572 13: line2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4573 14: );
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
4574 15:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4575 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
4576 17: line2 );
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4577 18: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4578 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4579
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4580 @ssindex arglist-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4581 @ssindex arglist-close
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4582 Lines 5 and 12 are assigned @code{arglist-intro} syntax since they are
Dave Love <fx@gnu.org>
parents:
diff changeset
4583 the first line following the open parenthesis, and lines 7 and 14 are
Dave Love <fx@gnu.org>
parents:
diff changeset
4584 assigned @code{arglist-close} syntax since they contain the parenthesis
Dave Love <fx@gnu.org>
parents:
diff changeset
4585 that closes the argument list.
Dave Love <fx@gnu.org>
parents:
diff changeset
4586
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4587 @ssindex arglist-cont-nonempty
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4588 @ssindex arglist-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4589 Lines that continue argument lists can be assigned one of two syntactic
Dave Love <fx@gnu.org>
parents:
diff changeset
4590 symbols. For example, Lines 2 and 17
Dave Love <fx@gnu.org>
parents:
diff changeset
4591 are assigned @code{arglist-cont-nonempty} syntax. What this means
Dave Love <fx@gnu.org>
parents:
diff changeset
4592 is that they continue an argument list, but that the line containing the
Dave Love <fx@gnu.org>
parents:
diff changeset
4593 parenthesis that opens the list is @emph{not empty} following the open
Dave Love <fx@gnu.org>
parents:
diff changeset
4594 parenthesis. Contrast this against lines 6 and 13 which are assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4595 @code{arglist-cont} syntax. This is because the parenthesis that opens
Dave Love <fx@gnu.org>
parents:
diff changeset
4596 their argument lists is the last character on that line.
Dave Love <fx@gnu.org>
parents:
diff changeset
4597
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4598 Syntactic elements with @code{arglist-intro},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4599 @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
4600 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
4601 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
4602 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
4603 Functions}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4604
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4605 Note that there is no @code{arglist-open} syntax. This is because any
Dave Love <fx@gnu.org>
parents:
diff changeset
4606 parenthesis that opens an argument list, appearing on a separate line,
Dave Love <fx@gnu.org>
parents:
diff changeset
4607 is assigned the @code{statement-cont} syntax instead.
Dave Love <fx@gnu.org>
parents:
diff changeset
4608
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4609 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4610 @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
4611 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4612 @subsection Comment String Label and Macro Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4613 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4614
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4615 A few miscellaneous syntactic symbols that haven't been previously
Dave Love <fx@gnu.org>
parents:
diff changeset
4616 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
4617
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4618 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4619 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
4620 2: const
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4621 3: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4622 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
4623 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
4624 6:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4625 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
4626 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
4627 9:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4628 10: note:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4629 11: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4630 12: #ifdef LOCK
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4631 13: Lock acquire();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4632 14: #endif // LOCK
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4633 15: slap_pop();
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4634 16: cout << "I played "
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4635 17: << "a note\n";
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4636 18: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4637 19: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4638 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4639
Dave Love <fx@gnu.org>
parents:
diff changeset
4640 The lines to note in this example include:
Dave Love <fx@gnu.org>
parents:
diff changeset
4641
Dave Love <fx@gnu.org>
parents:
diff changeset
4642 @itemize @bullet
Dave Love <fx@gnu.org>
parents:
diff changeset
4643 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4644 @ssindex func-decl-cont
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4645 Line 2 is assigned the @code{func-decl-cont} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4646
Dave Love <fx@gnu.org>
parents:
diff changeset
4647 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4648 @ssindex comment-intro
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4649 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
4650 @code{comment-intro} syntax. A syntactic element with
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4651 @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
4652 by another syntactic element which does have one.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4653
Dave Love <fx@gnu.org>
parents:
diff changeset
4654 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4655 @ssindex c
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4656 Line 5 is assigned @code{c} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4657
Dave Love <fx@gnu.org>
parents:
diff changeset
4658 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
4659 @cindex syntactic whitespace
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4660 Line 6 which, even though it contains nothing but whitespace, is
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4661 assigned @code{defun-block-intro}. Note that the appearance of the
Dave Love <fx@gnu.org>
parents:
diff changeset
4662 comment on lines 4 and 5 do not cause line 6 to be assigned
Dave Love <fx@gnu.org>
parents:
diff changeset
4663 @code{statement} syntax because comments are considered to be
Dave Love <fx@gnu.org>
parents:
diff changeset
4664 @dfn{syntactic whitespace}, which are ignored when analyzing
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4665 code.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4666
Dave Love <fx@gnu.org>
parents:
diff changeset
4667 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4668 @ssindex string
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4669 Line 8 is assigned @code{string} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4670
Dave Love <fx@gnu.org>
parents:
diff changeset
4671 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4672 @ssindex label
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4673 Line 10 is assigned @code{label} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4674
Dave Love <fx@gnu.org>
parents:
diff changeset
4675 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4676 @ssindex block-open
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4677 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
4678 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
4679 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
4680 does have one.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4681
Dave Love <fx@gnu.org>
parents:
diff changeset
4682 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4683 @ssindex cpp-macro
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4684 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
4685 normal syntactic symbols (@code{statement-block-intro} and
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4686 @code{statement}, respectively). Normally @code{cpp-macro} is
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4687 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
4688 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
4689 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
4690 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
4691 @code{cpp-macro} doesn't contain an anchor position.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4692
Dave Love <fx@gnu.org>
parents:
diff changeset
4693 @item
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4694 @ssindex stream-op
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
4695 Line 17 is assigned @code{stream-op} syntax.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4696 @end itemize
Dave Love <fx@gnu.org>
parents:
diff changeset
4697
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4698 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4699 @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
4700 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4701 @subsection Multiline Macro Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4702 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4703
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4704 @cindex multiline macros
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4705 @cindex syntactic whitespace
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4706 @ssindex cpp-define-intro
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4707 @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
4708 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
4709 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
4710 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
4711 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
4712 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
4713
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4714 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4715 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
4716 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
4717 3: if (!CONSP (cons)) \
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4718 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
4719 5: else
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4720 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4721
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4722 @noindent
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4723 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
4724 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
4725 @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
4726 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
4727 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
4728 on line 5.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4729
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4730 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
4731 @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
4732 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
4733 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
4734 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
4735 macros.}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4736
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4737 @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
4738
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4739 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4740 @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
4741 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4742 @subsection Objective-C Method Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4743 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4744
Dave Love <fx@gnu.org>
parents:
diff changeset
4745 In Objective-C buffers, there are three additional syntactic symbols
Dave Love <fx@gnu.org>
parents:
diff changeset
4746 assigned to various message calling constructs. Here's an example
Dave Love <fx@gnu.org>
parents:
diff changeset
4747 illustrating these:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4748
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4749 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4750 1: - (void)setDelegate:anObject
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4751 2: withStuff:stuff
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4752 3: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4753 4: [delegate masterWillRebind:self
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4754 5: toDelegate:anObject
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4755 6: withExtraStuff:stuff];
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4756 7: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4757 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4758
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4759 @ssindex objc-method-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4760 @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
4761 @ssindex objc-method-call-cont
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4762 Here, line 1 is assigned @code{objc-method-intro} syntax, and line 2 is
Dave Love <fx@gnu.org>
parents:
diff changeset
4763 assigned @code{objc-method-args-cont} syntax. Lines 5 and 6 are both
Dave Love <fx@gnu.org>
parents:
diff changeset
4764 assigned @code{objc-method-call-cont} syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4765
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4766 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4767 @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
4768 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4769 @subsection Anonymous Class Symbol (Java)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4770 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4771
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4772 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
4773 this:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4774
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4775 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4776 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
4777 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
4778 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
4779 4: history.addElement(arg);
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4780 5: @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4781 6: @});
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4782 7: @}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4783 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4784
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4785 @ssindex inexpr-class
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4786 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
4787 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
4788 @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
4789 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
4790 @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
4791 have an anchor position.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4792
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4793 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4794 @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
4795 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4796 @subsection Statement Block Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4797 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4798
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4799 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
4800 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
4801 this, e.g:
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4802
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4803 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4804 1: int res = (@{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4805 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
4806 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
4807 4: z;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4808 5: @});
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4809 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4810
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4811 @ssindex inexpr-statement
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4812 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
4813 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
4814 @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
4815 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
4816 contain an anchor position.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4817
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4818 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
4819 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
4820
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4821 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4822 1: array itgob()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4823 2: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4824 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
4825 4: lambda
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4826 5: (mixed arg)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4827 6: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4828 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
4829 8: @}) * ", " + "\n";
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4830 9: return catch @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4831 10: write (s + "\n");
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4832 11: @};
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4833 12: @}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4834 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4835
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4836 @ssindex inlambda
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4837 @ssindex lambda-intro-cont
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4838 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
4839 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
4840 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
4841 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
4842 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
4843 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
4844 @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
4845 @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
4846 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
4847 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
4848 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
4849
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4850 @ssindex inexpr-statement
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4851 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
4852 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
4853 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
4854 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
4855 handled like this too.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4856
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4857 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4858 @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
4859 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4860 @subsection K&R Symbols
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4861 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4862
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4863 @ssindex knr-argdecl-intro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4864 @ssindex knr-argdecl
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4865 Two other syntactic symbols can appear in old style, non-prototyped C
Dave Love <fx@gnu.org>
parents:
diff changeset
4866 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
4867
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4868 @example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4869 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
4870 2: int a;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4871 3: int b;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4872 4: int c;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4873 5: @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4874 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
4875 7: @}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4876 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
4877
Dave Love <fx@gnu.org>
parents:
diff changeset
4878 Here, line 2 is the first line in an argument declaration list and so is
Dave Love <fx@gnu.org>
parents:
diff changeset
4879 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
4880 (i.e. lines 3 and 4 in this example), are given @code{knr-argdecl}
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4881 syntax.
Dave Love <fx@gnu.org>
parents:
diff changeset
4882
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
4883
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4884 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4885 @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
4886 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4887 @section Indentation Calculation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4888 @cindex indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4889 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4890
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4891 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
4892 (@pxref{Syntactic Analysis}).
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 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
4895 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
4896 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
4897 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
4898
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4899 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
4900 in the @code{c-offsets-alist} style variable
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4901 (@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
4902 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
4903 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
4904 column.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4905
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4906 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
4907 our first example again:
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4910 1: void swap( int& a, int& b )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4911 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4912 3: int tmp = a;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4913 4: a = b;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4914 5: b = tmp;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4915 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4916 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4917
68313
20ff812ba5b3 Use @key for TAB.
Eli Zaretskii <eliz@gnu.org>
parents: 67253
diff changeset
4918 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
4919 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
4920
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4921 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4922 ((defun-block-intro 29))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4923 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4924
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4925 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4926 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
4927 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
4928 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
4929
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4930 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
4931 @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
4932 @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
4933 total indentation of 4 spaces.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4934
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4935 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
4936 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
4937 line is 4 spaces.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4938
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4939 Here's another example:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4940
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4941 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4942 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
4943 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4944 3: if( doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4945 4: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4946 5: return( val + incr );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4947 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4948 7: return( val );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4949 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4950 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4951
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4952 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
4953 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
4954 context. The context for this line is:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4955
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4956 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4957 ((substatement-open 46))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4958 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4959
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4960 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
4961 @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
4962 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
4963 @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
4964 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
4965 indentation for the line of 8 spaces.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4966
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4967 Simple, huh?
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4968
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4969 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
4970 @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
4971 @xref{c-offsets-alist}, for the full story.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4972
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4973 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
4974 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
4975 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
4976
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4977 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
4978 @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
4979 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
4980 minibuffer when you hit @kbd{TAB}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4981
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4982
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4983 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4984 @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
4985 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4986 @chapter Customizing Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4987 @cindex customization, indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4988 @cindex indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4989 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4990
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4991 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
4992 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
4993 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
4994 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
4995 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
4996 @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
4997 sections, in particular @ref{Style Variables}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4998
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
4999 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
5000 @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
5001 @code{c-basic-offset}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5002
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5003 @defopt c-basic-offset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5004 @vindex basic-offset (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5005 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
5006 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
5007 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
5008 @code{bsd}, @code{linux}, and @code{python} styles).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5009 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5010
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5011 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
5012 @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
5013 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
5014 you write yourself (@pxref{Custom Line-Up}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5015
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5016 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
5017 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
5018 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
5019 indentation.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5020
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5021 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5022 * c-offsets-alist::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5023 * Interactive Customization::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5024 * Line-Up Functions::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5025 * Custom Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5026 * Other Indentation::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5027 @end menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5028
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5029
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5030 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5031 @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
5032 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5033 @section c-offsets-alist
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5034 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5035
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5036 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
5037 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
5038 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
5039 @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
5040
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5041 @defopt c-offsets-alist
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5042 @vindex offsets-alist (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5043 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
5044 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
5045 whose syntactic context matches the symbol. @xref{Syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5046 Analysis}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5047
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5048 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
5049 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
5050 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
5051 only a few entries. @xref{Style Variables}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5052
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5053 The offset specification associated with any particular syntactic
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5054 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
5055 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
5056 @code{+}, @code{-}, @code{++}, @code{--}, @code{*}, or @code{/}. The
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5057 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
5058
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5059 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
5060 of these kinds of offsets:
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5063 ((statement . 0)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5064 (substatement . +)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5065 (cpp-macro . [0])
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5066 (topmost-intro-cont . c-lineup-topmost-intro-cont)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5067 (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
5068 c-indent-multi-line-block))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5069 @dots{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5070 @*)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5071 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5072 @end defopt
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 @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
5075 @findex set-offset (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5076 @kindex C-c C-o
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5077 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
5078 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
5079 isn't already one for that syntactic symbol.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5080
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5081 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
5082 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
5083 @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
5084 (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
5085 (defaulting to the current offset).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5086
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5087 @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
5088 @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
5089 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
5090 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
5091 @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
5092 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
5093 itself uses this function when initializing styles.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5094 @end deffn
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5095
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5096 @cindex offset specification
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5097 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
5098 the following:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5099
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5100 @table @asis
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5101 @item An integer
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5102 The integer specifies a relative offset. All relative
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5103 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
5104 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
5105 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
5106 anchor position earlier in the buffer. @xref{Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5107 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
5108 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
5109 from zero).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5110
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5111 @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
5112 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
5113 @code{c-basic-offset}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5114
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5115 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
5116 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
5117 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
5118 values that the special symbols correspond to:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5119
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5120 @table @code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5121 @item +
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5122 @code{c-basic-offset} times 1
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5123 @item -
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5124 @code{c-basic-offset} times -1
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5125 @item ++
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5126 @code{c-basic-offset} times 2
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5127 @item --
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5128 @code{c-basic-offset} times -2
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5129 @item *
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5130 @code{c-basic-offset} times 0.5
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5131 @item /
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5132 @code{c-basic-offset} times -0.5
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5133 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5134
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5135 @item A vector
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5136 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
5137 indentation column. This will override any previously calculated
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5138 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
5139 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
5140 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
5141 beyond the first will be ignored.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5142
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5143 @item A function or lambda expression
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5144 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
5145 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
5146 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
5147 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
5148 details about them.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5149
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5150 @item A symbol with a variable binding
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5151 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
5152 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
5153 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
5154 vector (an absolute offset).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5155
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5156 @item A list
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5157 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
5158 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
5159 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
5160 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
5161 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
5162 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
5163
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5164 @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
5165 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
5166 non-@code{nil} offsets from the remaining elements:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5167
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5168 @table @code
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5169 @item first
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5170 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
5171 elements of the list don't get evaluated.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5172 @item min
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5173 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
5174 absolute - they can't be mixed.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5175 @item max
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5176 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
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 add
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5179 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
5180 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
5181 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
5182 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5183
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5184 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
5185 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
5186 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
5187 @end table
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5188
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5189 @vindex c-strict-syntax-p
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5190 @vindex strict-syntax-p (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5191 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
5192 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
5193 @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
5194 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
5195 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
5196 @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
5197 @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
5198
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5199 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5200 @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
5201 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5202 @section Interactive Customization
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5203 @cindex customization, interactive
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5204 @cindex interactive customization
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5205 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5206
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5207 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
5208 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
5209 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
5210 indicated. @xref{Styles}.}:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5211
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5212 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5213 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5214 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
5215 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5216 3: if( doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5217 4: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5218 5: return( val + incr );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5219 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5220 7: return( val );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5221 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5222 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5223 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5224
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5225 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5226 to:
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5229 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5230 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
5231 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5232 3: if( doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5233 4: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5234 5: return( val + incr );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5235 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5236 7: return( val );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5237 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5238 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5239 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5240
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5241 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
5242 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
5243 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
5244 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
5245 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
5246 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
5247
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5248 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5249 ((substatement-open 44))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5250 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5251
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5252 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5253 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
5254 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
5255 symbol.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5256
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5257 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
5258 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
5259 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
5260 syntactic symbol we want to change!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5261
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5262 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
5263 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
5264 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
5265 @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
5266 syntactic symbol @code{substatement-open}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5267
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5268 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
5269 (@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
5270 should now look like:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5271
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5272 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5273 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5274 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
5275 2: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5276 3: if( doit )
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5277 4: @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5278 5: return( val + incr );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5279 6: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5280 7: return( val );
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5281 8: @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5282 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5283 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5284
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5285 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
5286 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
5287 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
5288 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
5289 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
5290 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
5291 adjustments.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5292
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5293 @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
5294 @deffn Command c-set-offset symbol offset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5295 @findex set-offset (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5296 @kindex C-c C-o
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5297 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
5298 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
5299 the example above) and from your mode hook.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5300
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5301 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
5302 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
5303 for that syntactic element.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5304 @end deffn
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5305 @c End of MOVE THIS BIT.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5306
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5307 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5308 @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
5309 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5310 @section Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5311 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5312
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5313 @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
5314 @cindex indentation function
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5315 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
5316 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
5317 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
5318 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
5319 provides this flexibility with @dfn{line-up functions}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5320
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5321 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
5322 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
5323 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
5324 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
5325 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
5326 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
5327
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5328 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
5329 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
5330 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
5331
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5332 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
5333 @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
5334 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
5335 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
5336 different one''. @xref{c-offsets-alist}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5337
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5338 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
5339 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
5340 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
5341 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
5342
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5343 @macro workswith
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
5344 @emph{Works with:@ }
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5345 @end macro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5346 @ifinfo
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5347 @unmacro workswith
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5348 @macro workswith
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5349 Works with:
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5350 @end macro
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5351 @end ifinfo
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5352
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5353 @macro sssTBasicOffset
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5354 <--> @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
5355 @end macro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5356
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5357 @macro sssTsssTBasicOffset
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5358 <--><--> @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
5359 @end macro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5360
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5361 @macro hereFn{func}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5362 <- @i{\func\}@c
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5363 @end macro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5364
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5365 @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
5366 @iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5367 @unmacro hereFn
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5368 @macro hereFn{func}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5369 <-@i{\func\}@c
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5370 @end macro
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5371 @end iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5372
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5373 @menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5374 * Brace/Paren Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5375 * List Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5376 * Operator Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5377 * Comment Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5378 * Misc Line-Up::
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5379 @end menu
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5380
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5381 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5382 @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
5383 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5384 @subsection Brace and Parenthesis Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5385 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5386
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5387 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
5388 parentheses and statements within brace blocks.
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 @defun c-lineup-close-paren
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5391 @findex lineup-close-paren (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5392 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
5393 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
5394 indentation is added. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5395
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5396 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5397 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5398 main (int,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5399 char **
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5400 ) @hereFn{c-lineup-close-paren}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5401 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5402 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5403
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5404 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5405 and
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5408 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5409 main (
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5410 int, char **
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5411 ) @hereFn{c-lineup-close-paren}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5412 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5413 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5414
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5415 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
5416 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
5417 @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
5418 @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
5419
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5420 @workswith All @code{*-close} symbols.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5421 @end defun
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 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5424
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5425 @anchor{c-lineup-arglist-close-under-paren}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5426 @defun c-lineup-arglist-close-under-paren
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5427 @findex lineup-arglist-close-under-paren (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5428 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
5429 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
5430 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
5431 @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
5432 lines inside a parenthesis under the open paren.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5433
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5434 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
5435 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
5436 @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
5437 discussion of this ``DWIM'' measure.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5438
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5439 @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
5440 @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
5441 @code{arglist-cont-nonempty}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5442 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5443
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5444 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5445
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5446 @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
5447 @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
5448 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
5449
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
5450 @example
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
5451 @group
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5452 if (n > 0)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5453 @{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
5454 @sssTBasicOffset{}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5455 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5456 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5457
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5458 @noindent
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5459 and
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5460
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5461 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5462 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5463 if (n > 0)
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5464 @{ @hereFn{c-indent-one-line-block}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5465 m+=n; n=0;
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5466 @}
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5467 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5468 @end example
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 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
5471 @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
5472 which makes the function usable in list expressions.
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5473
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5474 @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
5475 @code{-open} symbols.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5476 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5477
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5478 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5479
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5480 @defun c-indent-multi-line-block
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5481 @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
5482 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
5483
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5484 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5485 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5486 int *foo[] = @{
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
5487 NULL,
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5488 @{17@}, @hereFn{c-indent-multi-line-block}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5489 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5490 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5491
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5492 @noindent
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5493 and
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 @example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5496 @group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5497 int *foo[] = @{
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5498 NULL,
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5499 @{ @hereFn{c-indent-multi-line-block}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5500 17
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5501 @},
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5502 @sssTBasicOffset{}
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5503 @end group
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5504 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5505
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5506 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
5507 @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
5508 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
5509
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5510 @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
5511 @code{-open} symbols.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5512 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5513
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5514 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5515
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5516 @defun c-lineup-runin-statements
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5517 @findex lineup-runin-statements (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5518 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
5519 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
5520 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
5521 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
5522
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5523 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5524 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5525 int main()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5526 @{ puts ("Hello!");
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5527 return 0; @hereFn{c-lineup-runin-statements}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5528 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5529 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5530 @end example
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 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
5533 @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
5534 expressions.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5535
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5536 @workswith The @code{statement} syntactic symbol.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5537 @end defun
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 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5540
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5541 @defun c-lineup-inexpr-block
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5542 @findex lineup-inexpr-block (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5543 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
5544 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
5545 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
5546 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
5547 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
5548 construct.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5549
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5550 @workswith @code{inlambda}, @code{inexpr-statement},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5551 @code{inexpr-class}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5552 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5553
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5554 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5555
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5556 @defun c-lineup-after-whitesmith-blocks
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5557 @findex lineup-after-whitesmith-blocks (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5558 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
5559 @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
5560 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
5561 style indentation. Consider the following examples:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5562
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5563 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5564 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5565 int foo()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5566 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5567 a;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5568 x; @hereFn{c-lineup-after-whitesmith-blocks}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5569 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5570 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5571
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5572 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5573 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5574 int foo()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5575 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5576 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5577 a;
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 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
5580 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5581 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5582
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5583 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
5584 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
5585 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
5586 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
5587 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
5588 @code{statement} was set simply to zero.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5589
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5590 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
5591 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
5592 indents relative to the surrounding block just like
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5593 @code{c-lineup-whitesmith-in-block}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5594
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5595 @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
5596 @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
5597 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5598
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5599 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5600
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5601 @defun c-lineup-whitesmith-in-block
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5602 @findex lineup-whitesmith-in-block (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5603 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
5604 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
5605
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5606 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5607 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5608 something
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5609 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5610 foo; @hereFn{c-lineup-whitesmith-in-block}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5611 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5612 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5613 @end example
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 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5616 and
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5619 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5620 something @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5621 foo; @hereFn{c-lineup-whitesmith-in-block}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5622 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5623 @sssTBasicOffset{}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5624 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5625 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5626
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5627 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
5628 @code{c-basic-offset} is added.
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 @workswith @code{defun-close}, @code{defun-block-intro},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5631 @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
5632 @code{brace-list-intro}, @code{statement-block-intro},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5633 @code{arglist-intro}, @code{arglist-cont-nonempty},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5634 @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
5635 and @code{inextern-lang}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5636 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5637
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5638 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5639 @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
5640 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5641 @subsection List Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5642 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5643
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5644 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
5645 form lists of items, usually separated by commas.
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 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
5648 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
5649 contained within parentheses.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5650
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5651 @defun c-lineup-arglist
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5652 @findex lineup-arglist (c-)
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5653 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
5654
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5655 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
5656 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
5657 @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
5658 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
5659
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5660 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5661 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5662 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
5663 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
5664 @});
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5665 @sssTBasicOffset{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5666 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5667 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5668
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5669 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
5670 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
5671 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
5672 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
5673
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5674 @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
5675 @end defun
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 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5678
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5679 @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
5680 @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
5681 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
5682 brace block.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5683
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5684 @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
5685 @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
5686 @code{arglist-intro}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5687 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5688
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5689 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5690
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5691 @defun c-lineup-multi-inher
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5692 @findex lineup-multi-inher (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5693 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
5694 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
5695
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5696 @example
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
5697 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5698 Foo::Foo (int a, int b):
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5699 Cyphr (a),
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5700 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
5701 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5702 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5703
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5704 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5705 and
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 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5708 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5709 class Foo
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5710 : public Cyphr,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5711 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
5712 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5713 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5714
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5715 @noindent
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5716 and
53118
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 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5719 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5720 Foo::Foo (int a, int b)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5721 : Cyphr (a)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5722 , 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
5723 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5724 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5725
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5726 @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
5727 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5728
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5729 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5730
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5731 @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
5732 @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
5733 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
5734 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
5735 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
5736 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
5737 E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5738
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5739 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5740 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5741 class Foo
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59032
diff changeset
5742 extends
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5743 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
5744 @sssTBasicOffset{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5745 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5746 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5747
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5748 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5749 and
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 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5752 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5753 class Foo
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5754 extends Cyphr,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5755 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
5756 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5757 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5758
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5759 @workswith @code{inher-cont}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5760 @end defun
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 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5763
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5764 @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
5765 @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
5766 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
5767 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
5768 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
5769 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
5770 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
5771 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
5772
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5773 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5774 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5775 int foo()
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5776 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
5777 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
5778 @sssTsssTBasicOffset{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5779 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5780 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5781
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5782 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5783 and
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 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5786 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5787 int foo() throws Cyphr,
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5788 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
5789 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
5790 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5791 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5792
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5793 @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
5794 @end defun
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 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5797
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5798 @defun c-lineup-template-args
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5799 @findex lineup-template-args (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5800 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
5801 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
5802 opening @samp{<}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5803
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5804 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
5805 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
5806
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5807 @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
5808 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5809
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5810 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5811
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5812 @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
5813 @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
5814 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
5815 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
5816 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
5817 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
5818 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
5819 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
5820
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5821 @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
5822 @end defun
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 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5825
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5826 @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
5827 @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
5828 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
5829 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
5830
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5831 @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
5832 @end defun
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 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5835
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5836 @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
5837 @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
5838 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
5839 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
5840
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5841 @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
5842 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5843
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5844 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5845 @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
5846 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5847 @subsection Operator Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5848 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5849
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5850 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
5851 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
5852 line.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5853
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5854 @defun c-lineup-argcont
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5855 @findex lineup-argcont (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5856 Line up a continued argument. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5857
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5858 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5859 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5860 foo (xyz, aaa + bbb + ccc
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5861 + ddd + eee + fff); @hereFn{c-lineup-argcont}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5862 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5863 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5864
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5865 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
5866 lines which are the start of an argument.
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 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
5869 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
5870 expressions for the operands.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5871
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5872 @workswith @code{arglist-cont}, @code{arglist-cont-nonempty}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5873 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5874
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5875 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5876
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5877 @defun c-lineup-arglist-operators
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5878 @findex lineup-arglist-operators (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5879 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
5880 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
5881 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
5882
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5883 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5884 @group
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5885 if ( x < 10
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5886 || at_limit (x, @hereFn{c-lineup-arglist-operators}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5887 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
5888 )
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5889 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5890 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5891
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5892 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
5893 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
5894 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
5895 suggestion to get a consistent style):
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5896
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5897 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5898 (c-set-offset 'arglist-cont
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5899 '(c-lineup-arglist-operators 0))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5900 (c-set-offset 'arglist-cont-nonempty
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5901 '(c-lineup-arglist-operators c-lineup-arglist))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5902 (c-set-offset 'arglist-close
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5903 '(c-lineup-arglist-close-under-paren))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5904 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5905
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5906 @workswith @code{arglist-cont}, @code{arglist-cont-nonempty}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5907 @end defun
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 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5910
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5911 @defun c-lineup-assignments
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5912 @findex lineup-assignments (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5913 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
5914 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
5915 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
5916 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
5917
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5918 @workswith @code{topmost-intro-cont}, @code{statement-cont},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5919 @code{arglist-cont}, @code{arglist-cont-nonempty}.
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 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5922
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5923 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5924
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5925 @defun c-lineup-math
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5926 @findex lineup-math (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5927 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
5928 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
5929 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
5930 +)}. It's provided for compatibility with old configurations.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5931
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5932 @workswith @code{topmost-intro-cont}, @code{statement-cont},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5933 @code{arglist-cont}, @code{arglist-cont-nonempty}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5934 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5935
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5936 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5937
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5938 @defun c-lineup-cascaded-calls
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5939 @findex lineup-cascaded-calls (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5940 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
5941 @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
5942 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
5943 with the first of those tokens. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5944
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5945 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5946 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5947 r = proc->add(17)->add(18)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5948 ->add(19) + @hereFn{c-lineup-cascaded-calls}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5949 offset; @hereFn{c-lineup-cascaded-calls@r{ (inactive)}}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5950 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5951 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5952
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5953 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
5954 expressions.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5955
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5956 @workswith @code{topmost-intro-cont}, @code{statement-cont},
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5957 @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
5958 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5959
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5960 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5961
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5962 @defun c-lineup-streamop
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5963 @findex lineup-streamop (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5964 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
5965
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5966 @workswith @code{stream-op}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5967 @end defun
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 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5970
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5971 @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
5972 @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
5973 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
5974 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
5975 another one. E.g:
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5976
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5977 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5978 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5979 result = prefix + "A message "
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5980 "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
5981 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5982 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5983
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5984 @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
5985 lineup functions.
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 @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
5988 @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
5989 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
5990
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5991
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5992 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5993 @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
5994 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5995 @subsection Comment Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5996 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5997
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
5998 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
5999 of comment structure.
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 @defun c-lineup-C-comments
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6002 @findex lineup-C-comments (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6003 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
6004 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
6005
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6006 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6007 @group
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 * text * text text
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6010 */ */ */
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6011 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6012 @end example
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6015 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6016 /* text /* /**
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6017 text ** text ** text
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6018 */ */ */
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6019 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6020 @end example
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6023 @group
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 * text
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6026 *************************************************/
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6027 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6028 @end example
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 @vindex comment-start-skip
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6031 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6032 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6033 /**************************************************
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6034 Free form text comments:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6035 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
6036 start, the indentation is kept unchanged for lines
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6037 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
6038 delimiter line is whatever matches the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6039 @code{comment-start-skip} regexp.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6040 **************************************************/
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6041 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6042 @end example
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 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
6045 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
6046 line inside a comment.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6047
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6048 @workswith The @code{c} syntactic symbol.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6049 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6050
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6051 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6052
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6053 @defun c-lineup-comment
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6054 @findex lineup-comment (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6055 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
6056 @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
6057 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
6058
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6059 @defopt c-comment-only-line-offset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6060 @vindex comment-only-line-offset (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6061 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
6062 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
6063
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6064 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6065 (@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
6066 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6067
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6068 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6069 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
6070 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
6071 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
6072 is equivalent to @code{(@r{@var{value}} . -1000)}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6073 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6074
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6075 @workswith @code{comment-intro}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6076 @end defun
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 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6079
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6080 @defun c-lineup-knr-region-comment
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6081 @findex lineup-knr-region-comment (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6082 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
6083 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
6084 block. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6085
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6086 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6087 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6088 int main()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6089 /* 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
6090 @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6091 return 0;
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6092 @}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6093 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6094 @end example
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 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
6097 expressions.
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 @workswith @code{comment-intro}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6100 @end defun
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 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6103 @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
6104 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6105 @subsection Miscellaneous Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6106 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6107
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6108 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
6109 any earlier category.
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 @defun c-lineup-dont-change
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6112 @findex lineup-dont-change (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6113 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
6114 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
6115
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6116 @workswith Any syntactic symbol.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6117 @end defun
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 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6120
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6121 @defun c-lineup-cpp-define
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6122 @findex lineup-cpp-define (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6123 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
6124 construct preceding the macro. E.g:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6125
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6126 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6127 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6128 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
6129 \"Some text.\";
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6130
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6131 #define X(A, B) \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6132 do @{ \ @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6133 printf (A, B); \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6134 @} while (0)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6135 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6136 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6137
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6138 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6139 and:
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6142 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6143 int dribble() @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6144 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
6145 error(\"Not running!\");
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6146
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6147 #define X(A, B) \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6148 do @{ \ @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6149 printf (A, B); \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6150 @} while (0)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6151 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6152 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6153
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6154 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
6155 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
6156 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
6157 @code{cpp-define-intro} is combined with the
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6158 @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
6159 on the @samp{#define} line:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6160
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6161 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6162 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6163 const char msg[] =
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6164 \"Some text.\";
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6165
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6166 #define X(A, B) do @{ \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6167 printf (A, B); \ @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6168 this->refs++; \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6169 @} while (0) @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6170 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6171 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6172
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6173 @noindent
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6174 and:
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 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6177 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6178 int dribble() @{
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6179 if (!running)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6180 error(\"Not running!\");
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6181
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6182 #define X(A, B) do @{ \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6183 printf (A, B); \ @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6184 this->refs++; \
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6185 @} while (0) @hereFn{c-lineup-cpp-define}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6186 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6187 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6188
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6189 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
6190 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
6191 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
6192 @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
6193
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6194 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
6195 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
6196 indentation on the top level.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6197
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6198 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
6199 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
6200 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
6201 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
6202 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
6203 described above.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6204
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6205 @workswith @code{cpp-define-intro}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6206 @end defun
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 @comment ------------------------------------------------------------
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6209
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6210 @defun c-lineup-gcc-asm-reg
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6211 @findex lineup-gcc-asm-reg (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6212 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
6213
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6214 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6215 @group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6216 asm ("foo %1, %0\n"
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6217 "bar %0, %1"
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6218 : "=r" (w),
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6219 "=r" (x)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6220 : "0" (y),
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6221 "1" (z));
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6222 @end group
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6223 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6224
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6225 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
6226 @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
6227
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6228 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
6229 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
6230 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
6231 arglist lineups, e.g.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6232
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6233 @example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6234 (c-lineup-gcc-asm-reg c-lineup-arglist)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6235 @end example
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6236
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6237 @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
6238 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6239
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6240 @comment ------------------------------------------------------------
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6241
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6242 @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
6243 @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
6244 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
6245 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
6246 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
6247 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
6248 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
6249 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
6250 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
6251 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
6252
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6253 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6254 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6255 int
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6256 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
6257 @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6258 return -i;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6259 @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6260 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6261 @end example
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 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6264 and
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 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6267 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6268 struct
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6269 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
6270 @{
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6271 double height;
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6272 @}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6273 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
6274 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
6275 @sssTBasicOffset{}
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6276 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6277 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6278
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6279 @noindent
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6280 and
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 @example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6283 @group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6284 struct larch
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6285 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
6286 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
6287 @end group
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6288 @end example
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6289
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6290 @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
6291 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6292
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6293 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6294 @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
6295 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6296 @section Custom Line-Up Functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6297 @cindex customization, indentation functions
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6298 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6299
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6300 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
6301 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
6302 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
6303 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
6304 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
6305
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6306 @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
6307 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
6308 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
6309 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
6310 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
6311 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
6312 @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
6313 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
6314 please contact @email{bug-cc-mode@@gnu.org}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6315
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6316 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
6317 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
6318 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
6319 @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
6320 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
6321 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
6322 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
6323 @ref{c-offsets-alist}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6324
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6325 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
6326 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
6327 @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
6328 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
6329
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6330 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
6331 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
6332
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6333 @example
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6334 (@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
6335 @end example
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6336
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6337 @noindent
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6338 @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
6339 @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
6340 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
6341 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
6342 for the construct that triggered the syntactic symbol
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6343 (@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
6344 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
6345 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
6346 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
6347 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
6348 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
6349 (@code{c-langelem-sym}, etc.) described below.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6350
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6351 @vindex c-syntactic-element
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6352 @vindex syntactic-element (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6353 @vindex c-syntactic-context
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6354 @vindex syntactic-context (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6355 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
6356 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
6357 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
6358 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
6359 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
6360 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
6361 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
6362 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
6363 Braces}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6364
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6365 @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
6366 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
6367 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
6368 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
6369 @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
6370
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6371 @defun c-langelem-sym langelem
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6372 @findex langelem-sym (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6373 Return the syntactic symbol in @var{langelem}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6374 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6375
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6376 @defun c-langelem-pos langelem
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6377 @findex langelem-pos (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6378 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
6379 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6380
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6381 @defun c-langelem-col langelem &optional preserve-point
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6382 @findex langelem-col (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6383 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
6384 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
6385 non-@code{nil}.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6386 @end defun
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6387
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6388 @defun c-langelem-2nd-pos langelem
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6389 @findex langelem-2nd-pos (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6390 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
6391 is none.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6392
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6393 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
6394 @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
6395 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
6396 @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
6397 @end defun
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6398
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6399 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
6400 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
6401 custom line-up function associated with it.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6402
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6403 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6404 @node Other Indentation, , Custom Line-Up, Customizing Indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6405 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6406 @section Other Special Indentations
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6407 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6408
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6409 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
6410
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6411 @defopt c-label-minimum-indentation
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6412 @vindex label-minimum-indentation (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6413 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
6414 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
6415 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
6416
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6417 @findex c-gnu-impose-minimum
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6418 @findex gnu-impose-minimum (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6419 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
6420 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
6421 work.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6422 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6423
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6424 @defopt c-special-indent-hook
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6425 @vindex special-indent-hook (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6426 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
6427 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
6428 @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
6429 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
6430 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
6431 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
6432 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
6433 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
6434 Line-Up}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6435
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6436 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
6437 @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
6438 (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
6439 @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
6440 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
6441 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
6442 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
6443 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
6444 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
6445
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6446 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
6447 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
6448 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
6449 @end defopt
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6450
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6451
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6452 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6453 @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
6454 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6455 @chapter Customizing Macros
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6456 @cindex macros
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6457 @cindex preprocessor directives
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6458 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6459
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6460 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
6461 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
6462 by setting the following user option:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6463
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6464 @defopt c-syntactic-indentation-in-macros
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6465 @vindex syntactic-indentation-in-macros (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6466 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
6467 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
6468 @code{cpp-macro-cont}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6469 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6470
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6471 @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
6472 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
6473 customized with these variables:
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6474
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6475 @defopt c-backslash-column
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6476 @vindex backslash-column (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6477 @defoptx c-backslash-max-column
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6478 @vindex backslash-max-column (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6479 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
6480 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
6481 automatically insert or align such backslashes,
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6482 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
6483
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6484 @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
6485 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
6486 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
6487 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
6488 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
6489 @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
6490 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
6491 long ``stick out'' instead.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6492
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6493 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
6494 the automatic alignment of backslashes, use
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6495 @code{c-auto-align-backslashes}.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6496 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6497
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6498 @defopt c-auto-align-backslashes
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6499 @vindex auto-align-backslashes (c-)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6500 Align automatically inserted line continuation backslashes if
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6501 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
6502 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
6503 @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
6504 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
6505
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6506 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
6507 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
6508 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
6509 @code{c-backslash-region} (@kbd{C-c C-\}).
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6510 @end defopt
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6511
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6512 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6513 @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
6514 @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
6515 @chapter Odds and Ends
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6516 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
6517
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6518 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
6519
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6520 @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
6521 @vindex require-final-newline (c-)
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6522 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
6523 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
6524 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
6525 Buffers,,, @lispref{}, @lispreftitle{}}) at mode initialization. If a
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6526 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
6527 @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
6528
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6529 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
6530 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
6531 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
6532 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6533
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6534 @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
6535 @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
6536 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
6537 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
6538 @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
6539 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
6540 want.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6541 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6542
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6543 @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
6544 @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
6545 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
6546 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
6547 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
6548
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6549 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
6550 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
6551 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
6552 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
6553 @end defopt
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6554
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6555
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6556 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6557 @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
6558 @comment node-name, next, previous, up
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6559 @appendix Sample .emacs File
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6560 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6561
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
6562 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
6563 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
6564 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
6565
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6566 @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
6567 ;; 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
6568 ;; 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
6569 ;; inherit from it.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6570 (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
6571 (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
6572 (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
6573
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6574 ;; offset customizations not in my-c-style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6575 ;; 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
6576 ;; made by a style.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6577 (setq c-offsets-alist '((member-init-intro . ++)))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6578
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6579 ;; Create my personal style.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6580 (defconst my-c-style
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6581 '((c-tab-always-indent . t)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6582 (c-comment-only-line-offset . 4)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6583 (c-hanging-braces-alist . ((substatement-open after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6584 (brace-list-open)))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6585 (c-hanging-colons-alist . ((member-init-intro before)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6586 (inher-intro)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6587 (case-label after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6588 (label after)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6589 (access-label after)))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6590 (c-cleanup-list . (scope-operator
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6591 empty-defun-braces
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6592 defun-close-semi))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6593 (c-offsets-alist . ((arglist-close . c-lineup-arglist)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6594 (substatement-open . 0)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6595 (case-label . 4)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6596 (block-open . 0)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6597 (knr-argdecl-intro . -)))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6598 (c-echo-syntactic-information-p . t))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6599 "My C Programming Style")
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6600 (c-add-style "PERSONAL" my-c-style)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6601
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6602 ;; Customizations for all modes in CC Mode.
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6603 (defun my-c-mode-common-hook ()
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6604 ;; set my personal style for the current buffer
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6605 (c-set-style "PERSONAL")
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6606 ;; other customizations
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6607 (setq tab-width 8
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6608 ;; 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
6609 indent-tabs-mode nil)
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6610 ;; we like auto-newline, but not hungry-delete
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6611 (c-toggle-auto-newline 1))
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6612 (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
6613 @end verbatim
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6614
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6615 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6616 @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
6617 @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
6618 @chapter Performance Issues
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6619 @cindex performance
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6620 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6621
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6622 @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
6623
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6624 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
6625 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
6626 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
6627 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
6628 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
6629 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
6630
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6631 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
6632 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
6633 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
6634 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
6635 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
6636 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
6637 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
6638 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
6639 it, unless it's something that's mentioned in this section.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6640
Dave Love <fx@gnu.org>
parents:
diff changeset
6641 Because @ccmode{} has to scan the buffer backwards from the current
Dave Love <fx@gnu.org>
parents:
diff changeset
6642 insertion point, and because C's syntax is fairly difficult to parse in
Dave Love <fx@gnu.org>
parents:
diff changeset
6643 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
6644 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
6645 (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
6646 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
6647 gets.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6648
Dave Love <fx@gnu.org>
parents:
diff changeset
6649 @findex beginning-of-defun
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6650 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
6651 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
6652 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
6653 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
6654 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
6655 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
6656 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
6657 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
6658
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6659 @findex defun-prompt-regexp
Dave Love <fx@gnu.org>
parents:
diff changeset
6660 @vindex c-Java-defun-prompt-regexp
Dave Love <fx@gnu.org>
parents:
diff changeset
6661 @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
6662 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
6663 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
6664 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
6665 approach. @ccmode{} comes with a constant
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6666 @code{c-Java-defun-prompt-regexp} which tries to define a regular
Dave Love <fx@gnu.org>
parents:
diff changeset
6667 expression usable for this style, but there are problems with it. In
Dave Love <fx@gnu.org>
parents:
diff changeset
6668 some cases it can cause @code{beginning-of-defun} to hang@footnote{This
Dave Love <fx@gnu.org>
parents:
diff changeset
6669 has been observed in Emacs 19.34 and XEmacs 19.15.}. For this reason,
Dave Love <fx@gnu.org>
parents:
diff changeset
6670 it is not used by default, but if you feel adventurous, you can set
Dave Love <fx@gnu.org>
parents:
diff changeset
6671 @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
6672 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
6673 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
6674 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
6675
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6676 @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
6677 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
6678 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
6679 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
6680 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
6681 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
6682 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
6683 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
6684 Emacs approach to finding the defun starts.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6685
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6686 @vindex c-enable-xemacs-performance-kludge-p
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6687 @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
6688 XEmacs users can set the variable
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6689 @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
6690 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
6691 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
6692 @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
6693 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
6694 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
6695 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
6696 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
6697 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
6698 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
6699 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
6700 in Emacs since the necessary built-in functions don't exist (in Emacs
76599
b57f15fb2d75 (Performance Issues): Update note about 21.3 to 22.1.
Chong Yidong <cyd@stupidchicken.com>
parents: 75348
diff changeset
6701 22.1 as of this writing in February 2007).
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6702
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6703 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
6704 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
6705 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
6706 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
6707 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
6708
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6709 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
6710 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
6711 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
6712 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
6713 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
6714 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
6715 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
6716
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6717 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
6718 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
6719 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
6720 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
6721 more info.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6722
Dave Love <fx@gnu.org>
parents:
diff changeset
6723
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6724 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6725 @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
6726 @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
6727 @chapter Limitations and Known Bugs
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6728 @cindex limitations
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6729 @cindex bugs
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6730 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6731
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6732 @itemize @bullet
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6733 @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
6734 @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
6735 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
6736 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
6737 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
6738
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 @item
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6740 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
6741 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
6742 editing.
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6743
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6744 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
6745 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
6746 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
6747 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
6748 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
6749
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6750 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
6751 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
6752 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
6753 @ccmode{}.
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6754
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6755 @item
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6756 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
6757 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
6758 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
6759 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
6760 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
6761
0922d91aab88 Changes for CC Mode 5.31.4. They are detailed in the ChangeLog entries
Alan Mackenzie <acm@muc.de>
parents: 73443
diff changeset
6762 @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
6763 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
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 @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
6766 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
6767 @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
6768
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 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
6770 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
6771 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
6772 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
6773 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
6774
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 @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
6776 (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
6777 (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
6778 (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
6779 @end example
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6780 @end itemize
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6781
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6782 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6783 @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
6784 @comment node-name, next, previous, up
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6785 @appendix Frequently Asked Questions
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6786 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
6787
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6788 @itemize @bullet
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6789 @item
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6790 @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
6791
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6792 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
6793
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6794 @item
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6795 @kindex RET
Dave Love <fx@gnu.org>
parents:
diff changeset
6796 @kindex C-j
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6797 @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
6798
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6799 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
6800 @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
6801 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
6802
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6803 @example
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6804 (define-key c-mode-base-map "\C-m" 'c-context-line-break)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6805 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
6806
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6807 @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
6808 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
6809
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6810 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6811 @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
6812
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6813 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
6814 Started}.
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 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6817 @kindex C-x h
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6818 @kindex C-M-\
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6819 @emph{How do I reindent the whole file?}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6820
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6821 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
6822 @kbd{C-M-\}. @xref{Indentation Commands}.
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 @item
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6825 @kindex C-M-q
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6826 @kindex C-M-u
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6827 @emph{How do I reindent the current block?}
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6828
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6829 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
6830 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
6831 Commands}.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6832
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6833 @item
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6834 @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
6835 @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
6836 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
6837
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6838 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
6839 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
6840 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
6841 @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
6842 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
6843 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
6844
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6845 @example
30396
460a86ced57c @setfilename to ../info/ccmode.
Gerd Moellmann <gerd@gnu.org>
parents: 30044
diff changeset
6846 (setq c-offsets-alist '((substatement-open . 0)))
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6847 @end example
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6848
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6849 @item
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6850 @cindex open paren in column zero
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6851 @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
6852 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
6853 indentation to go haywire. What gives?}
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6854
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6855 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
6856 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
6857 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
6858 @ifset XEMACS
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6859 @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
6860 @end ifset
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6861 @ifclear XEMACS
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6862 @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
6863 (@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
6864 @end ifclear
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6865
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 55832
diff changeset
6866 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
6867 (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
6868 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
6869 @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
6870 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
6871
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6872 @end itemize
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6873
Dave Love <fx@gnu.org>
parents:
diff changeset
6874
Dave Love <fx@gnu.org>
parents:
diff changeset
6875 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6876 @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
6877 @comment node-name, next, previous, up
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6878 @appendix Getting the Latest CC Mode Release
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6879 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dave Love <fx@gnu.org>
parents:
diff changeset
6880
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6881 @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
6882 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
6883
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6884 @cindex web site
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6885 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
6886 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
6887 @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
6888 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
6889
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6890 @quotation
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6891 @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
6892 @end quotation
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6893
Dave Love <fx@gnu.org>
parents:
diff changeset
6894
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6895 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
77235
88224dc74061 Include GFDL.
Chong Yidong <cyd@stupidchicken.com>
parents: 77036
diff changeset
6896 @node Mailing Lists and Bug Reports, GNU Free Documentation License, Updating CC Mode, Top
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6897 @comment node-name, next, previous, up
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6898 @appendix Mailing Lists and Submitting Bug Reports
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6899 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6900
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6901 @kindex C-c C-b
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6902 @findex c-submit-bug-report
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6903 @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
6904 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
6905 @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
6906 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
6907 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
6908 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
6909 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
6910 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
6911 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
6912
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6913 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
6914 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
6915 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
6916 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
6917 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
6918 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
6919
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6920 @cindex bug report mailing list
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6921 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
6922 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
6923 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
6924 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
6925 further details.
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6926
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6927 @cindex announcement mailing list
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6928 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
6929 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
6930 @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
6931 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
6932 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
6933 @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
6934 @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
6935 @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
6936 @c There is no newsgroup for Pike. :-(
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6937
77235
88224dc74061 Include GFDL.
Chong Yidong <cyd@stupidchicken.com>
parents: 77036
diff changeset
6938
88224dc74061 Include GFDL.
Chong Yidong <cyd@stupidchicken.com>
parents: 77036
diff changeset
6939 @node GNU Free Documentation License, Command and Function Index, Mailing Lists and Bug Reports, Top
88224dc74061 Include GFDL.
Chong Yidong <cyd@stupidchicken.com>
parents: 77036
diff changeset
6940 @appendix GNU Free Documentation License
88224dc74061 Include GFDL.
Chong Yidong <cyd@stupidchicken.com>
parents: 77036
diff changeset
6941 @include doclicense.texi
88224dc74061 Include GFDL.
Chong Yidong <cyd@stupidchicken.com>
parents: 77036
diff changeset
6942
88224dc74061 Include GFDL.
Chong Yidong <cyd@stupidchicken.com>
parents: 77036
diff changeset
6943
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6944 @c Removed the tentative node "Mode Initialization" from here, 2005/8/27.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6945 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
77235
88224dc74061 Include GFDL.
Chong Yidong <cyd@stupidchicken.com>
parents: 77036
diff changeset
6946 @node Command and Function Index, Variable Index, GNU Free Documentation License, Top
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6947 @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
6948 @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
6949 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6950
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6951 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
6952 @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
6953 @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
6954 @iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6955 @sp 2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6956 @end iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6957 @printindex fn
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6958
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6959
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6960 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6961 @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
6962 @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
6963 @unnumbered Variable Index
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6964 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6965
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6966 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
6967 @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
6968 @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
6969 @iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6970 @sp 2
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6971 @end iftex
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6972 @printindex vr
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6973
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6974
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6975 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6976 @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
6977 @comment node-name, next, previous, up
67253
f3fd456d606b Update for CC Mode 5.31.
Alan Mackenzie <acm@muc.de>
parents: 65555
diff changeset
6978 @unnumbered Concept and Key Index
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6979 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6980
Dave Love <fx@gnu.org>
parents:
diff changeset
6981 @printindex cp
Dave Love <fx@gnu.org>
parents:
diff changeset
6982
Dave Love <fx@gnu.org>
parents:
diff changeset
6983
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6984 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53118
04d26b9d5b56 * cc-mode.texi: Updated for CC Mode 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
6985 @comment Epilogue.
26819
a19be798eaea Installed cc-mode version 5.26.
Gerd Moellmann <gerd@gnu.org>
parents: 26490
diff changeset
6986 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6987
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6988 @iftex
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6989 @page
Dave Love <fx@gnu.org>
parents:
diff changeset
6990 @summarycontents
Dave Love <fx@gnu.org>
parents:
diff changeset
6991 @contents
36923
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6992 @end iftex
5be175601511 Version from CC mode 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 36341
diff changeset
6993
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6994 @bye
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
6995
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
6996 @ignore
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
6997 arch-tag: c4cab162-5e57-4366-bdce-4a9db2fc97f0
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
6998 @end ignore