diff options
| author | Alan Mackenzie | 2005-12-02 12:51:05 +0000 |
|---|---|---|
| committer | Alan Mackenzie | 2005-12-02 12:51:05 +0000 |
| commit | 116e44a12d452fa9b8ea0c5fe7bfecf86a1d30d1 (patch) | |
| tree | 259f58dc1838d7246fdc6eac162138ead400c5be /man | |
| parent | 0386b551af726187e2eb674fa2ffdb1cfedaabe8 (diff) | |
| download | emacs-116e44a12d452fa9b8ea0c5fe7bfecf86a1d30d1.tar.gz emacs-116e44a12d452fa9b8ea0c5fe7bfecf86a1d30d1.zip | |
Update for CC Mode 5.31.
Diffstat (limited to 'man')
| -rw-r--r-- | man/cc-mode.texi | 7264 |
1 files changed, 4238 insertions, 3026 deletions
diff --git a/man/cc-mode.texi b/man/cc-mode.texi index a59c0226257..92d4ac20aa0 100644 --- a/man/cc-mode.texi +++ b/man/cc-mode.texi | |||
| @@ -1,5 +1,4 @@ | |||
| 1 | \input texinfo | 1 | \input texinfo |
| 2 | |||
| 3 | @c Notes to self regarding line handling: | 2 | @c Notes to self regarding line handling: |
| 4 | @c | 3 | @c |
| 5 | @c Empty lines are often significant before @end directives; avoid them. | 4 | @c Empty lines are often significant before @end directives; avoid them. |
| @@ -27,6 +26,58 @@ | |||
| 27 | @comment %**start of header (This is for running Texinfo on a region) | 26 | @comment %**start of header (This is for running Texinfo on a region) |
| 28 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 27 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 29 | 28 | ||
| 29 | |||
| 30 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 31 | @comment How to make the various output formats: | ||
| 32 | @comment (Thanks to Robert Chassell for supplying this information.) | ||
| 33 | @comment Note that Texinfo 4.7 (or later) is needed. | ||
| 34 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 35 | @ignore | ||
| 36 | In each of the following pairs of commands, the first generates a | ||
| 37 | version with cross references pointing to the GNU Emacs manuals, | ||
| 38 | the second with them pointing to the XEmacs manuals. | ||
| 39 | ## Info output | ||
| 40 | makeinfo cc-mode.texi | ||
| 41 | makeinfo -DXEMACS cc-mode.texi | ||
| 42 | |||
| 43 | ## DVI output | ||
| 44 | ## You may need to set up the environment variable TEXINPUTS so | ||
| 45 | ## that tex can find the file texinfo.tex - See the tex | ||
| 46 | ## manpage. | ||
| 47 | texi2dvi cc-mode.texi | ||
| 48 | texi2dvi -t "@set XEMACS " cc-mode.texi | ||
| 49 | |||
| 50 | ## HTML output. (The --no-split parameter is optional) | ||
| 51 | makeinfo --html --no-split cc-mode.texi | ||
| 52 | makeinfo --html --no-split -DXEMACS cc-mode.texi | ||
| 53 | |||
| 54 | ## Plain text output | ||
| 55 | makeinfo --fill-column=70 --no-split --paragraph-indent=0 \ | ||
| 56 | --no-headers --output=cc-mode.txt cc-mode.texi | ||
| 57 | makeinfo --fill-column=70 --no-split --paragraph-indent=0 \ | ||
| 58 | --no-headers --output=cc-mode.txt -DXEMACS cc-mode.texi | ||
| 59 | |||
| 60 | ## DocBook output | ||
| 61 | makeinfo --docbook --no-split --paragraph-indent=0 \ | ||
| 62 | cc-mode.texi | ||
| 63 | makeinfo --docbook --no-split --paragraph-indent=0 \ | ||
| 64 | -DXEMACS cc-mode.texi | ||
| 65 | |||
| 66 | ## XML output | ||
| 67 | makeinfo --xml --no-split --paragraph-indent=0 \ | ||
| 68 | cc-mode.texi | ||
| 69 | makeinfo --xml --no-split --paragraph-indent=0 \ | ||
| 70 | -DXEMACS cc-mode.texi | ||
| 71 | |||
| 72 | #### (You must be in the same directory as the viewed file.) | ||
| 73 | |||
| 74 | ## View DVI output | ||
| 75 | xdvi cc-mode.dvi & | ||
| 76 | |||
| 77 | ## View HTML output | ||
| 78 | mozilla cc-mode.html | ||
| 79 | @end ignore | ||
| 80 | |||
| 30 | @comment No overfull hbox marks in the dvi file. | 81 | @comment No overfull hbox marks in the dvi file. |
| 31 | @finalout | 82 | @finalout |
| 32 | 83 | ||
| @@ -34,6 +85,46 @@ | |||
| 34 | @settitle CC Mode Manual | 85 | @settitle CC Mode Manual |
| 35 | @footnotestyle end | 86 | @footnotestyle end |
| 36 | 87 | ||
| 88 | @c The following four macros generate the filenames and titles of the | ||
| 89 | @c main (X)Emacs manual and the Elisp/Lispref manual. Leave the | ||
| 90 | @c Texinfo variable `XEMACS' unset to generate a GNU Emacs version, set it | ||
| 91 | @c to generate an XEmacs version, e.g. with | ||
| 92 | @c "makeinfo -DXEMACS cc-mode.texi". | ||
| 93 | @ifset XEMACS | ||
| 94 | @macro emacsman | ||
| 95 | xemacs | ||
| 96 | @end macro | ||
| 97 | @macro emacsmantitle | ||
| 98 | XEmacs User's Manual | ||
| 99 | @end macro | ||
| 100 | @macro lispref | ||
| 101 | lispref | ||
| 102 | @end macro | ||
| 103 | @macro lispreftitle | ||
| 104 | XEmacs Lisp Reference Manual | ||
| 105 | @end macro | ||
| 106 | @end ifset | ||
| 107 | |||
| 108 | @ifclear XEMACS | ||
| 109 | @macro emacsman | ||
| 110 | emacs | ||
| 111 | @end macro | ||
| 112 | @macro emacsmantitle | ||
| 113 | GNU Emacs Manual | ||
| 114 | @end macro | ||
| 115 | @macro lispref | ||
| 116 | elisp | ||
| 117 | @end macro | ||
| 118 | @macro lispreftitle | ||
| 119 | GNU Emacs Lisp Reference Manual | ||
| 120 | @end macro | ||
| 121 | @end ifclear | ||
| 122 | |||
| 123 | |||
| 124 | @macro ccmode | ||
| 125 | CC Mode | ||
| 126 | @end macro | ||
| 127 | |||
| 37 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 128 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 38 | @comment @setchapternewpage odd !! we don't want blank pages !! | 129 | @comment @setchapternewpage odd !! we don't want blank pages !! |
| 39 | @comment %**end of header (This is for running Texinfo on a region) | 130 | @comment %**end of header (This is for running Texinfo on a region) |
| @@ -49,13 +140,15 @@ | |||
| 49 | @comment Authors: | 140 | @comment Authors: |
| 50 | @comment Barry A. Warsaw | 141 | @comment Barry A. Warsaw |
| 51 | @comment Martin Stjernholm | 142 | @comment Martin Stjernholm |
| 143 | @comment Alan Mackenzie | ||
| 52 | @comment | 144 | @comment |
| 53 | @comment Maintained by Martin Stjernholm <bug-cc-mode@gnu.org> | 145 | @comment Maintained by Martin Stjernholm and Alan Mackenzie <bug-cc-mode@gnu.org> |
| 54 | @comment | 146 | @comment |
| 55 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 147 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 56 | 148 | ||
| 57 | @comment Define an index for syntactic symbols. | 149 | @comment Define an index for syntactic symbols. |
| 58 | @ifnottex | 150 | @ifnottex @c In texi2dvi, the @defindex would create an empty cc-mode.ss |
| 151 | @c For Info, unlike tex, @syncodeindex needs a matching @defindex. | ||
| 59 | @defindex ss | 152 | @defindex ss |
| 60 | @end ifnottex | 153 | @end ifnottex |
| 61 | 154 | ||
| @@ -105,15 +198,19 @@ license to the document, as described in section 6 of the license. | |||
| 105 | @titlepage | 198 | @titlepage |
| 106 | @sp 10 | 199 | @sp 10 |
| 107 | 200 | ||
| 108 | @center @titlefont{CC Mode 5.30} | 201 | @center @titlefont{CC Mode 5.31} |
| 109 | @sp 2 | 202 | @sp 2 |
| 110 | @center @subtitlefont{A GNU Emacs mode for editing C and C-like languages} | 203 | @center @subtitlefont{A GNU Emacs mode for editing C and C-like languages} |
| 111 | @sp 2 | 204 | @sp 2 |
| 112 | @center Barry A. Warsaw, Martin Stjernholm, Alan Mackenzie (AWK support) | 205 | @center Barry A. Warsaw, Martin Stjernholm, Alan Mackenzie |
| 113 | 206 | ||
| 114 | @page | 207 | @page |
| 115 | @vskip 0pt plus 1filll | 208 | @vskip 0pt plus 1filll |
| 116 | @insertcopying | 209 | @insertcopying |
| 210 | |||
| 211 | This manual was generated from $Revision: 5.241 $ of $RCSfile: cc-mode.texi,v $, which can be | ||
| 212 | downloaded from | ||
| 213 | @url{http://cvs.sf.net/viewcvs.py/cc-mode/cc-mode/cc-mode.texi}. | ||
| 117 | @end titlepage | 214 | @end titlepage |
| 118 | 215 | ||
| 119 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 216 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| @@ -124,139 +221,161 @@ license to the document, as described in section 6 of the license. | |||
| 124 | @node Top, Introduction, (dir), (dir) | 221 | @node Top, Introduction, (dir), (dir) |
| 125 | @comment node-name, next, previous, up | 222 | @comment node-name, next, previous, up |
| 126 | 223 | ||
| 127 | @macro ccmode | ||
| 128 | CC Mode | ||
| 129 | @end macro | ||
| 130 | |||
| 131 | @ifinfo | 224 | @ifinfo |
| 132 | @top @ccmode{} | 225 | @top @ccmode{} |
| 133 | 226 | ||
| 134 | @ccmode{} is a GNU Emacs mode for editing files containing C, C++, | 227 | @ccmode{} is a GNU Emacs mode for editing files containing C, C++, |
| 135 | Objective-C, Java, CORBA IDL (and the variants PSDL and CIDL), Pike | 228 | Objective-C, Java, CORBA IDL (and the variants PSDL and CIDL), Pike |
| 136 | code and to a certain extent, AWK code @xref{AWK Mode}. It provides | 229 | and AWK code. It provides syntax-based indentation, font locking, and |
| 137 | syntax-based indentation, font locking, and has several handy commands | 230 | has several handy commands and some minor modes to make the editing |
| 138 | and some minor modes to make the editing easier. It does not provide | 231 | easier. It does not provide tools to look up and navigate between |
| 139 | tools to look up and navigate between functions, classes etc - there are | 232 | functions, classes etc - there are other packages for that. |
| 140 | other packages for that. | ||
| 141 | @end ifinfo | 233 | @end ifinfo |
| 142 | 234 | ||
| 143 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 235 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 144 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 236 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 145 | 237 | ||
| 146 | @menu | 238 | @menu |
| 147 | * Introduction:: | 239 | * Introduction:: |
| 148 | * Getting Connected:: | 240 | * Overview:: |
| 149 | * Indentation Engine:: | 241 | * Getting Started:: |
| 150 | * Minor Modes:: | 242 | * Commands:: |
| 151 | * Text Filling and Line Breaking:: | 243 | * Font Locking:: |
| 152 | * Macro Handling:: | 244 | * Config Basics:: |
| 153 | * Font Locking:: | 245 | * Custom Filling and Breaking:: |
| 154 | * Commands:: | 246 | * Custom Auto-newlines:: |
| 155 | * Customizing Indentation:: | 247 | * Clean-ups:: |
| 156 | * Syntactic Symbols:: | 248 | * Indentation Engine Basics:: |
| 157 | * Indentation Functions:: | 249 | * Customizing Indentation:: |
| 158 | * AWK Mode:: | 250 | * Custom Macros:: |
| 159 | * Odds and Ends:: | 251 | * Odds and Ends:: |
| 160 | * Performance Issues:: | 252 | * Sample .emacs File:: |
| 161 | * Limitations and Known Bugs:: | 253 | * Performance Issues:: |
| 162 | * Frequently Asked Questions:: | 254 | * Limitations and Known Bugs:: |
| 163 | * Getting the Latest CC Mode Release:: | 255 | * FAQ:: |
| 164 | * Mailing Lists and Submitting Bug Reports:: | 256 | * Updating CC Mode:: |
| 165 | * Sample .emacs File:: | 257 | * Mailing Lists and Bug Reports:: |
| 166 | 258 | * Command and Function Index:: | |
| 167 | --- Indices --- | 259 | * Variable Index:: |
| 168 | 260 | * Concept and Key Index:: | |
| 169 | * Command and Function Index:: | ||
| 170 | * Variable Index:: | ||
| 171 | * Concept Index:: | ||
| 172 | 261 | ||
| 173 | @detailmenu | 262 | @detailmenu |
| 174 | --- The Detailed Node Listing --- | 263 | --- The Detailed Node Listing --- |
| 175 | 264 | ||
| 176 | Indentation Engine | 265 | Commands |
| 177 | 266 | ||
| 178 | * Syntactic Analysis:: | 267 | * Indentation Commands:: |
| 179 | * Indentation Calculation:: | 268 | * Comment Commands:: |
| 269 | * Movement Commands:: | ||
| 270 | * Filling and Breaking:: | ||
| 271 | * Minor Modes:: | ||
| 272 | * Electric Keys:: | ||
| 273 | * Auto-newlines:: | ||
| 274 | * Hungry WS Deletion:: | ||
| 275 | * Subword Movement:: | ||
| 276 | * Other Commands:: | ||
| 180 | 277 | ||
| 181 | Minor Modes | 278 | Font Locking |
| 182 | 279 | ||
| 183 | * Auto-newline Insertion:: | 280 | * Font Locking Preliminaries:: |
| 184 | * Hungry-deletion of Whitespace:: | 281 | * Faces:: |
| 282 | * Doc Comments:: | ||
| 283 | * AWK Mode Font Locking:: | ||
| 185 | 284 | ||
| 186 | Font Locking | 285 | Configuration Basics |
| 187 | 286 | ||
| 188 | * Font Locking Preliminaries:: | 287 | * CC Hooks:: |
| 189 | * Faces:: | 288 | * Style Variables:: |
| 190 | * Documentation Comments:: | 289 | * Styles:: |
| 191 | 290 | ||
| 192 | Auto-newline Insertion | 291 | Styles |
| 193 | 292 | ||
| 194 | * Hanging Braces:: | 293 | * Built-in Styles:: |
| 195 | * Hanging Colons:: | 294 | * Choosing a Style:: |
| 196 | * Hanging Semicolons and Commas:: | 295 | * Adding Styles:: |
| 197 | * Other Electric Commands:: | 296 | * File Styles:: |
| 198 | * Clean-ups:: | ||
| 199 | 297 | ||
| 200 | Commands | 298 | Customizing Auto-newlines |
| 201 | 299 | ||
| 202 | * Indentation Commands:: | 300 | * Hanging Braces:: |
| 203 | * Movement Commands:: | 301 | * Hanging Colons:: |
| 204 | * Other Commands:: | 302 | * Hanging Semicolons and Commas:: |
| 205 | 303 | ||
| 206 | Customizing Indentation | 304 | Hanging Braces |
| 207 | 305 | ||
| 208 | * Interactive Customization:: | 306 | * Custom Braces:: |
| 209 | * Permanent Customization:: | ||
| 210 | * Hooks:: | ||
| 211 | * Styles:: | ||
| 212 | * Advanced Customizations:: | ||
| 213 | 307 | ||
| 214 | Styles | 308 | Indentation Engine Basics |
| 215 | 309 | ||
| 216 | * Built-in Styles:: | 310 | * Syntactic Analysis:: |
| 217 | * Choosing a Style:: | 311 | * Syntactic Symbols:: |
| 218 | * Adding Styles:: | 312 | * Indentation Calculation:: |
| 219 | * File Styles:: | ||
| 220 | 313 | ||
| 221 | Advanced Customizations | 314 | Syntactic Symbols |
| 222 | 315 | ||
| 223 | * Custom Indentation Functions:: | 316 | * Function Symbols:: |
| 224 | * Custom Brace and Colon Hanging:: | 317 | * Class Symbols:: |
| 225 | * Customizing Semicolons and Commas:: | 318 | * Conditional Construct Symbols:: |
| 226 | * Other Special Indentations:: | 319 | * Switch Statement Symbols:: |
| 320 | * Brace List Symbols:: | ||
| 321 | * External Scope Symbols:: | ||
| 322 | * Paren List Symbols:: | ||
| 323 | * Literal Symbols:: | ||
| 324 | * Multiline Macro Symbols:: | ||
| 325 | * Objective-C Method Symbols:: | ||
| 326 | * Anonymous Class Symbol:: | ||
| 327 | * Statement Block Symbols:: | ||
| 328 | * K&R Symbols:: | ||
| 227 | 329 | ||
| 228 | AWK Mode | 330 | Customizing Indentation |
| 331 | |||
| 332 | * c-offsets-alist:: | ||
| 333 | * Interactive Customization:: | ||
| 334 | * Line-Up Functions:: | ||
| 335 | * Custom Line-Up:: | ||
| 336 | * Other Indentation:: | ||
| 337 | |||
| 338 | Line-Up Functions | ||
| 339 | |||
| 340 | * Brace/Paren Line-Up:: | ||
| 341 | * List Line-Up:: | ||
| 342 | * Operator Line-Up:: | ||
| 343 | * Comment Line-Up:: | ||
| 344 | * Misc Line-Up:: | ||
| 229 | 345 | ||
| 230 | * Initialising AWK Mode:: | ||
| 231 | * AWK Mode Font Locking:: | ||
| 232 | * AWK Mode Defuns:: | ||
| 233 | @end detailmenu | 346 | @end detailmenu |
| 234 | @end menu | 347 | @end menu |
| 235 | 348 | ||
| 236 | |||
| 237 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 349 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 238 | @node Introduction, Getting Connected, Top, Top | 350 | @node Introduction, Overview, Top, Top |
| 239 | @comment node-name, next, previous, up | 351 | @comment node-name, next, previous, up |
| 240 | @chapter Introduction | 352 | @chapter Introduction |
| 241 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 353 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 242 | 354 | ||
| 243 | @cindex BOCM | 355 | @cindex BOCM |
| 356 | @cindex history | ||
| 357 | @cindex awk-mode.el | ||
| 358 | @cindex c-mode.el | ||
| 359 | @cindex c++-mode.el | ||
| 244 | 360 | ||
| 245 | Welcome to @ccmode{}, a GNU Emacs mode for editing files containing C, | 361 | Welcome to @ccmode{}, a GNU Emacs mode for editing files containing C, |
| 246 | C++, Objective-C, Java, CORBA IDL (and the variants CORBA PSDL and | 362 | C++, Objective-C, Java, CORBA IDL (and the variants CORBA PSDL and |
| 247 | CIDL), Pike and to a certain extent, AWK code (@pxref{AWK Mode}). This | 363 | CIDL), Pike and AWK code. This incarnation of the mode is descended |
| 248 | incarnation of the mode is descended from @file{c-mode.el} (also called | 364 | from @file{c-mode.el} (also called ``Boring Old C Mode'' or BOCM |
| 249 | ``Boring Old C Mode'' or BOCM @t{:-)}, and @file{c++-mode.el} version 2, | 365 | @t{:-)}, @file{c++-mode.el} version 2, which Barry Warsaw had been |
| 250 | which Barry has been maintaining since 1992. Late in 1997, Martin | 366 | maintaining since 1992, and @file{awk-mode.el}, a long neglected mode |
| 251 | joined the @ccmode{} Maintainers Team, and implemented the Pike support. | 367 | in the (X)Emacs base. |
| 252 | As of 2000 Martin has taken over as the sole maintainer. @ccmode{} did | 368 | |
| 253 | not originally contain the font lock support for its languages --- that | 369 | Late in 1997, Martin Stjernholm joined Barry on the @ccmode{} |
| 254 | was added in version 5.30. AWK support was also added in 5.30 by Alan | 370 | Maintainers Team, and implemented the Pike support. In 2000 Martin |
| 255 | Mackenzie. | 371 | took over as the sole maintainer. In 2001 Alan Mackenzie joined the |
| 372 | team, implementing AWK support in version 5.30. @ccmode{} did not | ||
| 373 | originally contain the font lock support for its languages --- that | ||
| 374 | was added in version 5.30. | ||
| 256 | 375 | ||
| 257 | This manual describes @ccmode{} | 376 | This manual describes @ccmode{} |
| 258 | @comment The following line must appear on its own, so that the automated | 377 | @comment The following line must appear on its own, so that the |
| 259 | version 5.30. | 378 | version 5.31. |
| 260 | @comment Release.py script can update the version number automatically | 379 | @comment Release.py script can update the version number automatically |
| 261 | 380 | ||
| 262 | @ccmode{} supports the editing of K&R and ANSI C, C++, Objective-C, | 381 | @ccmode{} supports the editing of K&R and ANSI C, C++, Objective-C, |
| @@ -274,7 +393,7 @@ uniformly integrated as the other languages. | |||
| 274 | @findex idl-mode | 393 | @findex idl-mode |
| 275 | @findex pike-mode | 394 | @findex pike-mode |
| 276 | @findex awk-mode | 395 | @findex awk-mode |
| 277 | Note that the name of this package is ``@ccmode{},'' but there is no top | 396 | Note that the name of this package is ``@ccmode{}'', but there is no top |
| 278 | level @code{cc-mode} entry point. All of the variables, commands, and | 397 | level @code{cc-mode} entry point. All of the variables, commands, and |
| 279 | functions in @ccmode{} are prefixed with @code{c-@var{thing}}, and | 398 | functions in @ccmode{} are prefixed with @code{c-@var{thing}}, and |
| 280 | @code{c-mode}, @code{c++-mode}, @code{objc-mode}, @code{java-mode}, | 399 | @code{c-mode}, @code{c++-mode}, @code{objc-mode}, @code{java-mode}, |
| @@ -282,578 +401,841 @@ functions in @ccmode{} are prefixed with @code{c-@var{thing}}, and | |||
| 282 | provided. This package is intended to be a replacement for | 401 | provided. This package is intended to be a replacement for |
| 283 | @file{c-mode.el}, @file{c++-mode.el} and @file{awk-mode.el}. | 402 | @file{c-mode.el}, @file{c++-mode.el} and @file{awk-mode.el}. |
| 284 | 403 | ||
| 285 | @c @cindex @file{cc-compat.el} file | ||
| 286 | @c This distribution also contains a file | ||
| 287 | @c called @file{cc-compat.el} which should ease your transition from BOCM | ||
| 288 | @c to @ccmode{}. If you have a BOCM configuration you are really happy | ||
| 289 | @c with, and want to postpone learning how to configure @ccmode{}, take a | ||
| 290 | @c look at that file. It maps BOCM configuration variables to @ccmode{}'s | ||
| 291 | @c indentation model. It is not actively supported so for the long run, | ||
| 292 | @c you should learn how to customize @ccmode{} to support your coding | ||
| 293 | @c style. | ||
| 294 | |||
| 295 | A special word of thanks goes to Krishna Padmasola for his work in | 404 | A special word of thanks goes to Krishna Padmasola for his work in |
| 296 | converting the original @file{README} file to Texinfo format. I'd also | 405 | converting the original @file{README} file to Texinfo format. I'd |
| 297 | like to thank all the @ccmode{} victims who help enormously during the | 406 | also like to thank all the @ccmode{} victims who help enormously |
| 298 | early beta stages of @ccmode{}'s development. | 407 | during the early beta stages of @ccmode{}'s development. |
| 299 | 408 | ||
| 409 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 410 | @node Overview, Getting Started, Introduction, Top | ||
| 411 | @comment node-name, next, previous, up@cindex organization of the manual | ||
| 412 | @chapter Overview of the Manual | ||
| 413 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 300 | 414 | ||
| 301 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 415 | @noindent |
| 302 | @node Getting Connected, Indentation Engine, Introduction, Top | 416 | The manual starts with several introductory chapters (including this |
| 303 | @comment node-name, next, previous, up | 417 | one). |
| 304 | @chapter Getting Connected | ||
| 305 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 306 | |||
| 307 | If you got this version of @ccmode{} with Emacs or XEmacs, it should | ||
| 308 | work just fine right out of the box. Note however that you may not have | ||
| 309 | the latest @ccmode{} release and may want to upgrade your copy. | ||
| 310 | 418 | ||
| 311 | If you are upgrading an existing @ccmode{} installation, please see the | 419 | @noindent |
| 312 | @file{README} file for installation details. @ccmode{} may not work | 420 | The next chunk of the manual describes the day to day @emph{use} of |
| 313 | with older versions of Emacs or XEmacs. See the @ccmode{} release notes | 421 | @ccmode{} (as contrasted with how to customize it). |
| 314 | at @uref{http://cc-mode.sourceforge.net} for the latest information on | ||
| 315 | Emacs version and package compatibility (@pxref{Getting the Latest CC | ||
| 316 | Mode Release}). | ||
| 317 | 422 | ||
| 318 | @deffn Command c-version | 423 | @itemize @bullet |
| 319 | @findex version (c-) | 424 | @item |
| 320 | You can find out what version of @ccmode{} you are using by visiting a C | 425 | The chapter ``Commands'' describes in detail how to use (nearly) all |
| 321 | file and entering @kbd{M-x c-version RET}. You should see this message in | 426 | of @ccmode{}'s features. There are extensive cross-references from |
| 322 | the echo area: | 427 | here to the corresponding sections later in the manual which tell you |
| 428 | how to customize these features. | ||
| 323 | 429 | ||
| 324 | @example | 430 | @item |
| 325 | Using CC Mode version 5.XX | 431 | ``Font Locking'' describes how ``syntax highlighting'' is applied to |
| 326 | @end example | 432 | your buffers. It is mainly background information and can be skipped |
| 433 | over at a first reading. | ||
| 434 | @end itemize | ||
| 327 | 435 | ||
| 328 | @noindent | 436 | @noindent |
| 329 | where @samp{XX} is the minor release number. | 437 | The next chunk of the manual describes how to @emph{customize} |
| 330 | @end deffn | 438 | @ccmode{}. Typically, an overview of a topic is given at the chapter |
| 439 | level, then the sections and subsections describe the material in | ||
| 440 | increasing detail. | ||
| 331 | 441 | ||
| 442 | @itemize @bullet | ||
| 443 | @item | ||
| 444 | The chapter ``Configuration Basics'' tells you @emph{how} to write | ||
| 445 | customizations - whether in hooks, in styles, in both, or in neither, | ||
| 446 | depending on your needs. It describes the @ccmode{} style system and | ||
| 447 | lists the standard styles that @ccmode{} supplies. | ||
| 332 | 448 | ||
| 333 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 449 | @item |
| 334 | @node Indentation Engine, Minor Modes, Getting Connected, Top | 450 | The next few chapters, describe in detail how to customize the various |
| 335 | @comment node-name, next, previous, up | 451 | features of @ccmode{}. |
| 336 | @chapter Indentation Engine | ||
| 337 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 338 | 452 | ||
| 339 | @ccmode{} has an indentation engine that provides a flexible and general | 453 | @item |
| 340 | mechanism for customizing indentation. It separates indentation | 454 | Finally, there is a sample @file{.emacs} fragment, which might help you |
| 341 | calculation into two steps: first, @ccmode{} analyzes the line of code | 455 | in creating your own customization. |
| 342 | being indented to determine the kind of language construct it's looking | 456 | @end itemize |
| 343 | at, then it applies user defined offsets to the current line based on | ||
| 344 | this analysis. | ||
| 345 | 457 | ||
| 346 | This section will briefly cover how indentation is calculated in | 458 | @noindent |
| 347 | @ccmode{}. It is important to understand the indentation model being | 459 | The manual ends with ``this and that'', things that don't fit cleanly |
| 348 | used so that you will know how to customize @ccmode{} for your personal | 460 | into any of the previous chunks. |
| 349 | coding style. All the details are in @ref{Customizing Indentation}, and | ||
| 350 | later chapters. | ||
| 351 | 461 | ||
| 352 | @defopt c-syntactic-indentation | 462 | @itemize @bullet |
| 353 | @vindex syntactic-indentation (c-) | 463 | @item |
| 354 | Syntactic analysis for indentation is done when this is non-@code{nil} | 464 | Two chapters discuss the performance of @ccmode{} and known |
| 355 | (which is the default). When it's @code{nil} every line is just | 465 | bugs/limitations. |
| 356 | indented to the same level as the previous one, and @kbd{TAB} | ||
| 357 | (@code{c-indent-command}) adjusts the indentation in steps of | ||
| 358 | @code{c-basic-offset}. The indentation style has no effect, nor any of | ||
| 359 | the indentation associated variables, e.g., @code{c-special-indent-hook}. | ||
| 360 | @end defopt | ||
| 361 | 466 | ||
| 362 | @menu | 467 | @item |
| 363 | * Syntactic Analysis:: | 468 | The FAQ contains a list of common problems and questions. |
| 364 | * Indentation Calculation:: | ||
| 365 | @end menu | ||
| 366 | 469 | ||
| 470 | @item | ||
| 471 | The next two chapters tell you how to get in touch with the @ccmode{} | ||
| 472 | project - whether for updating @ccmode{} or submitting bug reports. | ||
| 473 | @end itemize | ||
| 474 | |||
| 475 | @noindent | ||
| 476 | Finally, there are the customary indices. | ||
| 367 | 477 | ||
| 368 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 478 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 369 | @node Syntactic Analysis, Indentation Calculation, , Indentation Engine | 479 | @node Getting Started, Commands, Overview, Top |
| 370 | @comment node-name, next, previous, up | 480 | @comment node-name, next, previous, up |
| 371 | @section Syntactic Analysis | 481 | @chapter Getting Started |
| 372 | @cindex syntactic analysis | ||
| 373 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 482 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 374 | 483 | ||
| 375 | @cindex relative buffer position | 484 | If you got this version of @ccmode{} with Emacs or XEmacs, it should |
| 376 | @cindex syntactic symbols | 485 | work just fine right out of the box. Note however that you might not |
| 377 | @cindex syntactic component | 486 | have the latest @ccmode{} release and might want to upgrade your copy |
| 378 | @cindex syntactic component list | 487 | (see below). |
| 379 | The first thing @ccmode{} does when indenting a line of code, is to | ||
| 380 | analyze the line, determining the @dfn{syntactic component list} of the | ||
| 381 | construct on that line. A syntactic component consists of a pair of | ||
| 382 | elements (in lisp parlance, a @emph{cons cell}), the first being | ||
| 383 | a @dfn{syntactic symbol}, the second being a @dfn{relative | ||
| 384 | buffer position}. Syntactic symbols describe elements of C code | ||
| 385 | @footnote{Unless otherwise noted, the term ``C code'' refers to all | ||
| 386 | the C-like languages.}, e.g., @code{statement}, @code{substatement}, | ||
| 387 | @code{class-open}, @code{class-close}, etc. @xref{Syntactic Symbols}, | ||
| 388 | for a complete list of currently recognized syntactic symbols and their | ||
| 389 | semantics. The style variable @code{c-offsets-alist} also contains the | ||
| 390 | list of currently supported syntactic symbols. | ||
| 391 | 488 | ||
| 392 | Conceptually, a line of C code is always indented relative to the | 489 | You should probably start by reading the entire chapter |
| 393 | indentation of some line higher up in the buffer. This is represented | 490 | @ref{Commands} to get an overview of @ccmode{}'s capabilities. |
| 394 | by the relative buffer position in the syntactic component. | ||
| 395 | 491 | ||
| 396 | Here is an example. Suppose we had the following code as the only thing | 492 | After trying out some commands, you may dislike some aspects of |
| 397 | in a C++ buffer @footnote{The line numbers in this and future examples | 493 | @ccmode{}'s default configuration. Here is an outline of how to |
| 398 | don't actually appear in the buffer, of course!}: | 494 | change some of the settings that newcomers to @ccmode{} most often |
| 495 | want to change: | ||
| 496 | |||
| 497 | @table @asis | ||
| 498 | @item c-basic-offset | ||
| 499 | This Lisp variable holds an integer, the number of columns @ccmode{} | ||
| 500 | indents nested code. To set this value to 6, customize | ||
| 501 | @code{c-basic-offset} or put this into your @file{.emacs}: | ||
| 399 | 502 | ||
| 400 | @example | 503 | @example |
| 401 | 1: void swap( int& a, int& b ) | 504 | (setq c-basic-offset 6) |
| 402 | 2: @{ | ||
| 403 | 3: int tmp = a; | ||
| 404 | 4: a = b; | ||
| 405 | 5: b = tmp; | ||
| 406 | 6: @} | ||
| 407 | @end example | 505 | @end example |
| 408 | 506 | ||
| 409 | @kindex C-c C-s | 507 | @item The (indentation) style |
| 410 | @findex c-show-syntactic-information | 508 | The basic ``shape'' of indentation created by @ccmode{}---by default, |
| 411 | @findex show-syntactic-information (c-) | 509 | this is @code{gnu} style (except for Java and AWK buffers). A list of |
| 412 | We can use the command @kbd{C-c C-s} (bound to | 510 | the availables styles and their descriptions can be found in |
| 413 | @code{c-show-syntactic-information}) to simply report what the | 511 | @ref{Built-in Styles}. A complete specification of the @ccmode{} |
| 414 | syntactic analysis is for the current line. Running this command on | 512 | style system, including how to create your own style, can be found in |
| 415 | line 4 of this example, we'd see in the echo area@footnote{With a | 513 | the chapter @ref{Styles}. To set your style to @code{linux}, either |
| 416 | universal argument (i.e., @kbd{C-u C-c C-s}) the analysis is inserted | 514 | customize @code{c-default-style} or put this into your @file{.emacs}: |
| 417 | into the buffer as a comment on the current line.}: | ||
| 418 | 515 | ||
| 419 | @example | 516 | @example |
| 420 | ((statement 35)) | 517 | (setq c-default-style '((java-mode . "java") |
| 518 | (awk-mode . "awk") | ||
| 519 | (other . "linux"))) | ||
| 421 | @end example | 520 | @end example |
| 422 | 521 | ||
| 423 | This tells us that the line is a statement and it is indented relative | 522 | @item Electric Indentation |
| 424 | to buffer position 35, which happens to be the @samp{i} in @code{int} on | 523 | Normally, when you type ``punctuation'' characters such as @samp{;} or |
| 425 | line 3. If you were to move point to line 3 and hit @kbd{C-c C-s}, you | 524 | @samp{@{}, @ccmode{} instantly reindents the current line. This can |
| 426 | would see: | 525 | be disconcerting until you get used to it. To disable @dfn{electric |
| 526 | indentation} in the current buffer, type @kbd{C-c C-l}. Type the same | ||
| 527 | thing to enable it again. To have electric indentation disabled by | ||
| 528 | default, put the following into your @file{.emacs} mode@footnote{There | ||
| 529 | is no ``easy customization'' facility for making this change.}: | ||
| 427 | 530 | ||
| 428 | @example | 531 | @example |
| 429 | ((defun-block-intro 29)) | 532 | (setq-default c-electric-flag nil) |
| 430 | @end example | 533 | @end example |
| 431 | 534 | ||
| 432 | This indicates that the @samp{int} line is the first statement in a top | 535 | @noindent |
| 433 | level function block, and is indented relative to buffer position 29, | 536 | Details of of this and other similar ``Minor Modes'' appear in the |
| 434 | which is the brace just after the function header. | 537 | section @ref{Minor Modes}. |
| 435 | 538 | ||
| 436 | Here's another example: | 539 | @item Making the @key{RET} key indent the new line |
| 540 | The standard Emacs binding for @key{RET} just adds a new line. If you | ||
| 541 | want it to reindent the new line as well, rebind the key. Note that | ||
| 542 | the action of rebinding will fail if the pertinent keymap doesn't yet | ||
| 543 | exist---we thus need to delay the action until after @ccmode{} has | ||
| 544 | been loaded. Put the following code into your @file{.emacs}: | ||
| 437 | 545 | ||
| 438 | @example | 546 | @example |
| 439 | 1: int add( int val, int incr, int doit ) | 547 | (defun my-make-CR-do-indent () |
| 440 | 2: @{ | 548 | (define-key c-mode-base-map "\C-m" 'c-context-line-break)) |
| 441 | 3: if( doit ) | 549 | (add-hook 'c-initialization-hook 'my-make-CR-do-indent) |
| 442 | 4: @{ | ||
| 443 | 5: return( val + incr ); | ||
| 444 | 6: @} | ||
| 445 | 7: return( val ); | ||
| 446 | 8: @} | ||
| 447 | @end example | 550 | @end example |
| 448 | 551 | ||
| 449 | @noindent | 552 | @noindent |
| 450 | Hitting @kbd{C-c C-s} on line 4 gives us: | 553 | This example demonstrates the use of a very powerful @ccmode{} (and |
| 554 | Emacs) facility, the hook. The use of @ccmode{}'s hooks is described | ||
| 555 | in @ref{CC Hooks}. | ||
| 556 | @end table | ||
| 451 | 557 | ||
| 452 | @example | 558 | All these settings should occur in your @file{.emacs} @emph{before} |
| 453 | ((substatement-open 46)) | 559 | any @ccmode{} buffers get loaded---in particular, before any call of |
| 454 | @end example | 560 | @code{desktop-read}. |
| 455 | 561 | ||
| 456 | @cindex substatement | 562 | As you get to know the mode better, you may want to make more |
| 457 | @cindex substatement block | 563 | ambitious changes to your configuration. For this, you should start |
| 458 | @noindent | 564 | reading the chapter @ref{Config Basics}. |
| 459 | which tells us that this is a brace that @emph{opens} a substatement | ||
| 460 | block. @footnote{A @dfn{substatement} is the line after a | ||
| 461 | conditional statement, such as @code{if}, @code{else}, @code{while}, | ||
| 462 | @code{do}, @code{switch}, etc. A @dfn{substatement | ||
| 463 | block} is a brace block following one of these conditional statements.} | ||
| 464 | 565 | ||
| 465 | @cindex comment-only line | 566 | If you are upgrading an existing @ccmode{} installation, please see |
| 466 | Syntactic component lists can contain more than one component, and | 567 | the @file{README} file for installation details. In particular, if |
| 467 | individual syntactic components need not have relative buffer positions. | 568 | you are going to be editing AWK files, @file{README} describes how to |
| 468 | The most common example of this is a line that contains a @dfn{comment | 569 | configure your (X)Emacs so that @ccmode{} will supersede the obsolete |
| 469 | only line}. | 570 | @code{awk-mode.el} which might have been supplied with your (X)Emacs. |
| 571 | @ccmode{} might not work with older versions of Emacs or XEmacs. See | ||
| 572 | the @ccmode{} release notes at @uref{http://cc-mode.sourceforge.net} | ||
| 573 | for the latest information on Emacs version and package compatibility | ||
| 574 | (@pxref{Updating CC Mode}). | ||
| 575 | |||
| 576 | @deffn Command c-version | ||
| 577 | @findex version (c-) | ||
| 578 | You can find out what version of @ccmode{} you are using by visiting a C | ||
| 579 | file and entering @kbd{M-x c-version RET}. You should see this message in | ||
| 580 | the echo area: | ||
| 470 | 581 | ||
| 471 | @example | 582 | @example |
| 472 | 1: void draw_list( List<Drawables>& drawables ) | 583 | Using CC Mode version 5.XX |
| 473 | 2: @{ | ||
| 474 | 3: // call the virtual draw() method on each element in list | ||
| 475 | 4: for( int i=0; i < drawables.count(), ++i ) | ||
| 476 | 5: @{ | ||
| 477 | 6: drawables[i].draw(); | ||
| 478 | 7: @} | ||
| 479 | 8: @} | ||
| 480 | @end example | 584 | @end example |
| 481 | 585 | ||
| 482 | @noindent | 586 | @noindent |
| 483 | Hitting @kbd{C-c C-s} on line 3 of this example gives: | 587 | where @samp{XX} is the minor release number. |
| 588 | @end deffn | ||
| 484 | 589 | ||
| 485 | @example | 590 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 486 | ((comment-intro) (defun-block-intro 46)) | 591 | @node Commands, Font Locking, Getting Started, Top |
| 487 | @end example | 592 | @comment node-name, next, previous, up |
| 593 | @chapter Commands | ||
| 594 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 488 | 595 | ||
| 489 | @noindent | 596 | This chapter specifies all of CC Mode's commands, and thus contains |
| 490 | and you can see that the syntactic component list contains two syntactic | 597 | nearly everything you need to know to @emph{use} @ccmode{} (as |
| 491 | components. Also notice that the first component, | 598 | contrasted with configuring it). @dfn{Commands} here means both |
| 492 | @samp{(comment-intro)} has no relative buffer position. | 599 | control key sequences and @dfn{electric keys}, these being characters |
| 600 | such as @samp{;} which, as well as inserting themselves into the | ||
| 601 | buffer, also do other things. | ||
| 493 | 602 | ||
| 603 | You might well want to review | ||
| 604 | @ifset XEMACS | ||
| 605 | @ref{Lists,,,@emacsman{}, @emacsmantitle{}}, | ||
| 606 | @end ifset | ||
| 607 | @ifclear XEMACS | ||
| 608 | @ref{Moving by Parens,,,@emacsman{}, @emacsmantitle{}}, | ||
| 609 | @end ifclear | ||
| 610 | which describes commands for moving around brace and parenthesis | ||
| 611 | structures. | ||
| 612 | |||
| 613 | |||
| 614 | @menu | ||
| 615 | * Indentation Commands:: | ||
| 616 | * Comment Commands:: | ||
| 617 | * Movement Commands:: | ||
| 618 | * Filling and Breaking:: | ||
| 619 | * Minor Modes:: | ||
| 620 | * Electric Keys:: | ||
| 621 | * Auto-newlines:: | ||
| 622 | * Hungry WS Deletion:: | ||
| 623 | * Subword Movement:: | ||
| 624 | * Other Commands:: | ||
| 625 | @end menu | ||
| 494 | 626 | ||
| 495 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 627 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 496 | @node Indentation Calculation, , Syntactic Analysis, Indentation Engine | 628 | @node Indentation Commands, Comment Commands, Commands, Commands |
| 497 | @comment node-name, next, previous, up | 629 | @comment node-name, next, previous,up |
| 498 | @section Indentation Calculation | 630 | @section Indentation Commands |
| 499 | @cindex indentation | 631 | @cindex indentation |
| 500 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 632 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 501 | 633 | ||
| 502 | Indentation for a line is calculated using the syntactic | 634 | The following commands reindent C constructs. Note that when you |
| 503 | component list derived in step 1 above (@pxref{Syntactic Analysis}). | 635 | change your coding style, either interactively or through some other |
| 504 | Each component contributes to the final total indentation of the line in | 636 | means, your file does @emph{not} automatically get reindented. You |
| 505 | two ways. | 637 | will need to execute one of the following commands to see the effects |
| 638 | of your changes. | ||
| 506 | 639 | ||
| 507 | First, the syntactic symbols are looked up in the @code{c-offsets-alist} | 640 | @cindex GNU indent program |
| 508 | style variable, which is an association list of syntactic symbols and | 641 | Also, variables like @code{c-hanging-*} and @code{c-cleanup-list} |
| 509 | the offsets to apply for those symbols. These offsets are added to a | 642 | (@pxref{Custom Auto-newlines}) only affect how on-the-fly code is |
| 510 | running total. | 643 | formatted. Changing the ``hanginess'' of a brace and then |
| 644 | reindenting, will not move the brace to a different line. For this, | ||
| 645 | you're better off getting an external program like GNU @code{indent}, | ||
| 646 | which will rearrange brace location, amongst other things. | ||
| 511 | 647 | ||
| 512 | Second, if the component has a relative buffer position, @ccmode{} | 648 | Preprocessor directives are handled as syntactic whitespace from other |
| 513 | adds the column number of that position to the running total. By adding | 649 | code, i.e. they can be interspersed anywhere without affecting the |
| 514 | up the offsets and columns for every syntactic component on the list, | 650 | indentation of the surrounding code, just like comments. |
| 515 | the final total indentation for the current line is computed. | ||
| 516 | 651 | ||
| 517 | Let's use our two code examples above to see how this works. Here is | 652 | The code inside macro definitions is, by default, still analyzed |
| 518 | our first example again: | 653 | syntactically so that you get relative indentation there just as you'd |
| 654 | get if the same code was outside a macro. However, since there is no | ||
| 655 | hint about the syntactic context, i.e. whether the macro expands to an | ||
| 656 | expression, to some statements, or perhaps to whole functions, the | ||
| 657 | syntactic recognition can be wrong. @ccmode{} manages to figure it | ||
| 658 | out correctly most of the time, though. | ||
| 519 | 659 | ||
| 520 | @example | 660 | Reindenting large sections of code can take a long time. When |
| 521 | 1: void swap( int& a, int& b ) | 661 | @ccmode{} reindents a region of code, it is essentially equivalent to |
| 522 | 2: @{ | 662 | hitting @key{TAB} on every line of the region. |
| 523 | 3: int tmp = a; | ||
| 524 | 4: a = b; | ||
| 525 | 5: b = tmp; | ||
| 526 | 6: @} | ||
| 527 | @end example | ||
| 528 | 663 | ||
| 529 | Let's say point is on line 3 and we hit the @kbd{TAB} key to reindent | 664 | These commands indent code: |
| 530 | the line. Remember that the syntactic component list for that | ||
| 531 | line is: | ||
| 532 | 665 | ||
| 533 | @example | 666 | @table @asis |
| 534 | ((defun-block-intro 29)) | 667 | @item @kbd{@key{TAB}} (@code{c-indent-command}) |
| 535 | @end example | 668 | @kindex TAB |
| 669 | @findex c-indent-command | ||
| 670 | @findex indent-command (c-) | ||
| 671 | This command indents the current line. That is all you need to know | ||
| 672 | about it for normal use. | ||
| 536 | 673 | ||
| 537 | @noindent | 674 | @code{c-indent-command} does different things, depending on the |
| 538 | @ccmode{} looks up @code{defun-block-intro} in the | 675 | settting of @code{c-syntactic-indentation} (@pxref{Indentation Engine |
| 539 | @code{c-offsets-alist} style variable. Let's say it finds the value | 676 | Basics}): |
| 540 | @samp{4}; it adds this to the running total (initialized to zero), | ||
| 541 | yielding a running total indentation of 4 spaces. | ||
| 542 | 677 | ||
| 543 | Next @ccmode{} goes to buffer position 29 and asks for the current | 678 | @itemize @bullet |
| 544 | column. This brace is in column zero, so @ccmode{} | 679 | @item |
| 545 | adds @samp{0} to the running total. Since there is only one syntactic | 680 | When it's non-@code{nil} (which it normally is), the command indents |
| 546 | component on the list for this line, indentation calculation is | 681 | the line according to its syntactic context. With a prefix argument |
| 547 | complete, and the total indentation for the line | 682 | (@kbd{C-u @key{TAB}}), it will re-indent the entire |
| 548 | is 4 spaces. | 683 | expression@footnote{this is only useful for a line starting with a |
| 684 | comment opener or an opening brace, parenthesis, or string quote.} | ||
| 685 | that begins at the line's left margin. | ||
| 549 | 686 | ||
| 550 | Here's another example: | 687 | @item |
| 688 | When it's @code{nil}, the command indents the line by an extra | ||
| 689 | @code{c-basic-offset} columns. A prefix argument acts as a | ||
| 690 | multiplier. A bare prefix (@kbd{C-u @key{TAB}} is equivalent to -1, | ||
| 691 | removing @code{c-basic-offset} columns from the indentation. | ||
| 692 | @end itemize | ||
| 551 | 693 | ||
| 552 | @example | 694 | The precise behavior is modified by several variables: With |
| 553 | 1: int add( int val, int incr, int doit ) | 695 | @code{c-tab-always-indent}, you can make @key{TAB} insert whitespace |
| 554 | 2: @{ | 696 | in some circumstances---@code{c-insert-tab-function} then defines |
| 555 | 3: if( doit ) | 697 | precisely what sort of ``whitespace'' this will be. Set the standard |
| 556 | 4: @{ | 698 | Emacs variable @code{indent-tabs-mode} to @code{t} if you want real |
| 557 | 5: return( val + incr ); | 699 | @samp{tab} characters to be used in the indentation, to @code{nil} if |
| 558 | 6: @} | 700 | you want only spaces. @xref{Just Spaces,,, @emacsman{}, |
| 559 | 7: return( val ); | 701 | @emacsmantitle{}}. |
| 560 | 8: @} | ||
| 561 | @end example | ||
| 562 | 702 | ||
| 563 | If we were to hit @kbd{TAB} on line 4 in the above example, the same | 703 | @defopt c-tab-always-indent |
| 564 | basic process is performed, despite the differences in the syntactic | 704 | @vindex tab-always-indent (c-) |
| 565 | component list. Remember that the list for this line is: | 705 | @cindex literal |
| 706 | This variable modifies how @key{TAB} operates. | ||
| 707 | @itemize @bullet | ||
| 708 | @item | ||
| 709 | When it is @code{t} (the default), @key{TAB} simply indents the | ||
| 710 | current line. | ||
| 711 | @item | ||
| 712 | When it is @code{nil}, @key{TAB} (re)indents the line only if point is | ||
| 713 | to the left of the first non-whitespace character on the line. | ||
| 714 | Otherwise it inserts some whitespace (a tab or an equivalent number of | ||
| 715 | spaces - see below) at point. | ||
| 716 | @item | ||
| 717 | With some other value, the line is reindented. Additionally, if point | ||
| 718 | is within a string or comment, some whitespace is inserted. | ||
| 719 | @end itemize | ||
| 720 | @end defopt | ||
| 566 | 721 | ||
| 567 | @example | 722 | @defopt c-insert-tab-function |
| 568 | ((substatement-open 46)) | 723 | @vindex insert-tab-function (c-) |
| 569 | @end example | 724 | @findex tab-to-tab-stop |
| 725 | When ``some whitespace'' is inserted as described above, what actually | ||
| 726 | happens is that the function stored in @code{c-insert-tab-function} is | ||
| 727 | called. Normally, this is @code{insert-tab}, which inserts a real tab | ||
| 728 | character or the equivalent number of spaces (depending on | ||
| 729 | @code{indent-tabs-mode}). Some people, however, set | ||
| 730 | @code{c-insert-tab-function} to @code{tab-to-tab-stop} so as to get | ||
| 731 | hard tab stops when indenting. | ||
| 732 | @end defopt | ||
| 733 | @end table | ||
| 570 | 734 | ||
| 571 | Here, @ccmode{} first looks up the @code{substatement-open} symbol | 735 | @noindent |
| 572 | in @code{c-offsets-alist}. Let's say it finds the value @samp{4}. This | 736 | The kind of indentation the next five commands do depends on the |
| 573 | yields a running total of 4. @ccmode{} then goes to | 737 | setting of @code{c-syntactic-indentation} (@pxref{Indentation Engine |
| 574 | buffer position 46, which is the @samp{i} in @code{if} on line 3. This | 738 | Basics}): |
| 575 | character is in the fourth column on that line so adding this to the | 739 | @itemize @bullet |
| 576 | running total yields an indentation for the line of 8 spaces. | 740 | @item |
| 741 | when it is non-@code{nil} (the default), the commands indent lines | ||
| 742 | according to their syntactic context; | ||
| 743 | @item | ||
| 744 | when it is @code{nil}, they just indent each line the same amount as | ||
| 745 | the previous non-blank line. The commands that indent a region aren't | ||
| 746 | very useful in this case. | ||
| 747 | @end itemize | ||
| 577 | 748 | ||
| 578 | Simple, huh? | 749 | @table @asis |
| 750 | @item @kbd{C-j} (@code{newline-and-indent}) | ||
| 751 | @kindex C-j | ||
| 752 | @findex newline-and-indent | ||
| 753 | Inserts a linefeed and indents the new blank line, ready to start | ||
| 754 | typing. This is a standard (X)Emacs command. | ||
| 579 | 755 | ||
| 580 | Actually, the mode usually just does The Right Thing without you having | 756 | @item @kbd{C-M-q} (@code{c-indent-exp}) |
| 581 | to think about it in this much detail. But when customizing | 757 | @kindex C-M-q |
| 582 | indentation, it's helpful to understand the general indentation model | 758 | @findex c-indent-exp |
| 583 | being used. | 759 | @findex indent-exp (c-) |
| 760 | Indents an entire balanced brace or parenthesis expression. Note that | ||
| 761 | point must be on the opening brace or parenthesis of the expression | ||
| 762 | you want to indent. | ||
| 584 | 763 | ||
| 585 | As you configure @ccmode{}, you might want to set the variable | 764 | @item @kbd{C-c C-q} (@code{c-indent-defun}) |
| 586 | @code{c-echo-syntactic-information-p} to non-@code{nil} so that the | 765 | @kindex C-c C-q |
| 587 | syntactic component list and calculated offset will always be echoed in | 766 | @findex c-indent-defun |
| 588 | the minibuffer when you hit @kbd{TAB}. | 767 | @findex indent-defun (c-) |
| 768 | Indents the entire top-level function, class or macro definition | ||
| 769 | encompassing point. It leaves point unchanged. This function can't be | ||
| 770 | used to reindent a nested brace construct, such as a nested class or | ||
| 771 | function, or a Java method. The top-level construct being reindented | ||
| 772 | must be complete, i.e. it must have both a beginning brace and an ending | ||
| 773 | brace. | ||
| 774 | |||
| 775 | @item @kbd{C-M-\} (@code{indent-region}) | ||
| 776 | @kindex C-M-\ | ||
| 777 | @findex indent-region | ||
| 778 | Indents an arbitrary region of code. This is a standard Emacs command, | ||
| 779 | tailored for C code in a @ccmode{} buffer. Note, of course, that point | ||
| 780 | and mark must delineate the region you want to indent. | ||
| 781 | |||
| 782 | @item @kbd{C-M-h} (@code{c-mark-function}) | ||
| 783 | @kindex C-M-h | ||
| 784 | @findex c-mark-function | ||
| 785 | @findex mark-function (c-) | ||
| 786 | While not strictly an indentation command, this is useful for marking | ||
| 787 | the current top-level function or class definition as the current | ||
| 788 | region. As with @code{c-indent-defun}, this command operates on | ||
| 789 | top-level constructs, and can't be used to mark say, a Java method. | ||
| 790 | @end table | ||
| 589 | 791 | ||
| 792 | These variables are also useful when indenting code: | ||
| 793 | |||
| 794 | @defopt indent-tabs-mode | ||
| 795 | This is a standard Emacs variable that controls how line indentation | ||
| 796 | is composed. When it's non-@code{nil}, tabs can be used in a line's | ||
| 797 | indentation, otherwise only spaces are used. | ||
| 798 | @end defopt | ||
| 799 | |||
| 800 | @defopt c-progress-interval | ||
| 801 | @vindex progress-interval (c-) | ||
| 802 | When indenting large regions of code, this variable controls how often a | ||
| 803 | progress message is displayed. Set this variable to @code{nil} to | ||
| 804 | inhibit the progress messages, or set it to an integer which is how | ||
| 805 | often (in seconds) progress messages are to be displayed. | ||
| 806 | @end defopt | ||
| 590 | 807 | ||
| 591 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 808 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 592 | @node Minor Modes, Text Filling and Line Breaking, Indentation Engine, Top | 809 | @node Comment Commands, Movement Commands, Indentation Commands, Commands |
| 593 | @comment node-name, next, previous, up | 810 | @comment node-name, next, previous, up |
| 594 | @chapter Minor Modes | 811 | @section Comment Commands |
| 812 | @cindex comments (insertion of) | ||
| 595 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 813 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 596 | 814 | ||
| 597 | @ccmode{} contains two minor-mode-like features that you should | 815 | @table @asis |
| 598 | find useful while entering new C code. The first is called | 816 | @item @kbd{C-c C-c} (@code{comment-region}) |
| 599 | @dfn{auto-newline} mode, and the second is called @dfn{hungry-delete} | 817 | @kindex C-c C-c |
| 600 | mode. These minor modes can be toggled on and off independently, and | 818 | @findex comment-region |
| 601 | @ccmode{} can be configured so that it starts up with any | 819 | This command comments out the lines that start in the region. With a |
| 602 | combination of these minor modes. By default, both of these minor modes | 820 | negative argument, it does the opposite - it deletes the comment |
| 603 | are turned off. | 821 | delimiters from these lines. @xref{Multi-Line Comments,,, emacs, GNU |
| 604 | 822 | Emacs Manual}, for fuller details. @code{comment-region} isn't | |
| 605 | The state of the minor modes is always reflected in the minor mode list | 823 | actually part of @ccmode{} - it is given a @ccmode{} binding for |
| 606 | on the modeline of the @ccmode{} buffer. When auto-newline mode is | 824 | convenience. |
| 607 | enabled, you will see @samp{C/a} on the mode line@footnote{The @samp{C} | 825 | |
| 608 | would be replaced with the name of the language in question for the | 826 | @item @kbd{M-;} (@code{comment-dwim} or @code{indent-for-comment} @footnote{The name of this command varies between (X)Emacs versions.}) |
| 609 | other languages @ccmode{} supports.}. When hungry delete mode is | 827 | @kindex M-; |
| 610 | enabled you will see @samp{C/h} and if both modes were enabled, you'd | 828 | @findex comment-dwim |
| 611 | see @samp{C/ah}. | 829 | @findex indent-for-comment |
| 830 | Insert a comment at the end of the current line, if none is there | ||
| 831 | already. Then reindent the comment according to @code{comment-column} | ||
| 832 | @ifclear XEMACS | ||
| 833 | (@pxref{Options for Comments,,, emacs, GNU Emacs Manual}) | ||
| 834 | @end ifclear | ||
| 835 | @ifset XEMACS | ||
| 836 | (@pxref{Comments,,, xemacs, XEmacs User's Manual}) | ||
| 837 | @end ifset | ||
| 838 | and the variables below. Finally, position the point after the | ||
| 839 | comment starter. This is a standard Emacs command, but @ccmode{} | ||
| 840 | enhances it a bit with two variables: | ||
| 612 | 841 | ||
| 613 | @kindex C-c C-a | 842 | @defopt c-indent-comment-alist |
| 614 | @kindex C-c C-d | 843 | @vindex indent-comment-alist (c-) |
| 615 | @kindex C-c C-t | 844 | @vindex comment-column |
| 616 | @findex c-toggle-hungry-state | 845 | This style variable allows you to vary the column that @kbd{M-;} puts |
| 617 | @findex c-toggle-auto-state | 846 | the comment at, depending on what sort of code is on the line, and |
| 618 | @findex c-toggle-auto-hungry-state | 847 | possibly the indentation of any similar comment on the preceding line. |
| 619 | @findex toggle-hungry-state (c-) | 848 | It is an association list that maps different types of lines to |
| 620 | @findex toggle-auto-state (c-) | 849 | actions describing how they should be handled. If a certain line type |
| 621 | @findex toggle-auto-hungry-state (c-) | 850 | isn't present on the list then the line is indented to the column |
| 622 | @ccmode{} provides key bindings which allow you to toggle the minor | 851 | specified by @code{comment-column}. |
| 623 | modes on the fly while editing code. To toggle just the auto-newline | ||
| 624 | state, hit @kbd{C-c C-a} (bound to @code{c-toggle-auto-state}). When | ||
| 625 | you do this, you should see the @samp{a} indicator either appear or | ||
| 626 | disappear on the modeline. Similarly, to toggle just the | ||
| 627 | hungry-delete state, use @kbd{C-c C-d} (@code{c-toggle-hungry-state}), | ||
| 628 | and to toggle both states, use @kbd{C-c C-t} | ||
| 629 | (@code{c-toggle-auto-hungry-state}). | ||
| 630 | |||
| 631 | To set up the auto-newline and hungry-delete states to your preferred | ||
| 632 | values, you would need to add some lisp to your @file{.emacs} file that | ||
| 633 | called one of the @code{c-toggle-*-state} functions directly. When | ||
| 634 | called programmatically, each function takes a numeric value, where | ||
| 635 | a positive number enables the minor mode, a negative number disables the | ||
| 636 | mode, and zero toggles the current state of the mode. | ||
| 637 | |||
| 638 | So for example, if you wanted to enable both auto-newline and | ||
| 639 | hungry-delete for all your C file editing, you could add the following | ||
| 640 | to your @file{.emacs} file: | ||
| 641 | 852 | ||
| 642 | @example | 853 | See the documentation string for for a full description of this |
| 643 | (add-hook 'c-mode-common-hook | 854 | variable (use @kbd{C-h v c-indent-comment-alist}). |
| 644 | (lambda () (c-toggle-auto-hungry-state 1))) | 855 | @end defopt |
| 645 | @end example | ||
| 646 | 856 | ||
| 647 | @menu | 857 | @defopt c-indent-comments-syntactically-p |
| 648 | * Auto-newline Insertion:: | 858 | @vindex indent-comments-syntactically-p (c-) |
| 649 | * Hungry-deletion of Whitespace:: | 859 | Normally, when this style variable is @code{nil}, @kbd{M-;} will |
| 650 | @end menu | 860 | indent comment-only lines according to @code{c-indent-comment-alist}, |
| 861 | just as it does with lines where other code precede the comments. | ||
| 862 | However, if you want it to act just like @key{TAB} for comment-only | ||
| 863 | lines you can get that by setting | ||
| 864 | @code{c-indent-comments-syntactically-p} to non-@code{nil}. | ||
| 651 | 865 | ||
| 866 | If @code{c-indent-comments-syntactically-p} is non-@code{nil} then | ||
| 867 | @code{c-indent-comment-alist} won't be consulted at all for comment-only | ||
| 868 | lines. | ||
| 869 | @end defopt | ||
| 870 | @end table | ||
| 652 | 871 | ||
| 653 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 872 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 654 | @node Auto-newline Insertion, Hungry-deletion of Whitespace, , Minor Modes | 873 | @node Movement Commands, Filling and Breaking, Comment Commands, Commands |
| 655 | @comment node-name, next, previous, up | 874 | @comment node-name, next, previous, up |
| 656 | @section Auto-newline Insertion | 875 | @section Movement Commands |
| 657 | @cindex auto-newline | 876 | @cindex movement |
| 658 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 877 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 659 | 878 | ||
| 660 | @cindex electric characters | 879 | @ccmode{} contains some useful commands for moving around in C code. |
| 661 | Auto-newline minor mode works by enabling certain @dfn{electric | ||
| 662 | characters}. Special characters such as the left and right braces, | ||
| 663 | colons, semicolons, etc., have been made electric to perform some | ||
| 664 | magic formatting in addition to inserting the typed character. As a | ||
| 665 | general rule, electric characters are only electric when the following | ||
| 666 | conditions apply: | ||
| 667 | 880 | ||
| 668 | @itemize @bullet | 881 | @table @asis |
| 669 | @item | 882 | @item @kbd{M-x c-beginning-of-defun} |
| 670 | Auto-newline minor mode is enabled, as evidenced by a @samp{C/a} or | 883 | @itemx @kbd{M-x c-end-of-defun} |
| 671 | @samp{C/ah} indicator on the modeline. | 884 | @findex c-beginning-of-defun |
| 885 | @findex c-end-of-defun | ||
| 886 | @findex beginning-of-defun (c-) | ||
| 887 | @findex end-of-defun (c-) | ||
| 888 | @findex beginning-of-defun | ||
| 889 | @findex end-of-defun | ||
| 890 | Move to the start or end of the current top-level definition, this | ||
| 891 | being the outermost brace pair which encloses point. These functions | ||
| 892 | are analogous to the Emacs built-in commands @code{beginning-of-defun} | ||
| 893 | and @code{end-of-defun}, except they eliminate the constraint that the | ||
| 894 | top-level opening brace of the defun must be in column zero. See | ||
| 895 | @ref{Defuns,,,@emacsman{}, @emacsmantitle{}}, for more information. | ||
| 896 | |||
| 897 | Depending on the coding style you're using, you might prefer these two | ||
| 898 | commands to the standard Emacs ones. If so, consider binding them to | ||
| 899 | @kbd{C-M-a} and @kbd{C-M-e}. @xref{Sample .emacs File}. This | ||
| 900 | customization won't affect the special bindings for these key | ||
| 901 | sequences in force in AWK Mode. For backwards compatibility reasons, | ||
| 902 | the default bindings for @kbd{C-M-a} and @kbd{C-M-e} remain in effect. | ||
| 903 | |||
| 904 | @item @kbd{C-M-a} (AWK Mode) (@code{c-awk-beginning-of-defun}) | ||
| 905 | @itemx @kbd{C-M-e} (AWK Mode) (@code{c-awk-end-of-defun}) | ||
| 906 | @kindex C-M-a (AWK Mode) | ||
| 907 | @kindex C-M-e (AWK Mode) | ||
| 908 | @findex c-awk-beginning-of-defun | ||
| 909 | @findex awk-beginning-of-defun (c-) | ||
| 910 | @findex c-awk-end-of-defun | ||
| 911 | @findex awk-end-of-defun (c-) | ||
| 912 | Move back to the beginning or forward to the end of the current AWK | ||
| 913 | defun. These functions are bound to @kbd{C-M-a} and @kbd{C-M-e} by | ||
| 914 | default in AWK Mode. They can take prefix-arguments, their | ||
| 915 | functionality being entirely equivalent to @code{beginning-of-defun} | ||
| 916 | and @code{end-of-defun}. | ||
| 672 | 917 | ||
| 673 | @item | 918 | AWK Mode @dfn{defuns} are either pattern/action pairs (either of which |
| 674 | @cindex literal | 919 | might be implicit) or user defined functions. Having the @samp{@{} and |
| 675 | @cindex syntactic whitespace | 920 | @samp{@}} (if there are any) in column zero, as is suggested for some |
| 676 | The character was not typed inside of a literal @footnote{A | 921 | modes, is neither necessary nor helpful in AWK mode. |
| 677 | @dfn{literal} is defined as any comment, string, or preprocessor macro | ||
| 678 | definition. These constructs are also known as @dfn{syntactic | ||
| 679 | whitespace} since they are usually ignored when scanning C code.}. | ||
| 680 | 922 | ||
| 681 | @item | 923 | @item @kbd{M-a} (@code{c-beginning-of-statement}) |
| 682 | No numeric argument was supplied to the command (i.e., it was typed as | 924 | @itemx @kbd{M-e} (@code{c-end-of-statement}) |
| 683 | normal, with no @kbd{C-u} prefix). | 925 | @kindex M-a |
| 684 | @end itemize | 926 | @kindex M-e |
| 927 | @findex c-beginning-of-statement | ||
| 928 | @findex c-end-of-statement | ||
| 929 | @findex beginning-of-statement (c-) | ||
| 930 | @findex end-of-statement (c-) | ||
| 931 | Move to the beginning or end of the innermost C statement. If point | ||
| 932 | is already there, move to the next beginning or end of a statement, | ||
| 933 | even if that means moving into a block. (Use @kbd{C-M-b} or | ||
| 934 | @kbd{C-M-f} to move over a balanced block.) A prefix argument @var{n} | ||
| 935 | means move over @var{n} statements. | ||
| 685 | 936 | ||
| 686 | @menu | 937 | If point is within or next to a comment or a string which spans more |
| 687 | * Hanging Braces:: | 938 | than one line, these commands move by sentences instead of statements. |
| 688 | * Hanging Colons:: | ||
| 689 | * Hanging Semicolons and Commas:: | ||
| 690 | * Other Electric Commands:: | ||
| 691 | * Clean-ups:: | ||
| 692 | @end menu | ||
| 693 | 939 | ||
| 940 | When called from a program, these functions take three optional | ||
| 941 | arguments: the repetition count, a buffer position limit which is the | ||
| 942 | farthest back to search for the syntactic context, and a flag saying | ||
| 943 | whether to do sentence motion in or near comments and multiline | ||
| 944 | strings. | ||
| 694 | 945 | ||
| 695 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 946 | @item @kbd{C-c C-u} (@code{c-up-conditional}) |
| 696 | @node Hanging Braces, Hanging Colons, , Auto-newline Insertion | 947 | @kindex C-c C-u |
| 697 | @comment node-name, next, previous, up | 948 | @findex c-up-conditional |
| 698 | @subsection Hanging Braces | 949 | @findex up-conditional (c-) |
| 699 | @cindex hanging braces | 950 | Move back to the containing preprocessor conditional, leaving the mark |
| 700 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 951 | behind. A prefix argument acts as a repeat count. With a negative |
| 952 | argument, move forward to the end of the containing preprocessor | ||
| 953 | conditional. | ||
| 701 | 954 | ||
| 702 | @findex c-electric-brace | 955 | @samp{#elif} is treated like @samp{#else} followed by @samp{#if}, so the |
| 703 | @findex electric-brace (c-) | 956 | function stops at them when going backward, but not when going |
| 704 | @kindex @{ | 957 | forward. |
| 705 | @kindex @} | ||
| 706 | 958 | ||
| 707 | When you type either an open or close brace (i.e., @kbd{@{} or @kbd{@}}), | 959 | This key sequence is not bound in AWK Mode, which doesn't have |
| 708 | the electric command @code{c-electric-brace} gets run. This command has | 960 | preprocessor statements. |
| 709 | two electric formatting behaviors. First, it will perform some | ||
| 710 | reindentation of the line the brace was typed on, and second, it will | ||
| 711 | add various newlines before and/or after the typed brace. | ||
| 712 | Reindentation occurs automatically whenever the electric behavior is | ||
| 713 | enabled. If the brace ends up on a line other than the one it was typed | ||
| 714 | on, then that line is also reindented. | ||
| 715 | 961 | ||
| 716 | The default in auto-newline mode is to insert newlines both before and | 962 | @item @kbd{M-x c-up-conditional-with-else} |
| 717 | after a brace, but that can be controlled by the | 963 | @findex c-up-conditional-with-else |
| 718 | @code{c-hanging-braces-alist} style variable. | 964 | @findex up-conditional-with-else (c-) |
| 965 | A variety of @code{c-up-conditional} that also stops at @samp{#else} | ||
| 966 | lines. Normally those lines are ignored. | ||
| 719 | 967 | ||
| 720 | @defopt c-hanging-braces-alist | 968 | @item @kbd{M-x c-down-conditional} |
| 721 | @vindex hanging-braces-alist (c-) | 969 | @findex c-down-conditional |
| 970 | @findex down-conditional (c-) | ||
| 971 | Move forward into the next nested preprocessor conditional, leaving | ||
| 972 | the mark behind. A prefix argument acts as a repeat count. With a | ||
| 973 | negative argument, move backward into the previous nested preprocessor | ||
| 974 | conditional. | ||
| 722 | 975 | ||
| 723 | This variable contains a mapping between syntactic symbols related to | 976 | @samp{#elif} is treated like @samp{#else} followed by @samp{#if}, so the |
| 724 | braces, and a list of places to insert a newline. The syntactic symbols | 977 | function stops at them when going forward, but not when going backward. |
| 725 | that are useful for this list are @code{brace-list-intro}, | ||
| 726 | @code{statement-cont}, @code{inexpr-class-open}, | ||
| 727 | @code{inexpr-class-close}, and all the @code{*-open} and @code{*-close} | ||
| 728 | symbols. @xref{Syntactic Symbols}, for a more detailed description of | ||
| 729 | these syntactic symbols, except for @code{inexpr-class-open} and | ||
| 730 | @code{inexpr-class-close}, which aren't actual syntactic symbols. | ||
| 731 | 978 | ||
| 732 | The braces of anonymous inner classes in Java are given the special | 979 | @item @kbd{M-x c-down-conditional-with-else} |
| 733 | symbols @code{inexpr-class-open} and @code{inexpr-class-close}, so that | 980 | @findex c-down-conditional-with-else |
| 734 | they can be distinguished from the braces of normal classes@footnote{The | 981 | @findex down-conditional-with-else (c-) |
| 735 | braces of anonymous classes produce a combination of | 982 | A variety of @code{c-down-conditional} that also stops at @samp{#else} |
| 736 | @code{inexpr-class}, and @code{class-open} or @code{class-close} in | 983 | lines. Normally those lines are ignored. |
| 737 | normal indentation analysis.}. | ||
| 738 | 984 | ||
| 739 | Note that the aggregate constructs in Pike mode, @samp{(@{}, @samp{@})}, | 985 | @item @kbd{C-c C-p} (@code{c-backward-conditional}) |
| 740 | @samp{([}, @samp{])}, and @samp{(<}, @samp{>)}, do not count as brace | 986 | @itemx @kbd{C-c C-n} (@code{c-forward-conditional}) |
| 741 | lists in this regard, even though they do for normal indentation | 987 | @kindex C-c C-p |
| 742 | purposes. It's currently not possible to set automatic newlines on | 988 | @kindex C-c C-n |
| 743 | these constructs. | 989 | @findex c-backward-conditional |
| 990 | @findex c-forward-conditional | ||
| 991 | @findex backward-conditional (c-) | ||
| 992 | @findex forward-conditional (c-) | ||
| 993 | Move backward or forward across a preprocessor conditional, leaving | ||
| 994 | the mark behind. A prefix argument acts as a repeat count. With a | ||
| 995 | negative argument, move in the opposite direction. | ||
| 744 | 996 | ||
| 745 | The value associated with each syntactic symbol in this association list | 997 | These key sequences are not bound in AWK Mode, which doesn't have |
| 746 | is called an @var{action}, which can be either a function or a list. | 998 | preprocessor statements. |
| 747 | @xref{Custom Brace and Colon Hanging}, for a more detailed discussion of | ||
| 748 | using a function as a brace hanging @var{action}. | ||
| 749 | 999 | ||
| 750 | When the @var{action} is a list, it can contain any combination of the | 1000 | @item @kbd{M-x c-backward-into-nomenclature} |
| 751 | symbols @code{before} and @code{after}, directing @ccmode{} where to | 1001 | @itemx @kbd{M-x c-forward-into-nomenclature} |
| 752 | put newlines in relationship to the brace being inserted. Thus, if the | 1002 | @findex c-backward-into-nomenclature |
| 753 | list contains only the symbol @code{after}, then the brace is said to | 1003 | @findex c-forward-into-nomenclature |
| 754 | @dfn{hang} on the right side of the line, as in: | 1004 | @findex backward-into-nomenclature (c-) |
| 1005 | @findex forward-into-nomenclature (c-) | ||
| 1006 | A popular programming style, especially for object-oriented languages | ||
| 1007 | such as C++ is to write symbols in a mixed case format, where the | ||
| 1008 | first letter of each word is capitalized, and not separated by | ||
| 1009 | underscores. E.g. @samp{SymbolsWithMixedCaseAndNoUnderlines}. | ||
| 755 | 1010 | ||
| 756 | @example | 1011 | These commands move backward or forward to the beginning of the next |
| 757 | // here, open braces always `hang' | 1012 | capitalized word. With prefix argument @var{n}, move @var{n} times. |
| 758 | void spam( int i ) @{ | 1013 | If @var{n} is negative, move in the opposite direction. |
| 759 | if( i == 7 ) @{ | ||
| 760 | dosomething(i); | ||
| 761 | @} | ||
| 762 | @} | ||
| 763 | @end example | ||
| 764 | 1014 | ||
| 765 | When the list contains both @code{after} and @code{before}, the braces | 1015 | Note that these two commands have been superseded by |
| 766 | will appear on a line by themselves, as shown by the close braces in the | 1016 | @code{c-subword-mode}, which you should use instead. @xref{Subword |
| 767 | above example. The list can also be empty, in which case no newlines | 1017 | Movement}. They might be removed from a future release of @ccmode{}. |
| 768 | are added either before or after the brace. | 1018 | @end table |
| 769 | 1019 | ||
| 770 | If a syntactic symbol is missing entirely from | 1020 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 771 | @code{c-hanging-braces-alist}, it's treated in the same way as an | 1021 | @node Filling and Breaking, Minor Modes, Movement Commands, Commands |
| 772 | @var{action} with a list containing @code{before} and @code{after}, so | 1022 | @comment node-name, next, previous, up |
| 773 | that braces by default end up on their own line. | 1023 | @section Filling and Line Breaking Commands |
| 1024 | @cindex text filling | ||
| 1025 | @cindex line breaking | ||
| 1026 | @cindex comment handling | ||
| 1027 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 774 | 1028 | ||
| 775 | For example, the default value of @code{c-hanging-braces-alist} is: | 1029 | Since there's a lot of normal text in comments and string literals, |
| 1030 | @ccmode{} provides features to edit these like in text mode. The goal | ||
| 1031 | is to do it seamlessly, i.e. you can use auto fill mode, sentence and | ||
| 1032 | paragraph movement, paragraph filling, adaptive filling etc. wherever | ||
| 1033 | there's a piece of normal text without having to think much about it. | ||
| 1034 | @ccmode{} keeps the indentation, fixes suitable comment line prefixes, | ||
| 1035 | and so on. | ||
| 776 | 1036 | ||
| 777 | @example | 1037 | You can configure the exact way comments get filled and broken, and |
| 778 | ((brace-list-open) | 1038 | where Emacs does auto-filling (see @pxref{Custom Filling and |
| 779 | (brace-entry-open) | 1039 | Breaking}). Typically, the style system (@pxref{Styles}) will have |
| 780 | (statement-cont) | 1040 | set this up for you, so you probably won't have to bother. |
| 781 | (substatement-open after) | ||
| 782 | (block-close . c-snug-do-while) | ||
| 783 | (extern-lang-open after) | ||
| 784 | (inexpr-class-open after) | ||
| 785 | (inexpr-class-close before)) | ||
| 786 | @end example | ||
| 787 | 1041 | ||
| 788 | @noindent which says that @code{brace-list-open}, | 1042 | @findex auto-fill-mode |
| 789 | @code{brace-entry-open} and @code{statement-cont}@footnote{Brace lists | 1043 | @cindex Auto Fill mode |
| 790 | inside statements, such as initializers for static array variables | 1044 | @cindex paragraph filling |
| 791 | inside functions in C, are recognized as @code{statement-cont}. All | 1045 | Line breaks are by default handled (almost) the same regardless of |
| 792 | normal substatement blocks are recognized with other symbols.} braces | 1046 | whether they are made by auto fill mode (@pxref{Auto Fill,,, |
| 793 | should both hang on the right side and allow subsequent text to follow | 1047 | @emacsman{}, @emacsmantitle{}}), by paragraph filling (e.g. with |
| 794 | on the same line as the brace. Also, @code{substatement-open}, | 1048 | @kbd{M-q}), or explicitly with @kbd{M-j} or similar methods. In |
| 795 | @code{extern-lang-open}, and @code{inexpr-class-open} braces should hang | 1049 | string literals, the new line gets the same indentation as the |
| 796 | on the right side, but subsequent text should follow on the next line. | 1050 | previous nonempty line.@footnote{You can change this default by |
| 797 | The opposite holds for @code{inexpr-class-close} braces; they won't | 1051 | setting the @code{string} syntactic symbol (@pxref{Syntactic Symbols} |
| 798 | hang, but the following text continues on the same line. Here, in the | 1052 | and @pxref{Customizing Indentation})}. |
| 799 | @code{block-close} entry, you also see an example of using a function as | ||
| 800 | an @var{action}. In all other cases, braces are put on a line by | ||
| 801 | themselves. | ||
| 802 | @end defopt | ||
| 803 | 1053 | ||
| 1054 | @table @asis | ||
| 1055 | @item @kbd{M-q} (@code{c-fill-paragraph}) | ||
| 1056 | @kindex M-q | ||
| 1057 | @findex c-fill-paragraph | ||
| 1058 | @findex fill-paragraph (c-) | ||
| 1059 | @cindex Javadoc markup | ||
| 1060 | @cindex Pike autodoc markup | ||
| 1061 | This command fills multiline string literals and both block | ||
| 1062 | and line style comments. In Java buffers, the Javadoc markup words | ||
| 1063 | are recognized as paragraph starters. The line oriented Pike autodoc | ||
| 1064 | markup words are recognized in the same way in Pike mode. | ||
| 804 | 1065 | ||
| 805 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1066 | The formatting of the starters (@code{/*}) and enders (@code{*/}) of |
| 806 | @node Hanging Colons, Hanging Semicolons and Commas, Hanging Braces, Auto-newline Insertion | 1067 | block comments are kept as they were before the filling. I.e., if |
| 807 | @comment node-name, next, previous, up | 1068 | either the starter or ender were on a line of its own, then it stays |
| 808 | @subsection Hanging Colons | 1069 | on its own line; conversely, if the delimiter has comment text on its |
| 809 | @cindex hanging colons | 1070 | line, it keeps at least one word of that text with it on the line. |
| 810 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 811 | 1071 | ||
| 812 | Using a mechanism similar to brace hanging (@pxref{Hanging Braces}), | 1072 | This command is the replacement for @code{fill-paragraph} in @ccmode{} |
| 813 | colons can also be made to hang using the style variable | 1073 | buffers. |
| 814 | @code{c-hanging-colons-alist}. | ||
| 815 | 1074 | ||
| 816 | @defopt c-hanging-colons-alist | 1075 | @item @kbd{M-j} (@code{c-indent-new-comment-line}) |
| 817 | @vindex hanging-colons-alist (c-) | 1076 | @kindex M-j |
| 1077 | @findex c-indent-new-comment-line | ||
| 1078 | @findex indent-new-comment-line (c-) | ||
| 1079 | This breaks the current line at point and indents the new line. If | ||
| 1080 | point was in a comment, the new line gets the proper comment line | ||
| 1081 | prefix. If point was inside a macro, a backslash is inserted before | ||
| 1082 | the line break. It is the replacement for | ||
| 1083 | @code{indent-new-comment-line}. | ||
| 818 | 1084 | ||
| 819 | The syntactic symbols appropriate for this association list are: | 1085 | @item @kbd{M-x c-context-line-break} |
| 820 | @code{case-label}, @code{label}, @code{access-label}, | 1086 | @findex c-context-line-break |
| 821 | @code{member-init-intro}, and @code{inher-intro}. Note however that for | 1087 | @findex context-line-break (c-) |
| 822 | @code{c-hanging-colons-alist}, @var{action}s as functions are not | 1088 | Insert a line break suitable to the context: If the point is inside a |
| 823 | supported. See also @ref{Custom Brace and Colon Hanging} for details. | 1089 | comment, the new line gets the suitable indentation and comment line |
| 1090 | prefix like @code{c-indent-new-comment-line}. In normal code it's | ||
| 1091 | indented like @code{newline-and-indent} would do. In macros it acts | ||
| 1092 | like @code{newline-and-indent} but additionally inserts and optionally | ||
| 1093 | aligns the line ending backslash so that the macro remains unbroken. | ||
| 1094 | @xref{Custom Macros}, for details about the backslash alignment. | ||
| 1095 | |||
| 1096 | This function is not bound to a key by default, but it's intended to be | ||
| 1097 | used on the @kbd{RET} key. If you like the behavior of | ||
| 1098 | @code{newline-and-indent} on @kbd{RET}, you should consider switching to | ||
| 1099 | this function. @xref{Sample .emacs File}. | ||
| 824 | 1100 | ||
| 825 | In C++, double-colons are used as a scope operator but because these | 1101 | @item @kbd{M-x c-context-open-line} |
| 826 | colons always appear right next to each other, newlines before and after | 1102 | @findex c-context-open-line |
| 827 | them are controlled by a different mechanism, called @dfn{clean-ups} in | 1103 | @findex context-open-line (c-) |
| 828 | @ccmode{}. @xref{Clean-ups}, for details. | 1104 | This is to @kbd{C-o} (@kbd{M-x open-line}) as |
| 829 | @end defopt | 1105 | @code{c-context-line-break} is to @kbd{RET}. I.e. it works just like |
| 1106 | @code{c-context-line-break} but leaves the point before the inserted | ||
| 1107 | line break. | ||
| 1108 | @end table | ||
| 830 | 1109 | ||
| 831 | 1110 | ||
| 832 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1111 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 833 | @node Hanging Semicolons and Commas, Other Electric Commands, Hanging Colons, Auto-newline Insertion | 1112 | @node Minor Modes, Electric Keys, Filling and Breaking, Commands |
| 834 | @comment node-name, next, previous, up | 1113 | @comment node-name, next, previous, up |
| 835 | @subsection Hanging Semicolons and Commas | 1114 | @section Minor Modes |
| 836 | @cindex hanging semicolons | 1115 | @cindex Minor Modes |
| 837 | @cindex hanging commas | ||
| 838 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1116 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 839 | 1117 | ||
| 840 | Semicolons and commas are also electric in @ccmode{}, but since | 1118 | @ccmode{} contains several minor-mode-like features that you might |
| 841 | these characters do not correspond directly to syntactic symbols, a | 1119 | find useful while writing new code or editing old code: |
| 842 | different mechanism is used to determine whether newlines should be | 1120 | |
| 843 | automatically inserted after these characters. @xref{Customizing | 1121 | @table @asis |
| 844 | Semicolons and Commas}, for details. | 1122 | @item electric mode |
| 1123 | When this is enabled, certain visible characters cause reformatting as | ||
| 1124 | they are typed. This is normally helpful, but can be a nuisance when | ||
| 1125 | editing chaotically formatted code. It can also be disconcerting, | ||
| 1126 | especially for users who are new to @ccmode{}. | ||
| 1127 | @item auto-newline mode | ||
| 1128 | This automatically inserts newlines where you'd probably want to type | ||
| 1129 | them yourself, e.g. after typing @samp{@}}s. Its action is suppressed | ||
| 1130 | when electric mode is disabled. | ||
| 1131 | @item hungry-delete mode | ||
| 1132 | This lets you delete a contiguous block of whitespace with a single | ||
| 1133 | key - for example, the newline and indentation just inserted by | ||
| 1134 | auto-newline when you want to back up and write a comment after the | ||
| 1135 | last statement. | ||
| 1136 | @item subword mode | ||
| 1137 | This mode makes basic word movement commands like @kbd{M-f} | ||
| 1138 | (@code{forward-word}) and @kbd{M-b} (@code{backward-word}) treat the | ||
| 1139 | parts of sillycapsed symbols as different words. | ||
| 1140 | E.g. @samp{NSGraphicsContext} is treated as three words @samp{NS}, | ||
| 1141 | @samp{Graphics}, and @samp{Context}. | ||
| 1142 | @item syntactic-indentation mode | ||
| 1143 | When this is enabled (which it normally is), indentation commands such | ||
| 1144 | as @kbd{C-j} indent lines of code according to their syntactic | ||
| 1145 | structure. Otherwise, a line is simply indented to the same level as | ||
| 1146 | the previous one and @kbd{@key{TAB}} adjusts the indentation in steps | ||
| 1147 | of `c-basic-offset'. | ||
| 1148 | @end table | ||
| 1149 | |||
| 1150 | Full details on how these minor modes work are at @ref{Electric Keys}, | ||
| 1151 | @ref{Auto-newlines}, @ref{Hungry WS Deletion}, @ref{Subword Movement}, | ||
| 1152 | and @ref{Indentation Engine Basics}. | ||
| 1153 | |||
| 1154 | You can toggle each of these minor modes on and off, and you can | ||
| 1155 | configure @ccmode{} so that it starts up with your favourite | ||
| 1156 | combination of them (@pxref{Sample .emacs File}). By default, when | ||
| 1157 | you initialize a buffer, electric mode and syntactic-indentation mode | ||
| 1158 | are enabled but the other two modes are disabled. | ||
| 1159 | |||
| 1160 | @ccmode{} displays the current state of the first four of these minor | ||
| 1161 | modes on the modeline by appending letters to the major mode's name, | ||
| 1162 | one letter for each enabled minor mode - @samp{l} for electric mode, | ||
| 1163 | @samp{a} for auto-newline mode, @samp{h} for hungry delete mode, and | ||
| 1164 | @samp{w} for subword mode. If all these modes were enabled, you'd see | ||
| 1165 | @samp{C/lahw}@footnote{The @samp{C} would be replaced with the name of | ||
| 1166 | the language in question for the other languages @ccmode{} supports.}. | ||
| 1167 | |||
| 1168 | Here are the commands to toggle these modes: | ||
| 1169 | |||
| 1170 | @table @asis | ||
| 1171 | @item @kbd{C-c C-l} (@code{c-toggle-electric-state}) | ||
| 1172 | @kindex C-c C-l | ||
| 1173 | @findex c-toggle-electric-state | ||
| 1174 | @findex toggle-electric-state (c-) | ||
| 1175 | Toggle electric minor mode. When the command turns the mode off, it | ||
| 1176 | also suppresses auto-newline mode. | ||
| 1177 | |||
| 1178 | @item @kbd{C-c C-a} (@code{c-toggle-auto-newline}) | ||
| 1179 | @kindex C-c C-a | ||
| 1180 | @findex c-toggle-auto-newline | ||
| 1181 | @findex toggle-auto-newline (c-) | ||
| 1182 | Toggle auto-newline minor mode. When the command turns the mode on, | ||
| 1183 | it also enables electric minor mode. | ||
| 1184 | |||
| 1185 | @item @kbd{M-x c-toggle-hungry-state}@footnote{Prior to @ccmode{} 5.31, this command was bound to @kbd{C-c C-d}.} | ||
| 1186 | @findex c-toggle-hungry-state | ||
| 1187 | @findex toggle-hungry-state (c-) | ||
| 1188 | Toggle hungry-delete minor mode. | ||
| 1189 | |||
| 1190 | @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}.} | ||
| 1191 | @findex c-toggle-auto-hungry-state | ||
| 1192 | @findex toggle-auto-hungry-state (c-) | ||
| 1193 | Toggle both auto-newline and hungry delete minor modes. | ||
| 1194 | |||
| 1195 | @item @kbd{C-c C-w} (@code{M-x c-subword-mode}) | ||
| 1196 | @kindex C-c C-w | ||
| 1197 | @findex c-subword-mode | ||
| 1198 | @findex subword-mode (c-) | ||
| 1199 | Toggle subword mode. | ||
| 1200 | |||
| 1201 | @item @kbd{M-x c-toggle-syntactic-indentation} | ||
| 1202 | @findex c-toggle-syntactic-indentation | ||
| 1203 | @findex toggle-syntactic-indentation (c-) | ||
| 1204 | Toggle syntactic-indentation mode. | ||
| 1205 | @end table | ||
| 1206 | |||
| 1207 | Common to all the toggle functions above is that if they are called | ||
| 1208 | programmatically, they take an optional numerical argument. A | ||
| 1209 | positive value will turn on the minor mode (or both of them in the | ||
| 1210 | case of @code{c-toggle-auto-hungry-state}) and a negative value will | ||
| 1211 | turn it (or them) off. | ||
| 845 | 1212 | ||
| 846 | 1213 | ||
| 847 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1214 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 848 | @node Other Electric Commands, Clean-ups, Hanging Semicolons and Commas, Auto-newline Insertion | 1215 | @node Electric Keys, Auto-newlines, Minor Modes, Commands |
| 849 | @comment node-name, next, previous, up | 1216 | @comment node-name, next, previous, up |
| 850 | @subsection Other Electric Commands | 1217 | @section Electric Keys and Keywords |
| 1218 | @cindex electric characters | ||
| 851 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1219 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 852 | 1220 | ||
| 853 | A few other keys also provide electric behavior, often only to reindent | 1221 | Most punctuation keys provide @dfn{electric} behavior - as well as |
| 854 | the line. Common to all of them is that they only reindent if used in | 1222 | inserting themselves they perform some other action, such as |
| 855 | normal code (as opposed to in a string literal or comment), and | 1223 | reindenting the line. A few keywords, such as @code{else}, also |
| 856 | @code{c-syntactic-indentation} isn't @code{nil}. They are: | 1224 | trigger electric action. |
| 1225 | |||
| 1226 | You can inhibit the electric behaviour described here by disabling | ||
| 1227 | electric minor mode (@pxref{Minor Modes}.) | ||
| 1228 | |||
| 1229 | Common to all of them is that they only behave electrically when used | ||
| 1230 | in normal code (as contrasted with getting typed in a string literal | ||
| 1231 | or comment). Those which cause re-indentation do so only when | ||
| 1232 | @code{c-syntactic-indentation} has a non-@code{nil} value (which it | ||
| 1233 | does by default). | ||
| 1234 | |||
| 1235 | These keys and keywords are: | ||
| 1236 | @c ACM, 2004/8/24: c-electric-pound doesn't check c-s-i: this is more | ||
| 1237 | @c like a bug in the code than a bug in this document. It'll get | ||
| 1238 | @c fixed in the code sometime. | ||
| 857 | 1239 | ||
| 858 | @table @kbd | 1240 | @table @kbd |
| 859 | @item # | 1241 | @item # |
| @@ -873,6 +1255,8 @@ zero. This is useful for entering preprocessor macro definitions. | |||
| 873 | Pound is not electric in AWK buffers, where @samp{#} starts a comment, | 1255 | Pound is not electric in AWK buffers, where @samp{#} starts a comment, |
| 874 | and is bound to @code{self-insert-command} like any typical printable | 1256 | and is bound to @code{self-insert-command} like any typical printable |
| 875 | character. | 1257 | character. |
| 1258 | @c ACM, 2004/8/24: Change this (and the code) to do AWK comment | ||
| 1259 | @c reindentation. | ||
| 876 | 1260 | ||
| 877 | @item * | 1261 | @item * |
| 878 | @kindex * | 1262 | @kindex * |
| @@ -882,32 +1266,20 @@ character. | |||
| 882 | @findex electric-star (c-) | 1266 | @findex electric-star (c-) |
| 883 | @findex c-electric-slash | 1267 | @findex c-electric-slash |
| 884 | @findex electric-slash (c-) | 1268 | @findex electric-slash (c-) |
| 885 | Stars and slashes (bound to @code{c-electric-star} and | 1269 | A star (bound to @code{c-electric-star}) or a slash |
| 886 | @code{c-electric-slash} respectively) are also electric under certain | 1270 | (@code{c-electric-slash}) causes reindentation when you type it as the |
| 887 | circumstances. If a @samp{*} is inserted as the second character of a C | 1271 | second component of a C style block comment opener (@samp{/*}) or a |
| 888 | style block comment on a comment-only line, then the comment delimiter | 1272 | C++ line comment opener (@samp{//}) respectively, but only if the |
| 889 | is indented as defined by @code{c-offsets-alist}. A comment-only line | 1273 | comment opener is the first thing on the line (i.e. there's only |
| 890 | is defined as a line which contains only a comment, as in: | 1274 | whitespace before it). |
| 891 | 1275 | ||
| 892 | @example | 1276 | Additionally, you can configure @ccmode{} so that typing a slash at |
| 893 | @group | 1277 | the start of a line within a block comment will terminate the |
| 894 | void spam( int i ) | 1278 | comment. You don't need to have electric minor mode enabled to get |
| 895 | @{ | 1279 | this behaviour. @xref{Clean-ups}. |
| 896 | // this is a comment-only line... | ||
| 897 | if( i == 7 ) // but this is not | ||
| 898 | @{ | ||
| 899 | dosomething(i); | ||
| 900 | @} | ||
| 901 | @} | ||
| 902 | @end group | ||
| 903 | @end example | ||
| 904 | 1280 | ||
| 905 | Likewise, if a @samp{/} is inserted as the second slash in a C++ style | 1281 | In AWK mode, @samp{*} and @samp{/} do not delimit comments and are not |
| 906 | line comment (also only on a comment-only line), then the line is | 1282 | electric. |
| 907 | indented as defined by @code{c-offsets-alist}. | ||
| 908 | |||
| 909 | In AWK mode, @samp{*} and @samp{/} do not delimit comments and are | ||
| 910 | bound to @code{self-insert-command}. | ||
| 911 | 1283 | ||
| 912 | @item < | 1284 | @item < |
| 913 | @kindex < | 1285 | @kindex < |
| @@ -915,9 +1287,13 @@ bound to @code{self-insert-command}. | |||
| 915 | @kindex > | 1287 | @kindex > |
| 916 | @findex c-electric-lt-gt | 1288 | @findex c-electric-lt-gt |
| 917 | @findex electric-lt-gt (c-) | 1289 | @findex electric-lt-gt (c-) |
| 918 | Less-than and greater-than signs (bound to @code{c-electric-lt-gt}) are | 1290 | A less-than or greater-than sign (bound to @code{c-electric-lt-gt}) is |
| 919 | electric, but only in C++ mode. Hitting the second of two @kbd{<} or | 1291 | electric in two circumstances: when it is an angle bracket in a C++ |
| 920 | @kbd{>} keys reindents the line if it is a C++ style stream operator. | 1292 | @samp{template} declaration (and similar constructs in other |
| 1293 | languages) and when it is the second of two @kbd{<} or @kbd{>} | ||
| 1294 | characters in a C++ style stream operator. In either case, the line | ||
| 1295 | is reindented. Angle brackets in C @samp{#include} directives are not | ||
| 1296 | electric. | ||
| 921 | 1297 | ||
| 922 | @item ( | 1298 | @item ( |
| 923 | @kindex ( | 1299 | @kindex ( |
| @@ -925,19 +1301,68 @@ electric, but only in C++ mode. Hitting the second of two @kbd{<} or | |||
| 925 | @kindex ) | 1301 | @kindex ) |
| 926 | @findex c-electric-paren | 1302 | @findex c-electric-paren |
| 927 | @findex electric-paren (c-) | 1303 | @findex electric-paren (c-) |
| 928 | The normal parenthesis characters @samp{(} and @samp{)} reindent the | 1304 | The normal parenthesis characters @samp{(} and @samp{)} (bound to |
| 929 | current line. This is useful for getting the closing parenthesis of an | 1305 | @code{c-electric-paren}) reindent the current line. This is useful |
| 930 | argument list aligned automatically. | 1306 | for getting the closing parenthesis of an argument list aligned |
| 1307 | automatically. | ||
| 1308 | |||
| 1309 | You can also configure @ccmode{} to insert a space automatically | ||
| 1310 | between a function name and the @samp{(} you've just typed, and to | ||
| 1311 | remove it automatically after typing @samp{)}, should the argument | ||
| 1312 | list be empty. You don't need to have electric minor mode enabled to | ||
| 1313 | get these actions. @xref{Clean-ups}. | ||
| 1314 | |||
| 1315 | @item @{ | ||
| 1316 | @kindex @{ | ||
| 1317 | @itemx @} | ||
| 1318 | @kindex @} | ||
| 1319 | @findex c-electric-brace | ||
| 1320 | @findex electric-brace (c-) | ||
| 1321 | Typing a brace (bound to @code{c-electric-brace}) reindents the | ||
| 1322 | current line. Also, one or more newlines might be inserted if | ||
| 1323 | auto-newline minor mode is enabled. @xref{Auto-newlines}. | ||
| 1324 | Additionally, you can configure @ccmode{} to compact excess whitespace | ||
| 1325 | inserted by auto-newline mode in certain circumstances. | ||
| 1326 | @xref{Clean-ups}. | ||
| 1327 | |||
| 1328 | @item : | ||
| 1329 | @kindex : | ||
| 1330 | @findex c-electric-colon | ||
| 1331 | @findex electric-colon (c-) | ||
| 1332 | Typing a colon (bound to @code{c-electric-colon}) reindents the | ||
| 1333 | current line. Additionally, one or more newlines might be inserted if | ||
| 1334 | auto-newline minor mode is enabled. @xref{Auto-newlines}. If you | ||
| 1335 | type a second colon immediately after such an auto-newline, by default | ||
| 1336 | the whitespace between the two colons is removed, leaving a C++ scope | ||
| 1337 | operator. @xref{Clean-ups}. | ||
| 1338 | |||
| 1339 | If you prefer, you can insert @samp{::} in a single operation, | ||
| 1340 | avoiding all these spurious reindentations, newlines, and clean-ups. | ||
| 1341 | @xref{Other Commands}. | ||
| 1342 | |||
| 1343 | @item ; | ||
| 1344 | @kindex ; | ||
| 1345 | @itemx , | ||
| 1346 | @kindex , | ||
| 1347 | @findex c-electric-semi&comma | ||
| 1348 | @findex electric-semi&comma (c-) | ||
| 1349 | Typing a semicolon or comma (bound to @code{c-electric-semi&comma}) | ||
| 1350 | reindents the current line. Also, a newline might be inserted if | ||
| 1351 | auto-newline minor mode is enabled. @xref{Auto-newlines}. | ||
| 1352 | Additionally, you can configure @ccmode{} so that when auto-newline | ||
| 1353 | has inserted whitespace after a @samp{@}}, it will be removed again | ||
| 1354 | when you type a semicolon or comma just after it. @xref{Clean-ups}. | ||
| 1355 | |||
| 931 | @end table | 1356 | @end table |
| 932 | 1357 | ||
| 933 | @deffn Command c-electric-continued-statement | 1358 | @deffn Command c-electric-continued-statement |
| 934 | @findex electric-continued-statement (c-) | 1359 | @findex electric-continued-statement (c-) |
| 935 | 1360 | ||
| 936 | Certain keywords, depending on language, are electric to cause | 1361 | Certain keywords are electric, causing reindentation when they are |
| 937 | reindentation when they are preceded only by whitespace on the line. | 1362 | preceded only by whitespace on the line. The keywords are those that |
| 938 | The keywords are those that continue an earlier statement instead of | 1363 | continue an earlier statement instead of starting a new one: |
| 939 | starting a new one: @code{else}, @code{while}, @code{catch} (only in C++ | 1364 | @code{else}, @code{while}, @code{catch} (only in C++ and Java) and |
| 940 | and Java) and @code{finally} (only in Java). | 1365 | @code{finally} (only in Java). |
| 941 | 1366 | ||
| 942 | An example: | 1367 | An example: |
| 943 | 1368 | ||
| @@ -951,280 +1376,197 @@ else | |||
| 951 | @end example | 1376 | @end example |
| 952 | 1377 | ||
| 953 | Here, the @code{else} should be indented like the preceding @code{if}, | 1378 | Here, the @code{else} should be indented like the preceding @code{if}, |
| 954 | since it continues that statement. @ccmode{} will automatically reindent | 1379 | since it continues that statement. @ccmode{} will automatically |
| 955 | it after the @code{else} has been typed in full, since it's not until | 1380 | reindent it after the @code{else} has been typed in full, since only |
| 956 | then it's possible to decide whether it's a new statement or a | 1381 | then is it possible to decide whether it's a new statement or a |
| 957 | continuation of the preceding @code{if}. | 1382 | continuation of the preceding @code{if}. |
| 958 | 1383 | ||
| 959 | @vindex abbrev-mode | 1384 | @vindex abbrev-mode |
| 960 | @findex abbrev-mode | 1385 | @findex abbrev-mode |
| 961 | @cindex Abbrev mode | 1386 | @cindex Abbrev mode |
| 962 | @ccmode{} uses Abbrev mode (@pxref{Abbrevs,,, emacs, The Emacs Editor}) | 1387 | @ccmode{} uses Abbrev mode (@pxref{Abbrevs,,, @emacsman{}, @emacsmantitle{}}) |
| 963 | to accomplish this. It's therefore turned on by default in all language | 1388 | to accomplish this. It's therefore turned on by default in all language |
| 964 | modes except IDL mode, since CORBA IDL doesn't have any statements. | 1389 | modes except IDL mode, since CORBA IDL doesn't have any statements. |
| 965 | @end deffn | 1390 | @end deffn |
| 966 | 1391 | ||
| 967 | 1392 | ||
| 968 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1393 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 969 | @node Clean-ups, , Other Electric Commands, Auto-newline Insertion | 1394 | @node Auto-newlines, Hungry WS Deletion, Electric Keys, Commands |
| 970 | @comment node-name, next, previous, up | 1395 | @comment node-name, next, previous, up |
| 971 | @subsection Clean-ups | 1396 | @section Auto-newline Insertion |
| 972 | @cindex clean-ups | 1397 | @cindex auto-newline |
| 973 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1398 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 974 | 1399 | ||
| 975 | @dfn{Clean-ups} are mechanisms complementary to colon and brace hanging. | 1400 | When you have @dfn{Auto-newline minor mode} enabled (@pxref{Minor |
| 976 | On the surface, it would seem that clean-ups overlap the functionality | 1401 | Modes}), @ccmode{} inserts newlines for you automatically (in certain |
| 977 | provided by the @code{c-hanging-*-alist} variables. Clean-ups are | 1402 | syntactic contexts) when you type a left or right brace, a colon, a |
| 978 | however used to adjust code ``after-the-fact,'' i.e., to adjust the | 1403 | semicolon, or a comma. Sometimes a newline appears before the |
| 979 | whitespace in constructs after they are typed. | 1404 | character you type, sometimes after it, sometimes both. |
| 980 | |||
| 981 | Most of the clean-ups are only applicable to counteract automatically | ||
| 982 | inserted newlines, and will therefore only have any effect if the | ||
| 983 | auto-newline minor mode is turned on. Others will work all the time. | ||
| 984 | |||
| 985 | @defopt c-cleanup-list | ||
| 986 | @vindex cleanup-list (c-) | ||
| 987 | @cindex literal | ||
| 988 | |||
| 989 | You can configure @ccmode{}'s clean-ups by setting the style variable | ||
| 990 | @code{c-cleanup-list}, which is a list of clean-up symbols. By default, | ||
| 991 | @ccmode{} cleans up only the @code{scope-operator} construct, which is | ||
| 992 | necessary for proper C++ support. Note that clean-ups are only | ||
| 993 | performed when the construct does not occur within a literal | ||
| 994 | (@pxref{Auto-newline Insertion}), and when there is nothing but | ||
| 995 | whitespace appearing between the individual components of the construct. | ||
| 996 | @end defopt | ||
| 997 | |||
| 998 | These are the clean-ups that are only active in the auto-newline minor | ||
| 999 | mode: | ||
| 1000 | |||
| 1001 | @c TBD: Would like to use some sort of @deffoo here; @table indents a | ||
| 1002 | @c bit too much in dvi output. | ||
| 1003 | @table @code | ||
| 1004 | @item brace-else-brace | ||
| 1005 | Clean up @samp{@} else @{} constructs by placing the entire construct on | ||
| 1006 | a single line. Clean-up occurs when the open brace after the | ||
| 1007 | @samp{else} is typed. So for example, this: | ||
| 1008 | |||
| 1009 | @example | ||
| 1010 | @group | ||
| 1011 | void spam(int i) | ||
| 1012 | @{ | ||
| 1013 | if( i==7 ) @{ | ||
| 1014 | dosomething(); | ||
| 1015 | @} | ||
| 1016 | else | ||
| 1017 | @{ | ||
| 1018 | @end group | ||
| 1019 | @end example | ||
| 1020 | |||
| 1021 | @noindent | ||
| 1022 | appears like this after the last open brace is typed: | ||
| 1023 | |||
| 1024 | @example | ||
| 1025 | @group | ||
| 1026 | void spam(int i) | ||
| 1027 | @{ | ||
| 1028 | if( i==7 ) @{ | ||
| 1029 | dosomething(); | ||
| 1030 | @} else @{ | ||
| 1031 | @end group | ||
| 1032 | @end example | ||
| 1033 | |||
| 1034 | @item brace-elseif-brace | ||
| 1035 | Similar to the @code{brace-else-brace} clean-up, but this cleans up | ||
| 1036 | @samp{@} else if (...) @{} constructs. For example: | ||
| 1037 | |||
| 1038 | @example | ||
| 1039 | @group | ||
| 1040 | void spam(int i) | ||
| 1041 | @{ | ||
| 1042 | if( i==7 ) @{ | ||
| 1043 | dosomething(); | ||
| 1044 | @} | ||
| 1045 | else if( i==3 ) | ||
| 1046 | @{ | ||
| 1047 | @end group | ||
| 1048 | @end example | ||
| 1049 | |||
| 1050 | @noindent | ||
| 1051 | appears like this after the last open parenthesis is typed: | ||
| 1052 | 1405 | ||
| 1053 | @example | 1406 | Auto-newline only triggers when the following conditions hold: |
| 1054 | @group | ||
| 1055 | void spam(int i) | ||
| 1056 | @{ | ||
| 1057 | if( i==7 ) @{ | ||
| 1058 | dosomething(); | ||
| 1059 | @} else if( i==3 ) | ||
| 1060 | @{ | ||
| 1061 | @end group | ||
| 1062 | @end example | ||
| 1063 | |||
| 1064 | @noindent | ||
| 1065 | and like this after the last open brace is typed: | ||
| 1066 | 1407 | ||
| 1067 | @example | 1408 | @itemize @bullet |
| 1068 | @group | 1409 | @item |
| 1069 | void spam(int i) | 1410 | Auto-newline minor mode is enabled, as evidenced by the indicator |
| 1070 | @{ | 1411 | @samp{a} after the mode name on the modeline (e.g. @samp{C/a} or |
| 1071 | if( i==7 ) @{ | 1412 | @samp{C/la}). |
| 1072 | dosomething(); | ||
| 1073 | @} else if( i==3 ) @{ | ||
| 1074 | @end group | ||
| 1075 | @end example | ||
| 1076 | |||
| 1077 | @item brace-catch-brace | ||
| 1078 | Analogous to @code{brace-elseif-brace}, but cleans up @samp{@} catch | ||
| 1079 | (...) @{} in C++ and Java mode. | ||
| 1080 | |||
| 1081 | @item empty-defun-braces | ||
| 1082 | Clean up braces following a top-level function or class definition that | ||
| 1083 | contains no body. Clean up occurs when the closing brace is typed. | ||
| 1084 | Thus the following: | ||
| 1085 | |||
| 1086 | @example | ||
| 1087 | @group | ||
| 1088 | class Spam | ||
| 1089 | @{ | ||
| 1090 | @} | ||
| 1091 | @end group | ||
| 1092 | @end example | ||
| 1093 | |||
| 1094 | @noindent | ||
| 1095 | is transformed into this when the close brace is typed: | ||
| 1096 | |||
| 1097 | @example | ||
| 1098 | @group | ||
| 1099 | class Spam | ||
| 1100 | @{@} | ||
| 1101 | @end group | ||
| 1102 | @end example | ||
| 1103 | |||
| 1104 | @item defun-close-semi | ||
| 1105 | Clean up the terminating semicolon on top-level function or class | ||
| 1106 | definitions when they follow a close brace. Clean up occurs when the | ||
| 1107 | semicolon is typed. So for example, the following: | ||
| 1108 | |||
| 1109 | @example | ||
| 1110 | @group | ||
| 1111 | class Spam | ||
| 1112 | @{ | ||
| 1113 | @} | ||
| 1114 | ; | ||
| 1115 | @end group | ||
| 1116 | @end example | ||
| 1117 | |||
| 1118 | @noindent | ||
| 1119 | is transformed into this when the semicolon is typed: | ||
| 1120 | 1413 | ||
| 1121 | @example | 1414 | @item |
| 1122 | @group | 1415 | The character was typed at the end of a line, or with only whitespace |
| 1123 | class Spam | 1416 | after it, and possibly a @samp{\} escaping the newline. |
| 1124 | @{ | ||
| 1125 | @}; | ||
| 1126 | @end group | ||
| 1127 | @end example | ||
| 1128 | 1417 | ||
| 1129 | @item list-close-comma | 1418 | @item |
| 1130 | Clean up commas following braces in array and aggregate initializers. | 1419 | The character is not on its own line already. (This applies only to |
| 1131 | Clean up occurs when the comma is typed. | 1420 | insertion of a newline @emph{before} the character.) |
| 1132 | 1421 | ||
| 1133 | @item scope-operator | 1422 | @item |
| 1134 | Clean up double colons which may designate a C++ scope operator split | 1423 | @cindex literal |
| 1135 | across multiple lines@footnote{Certain C++ constructs introduce | 1424 | @cindex syntactic whitespace |
| 1136 | ambiguous situations, so @code{scope-operator} clean-ups may not always | 1425 | The character was not typed inside of a literal @footnote{A |
| 1137 | be correct. This usually only occurs when scoped identifiers appear in | 1426 | @dfn{literal} is defined as any comment, string, or preprocessor macro |
| 1138 | switch label tags.}. Clean up occurs when the second colon is typed. | 1427 | definition. These constructs are also known as @dfn{syntactic |
| 1139 | You will always want @code{scope-operator} in the @code{c-cleanup-list} | 1428 | whitespace} since they are usually ignored when scanning C code.}. |
| 1140 | when you are editing C++ code. | ||
| 1141 | @end table | ||
| 1142 | 1429 | ||
| 1143 | The following clean-ups are always active when they occur on | 1430 | @item |
| 1144 | @code{c-cleanup-list}, and are thus not affected by the auto-newline | 1431 | No numeric argument was supplied to the command (i.e. it was typed as |
| 1145 | minor mode: | 1432 | normal, with no @kbd{C-u} prefix). |
| 1433 | @end itemize | ||
| 1146 | 1434 | ||
| 1147 | @table @code | 1435 | You can configure the precise circumstances in which newlines get |
| 1148 | @item space-before-funcall | 1436 | inserted (see @pxref{Custom Auto-newlines}). Typically, the style |
| 1149 | Insert a space between the function name and the opening parenthesis of | 1437 | system (@pxref{Styles}) will have set this up for you, so you probably |
| 1150 | a function call. This produces function calls in the style mandated by | 1438 | won't have to bother. |
| 1151 | the GNU coding standards, e.g., @samp{signal (SIGINT, SIG_IGN)} and | ||
| 1152 | @samp{abort ()}. Clean up occurs when the opening parenthesis is typed. | ||
| 1153 | 1439 | ||
| 1154 | @item compact-empty-funcall | 1440 | Sometimes @ccmode{} inserts an auto-newline where you don't want one, |
| 1155 | Clean up any space between the function name and the opening parenthesis | 1441 | such as after a @samp{@}} when you're about to type a @samp{;}. |
| 1156 | of a function call that has no arguments. This is typically used | 1442 | Hungry deletion can help here (@pxref{Hungry WS Deletion}), or you can |
| 1157 | together with @code{space-before-funcall} if you prefer the GNU function | 1443 | activate an appropriate @dfn{clean-up}, which will remove the excess |
| 1158 | call style for functions with arguments but think it looks ugly when | 1444 | whitespace after you've typed the @samp{;}. See @ref{Clean-ups} for a |
| 1159 | it's only an empty parenthesis pair. I.e., you will get @samp{signal | 1445 | full description. See also @ref{Electric Keys} for a summary of |
| 1160 | (SIGINT, SIG_IGN)}, but @samp{abort()}. Clean up occurs when the | 1446 | clean-ups listed by key. |
| 1161 | closing parenthesis is typed. | ||
| 1162 | @end table | ||
| 1163 | 1447 | ||
| 1164 | 1448 | ||
| 1165 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1449 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 1166 | @node Hungry-deletion of Whitespace, , Auto-newline Insertion, Minor Modes | 1450 | @node Hungry WS Deletion, Subword Movement, Auto-newlines, Commands |
| 1167 | @comment node-name, next, previous, up | 1451 | @comment node-name, next, previous, up |
| 1168 | @section Hungry-deletion of Whitespace | 1452 | @section Hungry Deletion of Whitespace |
| 1169 | @cindex hungry-deletion | 1453 | @cindex hungry-deletion |
| 1170 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1454 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 1171 | 1455 | ||
| 1172 | Hungry deletion of whitespace, or as it more commonly called, | ||
| 1173 | @dfn{hungry-delete mode}, is a simple feature that some people find | ||
| 1174 | extremely useful. In fact, you might find yourself wanting | ||
| 1175 | hungry-delete in @strong{all} your editing modes! | ||
| 1176 | |||
| 1177 | @kindex DEL | ||
| 1178 | @kindex C-d | 1456 | @kindex C-d |
| 1179 | 1457 | ||
| 1180 | In a nutshell, when hungry-delete mode is enabled, hitting the @kbd{DEL} | 1458 | If you want to delete an entire block of whitespace at point, you can |
| 1181 | or @kbd{C-d} keys will consume all preceding or following whitespace, | 1459 | use @dfn{hungry deletion}. This deletes all the contiguous whitespace |
| 1182 | including newlines and tabs. This can really cut down on the number of | 1460 | either before point or after point in a single operation. |
| 1183 | times you have to hit these keys if, for example, you made a mistake on | 1461 | ``Whitespace'' here includes tabs and newlines, but not comments or |
| 1184 | the preceding line. | 1462 | preprocessor commands. Hungry deletion can markedly cut down on the |
| 1463 | number of times you have to hit deletion keys when, for example, | ||
| 1464 | you've made a mistake on the preceding line and have already pressed | ||
| 1465 | @kbd{C-j}. | ||
| 1185 | 1466 | ||
| 1186 | @deffn Command c-electric-backspace | 1467 | Hungry deletion is a simple feature that some people find extremely |
| 1187 | @findex electric-backspace (c-) | 1468 | useful. In fact, you might find yourself wanting it in @strong{all} |
| 1188 | This command is run by default when you hit the @kbd{DEL} key. It | 1469 | your editing modes! |
| 1189 | deletes any amount of whitespace in the backwards direction if | 1470 | |
| 1190 | hungry-delete mode is enabled. When it's disabled, or when used with | 1471 | There are two different ways you can use hungry deletion: |
| 1191 | a prefix argument or in a literal (@pxref{Auto-newline Insertion}), | ||
| 1192 | the function contained in the @code{c-backspace-function} variable is | ||
| 1193 | called with the prefix argument. | ||
| 1194 | @end deffn | ||
| 1195 | 1472 | ||
| 1196 | @defvar c-backspace-function | 1473 | @table @asis |
| 1474 | @item Using @dfn{Hungry Delete Mode} with @kbd{@key{DEL}} and @kbd{C-d} | ||
| 1475 | Here you toggle Hungry Delete minor mode with @kbd{M-x | ||
| 1476 | c-toggle-hungry-state}@footnote{Prior to @ccmode{} 5.31, this command | ||
| 1477 | was bound to @kbd{C-c C-d}. @kbd{C-c C-d} is now the default binding | ||
| 1478 | for @code{c-hungry-delete-forward}.} (@pxref{Minor Modes}.) This | ||
| 1479 | makes @kbd{@key{DEL}} and @kbd{C-d} do forward and backwards hungry | ||
| 1480 | deletion. | ||
| 1481 | |||
| 1482 | @table @asis | ||
| 1483 | @item @kbd{@key{DEL}} (@code{c-electric-backspace}) | ||
| 1484 | @kindex DEL | ||
| 1485 | @findex c-electric-backspace | ||
| 1486 | @findex electric-backspace (c-) | ||
| 1487 | This command is run by default when you hit the @kbd{DEL} key. When | ||
| 1488 | hungry delete mode is enabled, it deletes any amount of whitespace in | ||
| 1489 | the backwards direction. Otherwise, or when used with a prefix | ||
| 1490 | argument or in a literal (@pxref{Auto-newlines}), the command just | ||
| 1491 | deletes backwards in the usual way. (More precisely, it calls the | ||
| 1492 | function contained in the variable @code{c-backspace-function}, | ||
| 1493 | passing it the prefix argument, if any.) | ||
| 1494 | |||
| 1495 | @item @code{c-backspace-function} | ||
| 1496 | @vindex c-backspace-function | ||
| 1197 | @vindex backspace-function (c-) | 1497 | @vindex backspace-function (c-) |
| 1198 | @findex backward-delete-char-untabify | 1498 | @findex backward-delete-char-untabify |
| 1199 | Hook that gets called by @code{c-electric-backspace} when it doesn't | 1499 | Hook that gets called by @code{c-electric-backspace} when it doesn't |
| 1200 | do an ``electric'' deletion of the preceding whitespace. The default | 1500 | do an ``electric'' deletion of the preceding whitespace. The default |
| 1201 | value is @code{backward-delete-char-untabify}. | 1501 | value is @code{backward-delete-char-untabify} |
| 1202 | @end defvar | 1502 | (@pxref{Deletion,,,@lispref{}, @lispreftitle{}}, the function which |
| 1503 | deletes a single character. | ||
| 1203 | 1504 | ||
| 1204 | @deffn Command c-electric-delete-forward | 1505 | @item @kbd{C-d} (@code{c-electric-delete-forward}) |
| 1506 | @kindex C-d | ||
| 1507 | @findex c-electric-delete-forward | ||
| 1205 | @findex electric-delete-forward (c-) | 1508 | @findex electric-delete-forward (c-) |
| 1206 | This function, which is bound to @kbd{C-d} by default, works just like | 1509 | This function, which is bound to @kbd{C-d} by default, works just like |
| 1207 | @code{c-electric-backspace} but in the forward direction. When it | 1510 | @code{c-electric-backspace} but in the forward direction. When it |
| 1208 | doesn't do an ``electric'' deletion of the following whitespace, it | 1511 | doesn't do an ``electric'' deletion of the following whitespace, it |
| 1209 | calls the function in @code{c-delete-function} with its prefix | 1512 | just does @code{delete-char}, more or less. (Strictly speaking, it |
| 1210 | argument. | 1513 | calls the function in @code{c-delete-function} with the prefix |
| 1211 | @end deffn | 1514 | argument.) |
| 1212 | 1515 | ||
| 1213 | @defvar c-delete-function | 1516 | @item @code{c-delete-function} |
| 1517 | @vindex c-delete-function | ||
| 1214 | @vindex delete-function (c-) | 1518 | @vindex delete-function (c-) |
| 1215 | @findex delete-char | 1519 | @findex delete-char |
| 1216 | Hook that gets called by @code{c-electric-delete-forward} when it | 1520 | Hook that gets called by @code{c-electric-delete-forward} when it |
| 1217 | doesn't do an ``electric'' deletion of the following whitespace. The | 1521 | doesn't do an ``electric'' deletion of the following whitespace. The |
| 1218 | default value is @code{delete-char}. | 1522 | default value is @code{delete-char}. |
| 1219 | @end defvar | 1523 | @end table |
| 1220 | 1524 | ||
| 1221 | Above we have only talked about the @kbd{DEL} and @kbd{C-d} key events, | 1525 | @item Using Distinct Bindings |
| 1222 | without connecting them to the physical keys commonly known as | 1526 | The other (newer and recommended) way to use hungry deletion is to |
| 1223 | @key{Backspace} and @key{Delete}. The default behavior of those two | 1527 | perform @code{c-hungry-backspace} and @code{c-hungry-delete-forward} |
| 1224 | depends on the flavor of (X)Emacs you are using. | 1528 | directly through their key sequences rather than using the minor mode |
| 1529 | toggling. | ||
| 1530 | |||
| 1531 | @table @asis | ||
| 1532 | @item @kbd{C-c C-@key{Backspace}}, @kbd{C-c DEL}, or @kbd{C-c @key{Backspace}} (@code{c-hungry-backspace}) | ||
| 1533 | @kindex C-c C-<backspace> | ||
| 1534 | @kindex C-c DEL | ||
| 1535 | @kindex C-c <backspace> | ||
| 1536 | @findex c-hungry-backspace | ||
| 1537 | @findex hungry-backspace (c-) | ||
| 1538 | Delete any amount of whitespace in the backwards direction (regardless | ||
| 1539 | whether hungry-delete mode is enabled or not). This command is bound | ||
| 1540 | to both @kbd{C-c C-@key{Backspace}} and @kbd{C-c @key{Backspace}}, | ||
| 1541 | since the more natural one, @kbd{C-c C-@key{Backspace}}, is sometimes | ||
| 1542 | difficult to type at a character terminal. | ||
| 1543 | |||
| 1544 | @item @kbd{C-c C-@key{Delete}}, @kbd{C-c C-d}, or @kbd{C-c @key{Delete}} (@code{c-hungry-delete-forward}) | ||
| 1545 | @kindex C-c C-<delete> | ||
| 1546 | @kindex C-c C-d | ||
| 1547 | @kindex C-c <delete> | ||
| 1548 | @findex c-hungry-delete-forward | ||
| 1549 | @findex hungry-delete-forward (c-) | ||
| 1550 | Delete any amount of whitespace in the forward direction (regardless | ||
| 1551 | whether hungry-delete mode is enabled or not). This command is bound | ||
| 1552 | to both @kbd{C-c C-@key{Delete}} and @kbd{C-c @key{Delete}} for the | ||
| 1553 | same reason as for @key{Backspace} above. | ||
| 1554 | @end table | ||
| 1555 | @end table | ||
| 1556 | |||
| 1557 | @kindex <delete> | ||
| 1558 | @kindex <backspace> | ||
| 1559 | |||
| 1560 | When we talk about @kbd{DEL}, @kbd{C-d}, @key{Backspace} and | ||
| 1561 | @key{Delete} above, we actually do so without connecting them to the | ||
| 1562 | physical keys commonly known as @key{Backspace} and @key{Delete}. The | ||
| 1563 | default bindings to those two keys depends on the flavor of (X)Emacs | ||
| 1564 | you are using. | ||
| 1225 | 1565 | ||
| 1226 | @findex c-electric-delete | 1566 | @findex c-electric-delete |
| 1227 | @findex electric-delete (c-) | 1567 | @findex electric-delete (c-) |
| 1568 | @findex c-hungry-delete | ||
| 1569 | @findex hungry-delete (c-) | ||
| 1228 | @vindex delete-key-deletes-forward | 1570 | @vindex delete-key-deletes-forward |
| 1229 | 1571 | ||
| 1230 | In XEmacs 20.3 and beyond, the @key{Backspace} key is bound to | 1572 | In XEmacs 20.3 and beyond, the @key{Backspace} key is bound to |
| @@ -1234,361 +1576,132 @@ setting the variable @code{delete-key-deletes-forward}, a standard | |||
| 1234 | XEmacs variable. When this variable is non-@code{nil}, | 1576 | XEmacs variable. When this variable is non-@code{nil}, |
| 1235 | @code{c-electric-delete} will do forward deletion with | 1577 | @code{c-electric-delete} will do forward deletion with |
| 1236 | @code{c-electric-delete-forward}, otherwise it does backward deletion | 1578 | @code{c-electric-delete-forward}, otherwise it does backward deletion |
| 1237 | with @code{c-electric-backspace}. | 1579 | with @code{c-electric-backspace}. Similarly, @kbd{C-c @key{Delete}} |
| 1238 | 1580 | and @kbd{C-c C-@key{Delete}} are bound to @code{c-hungry-delete} which | |
| 1239 | In other Emacs versions, @ccmode{} doesn't bind either @key{Backspace} | 1581 | is controlled in the same way by @code{delete-key-deletes-forward}. |
| 1240 | or @key{Delete}. In XEmacs 19 and Emacs prior to 21 that means that | ||
| 1241 | it's up to you to fix them. Emacs 21 automatically binds them as | ||
| 1242 | appropriate to @kbd{DEL} and @kbd{C-d}. | ||
| 1243 | 1582 | ||
| 1244 | Another way to use hungry deletion is to bind | 1583 | @findex normal-erase-is-backspace-mode |
| 1245 | @code{c-hungry-backspace} and @code{c-hungry-delete-forward} directly | ||
| 1246 | to keys, and not use the mode toggling. For example @kbd{C-c C-d} and | ||
| 1247 | @kbd{C-c DEL} to match plain @kbd{C-d} and @kbd{DEL}, | ||
| 1248 | 1584 | ||
| 1249 | @example | 1585 | Emacs 21 and later automatically binds @key{Backspace} and |
| 1250 | (add-hook | 1586 | @key{Delete} to @kbd{DEL} and @kbd{C-d} according to your environment, |
| 1251 | 'c-mode-common-hook | 1587 | and @ccmode{} extends those bindings to @kbd{C-c C-@key{Backspace}} |
| 1252 | (lambda () | 1588 | etc. If you need to change the bindings through |
| 1253 | (define-key c-mode-base-map | 1589 | @code{normal-erase-is-backspace-mode} then @ccmode{} will also adapt |
| 1254 | [?\C-c ?\d] 'c-hungry-backspace) | 1590 | its extended bindings accordingly. |
| 1255 | (define-key c-mode-base-map | ||
| 1256 | [?\C-c ?\C-d] 'c-hungry-delete-forward))) | ||
| 1257 | @end example | ||
| 1258 | 1591 | ||
| 1259 | @deffn Command c-hungry-backspace | 1592 | In earlier (X)Emacs versions, @ccmode{} doesn't bind either |
| 1260 | @findex hungry-backspace (c-) | 1593 | @key{Backspace} or @key{Delete} directly. Only the key codes |
| 1261 | Delete any amount of whitespace in the backwards direction (regardless | 1594 | @kbd{DEL} and @kbd{C-d} are bound, and it's up to the default bindings |
| 1262 | whether hungry-delete mode is enabled or not). | 1595 | to map the physical keys to them. You might need to modify this |
| 1263 | @end deffn | 1596 | yourself if the defaults are unsuitable. |
| 1264 | 1597 | ||
| 1265 | @deffn Command c-hungry-delete-forward | 1598 | Getting your @key{Backspace} and @key{Delete} keys properly set up can |
| 1266 | @findex hungry-delete-forward (c-) | 1599 | sometimes be tricky. The information in @ref{DEL Does Not |
| 1267 | Delete any amount of whitespace in the forward direction (regardless | 1600 | Delete,,,emacs, GNU Emacs Manual}, might be helpful if you're having |
| 1268 | whether hungry-delete mode is enabled or not). | 1601 | trouble with this in GNU Emacs. |
| 1269 | @end deffn | ||
| 1270 | 1602 | ||
| 1271 | 1603 | ||
| 1272 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1604 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 1273 | @node Text Filling and Line Breaking, Macro Handling, Minor Modes, Top | 1605 | @node Subword Movement, Other Commands, Hungry WS Deletion, Commands |
| 1274 | @comment node-name, next, previous, up | 1606 | @comment node-name, next, previous, up |
| 1275 | @chapter Text Filling and Line Breaking | 1607 | @section Subword Movement and Editing |
| 1276 | @cindex text filling | ||
| 1277 | @cindex line breaking | ||
| 1278 | @cindex comment handling | ||
| 1279 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1608 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 1280 | 1609 | ||
| 1281 | Since there's a lot of normal text in comments and string literals, | 1610 | @cindex nomenclature |
| 1282 | @ccmode{} provides features to edit these like in text mode. The goal | 1611 | @cindex subword |
| 1283 | is to do it as seamlessly as possible, i.e., you can use auto fill mode, | 1612 | In spite of the GNU Coding Standards, it is popular to name a symbol |
| 1284 | sentence and paragraph movement, paragraph filling, adaptive filling etc | 1613 | by mixing uppercase and lowercase letters, e.g. @samp{GtkWidget}, |
| 1285 | wherever there's a piece of normal text without having to think much | 1614 | @samp{EmacsFrameClass}, or @samp{NSGraphicsContext}. Here we call |
| 1286 | about it. @ccmode{} should keep the indentation, fix the comment line | 1615 | these mixed case symbols @dfn{nomenclatures}. Also, each capitalized |
| 1287 | decorations, and so on, for you. It does that by hooking in on the | 1616 | (or completely uppercase) part of a nomenclature is called a |
| 1288 | different line breaking functions and tuning relevant variables as | 1617 | @dfn{subword}. Here are some examples: |
| 1289 | necessary. | 1618 | |
| 1290 | 1619 | @multitable {@samp{NSGraphicsContext}} {@samp{NS}, @samp{Graphics}, and @samp{Context}} | |
| 1291 | @vindex c-comment-prefix-regexp | 1620 | @headitem Nomenclature |
| 1292 | @vindex comment-prefix-regexp (c-) | 1621 | @tab Subwords |
| 1293 | @cindex comment line prefix | 1622 | @item @samp{GtkWindow} |
| 1294 | @vindex comment-start | 1623 | @tab @samp{Gtk} and @samp{Window} |
| 1295 | @vindex comment-end | 1624 | @item @samp{EmacsFrameClass} |
| 1296 | @vindex comment-start-skip | 1625 | @tab @samp{Emacs}, @samp{Frame}, and @samp{Class} |
| 1297 | @vindex paragraph-start | 1626 | @item @samp{NSGraphicsContext} |
| 1298 | @vindex paragraph-separate | 1627 | @tab @samp{NS}, @samp{Graphics}, and @samp{Context} |
| 1299 | @vindex paragraph-ignore-fill-prefix | 1628 | @end multitable |
| 1300 | @vindex adaptive-fill-mode | 1629 | |
| 1301 | @vindex adaptive-fill-regexp | 1630 | The subword minor mode replaces the basic word oriented movement and |
| 1302 | @vindex adaptive-fill-first-line-regexp | 1631 | editing commands with variants that recognize subwords in a |
| 1303 | To make Emacs recognize comments and treat text in them as normal | 1632 | nomenclature and treat them as separate words: |
| 1304 | paragraphs, @ccmode{} makes several standard | 1633 | |
| 1305 | variables@footnote{@code{comment-start}, @code{comment-end}, | 1634 | @findex c-forward-subword |
| 1306 | @code{comment-start-skip}, @code{paragraph-start}, | 1635 | @findex forward-subword (c-) |
| 1307 | @code{paragraph-separate}, @code{paragraph-ignore-fill-prefix}, | 1636 | @findex c-backward-subword |
| 1308 | @code{adaptive-fill-mode}, @code{adaptive-fill-regexp}, and | 1637 | @findex backward-subword (c-) |
| 1309 | @code{adaptive-fill-first-line-regexp}.} buffer local and modifies them | 1638 | @findex c-mark-subword |
| 1310 | according to the language syntax and the comment line prefix. | 1639 | @findex mark-subword (c-) |
| 1311 | 1640 | @findex c-kill-subword | |
| 1312 | @defopt c-comment-prefix-regexp | 1641 | @findex kill-subword (c-) |
| 1313 | @vindex comment-prefix-regexp (c-) | 1642 | @findex c-backward-kill-subword |
| 1314 | This style variable contains the regexp used to recognize the | 1643 | @findex backward-kill-subword (c-) |
| 1315 | @dfn{comment line prefix}, which is the line decoration that starts | 1644 | @findex c-transpose-subwords |
| 1316 | every line in a comment. The default is @samp{//+\\|\\**}, which | 1645 | @findex transpose-subwords (c-) |
| 1317 | matches C++ style line comments like | 1646 | @findex c-capitalize-subword |
| 1318 | 1647 | @findex capitalize-subword (c-) | |
| 1319 | @example | 1648 | @findex c-upcase-subword |
| 1320 | // blah blah | 1649 | @findex upcase-subword (c-) |
| 1321 | @end example | 1650 | @findex c-downcase-subword |
| 1322 | 1651 | @findex downcase-subword (c-) | |
| 1323 | @noindent | 1652 | @multitable @columnfractions .20 .40 .40 |
| 1324 | with two or more slashes in front of them, and C style block comments | 1653 | @headitem Key @tab Word oriented command @tab Subword oriented command |
| 1325 | like | 1654 | @item @kbd{M-f} @tab @code{forward-word} @tab @code{c-forward-subword} |
| 1326 | 1655 | @item @kbd{M-b} @tab @code{backward-word} @tab @code{c-backward-subword} | |
| 1327 | @example | 1656 | @item @kbd{M-@@} @tab @code{mark-word} @tab @code{c-mark-subword} |
| 1328 | @group | 1657 | @item @kbd{M-d} @tab @code{kill-word} @tab @code{c-kill-subword} |
| 1329 | /* | 1658 | @item @kbd{M-DEL} @tab @code{backward-kill-word} @tab @code{c-backward-kill-subword} |
| 1330 | * blah blah | 1659 | @item @kbd{M-t} @tab @code{transpose-words} @tab @code{c-transpose-subwords} |
| 1331 | */ | 1660 | @item @kbd{M-c} @tab @code{capitalize-word} @tab @code{c-capitalize-subword} |
| 1332 | @end group | 1661 | @item @kbd{M-u} @tab @code{upcase-word} @tab @code{c-upcase-subword} |
| 1333 | @end example | 1662 | @item @kbd{M-l} @tab @code{downcase-word} @tab @code{c-downcase-subword} |
| 1334 | 1663 | @end multitable | |
| 1335 | @noindent | 1664 | |
| 1336 | with zero or more stars at the beginning of every line. If you change | 1665 | Note that if you have changed the key bindings for the word oriented |
| 1337 | this variable, please make sure it still matches the comment starter | 1666 | commands in your @file{.emacs} or a similar place, the keys you have |
| 1338 | (i.e., @code{//}) of line comments @emph{and} the line prefix inside | 1667 | configured are also used for the corresponding subword oriented |
| 1339 | block comments. | 1668 | commands. |
| 1340 | 1669 | ||
| 1341 | @findex c-setup-paragraph-variables | 1670 | Type @kbd{C-c C-w} to toggle subword mode on and off. To make the |
| 1342 | @findex setup-paragraph-variables (c-) | 1671 | mode turn on automatically, put the following code in your |
| 1343 | Also note that since @ccmode{} uses the value of | 1672 | @file{.emacs}: |
| 1344 | @code{c-comment-prefix-regexp} to set up several other variables at mode | ||
| 1345 | initialization, there won't be any effect if you just change it inside a | ||
| 1346 | @ccmode{} buffer. You need to call the command | ||
| 1347 | @code{c-setup-paragraph-variables} too, to update those other variables with | ||
| 1348 | the new value. That's also the case if you modify this variable in a | ||
| 1349 | mode hook, since @ccmode{} sets up all variables before calling them. | ||
| 1350 | @end defopt | ||
| 1351 | |||
| 1352 | @findex auto-fill-mode | ||
| 1353 | @cindex Auto Fill mode | ||
| 1354 | @cindex paragraph filling | ||
| 1355 | Line breaks are by default handled (almost) the same regardless whether | ||
| 1356 | they are made by auto fill mode (@pxref{Auto Fill,,, emacs, The Emacs | ||
| 1357 | Editor}), paragraph filling (e.g., with @kbd{M-q}), or explicitly with | ||
| 1358 | @kbd{M-j} or similar methods. In string literals, the new line gets the | ||
| 1359 | same indentation as the previous nonempty line (may be changed with the | ||
| 1360 | @code{string} syntactic symbol). In comments, @ccmode{} uses | ||
| 1361 | @code{c-comment-prefix-regexp} to adapt the line prefix from the other | ||
| 1362 | lines in the comment. | ||
| 1363 | |||
| 1364 | @vindex adaptive-fill-mode | ||
| 1365 | @cindex Adaptive Fill mode | ||
| 1366 | @ccmode{} uses adaptive fill mode (@pxref{Adaptive Fill,,, emacs, The | ||
| 1367 | Emacs Editor}) to make Emacs correctly keep the line prefix when filling | ||
| 1368 | paragraphs. That also makes Emacs preserve the text indentation | ||
| 1369 | @emph{inside} the comment line prefix. e.g., in the following comment, | ||
| 1370 | both paragraphs will be filled with the left margins of the texts kept | ||
| 1371 | intact: | ||
| 1372 | |||
| 1373 | @example | ||
| 1374 | @group | ||
| 1375 | /* Make a balanced b-tree of the nodes in the incoming | ||
| 1376 | * stream. But, to quote the famous words of Donald E. | ||
| 1377 | * Knuth, | ||
| 1378 | * | ||
| 1379 | * Beware of bugs in the above code; I have only | ||
| 1380 | * proved it correct, not tried it. | ||
| 1381 | */ | ||
| 1382 | @end group | ||
| 1383 | @end example | ||
| 1384 | |||
| 1385 | @findex c-setup-filladapt | ||
| 1386 | @findex setup-filladapt (c-) | ||
| 1387 | @findex filladapt-mode | ||
| 1388 | @vindex filladapt-mode | ||
| 1389 | @cindex Filladapt mode | ||
| 1390 | It's also possible to use other adaptive filling packages, notably Kyle | ||
| 1391 | E. Jones' Filladapt package@footnote{It's available from | ||
| 1392 | @uref{http://www.wonderworks.com/}. As of version 2.12, it does however | ||
| 1393 | lack a feature that makes it work suboptimally when | ||
| 1394 | @code{c-comment-prefix-regexp} matches the empty string (which it does | ||
| 1395 | by default). A patch for that is available from | ||
| 1396 | @uref{http://cc-mode.sourceforge.net/,, the CC Mode web site}.}, | ||
| 1397 | which handles things like bulleted lists nicely. There's a convenience | ||
| 1398 | function @code{c-setup-filladapt} that tunes the relevant variables in | ||
| 1399 | Filladapt for use in @ccmode{}. Call it from a mode hook, e.g., with | ||
| 1400 | something like this in your @file{.emacs}: | ||
| 1401 | |||
| 1402 | @example | ||
| 1403 | (defun my-c-mode-common-hook () | ||
| 1404 | (c-setup-filladapt) | ||
| 1405 | (filladapt-mode 1)) | ||
| 1406 | (add-hook 'c-mode-common-hook 'my-c-mode-common-hook) | ||
| 1407 | @end example | ||
| 1408 | |||
| 1409 | @defopt c-block-comment-prefix | ||
| 1410 | @vindex block-comment-prefix (c-) | ||
| 1411 | @vindex c-comment-continuation-stars | ||
| 1412 | @vindex comment-continuation-stars (c-) | ||
| 1413 | Normally the comment line prefix inserted for a new line inside a | ||
| 1414 | comment is deduced from other lines in it. However there's one | ||
| 1415 | situation when there's no hint about what the prefix should look like, | ||
| 1416 | namely when a block comment is broken for the first time. This style | ||
| 1417 | variable@footnote{In versions before 5.26, this variable was called | ||
| 1418 | @code{c-comment-continuation-stars}. As a compatibility measure, | ||
| 1419 | @ccmode{} still uses the value on that variable if it's set.} is used | ||
| 1420 | then as the comment prefix. It defaults to @samp{* | ||
| 1421 | }@footnote{Actually, this default setting of | ||
| 1422 | @code{c-block-comment-prefix} typically gets overriden by the default | ||
| 1423 | style @code{gnu}, which sets it to blank. You can see the line | ||
| 1424 | splitting effect described here by setting a different style, | ||
| 1425 | e.g. @code{k&r} @xref{Choosing a Style}.}, which makes a comment | ||
| 1426 | |||
| 1427 | @example | ||
| 1428 | /* Got O(n^2) here, which is a Bad Thing. */ | ||
| 1429 | @end example | ||
| 1430 | |||
| 1431 | @noindent | ||
| 1432 | break into | ||
| 1433 | 1673 | ||
| 1434 | @example | 1674 | @example |
| 1435 | @group | 1675 | (add-hook 'c-mode-common-hook |
| 1436 | /* Got O(n^2) here, | 1676 | (lambda () (c-subword-mode 1))) |
| 1437 | * which is a Bad Thing. */ | ||
| 1438 | @end group | ||
| 1439 | @end example | 1677 | @end example |
| 1440 | 1678 | ||
| 1441 | Note that it won't work to adjust the indentation by putting leading | 1679 | As a bonus, you can also use @code{c-subword-mode} in non-@ccmode{} |
| 1442 | spaces in @code{c-block-comment-prefix}, since @ccmode{} still uses the | 1680 | buffers by typing @kbd{M-x c-subword-mode}. |
| 1443 | normal indentation engine to indent the line. Thus, the right way to | ||
| 1444 | fix the indentation is by customizing the @code{c} syntactic symbol. It | ||
| 1445 | defaults to @code{c-lineup-C-comments}, which handles the indentation of | ||
| 1446 | most common comment styles, see @ref{Indentation Functions}. | ||
| 1447 | @end defopt | ||
| 1448 | |||
| 1449 | @defopt c-ignore-auto-fill | ||
| 1450 | @vindex ignore-auto-fill (c-) | ||
| 1451 | When auto fill mode is enabled, @ccmode{} can selectively ignore it | ||
| 1452 | depending on the context the line break would occur in, e.g., to never | ||
| 1453 | break a line automatically inside a string literal. This variable | ||
| 1454 | takes a list of symbols for the different contexts where auto-filling | ||
| 1455 | never should occur: | ||
| 1456 | |||
| 1457 | @table @code | ||
| 1458 | @item string | ||
| 1459 | Inside a string or character literal. | ||
| 1460 | @item c | ||
| 1461 | Inside a C style block comment. | ||
| 1462 | @item c++ | ||
| 1463 | Inside a C++ style line comment. | ||
| 1464 | @item cpp | ||
| 1465 | Inside a preprocessor directive. | ||
| 1466 | @item code | ||
| 1467 | Anywhere else, i.e., in normal code. | ||
| 1468 | @end table | ||
| 1469 | |||
| 1470 | By default, @code{c-ignore-auto-fill} is set to @code{'(string cpp | ||
| 1471 | code)}, which means that auto-filling only occurs in comments when | ||
| 1472 | auto-fill mode is activated. In literals, it's often desirable to have | ||
| 1473 | explicit control over newlines. In preprocessor directives, the | ||
| 1474 | necessary @samp{\} escape character before the newline is not | ||
| 1475 | automatically inserted, so an automatic line break would produce invalid | ||
| 1476 | code. In normal code, line breaks are normally dictated by some logical | ||
| 1477 | structure in the code rather than the last whitespace character, so | ||
| 1478 | automatic line breaks there will produce poor results in the current | ||
| 1479 | implementation. | ||
| 1480 | @end defopt | ||
| 1481 | |||
| 1482 | The commands that do the actual work follow. | ||
| 1483 | |||
| 1484 | @table @asis | ||
| 1485 | @item @kbd{M-q} (@code{c-fill-paragraph}) | ||
| 1486 | @kindex M-q | ||
| 1487 | @findex c-fill-paragraph | ||
| 1488 | @findex fill-paragraph (c-) | ||
| 1489 | @cindex Javadoc markup | ||
| 1490 | @cindex Pike autodoc markup | ||
| 1491 | This is the replacement for @code{fill-paragraph} in @ccmode{} | ||
| 1492 | buffers. It's used to fill multiline string literals and both block and | ||
| 1493 | line style comments. In Java buffers, the Javadoc markup words are | ||
| 1494 | recognized as paragraph starters. The line oriented Pike autodoc markup | ||
| 1495 | words are recognized in the same way in Pike mode. | ||
| 1496 | |||
| 1497 | The function keeps the comment starters and enders of block comments as | ||
| 1498 | they were before the filling. This means that a comment ender on the | ||
| 1499 | same line as the paragraph being filled will be filled with the | ||
| 1500 | paragraph, and one on a line by itself will stay as it is. The comment | ||
| 1501 | starter is handled similarly@footnote{This means that the variables | ||
| 1502 | @code{c-hanging-comment-starter-p} and @code{c-hanging-comment-ender-p}, | ||
| 1503 | which controlled this behavior in earlier versions of @ccmode{}, are now | ||
| 1504 | obsolete.}. | ||
| 1505 | |||
| 1506 | @item @kbd{M-j} (@code{c-indent-new-comment-line}) | ||
| 1507 | @kindex M-j | ||
| 1508 | @findex c-indent-new-comment-line | ||
| 1509 | @findex indent-new-comment-line (c-) | ||
| 1510 | This is the replacement for @code{indent-new-comment-line}. It breaks | ||
| 1511 | the line at point and indents the new line like the current one. | ||
| 1512 | |||
| 1513 | @vindex comment-multi-line | ||
| 1514 | If inside a comment and @code{comment-multi-line} is non-@code{nil}, the | ||
| 1515 | indentation and line prefix are preserved. If inside a comment and | ||
| 1516 | @code{comment-multi-line} is @code{nil}, a new comment of the same type | ||
| 1517 | is started on the next line and indented as appropriate for comments. | ||
| 1518 | |||
| 1519 | Note that @ccmode{} sets @code{comment-multi-line} to @code{t} at | ||
| 1520 | startup. The reason is that @kbd{M-j} could otherwise produce sequences | ||
| 1521 | of single line block comments for texts that should logically be treated | ||
| 1522 | as one comment, and the rest of the paragraph handling code | ||
| 1523 | (e.g., @kbd{M-q} and @kbd{M-a}) can't cope with that, which would lead to | ||
| 1524 | inconsistent behavior. | ||
| 1525 | |||
| 1526 | @item @kbd{M-x c-context-line-break} | ||
| 1527 | @findex c-context-line-break | ||
| 1528 | @findex context-line-break (c-) | ||
| 1529 | This is a function that works like @code{indent-new-comment-line} in | ||
| 1530 | comments and @code{newline-and-indent} elsewhere, thus combining those | ||
| 1531 | two in a way that uses each one in the context it's best suited for. | ||
| 1532 | I.e., in comments the comment line prefix and indentation is kept for | ||
| 1533 | the new line, and in normal code it's indented according to context by | ||
| 1534 | the indentation engine. | ||
| 1535 | |||
| 1536 | In macros it acts like @code{newline-and-indent} but additionally | ||
| 1537 | inserts and optionally aligns the line ending backslash so that the | ||
| 1538 | macro remains unbroken. @xref{Macro Handling}, for details about the | ||
| 1539 | backslash alignment. | ||
| 1540 | |||
| 1541 | It's not bound to a key by default, but it's intended to be used on the | ||
| 1542 | @kbd{RET} key. If you like the behavior of @code{newline-and-indent} on | ||
| 1543 | @kbd{RET}, you should consider switching to this function. | ||
| 1544 | |||
| 1545 | @item @kbd{M-x c-context-open-line} | ||
| 1546 | @findex c-context-open-line | ||
| 1547 | @findex context-open-line (c-) | ||
| 1548 | This is to @kbd{C-o} (@kbd{M-x open-line}) as | ||
| 1549 | @code{c-context-line-break} is to @kbd{RET}. I.e., it works just like | ||
| 1550 | @code{c-context-line-break} but leaves the point before the inserted | ||
| 1551 | line break. | ||
| 1552 | @end table | ||
| 1553 | |||
| 1554 | 1681 | ||
| 1555 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1682 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 1556 | @node Macro Handling, Font Locking, Text Filling and Line Breaking, Top | 1683 | @node Other Commands, , Subword Movement, Commands |
| 1557 | @comment node-name, next, previous, up | 1684 | @comment node-name, next, previous, up |
| 1558 | @chapter Macro Handling | 1685 | @section Other Commands |
| 1559 | @cindex macros | ||
| 1560 | @cindex preprocessor directives | ||
| 1561 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1686 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 1562 | 1687 | ||
| 1563 | Preprocessor directives are handled as syntactic whitespace from other | 1688 | Here are the various other commands that didn't fit anywhere else: |
| 1564 | code, i.e., they can be interspersed anywhere without affecting the | ||
| 1565 | syntactic analysis, just like comments. | ||
| 1566 | |||
| 1567 | The code inside macro definitions is still analyzed syntactically so | ||
| 1568 | that you get relative indentation there just as you'd get if the same | ||
| 1569 | code was outside a macro. However, since there is no hint about the | ||
| 1570 | syntactic context, i.e., whether the macro expands to an expression, to some | ||
| 1571 | statements, or perhaps to whole functions, the syntactic recognition can be | ||
| 1572 | wrong. @ccmode{} manages to figure it out correctly most of the time, | ||
| 1573 | though. @xref{Syntactic Symbols}, for details about the indentation. | ||
| 1574 | |||
| 1575 | @defopt c-syntactic-indentation-in-macros | ||
| 1576 | @vindex syntactic-indentation-in-macros (c-) | ||
| 1577 | Enable syntactic analysis inside macros, which is the default. If this | ||
| 1578 | is @code{nil}, all lines inside macro definitions are analyzed as | ||
| 1579 | @code{cpp-macro-cont}. | ||
| 1580 | @end defopt | ||
| 1581 | |||
| 1582 | @ccmode{} provides some tools to help keep the line continuation | ||
| 1583 | backslashes in macros neat and tidy: | ||
| 1584 | 1689 | ||
| 1585 | @table @asis | 1690 | @table @asis |
| 1691 | @item @kbd{C-c :} (@code{c-scope-operator}) | ||
| 1692 | @kindex C-c : | ||
| 1693 | @findex c-scope-operator | ||
| 1694 | @findex scope-operator (c-) | ||
| 1695 | In C++, it is also sometimes desirable to insert the double-colon scope | ||
| 1696 | operator without performing the electric behavior of colon insertion. | ||
| 1697 | @kbd{C-c :} does just this. | ||
| 1698 | |||
| 1586 | @item @kbd{C-c C-\} (@code{c-backslash-region}) | 1699 | @item @kbd{C-c C-\} (@code{c-backslash-region}) |
| 1587 | @kindex C-c C-\ | 1700 | @kindex C-c C-\ |
| 1588 | @findex c-backslash-region | 1701 | @findex c-backslash-region |
| 1589 | @findex backslash-region (c-) | 1702 | @findex backslash-region (c-) |
| 1590 | This function inserts and aligns or deletes the end-of-line backslashes | 1703 | This function inserts and aligns or deletes end-of-line backslashes in |
| 1591 | in the current region. | 1704 | the current region. These are typically used in multi-line macros. |
| 1592 | 1705 | ||
| 1593 | With no prefix argument, it inserts any missing backslashes and aligns | 1706 | With no prefix argument, it inserts any missing backslashes and aligns |
| 1594 | them according to the @code{c-backslash-column} and | 1707 | them according to the @code{c-backslash-column} and |
| @@ -1598,75 +1711,72 @@ deletes any backslashes. | |||
| 1598 | The function does not modify blank lines at the start of the region. If | 1711 | The function does not modify blank lines at the start of the region. If |
| 1599 | the region ends at the start of a line, it always deletes the backslash | 1712 | the region ends at the start of a line, it always deletes the backslash |
| 1600 | (if any) at the end of the previous line. | 1713 | (if any) at the end of the previous line. |
| 1601 | @end table | ||
| 1602 | |||
| 1603 | @defopt c-backslash-column | ||
| 1604 | @vindex backslash-column (c-) | ||
| 1605 | @defoptx c-backslash-max-column | ||
| 1606 | @vindex backslash-max-column (c-) | ||
| 1607 | These variables control the alignment columns for line continuation | ||
| 1608 | backslashes in multiline macros. They are used by the functions that | ||
| 1609 | automatically insert or align such backslashes, | ||
| 1610 | e.g., @code{c-backslash-region} and @code{c-context-line-break}. | ||
| 1611 | |||
| 1612 | @code{c-backslash-column} specifies the minimum column for the | ||
| 1613 | backslashes. If any line in the macro exceeds it then the next tab | ||
| 1614 | stop from that line is used as the alignment column for all the | ||
| 1615 | backslashes, so that they remain in a single column. However, if some | ||
| 1616 | lines exceed @code{c-backslash-max-column} then the backslashes in the | ||
| 1617 | rest of the macro will be kept at that column, so that the | ||
| 1618 | lines which are too long ``stick out'' instead. | ||
| 1619 | @end defopt | ||
| 1620 | 1714 | ||
| 1621 | @defopt c-auto-align-backslashes | 1715 | To customize the precise workings of this command, @ref{Custom Macros}. |
| 1622 | @vindex auto-align-backslashes (c-) | 1716 | @end table |
| 1623 | Align automatically inserted line continuation backslashes if | ||
| 1624 | non-@code{nil}. When line continuation backslashes are inserted | ||
| 1625 | automatically for line breaks in multiline macros, e.g., by | ||
| 1626 | @code{c-context-line-break}, they are aligned with the other backslashes | ||
| 1627 | in the same macro if this flag is set. Otherwise the inserted | ||
| 1628 | backslashes are preceded by a single space. | ||
| 1629 | @end defopt | ||
| 1630 | 1717 | ||
| 1718 | @noindent | ||
| 1631 | The recommended line breaking function, @code{c-context-line-break} | 1719 | The recommended line breaking function, @code{c-context-line-break} |
| 1632 | (@pxref{Text Filling and Line Breaking}), is especially nice if you edit | 1720 | (@pxref{Filling and Breaking}), is especially nice if you edit |
| 1633 | multiline macros frequently. When used inside a macro, it automatically | 1721 | multiline macros frequently. When used inside a macro, it |
| 1634 | inserts and adjusts the mandatory backslash at the end of the line to | 1722 | automatically inserts and adjusts the mandatory backslash at the end |
| 1635 | keep the macro together, and it leaves the point at the right | 1723 | of the line to keep the macro together, and it leaves the point at the |
| 1636 | indentation column for the code. Thus you can write code inside macros | 1724 | right indentation column for the code. Thus you can write code inside |
| 1637 | almost exactly as you can elsewhere, without having to bother with the | 1725 | macros almost exactly as you can elsewhere, without having to bother |
| 1638 | trailing backslashes. | 1726 | with the trailing backslashes. |
| 1639 | 1727 | ||
| 1728 | @table @asis | ||
| 1729 | @item @kbd{C-c C-e} (@code{c-macro-expand}) | ||
| 1730 | @kindex C-c C-e | ||
| 1731 | @findex c-macro-expand | ||
| 1732 | @findex macro-expand (c-) | ||
| 1733 | This command expands C, C++, Objective C or Pike macros in the region, | ||
| 1734 | using an appropriate external preprocessor program. Normally it | ||
| 1735 | displays its output in a temporary buffer, but if you give it a prefix | ||
| 1736 | arg (with @kbd{C-u C-c C-e}) it will overwrite the original region | ||
| 1737 | with the expansion. | ||
| 1738 | |||
| 1739 | The command does not work in any of the other modes, and the key | ||
| 1740 | sequence is not bound in these other modes. | ||
| 1741 | |||
| 1742 | @code{c-macro-expand} isn't actually part of @ccmode{}, even though it | ||
| 1743 | is bound to a @ccmode{} key sequence. If you need help setting it up | ||
| 1744 | or have other problems with it, you can either read its source code or | ||
| 1745 | ask for help in the standard (X)Emacs forums. | ||
| 1746 | @end table | ||
| 1640 | 1747 | ||
| 1641 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1748 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 1642 | @node Font Locking, Commands, Macro Handling, Top | 1749 | @node Font Locking, Config Basics, Commands, Top |
| 1643 | @comment node-name, next, previous, up | 1750 | @comment node-name, next, previous, up |
| 1644 | @chapter Font Locking | 1751 | @chapter Font Locking |
| 1645 | @cindex font locking | 1752 | @cindex font locking |
| 1646 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1753 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 1647 | 1754 | ||
| 1648 | @strong{Please note:} The font locking in AWK mode is currently not integrated | ||
| 1649 | with the rest of @ccmode{}, so this section does not apply there. | ||
| 1650 | @xref{AWK Mode Font Locking}, instead. | ||
| 1651 | |||
| 1652 | @cindex Font Lock mode | 1755 | @cindex Font Lock mode |
| 1653 | 1756 | ||
| 1654 | @ccmode{} provides font locking for its supported languages by supplying | 1757 | @ccmode{} provides font locking for its supported languages by |
| 1655 | patterns for use with Font Lock mode. This means that you get distinct | 1758 | supplying patterns for use with Font Lock mode. This means that you |
| 1656 | faces on the various syntactic parts such as comments, strings, keywords | 1759 | get distinct faces on the various syntactic parts such as comments, |
| 1657 | and types, which is very helpful in telling them apart at a glance and | 1760 | strings, keywords and types, which is very helpful in telling them |
| 1658 | discovering syntactic errors. @xref{Font Lock,,, emacs, The Emacs | 1761 | apart at a glance and discovering syntactic errors. @xref{Font |
| 1659 | Editor}, for ways to enable font locking in @ccmode{} buffers. | 1762 | Lock,,, emacs, GNU Emacs Manual}, for ways to enable font locking in |
| 1763 | @ccmode{} buffers. | ||
| 1764 | |||
| 1765 | @strong{Please note:} The font locking in AWK mode is currently not | ||
| 1766 | integrated with the rest of @ccmode{}. Only the last section of this | ||
| 1767 | chapter, @ref{AWK Mode Font Locking}, applies to AWK. The other | ||
| 1768 | sections apply to the other languages. | ||
| 1660 | 1769 | ||
| 1661 | @menu | 1770 | @menu |
| 1662 | * Font Locking Preliminaries:: | 1771 | * Font Locking Preliminaries:: |
| 1663 | * Faces:: | 1772 | * Faces:: |
| 1664 | * Documentation Comments:: | 1773 | * Doc Comments:: |
| 1774 | * AWK Mode Font Locking:: | ||
| 1665 | @end menu | 1775 | @end menu |
| 1666 | 1776 | ||
| 1667 | 1777 | ||
| 1668 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1778 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 1669 | @node Font Locking Preliminaries, Faces, , Font Locking | 1779 | @node Font Locking Preliminaries, Faces, Font Locking, Font Locking |
| 1670 | @comment node-name, next, previous, up | 1780 | @comment node-name, next, previous, up |
| 1671 | @section Font Locking Preliminaries | 1781 | @section Font Locking Preliminaries |
| 1672 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1782 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| @@ -1676,19 +1786,20 @@ directly by the Font Lock package prior to version 5.30 of @ccmode{}. | |||
| 1676 | In the transition to @ccmode{} the patterns have been reworked | 1786 | In the transition to @ccmode{} the patterns have been reworked |
| 1677 | completely and are applied uniformly across all the languages except AWK | 1787 | completely and are applied uniformly across all the languages except AWK |
| 1678 | mode, just like the indentation rules (although each language still has | 1788 | mode, just like the indentation rules (although each language still has |
| 1679 | some pecularities of its own, of course). Since the languages | 1789 | some peculiarities of its own, of course). Since the languages |
| 1680 | previously had completely separate font locking patterns, this means | 1790 | previously had completely separate font locking patterns, this means |
| 1681 | that it's a bit different in most languages now. | 1791 | that it's a bit different in most languages now. |
| 1682 | 1792 | ||
| 1683 | The main goal for the font locking in @ccmode{} is accuracy, to provide | 1793 | The main goal for the font locking in @ccmode{} is accuracy, to provide |
| 1684 | a dependable aid in recognizing the various constructs. Some, like | 1794 | a dependable aid in recognizing the various constructs. Some, like |
| 1685 | strings and comments, are easy to recognize while others like | 1795 | strings and comments, are easy to recognize while others, like |
| 1686 | declarations and types can be very tricky. @ccmode{} can go to great | 1796 | declarations and types, can be very tricky. @ccmode{} can go to great |
| 1687 | lengths to recognize declarations and casts correctly, especially when | 1797 | lengths to recognize declarations and casts correctly, especially when |
| 1688 | the types aren't recognized by standard patterns. This is a fairly | 1798 | the types aren't recognized by standard patterns. This is a fairly |
| 1689 | demanding analysis which can be slow on older hardware, and it can | 1799 | demanding analysis which can be slow on older hardware, and it can |
| 1690 | therefore be disabled by choosing a lower decoration level with the | 1800 | therefore be disabled by choosing a lower decoration level with the |
| 1691 | variable @code{font-lock-maximum-decoration}. | 1801 | variable @code{font-lock-maximum-decoration} (@pxref{Font Lock,,, |
| 1802 | emacs, GNU Emacs Manual}). | ||
| 1692 | 1803 | ||
| 1693 | @vindex font-lock-maximum-decoration | 1804 | @vindex font-lock-maximum-decoration |
| 1694 | 1805 | ||
| @@ -1702,20 +1813,20 @@ directives (in the languages that use cpp). | |||
| 1702 | 1813 | ||
| 1703 | @comment 2 | 1814 | @comment 2 |
| 1704 | @item | 1815 | @item |
| 1705 | Fast normal font locking: In addition to level 1, fontify keywords, | 1816 | Fast font locking: In addition to level 1, fontify keywords, simple |
| 1706 | simple types and declarations that are easy to recognize. The variables | 1817 | types and declarations that are easy to recognize. The variables |
| 1707 | @code{*-font-lock-extra-types} (where @samp{*} is the name of the | 1818 | @code{*-font-lock-extra-types} (where @samp{*} is the name of the |
| 1708 | language) are used to recognize types (see below). Documentation | 1819 | language) are used to recognize types (see below). Documentation |
| 1709 | comments like Javadoc are fontified according to | 1820 | comments like Javadoc are fontified according to |
| 1710 | @code{c-doc-comment-style} (@pxref{Documentation Comments}). | 1821 | @code{c-doc-comment-style} (@pxref{Doc Comments}). |
| 1711 | 1822 | ||
| 1712 | Use this if you think the font locking is too slow. It's the closest | 1823 | Use this if you think the font locking is too slow. It's the closest |
| 1713 | corresponding level to level 3 in the old font lock patterns. | 1824 | corresponding level to level 3 in the old font lock patterns. |
| 1714 | 1825 | ||
| 1715 | @comment 3 | 1826 | @comment 3 |
| 1716 | @item | 1827 | @item |
| 1717 | Accurate normal font locking: Like level 2 but uses a different approach | 1828 | Accurate font locking: Like level 2 but uses a different approach that |
| 1718 | that can recognize types and declarations much more accurately. The | 1829 | can recognize types and declarations much more accurately. The |
| 1719 | @code{*-font-lock-extra-types} variables are still used, but user | 1830 | @code{*-font-lock-extra-types} variables are still used, but user |
| 1720 | defined types are recognized correctly anyway in most cases. Therefore | 1831 | defined types are recognized correctly anyway in most cases. Therefore |
| 1721 | those variables should be fairly restrictive and not contain patterns | 1832 | those variables should be fairly restrictive and not contain patterns |
| @@ -1726,7 +1837,13 @@ that are uncertain. | |||
| 1726 | 1837 | ||
| 1727 | This level is designed for fairly modern hardware and a font lock | 1838 | This level is designed for fairly modern hardware and a font lock |
| 1728 | support mode like Lazy Lock or Just-in-time Lock mode that only | 1839 | support mode like Lazy Lock or Just-in-time Lock mode that only |
| 1729 | fontifies the parts that are actually shown. | 1840 | fontifies the parts that are actually shown. Fontifying the whole |
| 1841 | buffer at once can easily get bothersomely slow even on contemporary | ||
| 1842 | hardware. | ||
| 1843 | @c ACM, 2005/8/28: There should be a page in the (X)Emacs manual | ||
| 1844 | @c describing these support modes. There wasn't in the | ||
| 1845 | @c fourteenth edition of the Emacs manual (released with Emacs 21.3). | ||
| 1846 | @c There might be one in the Emacs CVS for 22.1. | ||
| 1730 | @end enumerate | 1847 | @end enumerate |
| 1731 | 1848 | ||
| 1732 | @cindex user defined types | 1849 | @cindex user defined types |
| @@ -1744,7 +1861,7 @@ additional regexps to match those you use: | |||
| 1744 | For each language there's a variable @code{*-font-lock-extra-types}, | 1861 | For each language there's a variable @code{*-font-lock-extra-types}, |
| 1745 | where @samp{*} stands for the language in question. It contains a list | 1862 | where @samp{*} stands for the language in question. It contains a list |
| 1746 | of regexps that matches identifiers that should be recognized as types, | 1863 | of regexps that matches identifiers that should be recognized as types, |
| 1747 | e.g., @samp{\\sw+_t} to recognize all identifiers ending with @samp{_t} | 1864 | e.g. @samp{\\sw+_t} to recognize all identifiers ending with @samp{_t} |
| 1748 | as is customary in C code. Each regexp should not match more than a | 1865 | as is customary in C code. Each regexp should not match more than a |
| 1749 | single identifier. | 1866 | single identifier. |
| 1750 | 1867 | ||
| @@ -1761,7 +1878,7 @@ recognize types. | |||
| 1761 | 1878 | ||
| 1762 | 1879 | ||
| 1763 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1880 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 1764 | @node Faces, Documentation Comments, Font Locking Preliminaries, Font Locking | 1881 | @node Faces, Doc Comments, Font Locking Preliminaries, Font Locking |
| 1765 | @comment node-name, next, previous, up | 1882 | @comment node-name, next, previous, up |
| 1766 | @section Faces | 1883 | @section Faces |
| 1767 | @cindex faces | 1884 | @cindex faces |
| @@ -1782,10 +1899,10 @@ Normal comments are fontified in @code{font-lock-comment-face}. | |||
| 1782 | @vindex font-lock-doc-face | 1899 | @vindex font-lock-doc-face |
| 1783 | @vindex font-lock-doc-string-face | 1900 | @vindex font-lock-doc-string-face |
| 1784 | @vindex font-lock-comment-face | 1901 | @vindex font-lock-comment-face |
| 1785 | Comments that are recognized as documentation (@pxref{Documentation | 1902 | Comments that are recognized as documentation (@pxref{Doc Comments}) |
| 1786 | Comments}) get @code{font-lock-doc-face} (Emacs) or | 1903 | get @code{font-lock-doc-face} (Emacs) or |
| 1787 | @code{font-lock-doc-string-face} (XEmacs) if those faces exist. If they | 1904 | @code{font-lock-doc-string-face} (XEmacs) if those faces exist. If |
| 1788 | don't then @code{font-lock-comment-face} is used. | 1905 | they don't then @code{font-lock-comment-face} is used. |
| 1789 | 1906 | ||
| 1790 | @item | 1907 | @item |
| 1791 | @vindex font-lock-string-face | 1908 | @vindex font-lock-string-face |
| @@ -1841,7 +1958,7 @@ labels. | |||
| 1841 | @vindex font-lock-builtin-face | 1958 | @vindex font-lock-builtin-face |
| 1842 | @vindex font-lock-reference-face | 1959 | @vindex font-lock-reference-face |
| 1843 | Preprocessor directives get @code{font-lock-preprocessor-face} if it | 1960 | Preprocessor directives get @code{font-lock-preprocessor-face} if it |
| 1844 | exists (i.e., XEmacs). In Emacs they get @code{font-lock-builtin-face} | 1961 | exists (i.e. XEmacs). In Emacs they get @code{font-lock-builtin-face} |
| 1845 | or @code{font-lock-reference-face}, for lack of a closer equivalent. | 1962 | or @code{font-lock-reference-face}, for lack of a closer equivalent. |
| 1846 | 1963 | ||
| 1847 | @item | 1964 | @item |
| @@ -1860,21 +1977,21 @@ since those aren't syntactic errors in themselves. | |||
| 1860 | 1977 | ||
| 1861 | 1978 | ||
| 1862 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1979 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 1863 | @node Documentation Comments, , Faces, Font Locking | 1980 | @node Doc Comments, AWK Mode Font Locking, Faces, Font Locking |
| 1864 | @comment node-name, next, previous, up | 1981 | @comment node-name, next, previous, up |
| 1865 | @section Documentation Comments | 1982 | @section Documentation Comments |
| 1866 | @cindex documentation comments | 1983 | @cindex documentation comments |
| 1867 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 1984 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 1868 | 1985 | ||
| 1869 | There are various tools to supply documentation in the source as | 1986 | There are various tools to supply documentation in the source as |
| 1870 | specially structured comments, e.g., the standard Javadoc tool in Java. | 1987 | specially structured comments, e.g. the standard Javadoc tool in Java. |
| 1871 | @ccmode{} provides an extensible mechanism to fontify such comments and | 1988 | @ccmode{} provides an extensible mechanism to fontify such comments and |
| 1872 | the special markup inside them. | 1989 | the special markup inside them. |
| 1873 | 1990 | ||
| 1874 | @defopt c-doc-comment-style | 1991 | @defopt c-doc-comment-style |
| 1875 | @vindex doc-comment-style (c-) | 1992 | @vindex doc-comment-style (c-) |
| 1876 | This is a style variable that specifies which documentation comment | 1993 | This is a style variable that specifies which documentation comment |
| 1877 | style to recognize, e.g., @code{javadoc} for Javadoc comments. | 1994 | style to recognize, e.g. @code{javadoc} for Javadoc comments. |
| 1878 | 1995 | ||
| 1879 | The value may also be a list of styles, in which case all of them are | 1996 | The value may also be a list of styles, in which case all of them are |
| 1880 | recognized simultaneously (presumably with markup cues that don't | 1997 | recognized simultaneously (presumably with markup cues that don't |
| @@ -1886,10 +2003,13 @@ looked up in the alist, and the value of that element is interpreted as | |||
| 1886 | above if found. If it isn't found then the symbol `other' is looked up | 2003 | above if found. If it isn't found then the symbol `other' is looked up |
| 1887 | and its value is used instead. | 2004 | and its value is used instead. |
| 1888 | 2005 | ||
| 2006 | The default value for @code{c-doc-comment-style} is | ||
| 2007 | @w{@code{((java-mode . javadoc) (pike-mode . autodoc) (c-mode . gtkdoc))}}. | ||
| 2008 | |||
| 1889 | Note that @ccmode{} uses this variable to set other variables that | 2009 | Note that @ccmode{} uses this variable to set other variables that |
| 1890 | handle fontification etc. That's done at mode initialization or when | 2010 | handle fontification etc. That's done at mode initialization or when |
| 1891 | you switch to a style which sets this variable. Thus, if you change it | 2011 | you switch to a style which sets this variable. Thus, if you change it |
| 1892 | in some other way, e.g., interactively in a CC Mode buffer, you will need | 2012 | in some other way, e.g. interactively in a CC Mode buffer, you will need |
| 1893 | to do @kbd{M-x java-mode} (or whatever mode you're currently using) to | 2013 | to do @kbd{M-x java-mode} (or whatever mode you're currently using) to |
| 1894 | reinitialize. | 2014 | reinitialize. |
| 1895 | 2015 | ||
| @@ -1897,7 +2017,7 @@ reinitialize. | |||
| 1897 | @findex setup-doc-comment-style (c-) | 2017 | @findex setup-doc-comment-style (c-) |
| 1898 | Note also that when @ccmode{} starts up, the other variables are | 2018 | Note also that when @ccmode{} starts up, the other variables are |
| 1899 | modified before the mode hooks are run. If you change this variable in | 2019 | modified before the mode hooks are run. If you change this variable in |
| 1900 | a mode hook, you have to call @code{c-setup-doc-comment-style} | 2020 | a mode hook, you'll have to call @code{c-setup-doc-comment-style} |
| 1901 | afterwards to redo that work. | 2021 | afterwards to redo that work. |
| 1902 | @end defopt | 2022 | @end defopt |
| 1903 | 2023 | ||
| @@ -1912,11 +2032,15 @@ Javadoc comments, the standard tool in Java. | |||
| 1912 | @item autodoc | 2032 | @item autodoc |
| 1913 | @cindex Pike autodoc markup | 2033 | @cindex Pike autodoc markup |
| 1914 | For Pike autodoc markup, the standard in Pike. | 2034 | For Pike autodoc markup, the standard in Pike. |
| 2035 | |||
| 2036 | @item gtkdoc | ||
| 2037 | @cindex GtkDoc markup | ||
| 2038 | For GtkDoc markup, widely used in the Gnome community. | ||
| 1915 | @end table | 2039 | @end table |
| 1916 | 2040 | ||
| 1917 | The above is by no means complete. If you'd like to see support for | 2041 | The above is by no means complete. If you'd like to see support for |
| 1918 | other doc comment styles, please let us know (@pxref{Mailing Lists and | 2042 | other doc comment styles, please let us know (@pxref{Mailing Lists and |
| 1919 | Submitting Bug Reports}). | 2043 | Bug Reports}). |
| 1920 | 2044 | ||
| 1921 | You can also write your own doc comment fontification support to use | 2045 | You can also write your own doc comment fontification support to use |
| 1922 | with @code{c-doc-comment-style}: Supply a variable or function | 2046 | with @code{c-doc-comment-style}: Supply a variable or function |
| @@ -1927,688 +2051,276 @@ initialization and the result is prepended. For an example, see | |||
| 1927 | @code{javadoc-font-lock-keywords} in @file{cc-fonts.el}. | 2051 | @code{javadoc-font-lock-keywords} in @file{cc-fonts.el}. |
| 1928 | 2052 | ||
| 1929 | If you add support for another doc comment style, please consider | 2053 | If you add support for another doc comment style, please consider |
| 1930 | contributing it --- send a note to @email{bug-cc-mode@@gnu.org}. | 2054 | contributing it - send a note to @email{bug-cc-mode@@gnu.org}. |
| 1931 | 2055 | ||
| 1932 | 2056 | ||
| 1933 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 2057 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 1934 | @node Commands, Customizing Indentation, Font Locking, Top | 2058 | @node AWK Mode Font Locking, , Doc Comments, Font Locking |
| 1935 | @comment node-name, next, previous, up | 2059 | @comment node-name, next, previous, up |
| 1936 | @chapter Commands | 2060 | @section AWK Mode Font Locking |
| 1937 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 2061 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 1938 | |||
| 1939 | @menu | ||
| 1940 | * Indentation Commands:: | ||
| 1941 | * Movement Commands:: | ||
| 1942 | * Other Commands:: | ||
| 1943 | @end menu | ||
| 1944 | |||
| 1945 | See also @ref{Text Filling and Line Breaking} and @ref{Macro Handling}, | ||
| 1946 | for commands concerning those bits. | ||
| 1947 | |||
| 1948 | |||
| 1949 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 1950 | @node Indentation Commands, Movement Commands, , Commands | ||
| 1951 | @comment node-name, next, previous,up | ||
| 1952 | @section Indentation Commands | ||
| 1953 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 1954 | |||
| 1955 | The following list of commands reindent C constructs. Note that when | ||
| 1956 | you change your coding style, either interactively or through some other | ||
| 1957 | means, your file does @emph{not} automatically get reindented. You | ||
| 1958 | will need to execute one of the following commands to see the effects of | ||
| 1959 | your changes. | ||
| 1960 | |||
| 1961 | @cindex GNU indent program | ||
| 1962 | Also, variables like @code{c-hanging-*} and @code{c-cleanup-list} | ||
| 1963 | only affect how on-the-fly code is formatted. Changing the | ||
| 1964 | ``hanginess'' of a brace and then reindenting, will not move the brace | ||
| 1965 | to a different line. For this, you're better off getting an external | ||
| 1966 | program like GNU @code{indent}, which will rearrange brace location, | ||
| 1967 | among other things. | ||
| 1968 | 2062 | ||
| 1969 | Reindenting large sections of code can take a long time. When | 2063 | The general appearance of font-locking in AWK mode is much like in any |
| 1970 | @ccmode{} reindents a region of code, it is essentially equivalent to | 2064 | other programming mode. @xref{Faces For Font Lock,,,elisp, GNU Emacs |
| 1971 | hitting @kbd{TAB} on every line of the region. | 2065 | Lisp Reference Manual}. |
| 1972 | 2066 | ||
| 1973 | These commands are useful when indenting code: | 2067 | The following faces are, however, used in a non-standard fashion in |
| 2068 | AWK mode: | ||
| 1974 | 2069 | ||
| 1975 | @table @asis | 2070 | @table @asis |
| 1976 | @item @kbd{TAB} (@code{c-indent-command}) | 2071 | @item @code{font-lock-variable-name-face} |
| 1977 | @kindex TAB | 2072 | This face was intended for variable declarations. Since variables are |
| 1978 | @findex c-indent-command | 2073 | not declared in AWK, this face is used instead for AWK system |
| 1979 | @findex indent-command (c-) | 2074 | variables (such as @code{NF}) and ``Special File Names'' (such as |
| 1980 | Indents the current line. The actual behavior is controlled by several | 2075 | @code{"/dev/stderr"}). |
| 1981 | variables, described below. See @code{c-tab-always-indent}, | ||
| 1982 | @code{c-insert-tab-function}, and @code{indent-tabs-mode}. With a | ||
| 1983 | numeric argument, this command rigidly indents the region, preserving | ||
| 1984 | the relative indentation among the lines. | ||
| 1985 | |||
| 1986 | @item @kbd{C-M-q} (@code{c-indent-exp}) | ||
| 1987 | @kindex C-M-q | ||
| 1988 | @findex c-indent-exp | ||
| 1989 | @findex indent-exp (c-) | ||
| 1990 | Indent an entire balanced brace or parenthesis expression. Note that | ||
| 1991 | point must be on the opening brace or parenthesis of the expression you | ||
| 1992 | want to indent. | ||
| 1993 | 2076 | ||
| 1994 | @item @kbd{C-c C-q} (@code{c-indent-defun}) | 2077 | @item @code{font-lock-builtin-face} (Emacs)/@code{font-lock-preprocessor-face} (XEmacs) |
| 1995 | @kindex C-c C-q | 2078 | This face is normally used for preprocessor directives in @ccmode{}. |
| 1996 | @findex c-indent-defun | 2079 | There are no such things in AWK, so this face is used instead for |
| 1997 | @findex indent-defun (c-) | 2080 | standard functions (such as @code{match}). |
| 1998 | Indents the entire top-level function, class or macro definition | ||
| 1999 | encompassing point. It leaves point unchanged. This function can't be | ||
| 2000 | used to reindent a nested brace construct, such as a nested class or | ||
| 2001 | function, or a Java method. The top-level construct being reindented | ||
| 2002 | must be complete, i.e., it must have both a beginning brace and an ending | ||
| 2003 | brace. | ||
| 2004 | 2081 | ||
| 2005 | @item @kbd{C-M-\} (@code{indent-region}) | 2082 | @item @code{font-lock-string-face} |
| 2006 | @kindex C-M-\ | 2083 | As well as being used for strings, including localizable strings, |
| 2007 | @findex indent-region | 2084 | (delimited by @samp{"} and @samp{_"}), this face is also used for AWK |
| 2008 | Indents an arbitrary region of code. This is a standard Emacs command, | 2085 | regular expressions (delimited by @samp{/}). |
| 2009 | tailored for C code in a @ccmode{} buffer. Note, of course, that point | ||
| 2010 | and mark must delineate the region you want to indent. | ||
| 2011 | 2086 | ||
| 2012 | @item @kbd{M-;} (@code{indent-for-comment}) | 2087 | @item @code{font-lock-warning-face} (Emacs)/@code{c-invalid-face} (XEmacs) |
| 2013 | @kindex M-; | 2088 | This face highlights the following syntactically invalid AWK |
| 2014 | @findex indent-for-comment | 2089 | constructs: |
| 2015 | Insert a comment at the end of the current line, if none is there already. | ||
| 2016 | Then reindent the comment according to the variables | ||
| 2017 | @code{c-indent-comment-alist}, @code{c-indent-comments-syntactically-p} | ||
| 2018 | and @code{comment-column}. Then position the point after the comment | ||
| 2019 | starter. This is a standard Emacs command, but @ccmode{} enhances it a | ||
| 2020 | bit with two variables: | ||
| 2021 | 2090 | ||
| 2022 | @defopt c-indent-comment-alist | 2091 | @itemize @bullet |
| 2023 | @vindex indent-comment-alist (c-) | 2092 | @item |
| 2024 | @vindex comment-column | 2093 | An unterminated string or regular expression. Here the opening |
| 2025 | This style variable allows you to control which column @kbd{M-;} | 2094 | delimiter (@samp{"} or @samp{/} or @samp{_"}) is displayed in |
| 2026 | indents the comment to, depending on the preceding code and the | 2095 | @code{font-lock-warning-face}. This is most noticeable when typing in a |
| 2027 | indentation of a similar comment on the preceding line, if there is | 2096 | new string/regular expression into a buffer, when the warning-face |
| 2028 | any. It is an association list that maps different types of lines to | 2097 | serves as a continual reminder to terminate the construct. |
| 2029 | actions describing how they should be handled. If a certain line type | ||
| 2030 | isn't present on the list then the line is indented to the column | ||
| 2031 | specified by @code{comment-column}. See the documentation string for | ||
| 2032 | @code{c-indent-comment-alist} for a full description of the available | ||
| 2033 | line types and actions (use @kbd{C-h v c-indent-comment-alist}). | ||
| 2034 | @end defopt | ||
| 2035 | 2098 | ||
| 2036 | @defopt c-indent-comments-syntactically-p | 2099 | AWK mode fontifies unterminated strings/regular expressions |
| 2037 | @vindex indent-comments-syntactically-p (c-) | 2100 | differently from other modes: Only the text up to the end of the line |
| 2038 | Normally, when this variable is @code{nil}, @kbd{M-;} will indent | 2101 | is fontified as a string (escaped newlines being handled correctly), |
| 2039 | comment-only lines according to @code{c-indent-comment-alist}, just as | 2102 | rather than the text up to the next string quote. |
| 2040 | it does with lines where other code precede the comments. However, if | ||
| 2041 | you want it to act just like @kbd{TAB} for comment-only lines you can | ||
| 2042 | get that by setting @code{c-indent-comments-syntactically-p} to | ||
| 2043 | non-@code{nil}. | ||
| 2044 | 2103 | ||
| 2045 | If @code{c-indent-comments-syntactically-p} is non-@code{nil} then | 2104 | @item |
| 2046 | @code{c-indent-comment-alist} won't be consulted at all for comment-only | 2105 | A space between the function name and opening parenthesis when calling |
| 2047 | lines. | 2106 | a user function. The last character of the function name and the |
| 2048 | @end defopt | 2107 | opening parenthesis are highlighted. This font-locking rule will |
| 2108 | spuriously highlight a valid concatenation expression where an | ||
| 2109 | identifier precedes a parenthesised expression. Unfortunately. | ||
| 2049 | 2110 | ||
| 2050 | @item @kbd{C-M-h} (@code{c-mark-function}) | 2111 | @item |
| 2051 | @kindex C-M-h | 2112 | Whitespace following the @samp{\} in what otherwise looks like an |
| 2052 | @findex c-mark-function | 2113 | escaped newline. The @samp{\} is highlighted. |
| 2053 | @findex mark-function (c-) | 2114 | @end itemize |
| 2054 | While not strictly an indentation command, this is useful for marking | ||
| 2055 | the current top-level function or class definition as the current | ||
| 2056 | region. As with @code{c-indent-defun}, this command operates on | ||
| 2057 | top-level constructs, and can't be used to mark say, a Java method. | ||
| 2058 | @end table | 2115 | @end table |
| 2059 | 2116 | ||
| 2060 | These variables are also useful when indenting code: | ||
| 2061 | |||
| 2062 | @defopt c-tab-always-indent | ||
| 2063 | @vindex tab-always-indent (c-) | ||
| 2064 | @kindex TAB | ||
| 2065 | @cindex literal | ||
| 2066 | This variable controls how @kbd{TAB} (@code{c-indent-command}) | ||
| 2067 | operates. When it is @code{t}, @kbd{TAB} always indents the current | ||
| 2068 | line. When it is @code{nil}, the line is indented only if point is at | ||
| 2069 | the left margin, or on or before the first non-whitespace character on | ||
| 2070 | the line, otherwise some whitespace is inserted. If this variable is | ||
| 2071 | some other value (not @code{nil} or @code{t}), then some whitespace is | ||
| 2072 | inserted only within strings and comments (literals), but the line is | ||
| 2073 | always reindented. | ||
| 2074 | @end defopt | ||
| 2075 | 2117 | ||
| 2076 | @defopt c-insert-tab-function | 2118 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 2077 | @vindex insert-tab-function (c-) | 2119 | @node Config Basics, Custom Filling and Breaking, Font Locking, Top |
| 2078 | @findex tab-to-tab-stop | 2120 | @comment node-name, next, previous, up |
| 2079 | When ``some whitespace'' is inserted as described above, what actually | 2121 | @chapter Configuration Basics |
| 2080 | happens is that the function stored in @code{c-insert-tab-function} is | ||
| 2081 | called. Normally, this just inserts a real tab character, or the | ||
| 2082 | equivalent number of spaces, depending on @code{indent-tabs-mode}. | ||
| 2083 | Some people, however, set @code{c-insert-tab-function} to | ||
| 2084 | @code{tab-to-tab-stop} so as to get hard tab stops when indenting. | ||
| 2085 | @end defopt | ||
| 2086 | |||
| 2087 | @defopt indent-tabs-mode | ||
| 2088 | This is a standard Emacs variable that controls how line indentation | ||
| 2089 | is composed. When it's non-@code{nil}, tabs can be used in a line's | ||
| 2090 | indentation, otherwise only spaces can be used. | ||
| 2091 | @end defopt | ||
| 2092 | |||
| 2093 | @defopt c-progress-interval | ||
| 2094 | @vindex progress-interval (c-) | ||
| 2095 | When indenting large regions of code, this variable controls how often a | ||
| 2096 | progress message is displayed. Set this variable to @code{nil} to | ||
| 2097 | inhibit the progress messages, or set it to an integer which is how | ||
| 2098 | often (in seconds) progress messages are to be displayed. | ||
| 2099 | @end defopt | ||
| 2100 | |||
| 2101 | |||
| 2102 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 2103 | @node Movement Commands, Other Commands, Indentation Commands, Commands | ||
| 2104 | @comment node-name, next, previous, up | ||
| 2105 | @section Movement Commands | ||
| 2106 | @cindex movement | ||
| 2107 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 2122 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 2108 | 2123 | ||
| 2109 | @ccmode{} contains some useful commands for moving around in C | 2124 | @cindex Emacs Initiliazation File |
| 2110 | code. | 2125 | @cindex Configuration |
| 2111 | 2126 | You configure @ccmode{} by setting Lisp variables and calling (and | |
| 2127 | perhaps writing) Lisp functions@footnote{DON'T PANIC!!! This isn't | ||
| 2128 | difficult.}, which is usually done by adding code to an Emacs | ||
| 2129 | initialization file. This file might be @file{site-start.el} or | ||
| 2130 | @file{.emacs} or @file{init.el} or @file{default.el} or perhaps some | ||
| 2131 | other file. @xref{Init File,,,@emacsman{}, @emacsmantitle{}}. For | ||
| 2132 | the sake of conciseness, we just call this file ``your @file{.emacs}'' | ||
| 2133 | throughout the rest of the manual. | ||
| 2134 | |||
| 2135 | Several of these variables (currently 16), are known collectively as | ||
| 2136 | @dfn{style variables}. @ccmode{} provides a special mechanism, known | ||
| 2137 | as @dfn{styles} to make it easier to set these variables as a group, | ||
| 2138 | to ``inherit'' settings from one style into another, and so on. Style | ||
| 2139 | variables remain ordinary Lisp variables, whose values can be read and | ||
| 2140 | changed independently of the style system. @xref{Style Variables}. | ||
| 2141 | |||
| 2142 | There are several ways you can write the code, depending on the | ||
| 2143 | precise effect you want---they are described further down on this page. | ||
| 2144 | If you are new to @ccmode{}, we suggest you begin with the simplest | ||
| 2145 | method, ``Top-level commands or the customization interface''. | ||
| 2146 | |||
| 2147 | If you make conflicting settings in several of these ways, the way | ||
| 2148 | that takes precedence is the one that appears latest in this list: | ||
| 2149 | @itemize @asis | ||
| 2150 | @item | ||
| 2112 | @table @asis | 2151 | @table @asis |
| 2113 | @item @kbd{M-x c-beginning-of-defun} | 2152 | @item Style |
| 2114 | @findex c-beginning-of-defun | 2153 | @itemx Top-level command or ``customization interface'' |
| 2115 | @findex beginning-of-defun (c-) | 2154 | @itemx Hook |
| 2116 | @findex beginning-of-defun | 2155 | @itemx File Style |
| 2117 | Move point back to the least-enclosing brace. This function is | ||
| 2118 | analogous to the Emacs built-in command @code{beginning-of-defun}, | ||
| 2119 | except it eliminates the constraint that the top-level opening brace | ||
| 2120 | must be in column zero. See @code{beginning-of-defun} for more | ||
| 2121 | information. | ||
| 2122 | |||
| 2123 | Depending on the coding style being used, you might prefer | ||
| 2124 | @code{c-beginning-of-defun} to @code{beginning-of-defun}. If so, | ||
| 2125 | consider binding @kbd{C-M-a} to the former instead. For backwards | ||
| 2126 | compatibility reasons, the default binding remains in effect. | ||
| 2127 | |||
| 2128 | In AWK mode, a defun doesn't necessarily have braces at all. AWK Mode | ||
| 2129 | therefore has its own version of this function which is bound by | ||
| 2130 | default to @kbd{C-M-a}. You can thus chose freely which function to | ||
| 2131 | bind to @kbd{C-M-a} for the other modes without worrying about AWK | ||
| 2132 | buffers. @xref{AWK Mode Defuns}. | ||
| 2133 | |||
| 2134 | @item @kbd{M-x c-end-of-defun} | ||
| 2135 | @findex c-end-of-defun | ||
| 2136 | @findex end-of-defun (c-) | ||
| 2137 | @findex end-of-defun | ||
| 2138 | Moves point to the end of the current top-level definition. This | ||
| 2139 | function is analogous to the Emacs built-in command @code{end-of-defun}, | ||
| 2140 | except it eliminates the constraint that the top-level opening brace of | ||
| 2141 | the defun must be in column zero. See @code{end-of-defun} for more | ||
| 2142 | information. | ||
| 2143 | |||
| 2144 | Depending on the coding style being used, you might prefer | ||
| 2145 | @code{c-end-of-defun} to @code{end-of-defun}. If so, | ||
| 2146 | consider binding @kbd{C-M-e} to the former instead. For backwards | ||
| 2147 | compatibility reasons, the default binding remains in effect. | ||
| 2148 | |||
| 2149 | In AWK Mode, a defun doesn't necessarily have braces at all. AWK Mode | ||
| 2150 | therefore has its own version of this function which is bound by | ||
| 2151 | default to @kbd{C-M-e}. You can thus chose freely which function to | ||
| 2152 | bind to @kbd{C-M-e} for the other modes without worrying about AWK | ||
| 2153 | buffers. @ref{AWK Mode Defuns}. | ||
| 2154 | |||
| 2155 | @item @kbd{C-c C-u} (@code{c-up-conditional}) | ||
| 2156 | @kindex C-c C-u | ||
| 2157 | @findex c-up-conditional | ||
| 2158 | @findex up-conditional (c-) | ||
| 2159 | Move point back to the containing preprocessor conditional, leaving the | ||
| 2160 | mark behind. A prefix argument acts as a repeat count. With a negative | ||
| 2161 | argument, move point forward to the end of the containing | ||
| 2162 | preprocessor conditional. | ||
| 2163 | |||
| 2164 | @samp{#elif} is treated like @samp{#else} followed by @samp{#if}, so the | ||
| 2165 | function stops at them when going backward, but not when going forward. | ||
| 2166 | |||
| 2167 | @item @kbd{M-x c-up-conditional-with-else} | ||
| 2168 | @findex c-up-conditional-with-else | ||
| 2169 | @findex up-conditional-with-else (c-) | ||
| 2170 | A variety of @code{c-up-conditional} that also stops at @samp{#else} | ||
| 2171 | lines. Normally those lines are ignored. | ||
| 2172 | |||
| 2173 | @item @kbd{M-x c-down-conditional} | ||
| 2174 | @findex c-down-conditional | ||
| 2175 | @findex down-conditional (c-) | ||
| 2176 | Move point forward into the next nested preprocessor conditional, | ||
| 2177 | leaving the mark behind. A prefix argument acts as a repeat count. | ||
| 2178 | With a negative argument, move point backward into the previous | ||
| 2179 | nested preprocessor conditional. | ||
| 2180 | |||
| 2181 | @samp{#elif} is treated like @samp{#else} followed by @samp{#if}, so the | ||
| 2182 | function stops at them when going forward, but not when going backward. | ||
| 2183 | |||
| 2184 | @item @kbd{M-x c-down-conditional-with-else} | ||
| 2185 | @findex c-down-conditional-with-else | ||
| 2186 | @findex down-conditional-with-else (c-) | ||
| 2187 | A variety of @code{c-down-conditional} that also stops at @samp{#else} | ||
| 2188 | lines. Normally those lines are ignored. | ||
| 2189 | |||
| 2190 | @item @kbd{C-c C-p} (@code{c-backward-conditional}) | ||
| 2191 | @kindex C-c C-p | ||
| 2192 | @findex c-backward-conditional | ||
| 2193 | @findex backward-conditional (c-) | ||
| 2194 | Move point back over a preprocessor conditional, leaving the mark | ||
| 2195 | behind. A prefix argument acts as a repeat count. With a negative | ||
| 2196 | argument, move forward. | ||
| 2197 | |||
| 2198 | @item @kbd{C-c C-n} (@code{c-forward-conditional}) | ||
| 2199 | @kindex C-c C-n | ||
| 2200 | @findex c-forward-conditional | ||
| 2201 | @findex forward-conditional (c-) | ||
| 2202 | Move point forward across a preprocessor conditional, leaving the mark | ||
| 2203 | behind. A prefix argument acts as a repeat count. With a negative | ||
| 2204 | argument, move backward. | ||
| 2205 | |||
| 2206 | @item @kbd{M-a} (@code{c-beginning-of-statement}) | ||
| 2207 | @kindex M-a | ||
| 2208 | @findex c-beginning-of-statement | ||
| 2209 | @findex beginning-of-statement (c-) | ||
| 2210 | Move point to the beginning of the innermost C statement. If point is | ||
| 2211 | already at the beginning of a statement, move to the beginning of the | ||
| 2212 | closest preceding statement, even if that means moving into a block (you | ||
| 2213 | can use @kbd{C-M-b} to move over a balanced block). With prefix | ||
| 2214 | argument @var{n}, move back @var{n} @minus{} 1 statements. | ||
| 2215 | |||
| 2216 | If point is within or next to a comment or a string which spans more | ||
| 2217 | than one line, this command moves by sentences instead of statements. | ||
| 2218 | |||
| 2219 | When called from a program, this function takes three optional | ||
| 2220 | arguments: the repetition count, a buffer position limit which is the | ||
| 2221 | farthest back to search for the syntactic context, and a flag saying | ||
| 2222 | whether to do sentence motion in or near comments and multiline strings. | ||
| 2223 | |||
| 2224 | @item @kbd{M-e} (@code{c-end-of-statement}) | ||
| 2225 | @kindex M-e | ||
| 2226 | @findex c-end-of-statement | ||
| 2227 | @findex end-of-statement (c-) | ||
| 2228 | Move point to the end of the innermost C statement. If point is at the | ||
| 2229 | end of a statement, move to the end of the next statement, even if it's | ||
| 2230 | inside a nested block (use @kbd{C-M-f} to move to the other side of the | ||
| 2231 | block). With prefix argument @var{n}, move forward @var{n} @minus{} 1 | ||
| 2232 | statements. | ||
| 2233 | |||
| 2234 | If point is within or next to a comment or a string which spans more | ||
| 2235 | than one line, this command moves by sentences instead of statements. | ||
| 2236 | |||
| 2237 | When called from a program, this function takes three optional | ||
| 2238 | arguments: the repetition count, a buffer position limit which is the | ||
| 2239 | farthest back to search for the syntactic context, and a flag saying | ||
| 2240 | whether to do sentence motion in or near comments and multiline strings. | ||
| 2241 | |||
| 2242 | @item @kbd{M-x c-forward-into-nomenclature} | ||
| 2243 | @findex c-forward-into-nomenclature | ||
| 2244 | @findex forward-into-nomenclature (c-) | ||
| 2245 | A popular programming style, especially for object-oriented languages | ||
| 2246 | such as C++ is to write symbols in a mixed case format, where the first | ||
| 2247 | letter of each word is capitalized, and not separated by underscores. | ||
| 2248 | e.g., @samp{SymbolsWithMixedCaseAndNoUnderlines}. | ||
| 2249 | |||
| 2250 | This command moves point forward to next capitalized word. With prefix | ||
| 2251 | argument @var{n}, move @var{n} times. | ||
| 2252 | |||
| 2253 | @item @kbd{M-x c-backward-into-nomenclature} | ||
| 2254 | @findex c-backward-into-nomenclature | ||
| 2255 | @findex backward-into-nomenclature (c-) | ||
| 2256 | Move point backward to beginning of the next capitalized | ||
| 2257 | word. With prefix argument @var{n}, move @var{n} times. If | ||
| 2258 | @var{n} is negative, move forward. | ||
| 2259 | @end table | 2156 | @end table |
| 2157 | @end itemize | ||
| 2260 | 2158 | ||
| 2261 | 2159 | Here is a summary of the different ways of writing your configuration | |
| 2262 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 2160 | settings: |
| 2263 | @node Other Commands, , Movement Commands, Commands | ||
| 2264 | @comment node-name, next, previous, up | ||
| 2265 | @section Other Commands | ||
| 2266 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 2267 | |||
| 2268 | Here are the various other commands that didn't fit anywhere else: | ||
| 2269 | 2161 | ||
| 2270 | @table @asis | 2162 | @table @asis |
| 2271 | @item @kbd{C-c :} (@code{c-scope-operator}) | 2163 | @item Top-level commands or the ``customization interface'' |
| 2272 | @kindex C-c : | 2164 | Most simply, you can write @code{setq} and similar commands at the top |
| 2273 | @findex c-scope-operator | 2165 | level of your @file{.emacs} file. When you load a @ccmode{} buffer, |
| 2274 | @findex scope-operator (c-) | 2166 | it initializes its configuration from these global values (at least, |
| 2275 | In C++, it is also sometimes desirable to insert the double-colon scope | 2167 | for those settings you have given values to), so it makes sense to |
| 2276 | operator without performing the electric behavior of colon insertion. | 2168 | have these @code{setq} commands run @emph{before} @ccmode{} is first |
| 2277 | @kbd{C-c :} does just this. | 2169 | initialized---in particular, before any call to @code{desktop-read} |
| 2278 | @end table | 2170 | (@pxref{Saving Emacs Sessions,,, emacs, GNU Emacs Manual}). For |
| 2279 | 2171 | example, you might set c-basic-offset thus: | |
| 2280 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 2281 | @node Customizing Indentation, Syntactic Symbols, Commands, Top | ||
| 2282 | @comment node-name, next, previous, up | ||
| 2283 | @chapter Customizing Indentation | ||
| 2284 | @cindex customization, indentation | ||
| 2285 | @cindex indentation | ||
| 2286 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 2287 | |||
| 2288 | The context sensitive indentation is mainly controlled by the variable | ||
| 2289 | @code{c-offsets-alist}: | ||
| 2290 | |||
| 2291 | @defopt c-offsets-alist | ||
| 2292 | @vindex offsets-alist (c-) | ||
| 2293 | This special style variable contains the mappings between syntactic | ||
| 2294 | symbols and the offsets to apply for those symbols. It's set at mode | ||
| 2295 | initialization from a @emph{style} you may specify. Styles are | ||
| 2296 | groupings of syntactic symbol offsets and other style variable values. | ||
| 2297 | Most likely, you'll find that one of the predefined styles will suit | ||
| 2298 | your needs. @xref{Styles}, for an explanation of how to set up named | ||
| 2299 | styles. | ||
| 2300 | |||
| 2301 | Only syntactic symbols not already bound on @code{c-offsets-alist} will | ||
| 2302 | be set from styles. This means that any association you set on it, be | ||
| 2303 | it before or after mode initialization, will not be changed. The | ||
| 2304 | @code{c-offsets-alist} variable may therefore be used from e.g., the | ||
| 2305 | Customization interface@footnote{Available in Emacs 20 and later, and | ||
| 2306 | XEmacs 19.15 and later.} to easily change indentation offsets without | ||
| 2307 | having to bother about styles. Initially @code{c-offsets-alist} is | ||
| 2308 | empty, so that all syntactic symbols are set by the style system. | ||
| 2309 | |||
| 2310 | The offset associated with any particular syntactic symbol can be an | ||
| 2311 | integer, a function or lambda expression, a variable name, a vector, a | ||
| 2312 | list, or one of the following special symbols: @code{+}, @code{-}, | ||
| 2313 | @code{++}, @code{--}, @code{*}, or @code{/}. The meaning of these | ||
| 2314 | values are described in detail below. | ||
| 2315 | @end defopt | ||
| 2316 | |||
| 2317 | The special symbols describe an offset in multiples of the value of | ||
| 2318 | @code{c-basic-offset}: | ||
| 2319 | |||
| 2320 | @defopt c-basic-offset | ||
| 2321 | @vindex basic-offset (c-) | ||
| 2322 | Style variable that holds the basic offset between indentation levels. | ||
| 2323 | @end defopt | ||
| 2324 | |||
| 2325 | By defining a style's indentation in terms of @code{c-basic-offset}, | ||
| 2326 | you can change the amount of whitespace given to an indentation level | ||
| 2327 | while maintaining the same basic shape of your code. Here are the | ||
| 2328 | values that the special symbols correspond to: | ||
| 2329 | |||
| 2330 | @table @code | ||
| 2331 | @item + | ||
| 2332 | @code{c-basic-offset} times 1 | ||
| 2333 | @item - | ||
| 2334 | @code{c-basic-offset} times -1 | ||
| 2335 | @item ++ | ||
| 2336 | @code{c-basic-offset} times 2 | ||
| 2337 | @item -- | ||
| 2338 | @code{c-basic-offset} times -2 | ||
| 2339 | @item * | ||
| 2340 | @code{c-basic-offset} times 0.5 | ||
| 2341 | @item / | ||
| 2342 | @code{c-basic-offset} times -0.5 | ||
| 2343 | @end table | ||
| 2344 | |||
| 2345 | @cindex indentation functions | ||
| 2346 | |||
| 2347 | When a function is used as offset, it's called an @dfn{indentation | ||
| 2348 | function}. Such functions are useful when more context than just the | ||
| 2349 | syntactic symbol is needed to get the desired indentation. | ||
| 2350 | @xref{Indentation Functions}, and @ref{Custom Indentation Functions}, | ||
| 2351 | for details about them. | ||
| 2352 | |||
| 2353 | If the offset is a vector, its first element sets the absolute | ||
| 2354 | indentation column, which will override any previous relative | ||
| 2355 | indentation. It won't override additional relative indentation for | ||
| 2356 | nested constructs, though. | ||
| 2357 | |||
| 2358 | @vindex c-strict-syntax-p | ||
| 2359 | @vindex strict-syntax-p (c-) | ||
| 2360 | The offset can also be a list, in which case it is evaluated recursively | ||
| 2361 | using the semantics described above. The first element of the list that | ||
| 2362 | returns a non-@code{nil} value succeeds and the evaluation stops. If | ||
| 2363 | none of the list elements return a non-@code{nil} value, then an offset | ||
| 2364 | of 0 (zero) is used@footnote{There is however a variable | ||
| 2365 | @code{c-strict-syntax-p} that, when set to non-@code{nil}, will cause an | ||
| 2366 | error to be signaled in that case. It's now considered obsolete since | ||
| 2367 | it doesn't work well with some of the alignment functions that now | ||
| 2368 | returns @code{nil} instead of zero to be more usable in lists. You | ||
| 2369 | should therefore leave @code{c-strict-syntax-p} set to @code{nil}.}. | ||
| 2370 | |||
| 2371 | So, for example, because most of the default offsets are defined in | ||
| 2372 | terms of @code{+}, @code{-}, and @code{0}, if you like the general | ||
| 2373 | indentation style, but you use 4 spaces instead of 2 spaces per level, | ||
| 2374 | you can probably achieve your style just by changing | ||
| 2375 | @code{c-basic-offset} like so@footnote{You can try this interactively in | ||
| 2376 | a C buffer by typing the text that appears in italics.}: | ||
| 2377 | 2172 | ||
| 2378 | @example | 2173 | @example |
| 2379 | @emph{M-x set-variable RET} | 2174 | (setq c-basic-offset 4) |
| 2380 | Set variable: @emph{c-basic-offset RET} | ||
| 2381 | Set c-basic-offset to value: @emph{4 RET} | ||
| 2382 | @end example | ||
| 2383 | |||
| 2384 | @noindent | ||
| 2385 | This would change | ||
| 2386 | |||
| 2387 | @example | ||
| 2388 | @group | ||
| 2389 | int add( int val, int incr, int doit ) | ||
| 2390 | @{ | ||
| 2391 | if( doit ) | ||
| 2392 | @{ | ||
| 2393 | return( val + incr ); | ||
| 2394 | @} | ||
| 2395 | return( val ); | ||
| 2396 | @} | ||
| 2397 | @end group | ||
| 2398 | @end example | 2175 | @end example |
| 2399 | 2176 | ||
| 2400 | @noindent | 2177 | You can use the more user friendly Customization interface instead, |
| 2401 | to | 2178 | but this manual does not cover in detail how that works. To do this, |
| 2179 | start by typing @kbd{M-x customize-group @key{RET} c @key{RET}}. | ||
| 2180 | @xref{Easy Customization,,,@emacsman{}, @emacsmantitle{}}. | ||
| 2181 | @c The following note really belongs in the Emacs manual. | ||
| 2182 | Emacs normally writes the customizations at the end of your | ||
| 2183 | @file{.emacs} file. If you use @code{desktop-read}, you should edit | ||
| 2184 | your @file{.emacs} to place the call to @code{desktop-read} @emph{after} | ||
| 2185 | the customizations. | ||
| 2186 | |||
| 2187 | The first initialization of @ccmode{} puts a snapshot of the | ||
| 2188 | configuration settings into the special style @code{user}. | ||
| 2189 | @xref{Built-in Styles}. | ||
| 2190 | |||
| 2191 | For basic use of Emacs, either of these ways of configuring is | ||
| 2192 | adequate. However, the settings are then the same in all @ccmode{} | ||
| 2193 | buffers and it can be clumsy to communicate them between programmers. | ||
| 2194 | For more flexibility, you'll want to use one (or both) of @ccmode{}'s | ||
| 2195 | more sophisticated facilities, hooks and styles. | ||
| 2196 | |||
| 2197 | @item Hooks | ||
| 2198 | An Emacs @dfn{hook} is a place to put Lisp functions that you want | ||
| 2199 | Emacs to execute later in specific circumstances. | ||
| 2200 | @xref{Hooks,,,@lispref{}, @lispreftitle{}}. @ccmode{} supplies a main | ||
| 2201 | hook and a language-specific hook for each language it supports - any | ||
| 2202 | functions you put onto these hooks get executed as the last part of a | ||
| 2203 | buffer's initialization. Typically you put most of your customization | ||
| 2204 | within the main hook, and use the language-specific hooks to vary the | ||
| 2205 | customization settings between language modes. For example, if you | ||
| 2206 | wanted different (non-standard) values of @code{c-basic-offset} in C | ||
| 2207 | Mode and Java Mode buffers, you could do it like this: | ||
| 2402 | 2208 | ||
| 2403 | @example | 2209 | @example |
| 2404 | @group | 2210 | @group |
| 2405 | int add( int val, int incr, int doit ) | 2211 | (defun my-c-mode-hook () |
| 2406 | @{ | 2212 | (setq c-basic-offset 3)) |
| 2407 | if( doit ) | 2213 | (add-hook 'c-mode-hook 'my-c-mode-hook) |
| 2408 | @{ | ||
| 2409 | return( val + incr ); | ||
| 2410 | @} | ||
| 2411 | return( val ); | ||
| 2412 | @} | ||
| 2413 | @end group | ||
| 2414 | @end example | ||
| 2415 | |||
| 2416 | To change indentation styles more radically, you will want to change the | ||
| 2417 | offsets associated with other syntactic symbols. First, I'll show you | ||
| 2418 | how to do that interactively, then I'll describe how to make changes to | ||
| 2419 | your @file{.emacs} file so that your changes are more permanent. | ||
| 2420 | |||
| 2421 | @menu | ||
| 2422 | * Interactive Customization:: | ||
| 2423 | * Permanent Customization:: | ||
| 2424 | * Hooks:: | ||
| 2425 | * Styles:: | ||
| 2426 | * Advanced Customizations:: | ||
| 2427 | @end menu | ||
| 2428 | |||
| 2429 | |||
| 2430 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 2431 | @node Interactive Customization, Permanent Customization, , Customizing Indentation | ||
| 2432 | @comment node-name, next, previous, up | ||
| 2433 | @section Interactive Customization | ||
| 2434 | @cindex customization, interactive | ||
| 2435 | @cindex interactive customization | ||
| 2436 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 2437 | 2214 | ||
| 2438 | As an example of how to customize indentation, let's change the | 2215 | (defun my-java-mode-hook () |
| 2439 | style of this example@footnote{In this and subsequent examples, the | 2216 | (setq c-basic-offset 6)) |
| 2440 | original code is formatted using the @samp{gnu} style unless otherwise | 2217 | (add-hook 'java-mode-hook 'my-java-mode-hook) |
| 2441 | indicated. @xref{Styles}.}: | ||
| 2442 | |||
| 2443 | @example | ||
| 2444 | @group | ||
| 2445 | 1: int add( int val, int incr, int doit ) | ||
| 2446 | 2: @{ | ||
| 2447 | 3: if( doit ) | ||
| 2448 | 4: @{ | ||
| 2449 | 5: return( val + incr ); | ||
| 2450 | 6: @} | ||
| 2451 | 7: return( val ); | ||
| 2452 | 8: @} | ||
| 2453 | @end group | 2218 | @end group |
| 2454 | @end example | 2219 | @end example |
| 2455 | 2220 | ||
| 2456 | @noindent | 2221 | See @ref{CC Hooks} for more details on the use of @ccmode{} hooks. |
| 2457 | to: | ||
| 2458 | 2222 | ||
| 2459 | @example | 2223 | @item Styles |
| 2460 | @group | 2224 | A @ccmode{} @dfn{style} is a coherent collection of customizations |
| 2461 | 1: int add( int val, int incr, int doit ) | 2225 | with a name. At any time, exactly one style is active in each |
| 2462 | 2: @{ | 2226 | @ccmode{} buffer, either the one you have selected or a default. |
| 2463 | 3: if( doit ) | 2227 | @ccmode{} is delivered with several existing styles. Additionally, |
| 2464 | 4: @{ | 2228 | you can create your own styles, possibly based on these existing |
| 2465 | 5: return( val + incr ); | 2229 | styles. If you worked in a programming team called the ``Free |
| 2466 | 6: @} | 2230 | Group'', which had its own coding standards, you might well have this |
| 2467 | 7: return( val ); | 2231 | in your @file{.emacs} file: |
| 2468 | 8: @} | ||
| 2469 | @end group | ||
| 2470 | @end example | ||
| 2471 | |||
| 2472 | In other words, we want to change the indentation of braces that open a | ||
| 2473 | block following a condition so that the braces line up under the | ||
| 2474 | conditional, instead of being indented. Notice that the construct we | ||
| 2475 | want to change starts on line 4. To change the indentation of a line, | ||
| 2476 | we need to see which syntactic components affect the offset calculations | ||
| 2477 | for that line. Hitting @kbd{C-c C-s} on line 4 yields: | ||
| 2478 | 2232 | ||
| 2479 | @example | 2233 | @example |
| 2480 | ((substatement-open 44)) | 2234 | (setq c-default-style '((java-mode . "java") |
| 2235 | (awk-mode . "awk") | ||
| 2236 | (other . "free-group-style"))) | ||
| 2481 | @end example | 2237 | @end example |
| 2482 | 2238 | ||
| 2483 | @noindent | 2239 | See @ref{Styles} for fuller details on using @ccmode{} styles and how |
| 2484 | so we know that to change the offset of the open brace, we need to | 2240 | to create them. |
| 2485 | change the indentation for the @code{substatement-open} syntactic | ||
| 2486 | symbol. | ||
| 2487 | |||
| 2488 | To do this interactively, just hit @kbd{C-c C-o}. This prompts | ||
| 2489 | you for the syntactic symbol to change, providing a reasonable default. | ||
| 2490 | In this case, the default is @code{substatement-open}, which is just the | ||
| 2491 | syntactic symbol we want to change! | ||
| 2492 | 2241 | ||
| 2493 | After you hit return, @ccmode{} will then prompt you for the new | 2242 | @item File Styles |
| 2494 | offset value, with the old value as the default. The default in this | 2243 | A @dfn{file style} is a rarely used variant of the ``style'' mechanism |
| 2495 | case is @samp{+}, but we want no extra indentation so enter | 2244 | described above, which applies to an individual source file. To use |
| 2496 | @samp{0} and @kbd{RET}. This will associate the offset 0 with the | 2245 | it, you set certain Emacs local variables in a special block at the |
| 2497 | syntactic symbol @code{substatement-open}. | 2246 | end of the source file. @xref{File Styles}. |
| 2498 | 2247 | ||
| 2499 | To check your changes quickly, just hit @kbd{C-c C-q} | 2248 | @item Hooks with Styles |
| 2500 | (@code{c-indent-defun}) to reindent the entire function. The example | 2249 | For ultimate flexibility, you can use hooks and styles together. For |
| 2501 | should now look like: | 2250 | example, if your team were developing a product which required a |
| 2251 | Linux driver, you'd probably want to use the ``linux'' style for the | ||
| 2252 | driver, and your own team's style for the rest of the code. You | ||
| 2253 | could achieve this with code like this in your @file{.emacs}: | ||
| 2502 | 2254 | ||
| 2503 | @example | 2255 | @example |
| 2504 | @group | 2256 | @group |
| 2505 | 1: int add( int val, int incr, int doit ) | 2257 | (defun my-c-mode-hook () |
| 2506 | 2: @{ | 2258 | (c-set-style |
| 2507 | 3: if( doit ) | 2259 | (if (and (buffer-file-name) |
| 2508 | 4: @{ | 2260 | (string-match "/usr/src/linux" (buffer-file-name))) |
| 2509 | 5: return( val + incr ); | 2261 | "linux" |
| 2510 | 6: @} | 2262 | "free-group-style"))) |
| 2511 | 7: return( val ); | 2263 | (add-hook 'c-mode-hook 'my-c-mode-hook) |
| 2512 | 8: @} | ||
| 2513 | @end group | 2264 | @end group |
| 2514 | @end example | 2265 | @end example |
| 2515 | 2266 | ||
| 2516 | Notice how just changing the open brace offset on line 4 is all we | 2267 | In a programming team, a hook is a also a good place for each member |
| 2517 | needed to do. Since the other affected lines are indented relative to | 2268 | to put his own personal preferences. For example, you might be the |
| 2518 | line 4, they are automatically indented the way you'd expect. For more | 2269 | only person in your team who likes Auto-newline minor mode. You could |
| 2519 | complicated examples, this may not always work. The general approach to | 2270 | have it enabled by default by placing the following in your |
| 2520 | take is to always start adjusting offsets for lines higher up in the | 2271 | @file{.emacs}: |
| 2521 | file, then reindent and see if any following lines need further | ||
| 2522 | adjustments. | ||
| 2523 | |||
| 2524 | @deffn Command c-set-offset symbol offset | ||
| 2525 | @findex set-offset (c-) | ||
| 2526 | @kindex C-c C-o | ||
| 2527 | This is the command bound to @kbd{C-c C-o}. It provides a convenient | ||
| 2528 | way to set offsets on @code{c-offsets-alist} both interactively (see | ||
| 2529 | the example above) and from your mode hook. | ||
| 2530 | |||
| 2531 | It takes two arguments when used programmatically: @var{symbol} is the | ||
| 2532 | syntactic element symbol to change and @var{offset} is the new offset | ||
| 2533 | for that syntactic element. | ||
| 2534 | @end deffn | ||
| 2535 | |||
| 2536 | |||
| 2537 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 2538 | @node Permanent Customization, Hooks, Interactive Customization, Customizing Indentation | ||
| 2539 | @comment node-name, next, previous, up | ||
| 2540 | @section Permanent Customization | ||
| 2541 | @cindex customization, permanent | ||
| 2542 | @cindex permanent customization | ||
| 2543 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 2544 | |||
| 2545 | To make your changes permanent, you need to add some lisp code to your | ||
| 2546 | @file{.emacs} file. @ccmode{} supports many different ways to be | ||
| 2547 | configured, from the straightforward way by setting variables globally | ||
| 2548 | in @file{.emacs} or in the Customization interface, to the complex and | ||
| 2549 | precisely controlled way by using styles and hook functions. | ||
| 2550 | |||
| 2551 | The simplest way of customizing @ccmode{} permanently is to set the | ||
| 2552 | variables in your @file{.emacs} with @code{setq} and similar commands. | ||
| 2553 | So to make a permanent setting of @code{substatement-open} to 0, add | ||
| 2554 | this to the @file{.emacs} file: | ||
| 2555 | 2272 | ||
| 2556 | @example | 2273 | @example |
| 2557 | @group | 2274 | @group |
| 2558 | (setq c-offsets-alist | 2275 | (defun my-turn-on-auto-newline () |
| 2559 | '((substatement-open . 0))) | 2276 | (c-toggle-auto-newline 1)) |
| 2277 | (add-hook 'c-mode-common-hook 'my-turn-on-auto-newline) | ||
| 2560 | @end group | 2278 | @end group |
| 2561 | @end example | 2279 | @end example |
| 2280 | @end table | ||
| 2562 | 2281 | ||
| 2563 | When @ccmode{} initializes a buffer, it will fill out | 2282 | @menu |
| 2564 | @code{c-offsets-alist} with the remaining syntactic symbols according to | 2283 | * CC Hooks:: |
| 2565 | the style system. | 2284 | * Style Variables:: |
| 2566 | 2285 | * Styles:: | |
| 2567 | You can also use the more user friendly Customization interface, but | 2286 | @end menu |
| 2568 | this manual does not cover how that works. | ||
| 2569 | |||
| 2570 | Variables set like this at the top level in @file{.emacs} take effect in | ||
| 2571 | all @ccmode{} buffers, regardless of language. The indentation style | ||
| 2572 | related variables, e.g., @code{c-offsets-alist}, that you don't set this | ||
| 2573 | way get their value from the style system (@pxref{Styles}), and they | ||
| 2574 | therefore depend on the setting of @code{c-default-style}. Note that if | ||
| 2575 | you use Customize, this means that the greyed-out default values | ||
| 2576 | presented there might not be the ones you actually get, since the actual | ||
| 2577 | values depend on the style, which may very well be different for | ||
| 2578 | different languages. | ||
| 2579 | |||
| 2580 | If you want to make more advanced configurations, e.g., language-specific | ||
| 2581 | customization, setting global variables isn't enough. For that you can | ||
| 2582 | use the language hooks, see @ref{Hooks}, and/or the style system, see | ||
| 2583 | @ref{Styles}. | ||
| 2584 | |||
| 2585 | @defopt c-style-variables-are-local-p | ||
| 2586 | @vindex style-variables-are-local-p (c-) | ||
| 2587 | By default, all style variables are buffer local, so that different | ||
| 2588 | buffers can have different style settings. If you only use one style | ||
| 2589 | in all the files you edit you might want to share them between buffers | ||
| 2590 | so that a change take effect in all buffers. That's done by setting | ||
| 2591 | this variable to @code{nil}. The value takes effect when @ccmode{} is | ||
| 2592 | activated in a buffer for the first time in the Emacs session, so you | ||
| 2593 | typically set it in your @file{.emacs} file and then restart Emacs. | ||
| 2594 | @end defopt | ||
| 2595 | |||
| 2596 | 2287 | ||
| 2597 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 2288 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 2598 | @node Hooks, Styles, Permanent Customization, Customizing Indentation | 2289 | @node CC Hooks, Style Variables, Config Basics, Config Basics |
| 2599 | @comment node-name, next, previous, up | 2290 | @comment node-name, next, previous, up |
| 2600 | @section Hooks | 2291 | @section Hooks |
| 2601 | @cindex mode hooks | 2292 | @cindex mode hooks |
| 2602 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 2293 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 2603 | 2294 | @c The node name is "CC Hooks" rather than "Hooks" because of a bug in | |
| 2604 | @ccmode{} provides several hooks that you can use to customize the mode | 2295 | @c some older versions of Info, e.g. the info.el in GNU Emacs 21.3. |
| 2605 | according to your coding style. Each language mode has its own hook, | 2296 | @c If you go to "Config Basics" and hit <CR> on the xref to "CC |
| 2606 | adhering to standard Emacs major mode conventions. There is also one | 2297 | @c Hooks" the function Info-follow-reference searches for "*Note: CC |
| 2607 | general hook and one package initialization hook: | 2298 | @c Hooks" from the beginning of the page. If this node were instead |
| 2299 | @c named "Hooks", that search would spuriously find "*Note: | ||
| 2300 | @c Hooks(elisp)" and go to the wrong node. | ||
| 2301 | |||
| 2302 | @ccmode{} provides several hooks that you can use to customize the | ||
| 2303 | mode for your coding style. The main hook is | ||
| 2304 | @code{c-mode-common-hook}; typically, you'll put the bulk of your | ||
| 2305 | customizations here. In addition, each language mode has its own | ||
| 2306 | hook, allowing you to fine tune your settings individually for the | ||
| 2307 | different @ccmode{} languages, and there is a package initialization | ||
| 2308 | hook. Finally, there is @code{c-special-indent-hook}, which enables | ||
| 2309 | you to solve anomalous indentation problems. It is described in | ||
| 2310 | @ref{Other Indentation}, not here. All these hooks adhere to the | ||
| 2311 | standard Emacs conventions. | ||
| 2312 | |||
| 2313 | When you open a buffer, @ccmode{} first initializes it with the | ||
| 2314 | currently active style (@pxref{Styles}). Then it calls | ||
| 2315 | @code{c-mode-common-hook}, and finally it calls the language-specific | ||
| 2316 | hook. Thus, any style settings done in these hooks will override | ||
| 2317 | those set by @code{c-default-style}. | ||
| 2608 | 2318 | ||
| 2609 | @defvar c-initialization-hook | 2319 | @defvar c-initialization-hook |
| 2610 | @vindex initialization-hook (c-) | 2320 | @vindex initialization-hook (c-) |
| 2611 | Hook run only once per Emacs session, when @ccmode{} is initialized. | 2321 | Hook run only once per Emacs session, when @ccmode{} is initialized. |
| 2322 | This is a good place to change key bindings (or add new ones) in any | ||
| 2323 | of the @ccmode{} key maps. @xref{Sample .emacs File}. | ||
| 2612 | @end defvar | 2324 | @end defvar |
| 2613 | 2325 | ||
| 2614 | @defvar c-mode-common-hook | 2326 | @defvar c-mode-common-hook |
| @@ -2628,12 +2340,10 @@ The language specific mode hooks. The appropriate one is run as the | |||
| 2628 | last thing when you enter that language mode. | 2340 | last thing when you enter that language mode. |
| 2629 | @end defvar | 2341 | @end defvar |
| 2630 | 2342 | ||
| 2631 | Note that all the language-specific mode setup that CC Mode does is done | 2343 | Although these hooks are variables defined in @ccmode{}, you can give |
| 2632 | prior to both @code{c-mode-common-hook} and the language specific hook. | 2344 | them values before @ccmode{}'s code is loaded - indeed, this is the |
| 2633 | That includes installing the indentation style, which can be mode | 2345 | only way to use @code{c-initialization-hook}. Their values aren't |
| 2634 | specific (and also is by default for Java mode). Thus, any style | 2346 | overwritten when @ccmode{} gets loaded. |
| 2635 | settings done in @code{c-mode-common-hook} will override whatever | ||
| 2636 | language-specific style is chosen by @code{c-default-style}. | ||
| 2637 | 2347 | ||
| 2638 | Here's a simplified example of what you can add to your @file{.emacs} | 2348 | Here's a simplified example of what you can add to your @file{.emacs} |
| 2639 | file to do things whenever any @ccmode{} language is edited. See the | 2349 | file to do things whenever any @ccmode{} language is edited. See the |
| @@ -2649,32 +2359,25 @@ file. | |||
| 2649 | (add-hook 'c-mode-common-hook 'my-c-mode-common-hook) | 2359 | (add-hook 'c-mode-common-hook 'my-c-mode-common-hook) |
| 2650 | @end example | 2360 | @end example |
| 2651 | 2361 | ||
| 2652 | |||
| 2653 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 2362 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 2654 | @node Styles, Advanced Customizations, Hooks, Customizing Indentation | 2363 | @node Style Variables, Styles, CC Hooks, Config Basics |
| 2655 | @comment node-name, next, previous, up | 2364 | @comment node-name, next, previous, up |
| 2656 | @section Styles | 2365 | @section Style Variables |
| 2657 | @cindex styles | 2366 | @cindex styles |
| 2658 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 2367 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 2659 | 2368 | ||
| 2660 | Most people only need to edit code formatted in just a few well-defined | ||
| 2661 | and consistent styles. For example, their organization might impose a | ||
| 2662 | ``blessed'' style that all its programmers must conform to. Similarly, | ||
| 2663 | people who work on GNU software will have to use the GNU coding style. | ||
| 2664 | Some shops are more lenient, allowing a variety of coding styles, and as | ||
| 2665 | programmers come and go, there could be a number of styles in use. For | ||
| 2666 | this reason, @ccmode{} makes it convenient for you to set up logical | ||
| 2667 | groupings of customizations called @dfn{styles}, associate a single name | ||
| 2668 | for any particular style, and pretty easily start editing new or | ||
| 2669 | existing code using these styles. | ||
| 2670 | |||
| 2671 | @cindex style variables | 2369 | @cindex style variables |
| 2672 | The variables that the style system affect are called @dfn{style | 2370 | The variables that @ccmode{}'s style system control are called |
| 2673 | variables}. They are handled specially in several ways: | 2371 | @dfn{style variables}. Note that style variables are ordinary Lisp |
| 2372 | variables, which the style system initializes; you can change their | ||
| 2373 | values at any time (e.g. in a hook function). The style system can | ||
| 2374 | also also set other variables, to some extent. @xref{Styles}. | ||
| 2375 | |||
| 2376 | @dfn{Style variables} are handled specially in several ways: | ||
| 2674 | 2377 | ||
| 2675 | @itemize @bullet | 2378 | @itemize @bullet |
| 2676 | @item | 2379 | @item |
| 2677 | Style variables are by default buffer local variables. However, they | 2380 | Style variables are by default buffer-local variables. However, they |
| 2678 | can instead be made global by setting | 2381 | can instead be made global by setting |
| 2679 | @code{c-style-variables-are-local-p} to @code{nil} before @ccmode{} is | 2382 | @code{c-style-variables-are-local-p} to @code{nil} before @ccmode{} is |
| 2680 | initialized. | 2383 | initialized. |
| @@ -2682,72 +2385,103 @@ initialized. | |||
| 2682 | @item | 2385 | @item |
| 2683 | @vindex c-old-style-variable-behavior | 2386 | @vindex c-old-style-variable-behavior |
| 2684 | @vindex old-style-variable-behavior (c-) | 2387 | @vindex old-style-variable-behavior (c-) |
| 2685 | The default value of any style variable (with two exceptions --- see | 2388 | The default global binding of any style variable (with two exceptions |
| 2686 | below) is the special symbol @code{set-from-style}. Variables that are | 2389 | - see below) is the special symbol @code{set-from-style}. When the |
| 2687 | still set to that symbol when a @ccmode{} buffer is initialized will be | 2390 | style system initializes a buffer-local copy of a style variable for a |
| 2688 | set according to the current style, otherwise they will keep their | 2391 | @ccmode{} buffer, if its global binding is still that symbol then it |
| 2689 | current value@footnote{This is a big change from versions of @ccmode{} | 2392 | will be set from the current style. Otherwise it will retain its |
| 2690 | earlier than 5.26, where such settings would get overridden by the style | 2393 | global default@footnote{This is a big change from versions of |
| 2691 | system unless special precautions were taken. That was changed since it | 2394 | @ccmode{} earlier than 5.26, where such settings would get overridden |
| 2692 | was counterintuitive and confusing, especially to novice users. If your | 2395 | by the style system unless special precautions were taken. That was |
| 2693 | configuration depends on the old overriding behavior, you can set the | 2396 | changed since it was counterintuitive and confusing, especially to |
| 2694 | variable @code{c-old-style-variable-behavior} to non-@code{nil}.}. | 2397 | novice users. If your configuration depends on the old overriding |
| 2695 | 2398 | behavior, you can set the variable | |
| 2696 | Note that when we talk about the ``default value'' for a style variable, | 2399 | @code{c-old-style-variable-behavior} to non-@code{nil}.}. This |
| 2697 | we don't mean the @code{set-from-style} symbol that all style variables | 2400 | ``otherwise'' happens, for example, when you've set the variable with |
| 2698 | are set to initially, but instead the value it will get at mode | 2401 | @code{setq} at the top level of your @file{.emacs} (@pxref{Config |
| 2699 | initialization when neither a style nor a global setting has set its | 2402 | Basics}). |
| 2700 | value. | ||
| 2701 | |||
| 2702 | The style variable @code{c-offsets-alist} is handled a little | ||
| 2703 | differently from the other style variables. It's an association list, | ||
| 2704 | and is thus by default set to the empty list, @code{nil}. When the | ||
| 2705 | style system is initialized, any syntactic symbols already on it are | ||
| 2706 | kept --- only the missing ones are filled in from the chosen style. | ||
| 2707 | 2403 | ||
| 2404 | @item | ||
| 2405 | The style variable @code{c-offsets-alist} (@pxref{c-offsets-alist}) is | ||
| 2406 | an association list with an element for each syntactic symbol. It's | ||
| 2407 | handled a little differently from the other style variables. It's | ||
| 2408 | default global binding is the empty list @code{nil}, rather than | ||
| 2409 | @code{set-from-style}. Before the style system is initialized, you | ||
| 2410 | can add individual elements to @code{c-offsets-alist} by calling | ||
| 2411 | @code{c-set-offset}(@pxref{c-offsets-alist}) just like you would set | ||
| 2412 | other style variables with @code{setq}. Those elements will then | ||
| 2413 | prevail when the style system later initializes a buffer-local copy of | ||
| 2414 | @code{c-offsets-alist}. | ||
| 2415 | |||
| 2416 | @item | ||
| 2708 | The style variable @code{c-special-indent-hook} is also handled in a | 2417 | The style variable @code{c-special-indent-hook} is also handled in a |
| 2709 | special way. Styles may only add more functions on this hook, so the | 2418 | special way. Styles can only add functions to this hook, not remove |
| 2710 | global settings on it are always preserved@footnote{This did not change | 2419 | them, so any global settings you put on it are always |
| 2711 | in version 5.26.}. | 2420 | preserved@footnote{This did not change in version 5.26.}. The value |
| 2421 | you give this variable in a style definition can be either a function | ||
| 2422 | or a list of functions. | ||
| 2712 | 2423 | ||
| 2713 | @item | 2424 | @item |
| 2714 | The global settings of style variables get captured in the special | 2425 | The global bindings of the style variables get captured in the special |
| 2715 | @code{user} style, which is used as the base for all the other styles. | 2426 | @code{user} style when the style system is first initialized. |
| 2716 | @xref{Built-in Styles}, for details. | 2427 | @xref{Built-in Styles}, for details. |
| 2717 | @end itemize | 2428 | @end itemize |
| 2718 | 2429 | ||
| 2719 | The style variables are: | 2430 | The style variables are:@* |
| 2720 | @code{c-basic-offset}, | 2431 | @code{c-indent-comment-alist}, |
| 2721 | @code{c-comment-only-line-offset}, | 2432 | @code{c-indent-comments-syntactically-p} (@pxref{Indentation |
| 2722 | @code{c-block-comment-prefix}, | 2433 | Commands});@* |
| 2723 | @code{c-comment-prefix-regexp}, | 2434 | @code{c-doc-comment-style} (@pxref{Doc Comments});@* |
| 2724 | @code{c-cleanup-list}, | 2435 | @code{c-block-comment-prefix}, @code{c-comment-prefix-regexp} |
| 2725 | @code{c-hanging-braces-alist}, | 2436 | (@pxref{Custom Filling and Breaking});@* |
| 2726 | @code{c-hanging-colons-alist}, | 2437 | @code{c-hanging-braces-alist} (@pxref{Hanging Braces});@* |
| 2727 | @code{c-hanging-semi&comma-criteria}, | 2438 | @code{c-hanging-colons-alist} (@pxref{Hanging Colons});@* |
| 2728 | @code{c-backslash-column}, | 2439 | @code{c-hanging-semi&comma-criteria} (@pxref{Hanging Semicolons and |
| 2729 | @code{c-backslash-max-column}, | 2440 | Commas});@* |
| 2730 | @code{c-special-indent-hook}, | 2441 | @code{c-cleanup-list} (@pxref{Clean-ups});@* |
| 2731 | @code{c-label-minimum-indentation}, and | 2442 | @code{c-basic-offset} (@pxref{Customizing Indentation});@* |
| 2732 | @code{c-offsets-alist}. | 2443 | @code{c-offsets-alist} (@pxref{c-offsets-alist});@* |
| 2444 | @code{c-comment-only-line-offset} (@pxref{Comment Line-Up});@* | ||
| 2445 | @code{c-special-indent-hook}, @code{c-label-minimum-indentation} | ||
| 2446 | (@pxref{Other Indentation});@* | ||
| 2447 | @code{c-backslash-column}, @code{c-backslash-max-column} | ||
| 2448 | (@pxref{Custom Macros}). | ||
| 2449 | |||
| 2450 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 2451 | @node Styles, , Style Variables, Config Basics | ||
| 2452 | @comment node-name, next, previous, up | ||
| 2453 | @section Styles | ||
| 2454 | @cindex styles | ||
| 2455 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 2456 | |||
| 2457 | Most people only need to edit code formatted in just a few well-defined | ||
| 2458 | and consistent styles. For example, their organization might impose a | ||
| 2459 | ``blessed'' style that all its programmers must conform to. Similarly, | ||
| 2460 | people who work on GNU software will have to use the GNU coding style. | ||
| 2461 | Some shops are more lenient, allowing a variety of coding styles, and as | ||
| 2462 | programmers come and go, there could be a number of styles in use. For | ||
| 2463 | this reason, @ccmode{} makes it convenient for you to set up logical | ||
| 2464 | groupings of customizations called @dfn{styles}, associate a single name | ||
| 2465 | for any particular style, and pretty easily start editing new or | ||
| 2466 | existing code using these styles. | ||
| 2733 | 2467 | ||
| 2734 | @menu | 2468 | @menu |
| 2735 | * Built-in Styles:: | 2469 | * Built-in Styles:: |
| 2736 | * Choosing a Style:: | 2470 | * Choosing a Style:: |
| 2737 | * Adding Styles:: | 2471 | * Adding Styles:: |
| 2738 | * File Styles:: | 2472 | * File Styles:: |
| 2739 | @end menu | 2473 | @end menu |
| 2740 | 2474 | ||
| 2741 | 2475 | ||
| 2742 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 2476 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 2743 | @node Built-in Styles, Choosing a Style, , Styles | 2477 | @node Built-in Styles, Choosing a Style, Styles, Styles |
| 2744 | @comment node-name, next, previous, up | 2478 | @comment node-name, next, previous, up |
| 2745 | @subsection Built-in Styles | 2479 | @subsection Built-in Styles |
| 2746 | @cindex styles, built-in | 2480 | @cindex styles, built-in |
| 2747 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 2481 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 2748 | 2482 | ||
| 2749 | If you're lucky, one of @ccmode{}'s built-in styles might be just | 2483 | If you're lucky, one of @ccmode{}'s built-in styles might be just |
| 2750 | what you're looking for. These include: | 2484 | what you're looking for. These are: |
| 2751 | 2485 | ||
| 2752 | @table @code | 2486 | @table @code |
| 2753 | @item gnu | 2487 | @item gnu |
| @@ -2779,6 +2513,7 @@ and Recommendations,'' Erik Nyquist and Mats Henricson, | |||
| 2779 | Ellemtel@footnote{This document is available at | 2513 | Ellemtel@footnote{This document is available at |
| 2780 | @uref{http://www.doc.ic.ac.uk/lab/cplus/c++.rules/} among other | 2514 | @uref{http://www.doc.ic.ac.uk/lab/cplus/c++.rules/} among other |
| 2781 | places.}. | 2515 | places.}. |
| 2516 | @c N.B. This URL was still valid at 2005/8/28 (ACM). | ||
| 2782 | 2517 | ||
| 2783 | @item linux | 2518 | @item linux |
| 2784 | @cindex Linux style | 2519 | @cindex Linux style |
| @@ -2796,16 +2531,21 @@ The style for editing Java code. Note that the default | |||
| 2796 | value for @code{c-default-style} installs this style when you enter | 2531 | value for @code{c-default-style} installs this style when you enter |
| 2797 | @code{java-mode}. | 2532 | @code{java-mode}. |
| 2798 | 2533 | ||
| 2534 | @item awk | ||
| 2535 | @cindex AWK style | ||
| 2536 | The style for editing AWK code. Note that the default value for | ||
| 2537 | @code{c-default-style} installs this style when you enter | ||
| 2538 | @code{awk-mode}. | ||
| 2539 | |||
| 2799 | @item user | 2540 | @item user |
| 2800 | @cindex User style | 2541 | @cindex User style |
| 2801 | This is a special style for several reasons. First, the | 2542 | This is a special style created by you. It consists of the factory |
| 2802 | @ccmode{} customizations you do by using either the Customization | 2543 | defaults for all the style variables as modified by the customizations |
| 2803 | interface, or by writing @code{setq}'s at the top level of your | 2544 | you do either with the Customization interface or by writing |
| 2804 | @file{.emacs} file, will be captured in the @code{user} style. Also, | 2545 | @code{setq}s and @code{c-set-offset}s at the top level of your |
| 2805 | all other styles implicitly inherit their settings from @code{user} | 2546 | @file{.emacs} file (@pxref{Config Basics}). The style system creates |
| 2806 | style. This means that for any styles you add via @code{c-add-style} | 2547 | this style as part of its initialization and doesn't modify it |
| 2807 | (@pxref{Adding Styles}) you need only define the differences between | 2548 | afterwards. |
| 2808 | your new style and @code{user} style. | ||
| 2809 | @end table | 2549 | @end table |
| 2810 | 2550 | ||
| 2811 | 2551 | ||
| @@ -2824,24 +2564,25 @@ Switch to the specified style in the current buffer. Use | |||
| 2824 | interactively like this: | 2564 | interactively like this: |
| 2825 | 2565 | ||
| 2826 | @example | 2566 | @example |
| 2827 | @kbd{C-c . @var{style-name} RET} | 2567 | @kbd{C-c . @var{style-name} @key{RET}} |
| 2828 | @end example | 2568 | @end example |
| 2829 | 2569 | ||
| 2830 | Note that all style names are case insensitive, even the ones you | 2570 | You can use the @key{TAB} in the normal way to do completion on the |
| 2831 | define. | 2571 | style name. Note that all style names are case insensitive, even the |
| 2572 | ones you define yourself. | ||
| 2832 | 2573 | ||
| 2833 | Setting a style in this way does @emph{not} automatically reindent your | 2574 | Setting a style in this way does @emph{not} automatically reindent your |
| 2834 | file. For commands that you can use to view the effect of your changes, | 2575 | file. For commands that you can use to view the effect of your changes, |
| 2835 | see @ref{Commands}. | 2576 | see @ref{Indentation Commands} and @ref{Filling and Breaking}. |
| 2836 | @end deffn | 2577 | @end deffn |
| 2837 | 2578 | ||
| 2838 | The default style in all newly created buffers is @code{gnu}, except | 2579 | The default style in all newly created buffers is @code{gnu}, except |
| 2839 | in Java mode where it's @code{java}. Although the @code{user} style | 2580 | in Java and AWK modes where it's @code{java} and @code{awk}. |
| 2840 | is not the default style, any style variable settings you do with the | 2581 | |
| 2841 | Customization interface or on the top level in your @file{.emacs} file | 2582 | Remember that if you set a style variable with the Customization |
| 2842 | will by default override the style system, so you don't need to set | 2583 | interface or at the top level of your @file{.emacs} file before the |
| 2843 | @code{c-default-style} to @code{user} to see the effect of such | 2584 | style system is initialised (@pxref{Config Basics}), this setting will |
| 2844 | settings. | 2585 | override the one that the style system would have given the variable. |
| 2845 | 2586 | ||
| 2846 | @defopt c-default-style | 2587 | @defopt c-default-style |
| 2847 | @vindex default-style (c-) | 2588 | @vindex default-style (c-) |
| @@ -2865,13 +2606,15 @@ looked up. If it's found then the associated style is used. | |||
| 2865 | 2606 | ||
| 2866 | @item | 2607 | @item |
| 2867 | If @samp{other} is not found then the @samp{gnu} style is used. | 2608 | If @samp{other} is not found then the @samp{gnu} style is used. |
| 2609 | @end enumerate | ||
| 2868 | 2610 | ||
| 2869 | @item | ||
| 2870 | In all cases, the style described in @code{c-default-style} is installed | 2611 | In all cases, the style described in @code{c-default-style} is installed |
| 2871 | @emph{before} the language hooks are run, so you can always override | 2612 | @emph{before} the language hooks are run, so you can always override |
| 2872 | this setting by including an explicit call to @code{c-set-style} in your | 2613 | this setting by including an explicit call to @code{c-set-style} in your |
| 2873 | language mode hook, or in @code{c-mode-common-hook}. | 2614 | language mode hook, or in @code{c-mode-common-hook}. |
| 2874 | @end enumerate | 2615 | |
| 2616 | The standard value of @code{c-default-style} is @w{@code{((java-mode | ||
| 2617 | . "java") (awk-mode . "awk") (other . "gnu"))}}. | ||
| 2875 | @end defopt | 2618 | @end defopt |
| 2876 | 2619 | ||
| 2877 | @defvar c-indentation-style | 2620 | @defvar c-indentation-style |
| @@ -2891,49 +2634,55 @@ If none of the built-in styles is appropriate, you'll probably want to | |||
| 2891 | create a new @dfn{style definition}, possibly based on an existing | 2634 | create a new @dfn{style definition}, possibly based on an existing |
| 2892 | style. To do this, put the new style's settings into a list with the | 2635 | style. To do this, put the new style's settings into a list with the |
| 2893 | following format - the list can then be passed as an argument to the | 2636 | following format - the list can then be passed as an argument to the |
| 2894 | function @code{c-add-style}: | 2637 | function @code{c-add-style}. You can see an example of a style |
| 2638 | definition in @ref{Sample .emacs File}. | ||
| 2895 | 2639 | ||
| 2896 | @cindex style definition | 2640 | @cindex style definition |
| 2897 | @defvr {List} style definition | 2641 | @c @defvr {List} style definition |
| 2642 | @table @asis | ||
| 2643 | @item Structure of a Style Definition List | ||
| 2898 | ([@var{base-style}] [(@var{variable} . @var{value}) @dots{}]) | 2644 | ([@var{base-style}] [(@var{variable} . @var{value}) @dots{}]) |
| 2899 | 2645 | ||
| 2900 | Optional @var{base-style}, if present, must be a string which is the | 2646 | Optional @var{base-style}, if present, must be a string which is the |
| 2901 | name of the @dfn{base style} from which this style inherits. At most | 2647 | name of the @dfn{base style} from which this style inherits. At most |
| 2902 | one @var{base-style} is allowed in a style definition. If | 2648 | one @var{base-style} is allowed in a style definition. If |
| 2903 | @var{base-style} is not specified, the style inherits from a table of | 2649 | @var{base-style} is not specified, the style inherits from the table |
| 2904 | default values@footnote{This table is stored internally in the | 2650 | of factory default values@footnote{This table is stored internally in |
| 2905 | variable c-fallback-style. It is computed during the initialisation | 2651 | the variable c-fallback-style.} instead. All styles eventually |
| 2906 | of @ccmode{} from the factory defaults of the style variables and any | 2652 | inherit from this internal table. Style loops generate errors. The |
| 2907 | global values they may have been given since starting Emacs.} instead. | 2653 | list of pre-existing styles can be seen in @ref{Built-in Styles}. |
| 2908 | All styles eventually inherit from this internal table. Style loops | ||
| 2909 | generate errors. The list of pre-existing styles can be seen in | ||
| 2910 | @ref{Built-in Styles}. | ||
| 2911 | 2654 | ||
| 2912 | The dotted pairs (@var{variable} . @var{value}) each consist of a | 2655 | The dotted pairs (@var{variable} . @var{value}) each consist of a |
| 2913 | variable and the value it is to be set to when the style is later | 2656 | variable and the value it is to be set to when the style is later |
| 2914 | activated.@footnote{In certain circumstances, this value can get | 2657 | activated.@footnote{Note that if the variable has been given a value |
| 2915 | overridden by another value.} The variable can be either a @ccmode{} | 2658 | by the Customization interface or a @code{setq} at the top level of |
| 2916 | style variable or an arbitrary Emacs variable. In the latter case, it | 2659 | your @file{.emacs}, this value will override the one the style system |
| 2917 | is @emph{not} made buffer local by the @ccmode{} style system. | 2660 | tries to give it. @xref{Config Basics}.} The variable can be either a |
| 2918 | @end defvr | 2661 | @ccmode{} style variable or an arbitrary Emacs variable. In the |
| 2662 | latter case, it is @emph{not} made buffer-local by the @ccmode{} style | ||
| 2663 | system. | ||
| 2664 | @c @end defvr | ||
| 2919 | 2665 | ||
| 2920 | Two variables are treated specially in the dotted pair list: | 2666 | Two variables are treated specially in the dotted pair list: |
| 2921 | 2667 | ||
| 2922 | @table @code | 2668 | @table @code |
| 2923 | @item c-offsets-alist | 2669 | @item c-offsets-alist |
| 2924 | The value is in turn a dotted list on the form | 2670 | The value is in turn a list of dotted pairs of the form |
| 2925 | 2671 | ||
| 2926 | (@var{syntactic-symbol} . @var{offset}) | 2672 | @example |
| 2673 | (@r{@var{syntactic-symbol}} . @r{@var{offset}}) | ||
| 2674 | @end example | ||
| 2927 | 2675 | ||
| 2928 | as described in @ref{Customizing Indentation}. These are passed to | 2676 | as described in @ref{c-offsets-alist}. These are passed to |
| 2929 | @code{c-set-offset} so there is no need to set every syntactic symbol in | 2677 | @code{c-set-offset} so there is no need to set every syntactic symbol |
| 2930 | your style, only those that are different from the inherited style. | 2678 | in your style, only those that are different from the inherited style. |
| 2931 | 2679 | ||
| 2932 | @item c-special-indent-hook | 2680 | @item c-special-indent-hook |
| 2933 | The value is added to @code{c-special-indent-hook} using | 2681 | The value is added to @code{c-special-indent-hook} using |
| 2934 | @code{add-hook}, so any functions already on it are kept. If the value | 2682 | @code{add-hook}, so any functions already on it are kept. If the value |
| 2935 | is a list, each element of the list is added with @code{add-hook}. | 2683 | is a list, each element of the list is added with @code{add-hook}. |
| 2936 | @end table | 2684 | @end table |
| 2685 | @end table | ||
| 2937 | 2686 | ||
| 2938 | Styles are kept in the @code{c-style-alist} variable, but you | 2687 | Styles are kept in the @code{c-style-alist} variable, but you |
| 2939 | should never modify this variable directly. Instead, @ccmode{} | 2688 | should never modify this variable directly. Instead, @ccmode{} |
| @@ -2946,9 +2695,12 @@ Add or update a style called @var{stylename}, a string. | |||
| 2946 | above. If @var{stylename} already exists in @code{c-style-alist} then | 2695 | above. If @var{stylename} already exists in @code{c-style-alist} then |
| 2947 | it is replaced by @var{description}. (Note, this replacement is | 2696 | it is replaced by @var{description}. (Note, this replacement is |
| 2948 | total. The old style is @emph{not} merged into the new one.) | 2697 | total. The old style is @emph{not} merged into the new one.) |
| 2949 | Otherwise, a new style is added. If the optional @var{set-p} is | 2698 | Otherwise, a new style is added. |
| 2950 | non-@code{nil} then the new style is applied to the current buffer as | 2699 | |
| 2951 | well. | 2700 | If the optional @var{set-p} is non-@code{nil} then the new style is |
| 2701 | applied to the current buffer as well. The use of this facility is | ||
| 2702 | deprecated and it might be removed from @ccmode{} in a future release. | ||
| 2703 | You should use @code{c-set-style} instead. | ||
| 2952 | 2704 | ||
| 2953 | The sample @file{.emacs} file provides a concrete example of how a new | 2705 | The sample @file{.emacs} file provides a concrete example of how a new |
| 2954 | style can be added and automatically set. @xref{Sample .emacs File}. | 2706 | style can be added and automatically set. @xref{Sample .emacs File}. |
| @@ -2962,7 +2714,7 @@ should not be changed directly; use @code{c-add-style} instead. | |||
| 2962 | 2714 | ||
| 2963 | 2715 | ||
| 2964 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 2716 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 2965 | @node File Styles, , Adding Styles, Styles | 2717 | @node File Styles, , Adding Styles, Styles |
| 2966 | @comment node-name, next, previous, up | 2718 | @comment node-name, next, previous, up |
| 2967 | @subsection File Styles | 2719 | @subsection File Styles |
| 2968 | @cindex styles, file local | 2720 | @cindex styles, file local |
| @@ -2970,175 +2722,513 @@ should not be changed directly; use @code{c-add-style} instead. | |||
| 2970 | 2722 | ||
| 2971 | @cindex file local variables | 2723 | @cindex file local variables |
| 2972 | 2724 | ||
| 2973 | The Emacs manual describes how you can customize certain variables on | 2725 | The Emacs manual describes how you can customize certain variables on a |
| 2974 | a per-file basis by including a @dfn{file local variable} block at the | 2726 | per-file basis by including a @dfn{file local variable} block at the end |
| 2975 | end of the file. So far, you've only seen a functional interface to | 2727 | of the file (@pxref{File Variables,, Local Variables in Files, @emacsman{}, |
| 2976 | @ccmode{} customization, which can't be used there. @ccmode{} | 2728 | @emacsmantitle{}}). |
| 2977 | provides two variables allow customization of the indentation style on | 2729 | |
| 2978 | a per-file basis: | 2730 | So far, you've only seen a functional interface for setting styles in |
| 2731 | @ccmode{}, and this can't be used here. @ccmode{} fills the gap by | ||
| 2732 | providing two variables for use in a file's local variable list. | ||
| 2733 | Don't use them anywhere else! These allow you to customize the style | ||
| 2734 | on a per-file basis: | ||
| 2979 | 2735 | ||
| 2980 | @defvar c-file-style | 2736 | @defvar c-file-style |
| 2981 | @vindex file-style (c-) | 2737 | @vindex file-style (c-) |
| 2982 | This variable can be set to a style name string. When the file is | 2738 | Set this variable to a style name string in the Local Variables list. |
| 2983 | visited, @ccmode{} will automatically set the file's style to this | 2739 | From now on, when you visit the file, @ccmode{} will automatically set |
| 2984 | one using @code{c-set-style}. | 2740 | the file's style to this one using @code{c-set-style}. |
| 2985 | @end defvar | 2741 | @end defvar |
| 2986 | 2742 | ||
| 2987 | @defvar c-file-offsets | 2743 | @defvar c-file-offsets |
| 2988 | @vindex file-offsets (c-) | 2744 | @vindex file-offsets (c-) |
| 2989 | This variable takes an association list similar to what is allowed in | 2745 | Set this variable (in the Local Variables list) to an association list |
| 2990 | @code{c-offsets-alist}. When the file is visited, @ccmode{} will | 2746 | of the same format as @code{c-offsets-alist}. From now on, when you |
| 2991 | automatically institute these offsets using @code{c-set-offset}. | 2747 | visit the file, @ccmode{} will automatically institute these offsets |
| 2748 | using @code{c-set-offset}. | ||
| 2992 | @end defvar | 2749 | @end defvar |
| 2993 | 2750 | ||
| 2994 | Note that file style settings (i.e., @code{c-file-style}) are applied | 2751 | Note that file style settings (i.e. @code{c-file-style}) are applied |
| 2995 | before file offset settings (i.e., @code{c-file-offsets}). Also, if | 2752 | before file offset settings |
| 2996 | either of these are set in a file's local variable section, all the | 2753 | (i.e. @code{c-file-offsets})@footnote{Also, if either of these are set |
| 2997 | style variable values are made local to that buffer. | 2754 | in a file's local variable section, all the style variable values are |
| 2998 | 2755 | made local to that buffer, even if | |
| 2756 | @code{c-style-variables-are-local-p} is @code{nil}. Since this | ||
| 2757 | variable is virtually always non-@code{nil} anyhow, you're unlikely to | ||
| 2758 | notice this effect.}. | ||
| 2759 | |||
| 2760 | If you set any variables, including style variables, by the file local | ||
| 2761 | variables mechanism, these settings take priority over all other | ||
| 2762 | settings, even those in your mode hooks (@pxref{CC Hooks}). If you | ||
| 2763 | use @code{c-file-style} or @code{c-file-offsets} and also explicitly | ||
| 2764 | set a style variable in a local variable block, the explicit setting | ||
| 2765 | will take priority. | ||
| 2999 | 2766 | ||
| 3000 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 2767 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3001 | @node Advanced Customizations, , Styles, Customizing Indentation | 2768 | @node Custom Filling and Breaking, Custom Auto-newlines, Config Basics, Top |
| 3002 | @comment node-name, next, previous, up | 2769 | @comment node-name, next, previous, up |
| 3003 | @section Advanced Customizations | 2770 | @chapter Customizing Filling and Line Breaking |
| 3004 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 2771 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3005 | 2772 | ||
| 3006 | For most users, @ccmode{} will support their coding styles with very | 2773 | Since there's a lot of normal text in comments and string literals, |
| 3007 | little need for more advanced customizations. Usually, one of the | 2774 | @ccmode{} provides features to edit these like in text mode. It does |
| 3008 | standard styles (@pxref{Built-in Styles}) will do the trick. At most, | 2775 | this by hooking in on the different line breaking functions and tuning |
| 3009 | perhaps one of the syntactic symbol offsets will need to be tweaked | 2776 | relevant variables as necessary. |
| 3010 | slightly, or maybe @code{c-basic-offset} will need to be changed. | ||
| 3011 | However, some styles require a more flexible framework for | ||
| 3012 | customization, and one of the real strengths of @ccmode{} is that the | ||
| 3013 | syntactic analysis model provides just such a framework. This allows | ||
| 3014 | you to implement custom indentation calculations for situations not | ||
| 3015 | handled by the mode directly. | ||
| 3016 | 2777 | ||
| 3017 | @menu | 2778 | @vindex c-comment-prefix-regexp |
| 3018 | * Custom Indentation Functions:: | 2779 | @vindex comment-prefix-regexp (c-) |
| 3019 | * Custom Brace and Colon Hanging:: | 2780 | @cindex comment line prefix |
| 3020 | * Customizing Semicolons and Commas:: | 2781 | @vindex comment-start |
| 3021 | * Other Special Indentations:: | 2782 | @vindex comment-end |
| 3022 | @end menu | 2783 | @vindex comment-start-skip |
| 2784 | @vindex paragraph-start | ||
| 2785 | @vindex paragraph-separate | ||
| 2786 | @vindex paragraph-ignore-fill-prefix | ||
| 2787 | @vindex adaptive-fill-mode | ||
| 2788 | @vindex adaptive-fill-regexp | ||
| 2789 | @vindex adaptive-fill-first-line-regexp | ||
| 2790 | To make Emacs recognize comments and treat text in them as normal | ||
| 2791 | paragraphs, @ccmode{} makes several standard | ||
| 2792 | variables@footnote{@code{comment-start}, @code{comment-end}, | ||
| 2793 | @code{comment-start-skip}, @code{paragraph-start}, | ||
| 2794 | @code{paragraph-separate}, @code{paragraph-ignore-fill-prefix}, | ||
| 2795 | @code{adaptive-fill-mode}, @code{adaptive-fill-regexp}, and | ||
| 2796 | @code{adaptive-fill-first-line-regexp}.} buffer-local and modifies them | ||
| 2797 | according to the language syntax and the comment line prefix. | ||
| 2798 | |||
| 2799 | @defopt c-comment-prefix-regexp | ||
| 2800 | @vindex comment-prefix-regexp (c-) | ||
| 2801 | This style variable contains the regexp used to recognize the | ||
| 2802 | @dfn{comment line prefix}, which is the line decoration that starts | ||
| 2803 | every line in a comment. The variable is either the comment line | ||
| 2804 | prefix itself, or (more usually) an association list with different | ||
| 2805 | values for different languages. The symbol for the major mode is | ||
| 2806 | looked up in the alist to get the regexp for the language, and if it | ||
| 2807 | isn't found then the special symbol @samp{other} is looked up instead. | ||
| 2808 | |||
| 2809 | When a comment line gets divided by @kbd{M-j} or the like, @ccmode{} | ||
| 2810 | inserts the comment line prefix from a neighbouring line at the start | ||
| 2811 | of the new line. The default value of c-comment-prefix-regexp is | ||
| 2812 | @samp{//+\\|\\**}, which matches C++ style line comments like | ||
| 2813 | |||
| 2814 | @example | ||
| 2815 | // blah blah | ||
| 2816 | @end example | ||
| 2817 | |||
| 2818 | @noindent | ||
| 2819 | with two or more slashes in front of them, and the second and | ||
| 2820 | subsequent lines of C style block comments like | ||
| 2821 | |||
| 2822 | @example | ||
| 2823 | @group | ||
| 2824 | /* | ||
| 2825 | * blah blah | ||
| 2826 | */ | ||
| 2827 | @end group | ||
| 2828 | @end example | ||
| 2829 | |||
| 2830 | @noindent | ||
| 2831 | with zero or more stars at the beginning of every line. If you change | ||
| 2832 | this variable, please make sure it still matches the comment starter | ||
| 2833 | (i.e. @code{//}) of line comments @emph{and} the line prefix inside | ||
| 2834 | block comments. | ||
| 2835 | |||
| 2836 | @findex c-setup-paragraph-variables | ||
| 2837 | @findex setup-paragraph-variables (c-) | ||
| 2838 | Also note that since @ccmode{} uses the value of | ||
| 2839 | @code{c-comment-prefix-regexp} to set up several other variables at | ||
| 2840 | mode initialization, there won't be any effect if you just change it | ||
| 2841 | inside a @ccmode{} buffer. You need to call the command | ||
| 2842 | @code{c-setup-paragraph-variables} too, to update those other | ||
| 2843 | variables. That's also the case if you modify | ||
| 2844 | @code{c-comment-prefix-regexp} in a mode hook, since @ccmode{} will | ||
| 2845 | already have set up these variables before calling the hook. | ||
| 2846 | @end defopt | ||
| 2847 | |||
| 2848 | In comments, @ccmode{} uses @code{c-comment-prefix-regexp} to adapt | ||
| 2849 | the line prefix from the other lines in the comment. | ||
| 2850 | |||
| 2851 | @vindex adaptive-fill-mode | ||
| 2852 | @cindex Adaptive Fill mode | ||
| 2853 | @ccmode{} uses adaptive fill mode (@pxref{Adaptive Fill,,, emacs, GNU | ||
| 2854 | Emacs Manual}) to make Emacs correctly keep the line prefix when | ||
| 2855 | filling paragraphs. That also makes Emacs preserve the text | ||
| 2856 | indentation @emph{inside} the comment line prefix. E.g. in the | ||
| 2857 | following comment, both paragraphs will be filled with the left | ||
| 2858 | margins of the texts kept intact: | ||
| 2859 | |||
| 2860 | @example | ||
| 2861 | @group | ||
| 2862 | /* Make a balanced b-tree of the nodes in the incoming | ||
| 2863 | * stream. But, to quote the famous words of Donald E. | ||
| 2864 | * Knuth, | ||
| 2865 | * | ||
| 2866 | * Beware of bugs in the above code; I have only | ||
| 2867 | * proved it correct, not tried it. | ||
| 2868 | */ | ||
| 2869 | @end group | ||
| 2870 | @end example | ||
| 2871 | |||
| 2872 | @findex c-setup-filladapt | ||
| 2873 | @findex setup-filladapt (c-) | ||
| 2874 | @findex filladapt-mode | ||
| 2875 | @vindex filladapt-mode | ||
| 2876 | @cindex Filladapt mode | ||
| 2877 | It's also possible to use other adaptive filling packages, notably Kyle | ||
| 2878 | E. Jones' Filladapt package@footnote{It's available from | ||
| 2879 | @uref{http://www.wonderworks.com/}. As of version 2.12, it does however | ||
| 2880 | lack a feature that makes it work suboptimally when | ||
| 2881 | @code{c-comment-prefix-regexp} matches the empty string (which it does | ||
| 2882 | by default). A patch for that is available from | ||
| 2883 | @uref{http://cc-mode.sourceforge.net/,, the CC Mode web site}.}, | ||
| 2884 | @c 2005/11/22: The above is still believed to be the case. | ||
| 2885 | which handles things like bulleted lists nicely. There's a convenience | ||
| 2886 | function @code{c-setup-filladapt} that tunes the relevant variables in | ||
| 2887 | Filladapt for use in @ccmode{}. Call it from a mode hook, e.g. with | ||
| 2888 | something like this in your @file{.emacs}: | ||
| 2889 | |||
| 2890 | @example | ||
| 2891 | (defun my-c-mode-common-hook () | ||
| 2892 | (c-setup-filladapt) | ||
| 2893 | (filladapt-mode 1)) | ||
| 2894 | (add-hook 'c-mode-common-hook 'my-c-mode-common-hook) | ||
| 2895 | @end example | ||
| 2896 | |||
| 2897 | @defopt c-block-comment-prefix | ||
| 2898 | @vindex block-comment-prefix (c-) | ||
| 2899 | @vindex c-comment-continuation-stars | ||
| 2900 | @vindex comment-continuation-stars (c-) | ||
| 2901 | Normally the comment line prefix inserted for a new line inside a | ||
| 2902 | comment is deduced from other lines in it. However there's one | ||
| 2903 | situation when there's no hint about what the prefix should look like, | ||
| 2904 | namely when a block comment is broken for the first time. This style | ||
| 2905 | variable@footnote{In versions before 5.26, this variable was called | ||
| 2906 | @code{c-comment-continuation-stars}. As a compatibility measure, | ||
| 2907 | @ccmode{} still uses the value on that variable if it's set.} is used | ||
| 2908 | then as the comment prefix. It defaults to @samp{* | ||
| 2909 | }@footnote{Actually, this default setting of | ||
| 2910 | @code{c-block-comment-prefix} typically gets overriden by the default | ||
| 2911 | style @code{gnu}, which sets it to blank. You can see the line | ||
| 2912 | splitting effect described here by setting a different style, | ||
| 2913 | e.g. @code{k&r} @xref{Choosing a Style}.}, which makes a comment | ||
| 2914 | |||
| 2915 | @example | ||
| 2916 | /* Got O(n^2) here, which is a Bad Thing. */ | ||
| 2917 | @end example | ||
| 2918 | |||
| 2919 | @noindent | ||
| 2920 | break into | ||
| 2921 | |||
| 2922 | @example | ||
| 2923 | @group | ||
| 2924 | /* Got O(n^2) here, which | ||
| 2925 | * is a Bad Thing. */ | ||
| 2926 | @end group | ||
| 2927 | @end example | ||
| 2928 | |||
| 2929 | Note that it won't work to adjust the indentation by putting leading | ||
| 2930 | spaces in @code{c-block-comment-prefix}, since @ccmode{} still uses the | ||
| 2931 | normal indentation engine to indent the line. Thus, the right way to | ||
| 2932 | fix the indentation is by customizing the @code{c} syntactic symbol. It | ||
| 2933 | defaults to @code{c-lineup-C-comments}, which handles the indentation of | ||
| 2934 | most common comment styles, see @ref{Line-Up Functions}. | ||
| 2935 | @end defopt | ||
| 2936 | |||
| 2937 | @defopt c-ignore-auto-fill | ||
| 2938 | @vindex ignore-auto-fill (c-) | ||
| 2939 | When auto fill mode is enabled, @ccmode{} can selectively ignore it | ||
| 2940 | depending on the context the line break would occur in, e.g. to never | ||
| 2941 | break a line automatically inside a string literal. This variable | ||
| 2942 | takes a list of symbols for the different contexts where auto-filling | ||
| 2943 | never should occur: | ||
| 2944 | |||
| 2945 | @table @code | ||
| 2946 | @item string | ||
| 2947 | Inside a string or character literal. | ||
| 2948 | @item c | ||
| 2949 | Inside a C style block comment. | ||
| 2950 | @item c++ | ||
| 2951 | Inside a C++ style line comment. | ||
| 2952 | @item cpp | ||
| 2953 | Inside a preprocessor directive. | ||
| 2954 | @item code | ||
| 2955 | Anywhere else, i.e. in normal code. | ||
| 2956 | @end table | ||
| 2957 | |||
| 2958 | By default, @code{c-ignore-auto-fill} is set to @code{(string cpp | ||
| 2959 | code)}, which means that when auto-fill mode is activated, | ||
| 2960 | auto-filling only occurs in comments. In literals, it's often | ||
| 2961 | desirable to have explicit control over newlines. In preprocessor | ||
| 2962 | directives, the necessary @samp{\} escape character before the newline | ||
| 2963 | is not automatically inserted, so an automatic line break would | ||
| 2964 | produce invalid code. In normal code, line breaks are normally | ||
| 2965 | dictated by some logical structure in the code rather than the last | ||
| 2966 | whitespace character, so automatic line breaks there will produce poor | ||
| 2967 | results in the current implementation. | ||
| 2968 | @end defopt | ||
| 2969 | |||
| 2970 | @vindex comment-multi-line | ||
| 2971 | If inside a comment and @code{comment-multi-line} (@pxref{Auto Fill,,, | ||
| 2972 | @emacsman{}, @emacsmantitle{}} is non-@code{nil}, the indentation and | ||
| 2973 | line prefix are preserved. If inside a comment and | ||
| 2974 | @code{comment-multi-line} is @code{nil}, a new comment of the same | ||
| 2975 | type is started on the next line and indented as appropriate for | ||
| 2976 | comments. | ||
| 2977 | |||
| 2978 | Note that @ccmode{} sets @code{comment-multi-line} to @code{t} at | ||
| 2979 | startup. The reason is that @kbd{M-j} could otherwise produce sequences | ||
| 2980 | of single line block comments for texts that should logically be treated | ||
| 2981 | as one comment, and the rest of the paragraph handling code | ||
| 2982 | (e.g. @kbd{M-q} and @kbd{M-a}) can't cope with that, which would lead to | ||
| 2983 | inconsistent behavior. | ||
| 3023 | 2984 | ||
| 3024 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 2985 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3025 | @node Custom Indentation Functions, Custom Brace and Colon Hanging, , Advanced Customizations | 2986 | @node Custom Auto-newlines, Clean-ups, Custom Filling and Breaking, Top |
| 3026 | @comment node-name, next, previous, up | 2987 | @comment node-name, next, previous, up |
| 3027 | @subsection Custom Indentation Functions | 2988 | @chapter Customizing Auto-newlines |
| 3028 | @cindex customization, indentation functions | ||
| 3029 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 2989 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3030 | 2990 | ||
| 3031 | The most flexible way to customize @ccmode{} is by writing custom | 2991 | @ccmode{} determines whether to insert auto-newlines in two basically |
| 3032 | indentation functions, and associating them with specific syntactic | 2992 | different ways, depending on the character just typed: |
| 3033 | symbols (@pxref{Syntactic Symbols}). @ccmode{} itself uses indentation | 2993 | |
| 3034 | functions to provide more sophisticated indentation, for example when | 2994 | @table @asis |
| 3035 | lining up C++ stream operator blocks: | 2995 | @item Braces and Colons |
| 2996 | @ccmode{} first determines the syntactic context of the brace or colon | ||
| 2997 | (@pxref{Syntactic Symbols}), then looks for a corresponding element in | ||
| 2998 | an alist. This element specifies where to put newlines - this is any | ||
| 2999 | combination of before and after the brace or colon. If no alist | ||
| 3000 | element is found, newlines are inserted both before and after a brace, | ||
| 3001 | but none are inserted around a colon. See @ref{Hanging Braces} and | ||
| 3002 | @ref{Hanging Colons}. | ||
| 3003 | |||
| 3004 | @item Semicolons and Commas | ||
| 3005 | The variable @code{c-hanging-semi&comma-criteria} contains a list of | ||
| 3006 | functions which determine whether to insert a newline after a newly | ||
| 3007 | typed semicolon or comma. @xref{Hanging Semicolons and Commas}. | ||
| 3008 | @end table | ||
| 3009 | |||
| 3010 | The names of these configuration variables contain @samp{hanging} | ||
| 3011 | because they let you @dfn{hang} the pertinent characters. A character | ||
| 3012 | which introduces a C construct is said to @dfn{hang on the right} when | ||
| 3013 | it appears at the end of a line after other code, being separated by a | ||
| 3014 | line break from the construct it introduces, like the opening brace in: | ||
| 3036 | 3015 | ||
| 3037 | @example | 3016 | @example |
| 3038 | @group | 3017 | @group |
| 3039 | 1: void main(int argc, char**) | 3018 | while (i < MAX) @{ |
| 3040 | 2: @{ | 3019 | total += entry[i]; |
| 3041 | 3: cout << "There were " | 3020 | entry [i++] = 0; |
| 3042 | 4: << argc | 3021 | @} |
| 3043 | 5: << "arguments passed to the program" | ||
| 3044 | 6: << endl; | ||
| 3045 | 7: @} | ||
| 3046 | @end group | 3022 | @end group |
| 3047 | @end example | 3023 | @end example |
| 3048 | 3024 | ||
| 3049 | In this example, lines 4 through 6 are assigned the @code{stream-op} | 3025 | @noindent |
| 3050 | syntactic symbol. Here, @code{stream-op} has an offset of @code{+}, and | 3026 | A character @dfn{hangs on the left} when it appears at the start of |
| 3051 | with a @code{c-basic-offset} of 2, you can see that lines 4 through 6 | 3027 | the line after the construct it closes off, like the above closing |
| 3052 | are simply indented two spaces to the right of line 3. But perhaps we'd | 3028 | brace. |
| 3053 | like @ccmode{} to be a little more intelligent so that it aligns | 3029 | |
| 3054 | all the @samp{<<} symbols in lines 3 through 6. To do this, we have | 3030 | The next chapter, ``Clean-ups'', describes how to configure @ccmode{} |
| 3055 | to write a custom indentation function which finds the column of the first | 3031 | to remove these automatically added newlines in certain specific |
| 3056 | stream operator on the first line of the statement. Here is sample | 3032 | circumstances. @xref{Clean-ups}. |
| 3057 | lisp code implementing this: | 3033 | |
| 3034 | @menu | ||
| 3035 | * Hanging Braces:: | ||
| 3036 | * Hanging Colons:: | ||
| 3037 | * Hanging Semicolons and Commas:: | ||
| 3038 | @end menu | ||
| 3039 | |||
| 3040 | |||
| 3041 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 3042 | @node Hanging Braces, Hanging Colons, Custom Auto-newlines, Custom Auto-newlines | ||
| 3043 | @comment node-name, next, previous, up | ||
| 3044 | @section Hanging Braces | ||
| 3045 | @cindex hanging braces | ||
| 3046 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 3047 | |||
| 3048 | To specify which kinds of braces you want auto-newlines put around, | ||
| 3049 | you set the style variable @code{c-hanging-braces-alist}. Its | ||
| 3050 | structure and semantics are described in this section. Details of how | ||
| 3051 | to set it up, and its relationship to CC Mode's style system are given | ||
| 3052 | in @ref{Style Variables}. | ||
| 3053 | |||
| 3054 | Say you wanted an auto-newline after (but not before) the following | ||
| 3055 | @samp{@{}: | ||
| 3058 | 3056 | ||
| 3059 | @example | 3057 | @example |
| 3060 | (defun c-lineup-streamop (langelem) | 3058 | if (foo < 17) @{ |
| 3061 | (save-excursion | ||
| 3062 | (goto-char (cdr langelem)) | ||
| 3063 | (re-search-forward "<<\\|>>" (c-point 'eol) 'move) | ||
| 3064 | (goto-char (match-beginning 0)) | ||
| 3065 | (vector (current-column)))) | ||
| 3066 | @end example | 3059 | @end example |
| 3067 | 3060 | ||
| 3068 | Indentation functions take a single argument, which is a syntactic | 3061 | @noindent |
| 3069 | component cons cell (@pxref{Syntactic Analysis}). The function can | 3062 | First you need to find the @dfn{syntactic context} of the brace---type |
| 3070 | return an integer which is added to the running total indentation for | 3063 | a @key{RET} before the brace to get it on a line of its |
| 3071 | the line, or a vector containing an integer which is an absolute | 3064 | own@footnote{Also insert a @samp{\} at the end of the previous line if |
| 3072 | column to align to. Usually an absolute column is wanted when | 3065 | you're in AWK Mode.}, then type @kbd{C-c C-s}. That will tell you |
| 3073 | aligning to existing text, as in this example. | 3066 | something like: |
| 3074 | 3067 | ||
| 3075 | The function should return @code{nil} if it's used in a situation where | 3068 | @example |
| 3076 | it doesn't want to make any decision. If the function is used in a list | 3069 | ((substatement-open 1061)) |
| 3077 | expression (@pxref{Customizing Indentation}), that will cause @ccmode{} | 3070 | @end example |
| 3078 | to go on and check the next entry in the list. | 3071 | |
| 3072 | @noindent | ||
| 3073 | So here you need to put the entry @code{(substatement-open . (after))} | ||
| 3074 | into @code{c-hanging-braces-alist}. | ||
| 3079 | 3075 | ||
| 3080 | Now, to associate the function @code{c-lineup-streamop} with the | 3076 | If you don't want any auto-newlines for a particular syntactic symbol, |
| 3081 | @code{stream-op} syntactic symbol, we can add something like the | 3077 | put this into @code{c-hanging-braces-alist}: |
| 3082 | following to our @code{c++-mode-hook}@footnote{It probably makes more | ||
| 3083 | sense to add this to @code{c++-mode-hook} than @code{c-mode-common-hook} | ||
| 3084 | since stream operators are only relevant for C++.}: | ||
| 3085 | 3078 | ||
| 3086 | @example | 3079 | @example |
| 3087 | (c-set-offset 'stream-op 'c-lineup-streamop) | 3080 | (brace-entry-open) |
| 3088 | @end example | 3081 | @end example |
| 3089 | 3082 | ||
| 3090 | Now the function looks like this after reindenting (using @kbd{C-c | 3083 | If some brace syntactic symbol is not in @code{c-hanging-brace-alist}, |
| 3091 | C-q}): | 3084 | its entry is taken by default as @code{(before after)}---insert a |
| 3085 | newline both before and after the brace. In place of a | ||
| 3086 | ``before/after'' list you can specify a function in this alist---this | ||
| 3087 | is useful when the auto newlines depend on the code around the brace. | ||
| 3088 | |||
| 3089 | @defopt c-hanging-braces-alist | ||
| 3090 | @vindex hanging-braces-alist (c-) | ||
| 3091 | |||
| 3092 | This variable is an association list which maps syntactic symbols to | ||
| 3093 | lists of places to insert a newline. @xref{Association | ||
| 3094 | Lists,,,@lispref{}, @lispreftitle{}}. The key of each element is the | ||
| 3095 | syntactic symbol, the associated value is either @code{nil}, a list, | ||
| 3096 | or a function. | ||
| 3097 | |||
| 3098 | @table @asis | ||
| 3099 | @item The Key - the syntactic symbol | ||
| 3100 | The syntactic symbols that are useful as keys in this list are | ||
| 3101 | @code{brace-list-intro}, @code{statement-cont}, | ||
| 3102 | @code{inexpr-class-open}, @code{inexpr-class-close}, and all the | ||
| 3103 | @code{*-open} and @code{*-close} symbols. @xref{Syntactic Symbols}, | ||
| 3104 | for a more detailed description of these syntactic symbols, except for | ||
| 3105 | @code{inexpr-class-open} and @code{inexpr-class-close}, which aren't | ||
| 3106 | actual syntactic symbols. Elements with any other value as a key get | ||
| 3107 | ignored. | ||
| 3108 | |||
| 3109 | The braces of anonymous inner classes in Java are given the special | ||
| 3110 | symbols @code{inexpr-class-open} and @code{inexpr-class-close}, so that | ||
| 3111 | they can be distinguished from the braces of normal classes@footnote{The | ||
| 3112 | braces of anonymous classes produce a combination of | ||
| 3113 | @code{inexpr-class}, and @code{class-open} or @code{class-close} in | ||
| 3114 | normal indentation analysis.}. | ||
| 3115 | |||
| 3116 | Note that the aggregate constructs in Pike mode, @samp{(@{}, @samp{@})}, | ||
| 3117 | @samp{([}, @samp{])}, and @samp{(<}, @samp{>)}, do not count as brace | ||
| 3118 | lists in this regard, even though they do for normal indentation | ||
| 3119 | purposes. It's currently not possible to set automatic newlines on | ||
| 3120 | these constructs. | ||
| 3121 | |||
| 3122 | @item The associated value - the ``ACTION'' list or function | ||
| 3123 | The value associated with each syntactic symbol in this association | ||
| 3124 | list is called an @var{action}, which can be either a list or a | ||
| 3125 | function which returns a list. @xref{Custom Braces}, for how to use | ||
| 3126 | a function as a brace hanging @var{action}. | ||
| 3127 | |||
| 3128 | The list @var{action} (or the list returned by @var{action} when it's | ||
| 3129 | a function) contains some combination of the symbols @code{before} and | ||
| 3130 | @code{after}, directing @ccmode{} where to put newlines in | ||
| 3131 | relationship to the brace being inserted. Thus, if the list contains | ||
| 3132 | only the symbol @code{after}, then the brace hangs on the right side | ||
| 3133 | of the line, as in: | ||
| 3092 | 3134 | ||
| 3093 | @example | 3135 | @example |
| 3094 | @group | 3136 | // here, open braces always `hang' |
| 3095 | 1: void main(int argc, char**) | 3137 | void spam( int i ) @{ |
| 3096 | 2: @{ | 3138 | if( i == 7 ) @{ |
| 3097 | 3: cout << "There were " | 3139 | dosomething(i); |
| 3098 | 4: << argc | 3140 | @} |
| 3099 | 5: << " arguments passed to the program" | 3141 | @} |
| 3100 | 6: << endl; | ||
| 3101 | 7: @} | ||
| 3102 | @end group | ||
| 3103 | @end example | 3142 | @end example |
| 3104 | 3143 | ||
| 3105 | Custom indentation functions can be as simple or as complex as you like, | 3144 | When the list contains both @code{after} and @code{before}, the braces |
| 3106 | and any syntactic symbol that appears in @code{c-offsets-alist} can have | 3145 | will appear on a line by themselves, as shown by the close braces in |
| 3107 | a custom indentation function associated with it. | 3146 | the above example. The list can also be empty, in which case newlines |
| 3147 | are added neither before nor after the brace. | ||
| 3148 | @end table | ||
| 3108 | 3149 | ||
| 3109 | @ccmode{} comes with an extensive set of predefined indentation | 3150 | If a syntactic symbol is missing entirely from |
| 3110 | functions, not all of which are used by the default styles. So there's | 3151 | @code{c-hanging-braces-alist}, it's treated in the same way as an |
| 3111 | a good chance the function you want already exists. @xref{Indentation | 3152 | @var{action} with a list containing @code{before} and @code{after}, so |
| 3112 | Functions}, for a list of them. If you have written an indentation | 3153 | that braces by default end up on their own line. |
| 3113 | function that you think is generally useful, you're very welcome to | 3154 | |
| 3114 | contribute it; please contact @email{bug-cc-mode@@gnu.org}. | 3155 | For example, the default value of @code{c-hanging-braces-alist} is: |
| 3156 | |||
| 3157 | @example | ||
| 3158 | ((brace-list-open) | ||
| 3159 | (brace-entry-open) | ||
| 3160 | (statement-cont) | ||
| 3161 | (substatement-open after) | ||
| 3162 | (block-close . c-snug-do-while) | ||
| 3163 | (extern-lang-open after) | ||
| 3164 | (namespace-open after) | ||
| 3165 | (module-open after) | ||
| 3166 | (composition-open after) | ||
| 3167 | (inexpr-class-open after) | ||
| 3168 | (inexpr-class-close before)) | ||
| 3169 | @end example | ||
| 3170 | |||
| 3171 | @noindent which says that @code{brace-list-open}, | ||
| 3172 | @code{brace-entry-open} and @code{statement-cont}@footnote{Brace lists | ||
| 3173 | inside statements, such as initializers for static array variables | ||
| 3174 | inside functions in C, are recognized as @code{statement-cont}. All | ||
| 3175 | normal substatement blocks are recognized with other symbols.} braces | ||
| 3176 | should both hang on the right side and allow subsequent text to follow | ||
| 3177 | on the same line as the brace. Also, @code{substatement-open}, | ||
| 3178 | @code{extern-lang-open}, and @code{inexpr-class-open} braces should hang | ||
| 3179 | on the right side, but subsequent text should follow on the next line. | ||
| 3180 | The opposite holds for @code{inexpr-class-close} braces; they won't | ||
| 3181 | hang, but the following text continues on the same line. Here, in the | ||
| 3182 | @code{block-close} entry, you also see an example of using a function as | ||
| 3183 | an @var{action}. In all other cases, braces are put on a line by | ||
| 3184 | themselves. | ||
| 3185 | @end defopt | ||
| 3115 | 3186 | ||
| 3187 | @menu | ||
| 3188 | * Custom Braces:: | ||
| 3189 | @end menu | ||
| 3116 | 3190 | ||
| 3117 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 3191 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3118 | @node Custom Brace and Colon Hanging, Customizing Semicolons and Commas, Custom Indentation Functions, Advanced Customizations | 3192 | @node Custom Braces, , Hanging Braces, Hanging Braces |
| 3119 | @comment node-name, next, previous, up | 3193 | @comment node-name, next, previous, up |
| 3120 | @subsection Custom Brace and Colon Hanging | 3194 | @subsection Custom Brace Hanging |
| 3121 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 3195 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3122 | 3196 | ||
| 3123 | @vindex c-hanging-braces-alist | 3197 | @vindex c-hanging-braces-alist |
| 3124 | @vindex hanging-braces-alist (c-) | 3198 | @vindex hanging-braces-alist (c-) |
| 3199 | @cindex action functions | ||
| 3125 | Syntactic symbols aren't the only place where you can customize | 3200 | Syntactic symbols aren't the only place where you can customize |
| 3126 | @ccmode{} with the lisp equivalent of callback functions. Brace | 3201 | @ccmode{} with the lisp equivalent of callback functions. Remember |
| 3127 | ``hanginess'' can also be determined by custom functions associated with | 3202 | that @var{action}s are usually a list containing some combination of |
| 3128 | syntactic symbols on the @code{c-hanging-braces-alist} style variable. | 3203 | the symbols @code{before} and @code{after} (@pxref{Hanging Braces}). |
| 3129 | Remember that @var{action}'s are typically a list containing some | 3204 | For more flexibility, you can instead specify brace ``hanginess'' by |
| 3130 | combination of the symbols @code{before} and @code{after} | 3205 | giving a synctactic symbol an @dfn{action function} in |
| 3131 | (@pxref{Hanging Braces}). However, an @var{action} can also be a | 3206 | @code{c-hanging-braces-alist}; this function determines the |
| 3132 | function which gets called when a brace matching that syntactic symbol | 3207 | ``hanginess'' of a brace, usually by looking at the code near it. |
| 3133 | is entered. | ||
| 3134 | 3208 | ||
| 3135 | @cindex customization, brace hanging | 3209 | @cindex customization, brace hanging |
| 3136 | These @var{action} functions are called with two arguments: the | 3210 | An action function is called with two arguments: the syntactic symbol |
| 3137 | syntactic symbol for the brace, and the buffer position at which the | 3211 | for the brace (e.g. @code{substatement-open}), and the buffer position |
| 3138 | brace was inserted. The @var{action} function is expected to return a | 3212 | where the brace has been inserted. Point is undefined on entry to an |
| 3139 | list containing some combination of @code{before} and @code{after}, | 3213 | action function, but the function must preserve it (e.g. by using |
| 3140 | including neither of them (i.e., @code{nil}). This return value has the | 3214 | @code{save-excursion}). The return value should be a list containing |
| 3141 | normal brace hanging semantics. | 3215 | some combination of @code{before} and @code{after}, including neither |
| 3216 | of them (i.e. @code{nil}). | ||
| 3217 | |||
| 3218 | @defvar c-syntactic-context | ||
| 3219 | @vindex syntactic-context (c-) | ||
| 3220 | During the call to the indentation or brace hanging @var{action} | ||
| 3221 | function, this variable is bound to the full syntactic analysis list. | ||
| 3222 | This might be, for example, @samp{((block-close 73))}. Don't ever | ||
| 3223 | give @code{c-syntactic-context} a value yourself---this would disrupt | ||
| 3224 | the proper functioning of @ccmode{}. | ||
| 3225 | |||
| 3226 | This variable is also bound in three other circumstances: | ||
| 3227 | (i)@tie{}when calling a c-hanging-semi&comma-criteria function | ||
| 3228 | (@pxref{Hanging Semicolons and Commas}; (ii)@tie{}when calling a | ||
| 3229 | line-up function (@pxref{Custom Line-Up}; (iii)@tie{}when calling a | ||
| 3230 | c-special-indent-hook function (@pxref{Other Indentation}). | ||
| 3231 | @end defvar | ||
| 3142 | 3232 | ||
| 3143 | As an example, @ccmode{} itself uses this feature to dynamically | 3233 | As an example, @ccmode{} itself uses this feature to dynamically |
| 3144 | determine the hanginess of braces which close ``do-while'' | 3234 | determine the hanginess of braces which close ``do-while'' |
| @@ -3186,54 +3276,92 @@ that a newline should be inserted before the brace, but not after it. | |||
| 3186 | In all other cases, it returns the list @samp{(before after)} so | 3276 | In all other cases, it returns the list @samp{(before after)} so |
| 3187 | that the brace appears on a line by itself. | 3277 | that the brace appears on a line by itself. |
| 3188 | 3278 | ||
| 3189 | @defvar c-syntactic-context | 3279 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3190 | @vindex syntactic-context (c-) | 3280 | @node Hanging Colons, Hanging Semicolons and Commas, Hanging Braces, Custom Auto-newlines |
| 3191 | During the call to the indentation or brace hanging @var{action} | 3281 | @comment node-name, next, previous, up |
| 3192 | function, this variable is bound to the full syntactic analysis list. | 3282 | @section Hanging Colons |
| 3193 | @end defvar | 3283 | @cindex hanging colons |
| 3284 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 3194 | 3285 | ||
| 3195 | @cindex customization, colon hanging | 3286 | @cindex customization, colon hanging |
| 3196 | @vindex c-hanging-colons-alist | 3287 | @vindex c-hanging-colons-alist |
| 3197 | @vindex hanging-colons-alist (c-) | 3288 | @vindex hanging-colons-alist (c-) |
| 3198 | Note that for symmetry, colon hanginess should be customizable by | ||
| 3199 | allowing function symbols as @var{action}s on the | ||
| 3200 | @code{c-hanging-colons-alist} style variable. Since no use has actually | ||
| 3201 | been found for this feature, it isn't currently implemented! | ||
| 3202 | 3289 | ||
| 3290 | Using a mechanism similar to brace hanging (@pxref{Hanging Braces}), | ||
| 3291 | colons can also be made to hang using the style variable | ||
| 3292 | @code{c-hanging-colons-alist} - When a colon is typed, @ccmode | ||
| 3293 | determines its syntactic context, looks this up in the alist | ||
| 3294 | @code{c-changing-colons-alist} and inserts up to two newlines | ||
| 3295 | accordingly. Here, however, If @ccmode fails to find an entry for a | ||
| 3296 | syntactic symbol in the alist, no newlines are inserted around the | ||
| 3297 | newly typed colon. | ||
| 3298 | |||
| 3299 | @defopt c-hanging-colons-alist | ||
| 3300 | @vindex hanging-colons-alist (c-) | ||
| 3301 | |||
| 3302 | @table @asis | ||
| 3303 | @item The Key - the syntactic symbol | ||
| 3304 | The syntactic symbols appropriate as keys in this association list | ||
| 3305 | are: @code{case-label}, @code{label}, @code{access-label}, | ||
| 3306 | @code{member-init-intro}, and @code{inher-intro}. @xref{Syntactic | ||
| 3307 | Symbols}. Elements with any other value as a key get ignored. | ||
| 3308 | |||
| 3309 | @item The associate value - the ``ACTION'' list | ||
| 3310 | The @var{action} here is simply a list containing a combination of the | ||
| 3311 | symbols @code{before} and @code{after}. Unlike in | ||
| 3312 | @code{c-hanging-braces-alist}, functions as @var{actions} are not | ||
| 3313 | supported - there doesn't seem to be any need for them. | ||
| 3314 | @end table | ||
| 3315 | @end defopt | ||
| 3316 | |||
| 3317 | In C++, double-colons are used as a scope operator but because these | ||
| 3318 | colons always appear right next to each other, newlines before and after | ||
| 3319 | them are controlled by a different mechanism, called @dfn{clean-ups} in | ||
| 3320 | @ccmode{}. @xref{Clean-ups}, for details. | ||
| 3203 | 3321 | ||
| 3204 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 3322 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3205 | @node Customizing Semicolons and Commas, Other Special Indentations, Custom Brace and Colon Hanging, Advanced Customizations | 3323 | @node Hanging Semicolons and Commas, , Hanging Colons, Custom Auto-newlines |
| 3206 | @comment node-name, next, previous, up | 3324 | @comment node-name, next, previous, up |
| 3207 | @subsection Customizing Semicolons and Commas | 3325 | @section Hanging Semicolons and Commas |
| 3326 | @cindex hanging semicolons | ||
| 3327 | @cindex hanging commas | ||
| 3208 | @cindex customization, semicolon newlines | 3328 | @cindex customization, semicolon newlines |
| 3209 | @cindex customization, comma newlines | 3329 | @cindex customization, comma newlines |
| 3210 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 3330 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3211 | 3331 | ||
| 3212 | You can also customize the insertion of newlines after semicolons and | ||
| 3213 | commas when the auto-newline minor mode is enabled (@pxref{Minor | ||
| 3214 | Modes}). | ||
| 3215 | |||
| 3216 | @defopt c-hanging-semi&comma-criteria | 3332 | @defopt c-hanging-semi&comma-criteria |
| 3217 | @vindex hanging-semi&comma-criteria (c-) | 3333 | @vindex hanging-semi&comma-criteria (c-) |
| 3218 | This style variable takes a list of hooks that get called when a | 3334 | This style variable takes a list of functions; these get called when |
| 3219 | semicolon or comma is inserted. The hooks are called in order without | 3335 | you type a semicolon or comma. The functions are called in order |
| 3220 | arguments, and are expected to return one of the following values: | 3336 | without arguments. When these functions are entered, point is just |
| 3337 | after the newly inserted @samp{;} or @samp{,} and they must preserve | ||
| 3338 | point (e.g., by using @code{save-excursion}). During the call, the | ||
| 3339 | variable @code{c-syntactic-context} is bound to the syntactic context | ||
| 3340 | of the current line@footnote{This was first introduced in @ccmode{} | ||
| 3341 | 5.31.} @pxref{Custom Braces}. These functions don't insert newlines | ||
| 3342 | themselves, rather they direct @ccmode{} whether or not to do so. | ||
| 3343 | They should return one of the following values: | ||
| 3221 | 3344 | ||
| 3222 | @table @code | 3345 | @table @code |
| 3223 | @item t | 3346 | @item t |
| 3224 | A newline is inserted, and no more functions from the list are called. | 3347 | A newline is to be inserted after the @samp{;} or @samp{,}, and no |
| 3348 | more functions from the list are to be called. | ||
| 3225 | @item stop | 3349 | @item stop |
| 3226 | No more functions from the list are called, but no newline is | 3350 | No more functions from the list are to be called, and no newline is to |
| 3227 | inserted. | 3351 | be inserted. |
| 3228 | @item nil | 3352 | @item nil |
| 3229 | No determination is made, and the next function in the list is called. | 3353 | No determination has been made, and the next function in the list is |
| 3354 | to be called. | ||
| 3230 | @end table | 3355 | @end table |
| 3231 | 3356 | ||
| 3232 | If every function in the list is called without a determination being | 3357 | Note that auto-newlines are never inserted @emph{before} a semicolon |
| 3233 | made, then no newline is added. The default value for this variable is a | 3358 | or comma. If every function in the list is called without a |
| 3234 | list containing a single function which inserts newlines only after | 3359 | determination being made, then no newline is added. |
| 3235 | semicolons which do not appear inside parenthesis lists (i.e., those | 3360 | |
| 3236 | that separate @code{for}-clause statements). | 3361 | In AWK mode, this variable is set by default to @code{nil}. In the |
| 3362 | other modes, the default value is a list containing a single function, | ||
| 3363 | @code{c-semi&comma-inside-parenlist}. This inserts newlines after all | ||
| 3364 | semicolons, apart from those separating @code{for}-clause statements. | ||
| 3237 | @end defopt | 3365 | @end defopt |
| 3238 | 3366 | ||
| 3239 | @defun c-semi&comma-no-newlines-before-nonblanks | 3367 | @defun c-semi&comma-no-newlines-before-nonblanks |
| @@ -3266,234 +3394,715 @@ statements. In addition to | |||
| 3266 | @ccmode{} also comes with the criteria function | 3394 | @ccmode{} also comes with the criteria function |
| 3267 | @code{c-semi&comma-no-newlines-for-oneline-inliners}, which suppresses | 3395 | @code{c-semi&comma-no-newlines-for-oneline-inliners}, which suppresses |
| 3268 | newlines after semicolons inside one-line inline method definitions | 3396 | newlines after semicolons inside one-line inline method definitions |
| 3269 | (e.g., in C++ or Java). | 3397 | (e.g. in C++ or Java). |
| 3270 | @end defun | 3398 | @end defun |
| 3271 | 3399 | ||
| 3272 | 3400 | ||
| 3273 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 3401 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3274 | @node Other Special Indentations, , Customizing Semicolons and Commas, Advanced Customizations | 3402 | @node Clean-ups, Indentation Engine Basics, Custom Auto-newlines, Top |
| 3275 | @comment node-name, next, previous, up | 3403 | @comment node-name, next, previous, up |
| 3276 | @subsection Other Special Indentations | 3404 | @chapter Clean-ups |
| 3405 | @cindex clean-ups | ||
| 3277 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 3406 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3278 | 3407 | ||
| 3279 | Here are the remaining odds and ends regarding indentation: | 3408 | @dfn{Clean-ups} are mechanisms which remove (or exceptionally, add) |
| 3409 | whitespace in specific circumstances and are complementary to colon | ||
| 3410 | and brace hanging. You enable a clean-up by adding its symbol into | ||
| 3411 | @code{c-cleanup-list}. | ||
| 3280 | 3412 | ||
| 3281 | @defopt c-label-minimum-indentation | 3413 | On the surface, it would seem that clean-ups overlap the functionality |
| 3282 | @vindex label-minimum-indentation (c-) | 3414 | provided by the @code{c-hanging-*-alist} variables. Clean-ups, |
| 3283 | In @samp{gnu} style (@pxref{Built-in Styles}), a minimum indentation | 3415 | however, are used to adjust code ``after-the-fact'', i.e. to adjust |
| 3284 | is imposed on lines inside top-level constructs. This minimum | 3416 | the whitespace in constructs later than when they were typed. |
| 3285 | indentation is controlled by this style variable. The default value | 3417 | |
| 3286 | is 1. | 3418 | Most of the clean-ups remove automatically inserted newlines, and are |
| 3419 | only active when auto-newline minor mode is turned on. Others will | ||
| 3420 | work all the time. Note that clean-ups are only performed when there | ||
| 3421 | is nothing but whitespace appearing between the individual components | ||
| 3422 | of the construct, and (apart from @code{comment-close-slash}) when the | ||
| 3423 | construct does not occur within a literal (@pxref{Auto-newlines}). | ||
| 3424 | |||
| 3425 | @defopt c-cleanup-list | ||
| 3426 | @vindex cleanup-list (c-) | ||
| 3427 | @cindex literal | ||
| 3428 | |||
| 3429 | You configure @ccmode{}'s clean-ups by setting the style variable | ||
| 3430 | @code{c-cleanup-list}, which is a list of clean-up symbols. By | ||
| 3431 | default, @ccmode{} cleans up only the @code{scope-operator} construct, | ||
| 3432 | which is necessary for proper C++ support. | ||
| 3287 | @end defopt | 3433 | @end defopt |
| 3288 | 3434 | ||
| 3289 | @defopt c-special-indent-hook | 3435 | These are the clean-ups that are only active when electric and |
| 3290 | @vindex special-indent-hook (c-) | 3436 | auto-newline minor modes are enabled: |
| 3291 | This style variable is a standard hook variable that is called after | 3437 | |
| 3292 | every line is indented by @ccmode{}. You can use it to do any special | 3438 | @c TBD: Would like to use some sort of @deffoo here; @table indents a |
| 3293 | indentation or line adjustments your style dictates, such as adding | 3439 | @c bit too much in dvi output. |
| 3294 | extra indentation to constructors or destructor declarations in a | 3440 | @table @code |
| 3295 | class definition, etc. Note that you should not change point or mark | 3441 | @item brace-else-brace |
| 3296 | inside your @code{c-special-indent-hook} functions, i.e., you'll | 3442 | Clean up @samp{@} else @{} constructs by placing the entire construct on |
| 3297 | probably want to wrap your function in a @code{save-excursion}. | 3443 | a single line. Clean up occurs when the open brace after the |
| 3298 | 3444 | @samp{else} is typed. So for example, this: | |
| 3299 | Setting @code{c-special-indent-hook} in your style definition is | 3445 | |
| 3300 | handled slightly differently than other variables. In your style | 3446 | @example |
| 3301 | definition, you should set the value for @code{c-special-indent-hook} | 3447 | @group |
| 3302 | to a function or list of functions, which will be appended to | 3448 | void spam(int i) |
| 3303 | @code{c-special-indent-hook} using @code{add-hook}. That way, the | 3449 | @{ |
| 3304 | current setting for the buffer local value of | 3450 | if( i==7 ) @{ |
| 3305 | @code{c-special-indent-hook} won't be overridden. | 3451 | dosomething(); |
| 3452 | @} | ||
| 3453 | else | ||
| 3454 | @{ | ||
| 3455 | @end group | ||
| 3456 | @end example | ||
| 3457 | |||
| 3458 | @noindent | ||
| 3459 | appears like this after the last open brace is typed: | ||
| 3460 | |||
| 3461 | @example | ||
| 3462 | @group | ||
| 3463 | void spam(int i) | ||
| 3464 | @{ | ||
| 3465 | if( i==7 ) @{ | ||
| 3466 | dosomething(); | ||
| 3467 | @} else @{ | ||
| 3468 | @end group | ||
| 3469 | @end example | ||
| 3470 | |||
| 3471 | @item brace-elseif-brace | ||
| 3472 | Similar to the @code{brace-else-brace} clean-up, but this cleans up | ||
| 3473 | @samp{@} else if (...) @{} constructs. For example: | ||
| 3474 | |||
| 3475 | @example | ||
| 3476 | @group | ||
| 3477 | void spam(int i) | ||
| 3478 | @{ | ||
| 3479 | if( i==7 ) @{ | ||
| 3480 | dosomething(); | ||
| 3481 | @} | ||
| 3482 | else if( i==3 ) | ||
| 3483 | @{ | ||
| 3484 | @end group | ||
| 3485 | @end example | ||
| 3486 | |||
| 3487 | @noindent | ||
| 3488 | appears like this after the last open parenthesis is typed: | ||
| 3489 | |||
| 3490 | @example | ||
| 3491 | @group | ||
| 3492 | void spam(int i) | ||
| 3493 | @{ | ||
| 3494 | if( i==7 ) @{ | ||
| 3495 | dosomething(); | ||
| 3496 | @} else if( | ||
| 3497 | @end group | ||
| 3498 | @end example | ||
| 3499 | |||
| 3500 | @noindent | ||
| 3501 | and like this after the last open brace is typed: | ||
| 3502 | |||
| 3503 | @example | ||
| 3504 | @group | ||
| 3505 | void spam(int i) | ||
| 3506 | @{ | ||
| 3507 | if( i==7 ) @{ | ||
| 3508 | dosomething(); | ||
| 3509 | @} else if( i==3 ) @{ | ||
| 3510 | @end group | ||
| 3511 | @end example | ||
| 3512 | |||
| 3513 | @item brace-catch-brace | ||
| 3514 | Analogous to @code{brace-elseif-brace}, but cleans up @samp{@} catch | ||
| 3515 | (...) @{} in C++ and Java mode. | ||
| 3516 | |||
| 3517 | @item empty-defun-braces | ||
| 3518 | Clean up braces following a top-level function or class definition that | ||
| 3519 | contains no body. Clean up occurs when the closing brace is typed. | ||
| 3520 | Thus the following: | ||
| 3521 | |||
| 3522 | @example | ||
| 3523 | @group | ||
| 3524 | class Spam | ||
| 3525 | @{ | ||
| 3526 | @} | ||
| 3527 | @end group | ||
| 3528 | @end example | ||
| 3529 | |||
| 3530 | @noindent | ||
| 3531 | is transformed into this when the close brace is typed: | ||
| 3532 | |||
| 3533 | @example | ||
| 3534 | @group | ||
| 3535 | class Spam | ||
| 3536 | @{@} | ||
| 3537 | @end group | ||
| 3538 | @end example | ||
| 3539 | |||
| 3540 | @item defun-close-semi | ||
| 3541 | Clean up the terminating semicolon on top-level function or class | ||
| 3542 | definitions when they follow a close brace. Clean up occurs when the | ||
| 3543 | semicolon is typed. So for example, the following: | ||
| 3544 | |||
| 3545 | @example | ||
| 3546 | @group | ||
| 3547 | class Spam | ||
| 3548 | @{ | ||
| 3549 | ... | ||
| 3550 | @} | ||
| 3551 | ; | ||
| 3552 | @end group | ||
| 3553 | @end example | ||
| 3554 | |||
| 3555 | @noindent | ||
| 3556 | is transformed into this when the semicolon is typed: | ||
| 3557 | |||
| 3558 | @example | ||
| 3559 | @group | ||
| 3560 | class Spam | ||
| 3561 | @{ | ||
| 3562 | ... | ||
| 3563 | @}; | ||
| 3564 | @end group | ||
| 3565 | @end example | ||
| 3566 | |||
| 3567 | @item list-close-comma | ||
| 3568 | Clean up commas following braces in array and aggregate initializers. | ||
| 3569 | Clean up occurs when the comma is typed. The space before the comma | ||
| 3570 | is zapped just like the space before the semicolon in | ||
| 3571 | @code{defun-close-semi}. | ||
| 3572 | |||
| 3573 | @item scope-operator | ||
| 3574 | Clean up double colons which might designate a C++ scope operator split | ||
| 3575 | across multiple lines@footnote{Certain C++ constructs introduce | ||
| 3576 | ambiguous situations, so @code{scope-operator} clean-ups might not | ||
| 3577 | always be correct. This usually only occurs when scoped identifiers | ||
| 3578 | appear in switch label tags.}. Clean up occurs when the second colon is | ||
| 3579 | typed. You will always want @code{scope-operator} in the | ||
| 3580 | @code{c-cleanup-list} when you are editing C++ code. | ||
| 3581 | |||
| 3582 | @item one-liner-defun | ||
| 3583 | Clean up a single line of code enclosed by defun braces by removing | ||
| 3584 | the whitespace before and after the code. The clean-up happens when | ||
| 3585 | the closing brace is typed. If the variable | ||
| 3586 | @code{c-max-one-liner-length} is set, the cleanup is only done if the | ||
| 3587 | resulting line would be no longer than the value of that variable. | ||
| 3588 | |||
| 3589 | For example, consider this AWK code: | ||
| 3590 | |||
| 3591 | @example | ||
| 3592 | @group | ||
| 3593 | BEGIN @{ | ||
| 3594 | FS = "\t" # use <TAB> as a field separator | ||
| 3595 | @} | ||
| 3596 | @end group | ||
| 3597 | @end example | ||
| 3598 | |||
| 3599 | @noindent | ||
| 3600 | It gets compacted to the following when the closing brace is typed: | ||
| 3601 | |||
| 3602 | @example | ||
| 3603 | @group | ||
| 3604 | BEGIN @{FS = "\t"@} # use <TAB> as a field separator | ||
| 3605 | @end group | ||
| 3606 | @end example | ||
| 3607 | |||
| 3608 | @defopt c-max-one-liner-length | ||
| 3609 | @vindex max-one-liner-length (c-) | ||
| 3610 | The maximum length of the resulting line for which the clean-up | ||
| 3611 | @code{one-liner-defun} will be triggered. This length is that of the entire | ||
| 3612 | line, including any leading whitespace and any trailing comment. Its | ||
| 3613 | default value is 80. If the value is zero or @code{nil}, no limit | ||
| 3614 | applies. | ||
| 3306 | @end defopt | 3615 | @end defopt |
| 3616 | @end table | ||
| 3617 | |||
| 3618 | The following clean-ups are always active when they occur on | ||
| 3619 | @code{c-cleanup-list}, regardless of whether Electric minor mode or | ||
| 3620 | Auto-newline minor mode are enabled: | ||
| 3621 | |||
| 3622 | @table @code | ||
| 3623 | @item space-before-funcall | ||
| 3624 | Insert a space between the function name and the opening parenthesis | ||
| 3625 | of a function call. This produces function calls in the style | ||
| 3626 | mandated by the GNU coding standards, e.g. @samp{signal@tie{}(SIGINT, | ||
| 3627 | SIG_IGN)} and @samp{abort@tie{}()}. Clean up occurs when the opening | ||
| 3628 | parenthesis is typed. This clean-up should never be active in AWK | ||
| 3629 | Mode, since such a space is syntactically invalid for user defined | ||
| 3630 | functions. | ||
| 3631 | |||
| 3632 | @item compact-empty-funcall | ||
| 3633 | Clean up any space between the function name and the opening parenthesis | ||
| 3634 | of a function call that has no arguments. This is typically used | ||
| 3635 | together with @code{space-before-funcall} if you prefer the GNU function | ||
| 3636 | call style for functions with arguments but think it looks ugly when | ||
| 3637 | it's only an empty parenthesis pair. I.e. you will get @samp{signal | ||
| 3638 | (SIGINT, SIG_IGN)}, but @samp{abort()}. Clean up occurs when the | ||
| 3639 | closing parenthesis is typed. | ||
| 3640 | |||
| 3641 | @item comment-close-slash | ||
| 3642 | When inside a block comment, terminate the comment when you type a | ||
| 3643 | slash at the beginning of a line (i.e. immediately after the comment | ||
| 3644 | prefix). This clean-up removes whitespace preceding the slash and if | ||
| 3645 | needed, inserts a star to complete the token @samp{*/}. | ||
| 3646 | @end table | ||
| 3647 | |||
| 3648 | |||
| 3649 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 3650 | @node Indentation Engine Basics, Customizing Indentation, Clean-ups, Top | ||
| 3651 | @comment node-name, next, previous, up | ||
| 3652 | @chapter Indentation Engine Basics | ||
| 3653 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 3654 | |||
| 3655 | This chapter will briefly cover how @ccmode{} indents lines of code. | ||
| 3656 | It is helpful to understand the indentation model being used so that | ||
| 3657 | you will know how to customize @ccmode{} for your personal coding | ||
| 3658 | style. All the details are in @ref{Customizing Indentation}. | ||
| 3659 | |||
| 3660 | @ccmode{} has an indentation engine that provides a flexible and | ||
| 3661 | general mechanism for customizing indentation. When @ccmode{} indents | ||
| 3662 | a line of code, it separates its calculations into two steps: | ||
| 3663 | |||
| 3664 | @enumerate | ||
| 3665 | @item | ||
| 3666 | @cindex syntactic symbol | ||
| 3667 | @cindex anchor position | ||
| 3668 | It analyzes the line to determine its @dfn{syntactic symbol(s)} (the | ||
| 3669 | kind of language construct it's looking at) and its @dfn{anchor | ||
| 3670 | position} (the position earlier in the file that @ccmode{} will indent | ||
| 3671 | the line relative to). The anchor position might be the location of | ||
| 3672 | an opening brace in the previous line, for example. @xref{Syntactic | ||
| 3673 | Analysis}. | ||
| 3674 | @item | ||
| 3675 | @cindex offsets | ||
| 3676 | @cindex indentation offset specifications | ||
| 3677 | It looks up the syntactic symbol(s) in the configuration to get the | ||
| 3678 | corresponding @dfn{offset(s)}. The symbol @code{+}, which means | ||
| 3679 | ``indent this line one more level'' is a typical offset. @ccmode{} | ||
| 3680 | then applies these offset(s) to the anchor position, giving the | ||
| 3681 | indentation for the line. The different sorts of offsets are | ||
| 3682 | described in @ref{c-offsets-alist}. | ||
| 3683 | @end enumerate | ||
| 3684 | |||
| 3685 | In exceptional circumstances, the syntax directed indentation | ||
| 3686 | described here may be a nuisance rather than a help. You can disable | ||
| 3687 | it by setting @code{c-syntactic-indentation} to @code{nil}. (To set | ||
| 3688 | the variable interactively, @ref{Minor Modes}). | ||
| 3689 | |||
| 3690 | @defopt c-syntactic-indentation | ||
| 3691 | @vindex syntactic-indentation (c-) | ||
| 3692 | When this is non-@code{nil} (which it is by default), the indentation | ||
| 3693 | of code is done according to its syntactic structure. When it's | ||
| 3694 | @code{nil}, every line is just indented to the same level as the | ||
| 3695 | previous one, and @kbd{TAB} (@code{c-indent-command}) adjusts the | ||
| 3696 | indentation in steps of @code{c-basic-offset}. The current style | ||
| 3697 | (@pxref{Config Basics}) then has no effect on indentation, nor do any | ||
| 3698 | of the variables associated with indentation, not even | ||
| 3699 | @code{c-special-indent-hook}. | ||
| 3700 | @end defopt | ||
| 3701 | |||
| 3702 | @menu | ||
| 3703 | * Syntactic Analysis:: | ||
| 3704 | * Syntactic Symbols:: | ||
| 3705 | * Indentation Calculation:: | ||
| 3706 | @end menu | ||
| 3307 | 3707 | ||
| 3308 | 3708 | ||
| 3309 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 3709 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3310 | @node Syntactic Symbols, Indentation Functions, Customizing Indentation, Top | 3710 | @node Syntactic Analysis, Syntactic Symbols, Indentation Engine Basics, Indentation Engine Basics |
| 3311 | @comment node-name, next, previous, up | 3711 | @comment node-name, next, previous, up |
| 3312 | @chapter Syntactic Symbols | 3712 | @section Syntactic Analysis |
| 3713 | @cindex syntactic analysis | ||
| 3714 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 3715 | |||
| 3716 | @cindex syntactic element | ||
| 3717 | @cindex syntactic context | ||
| 3718 | The first thing @ccmode{} does when indenting a line of code, is to | ||
| 3719 | analyze the line, determining the @dfn{syntactic context} of the | ||
| 3720 | (first) construct on that line. It's a list of @dfn{syntactic | ||
| 3721 | elements}, where each syntactic element in turn is a list@footnote{In | ||
| 3722 | @ccmode 5.28 and earlier, a syntactic element was a dotted pair; the | ||
| 3723 | cons was the syntactic symbol and the cdr was the anchor position. | ||
| 3724 | For compatibility's sake, the parameter passed to a line-up function | ||
| 3725 | still has this dotted pair form (@pxref{Custom Line-Up}).} Here is a | ||
| 3726 | brief and typical example: | ||
| 3727 | |||
| 3728 | @example | ||
| 3729 | ((defun-block-intro 1959)) | ||
| 3730 | @end example | ||
| 3731 | |||
| 3732 | @cindex syntactic symbol | ||
| 3733 | @noindent | ||
| 3734 | The first thing inside each syntactic element is always a | ||
| 3735 | @dfn{syntactic symbol}. It describes the kind of construct that was | ||
| 3736 | recognized, e.g. @code{statement}, @code{substatement}, | ||
| 3737 | @code{class-open}, @code{class-close}, etc. @xref{Syntactic Symbols}, | ||
| 3738 | for a complete list of currently recognized syntactic symbols and | ||
| 3739 | their semantics. The remaining entries are various data associated | ||
| 3740 | with the recognized construct - there might be zero or more. | ||
| 3741 | |||
| 3742 | @cindex anchor position | ||
| 3743 | Conceptually, a line of code is always indented relative to some | ||
| 3744 | position higher up in the buffer (typically the indentation of the | ||
| 3745 | previous line). That position is the @dfn{anchor position} in the | ||
| 3746 | syntactic element. If there is an entry after the syntactic symbol in | ||
| 3747 | the syntactic element list then it's either nil or that anchor position. | ||
| 3748 | |||
| 3749 | Here is an example. Suppose we had the following code as the only thing | ||
| 3750 | in a C++ buffer @footnote{The line numbers in this and future examples | ||
| 3751 | don't actually appear in the buffer, of course!}: | ||
| 3752 | |||
| 3753 | @example | ||
| 3754 | 1: void swap( int& a, int& b ) | ||
| 3755 | 2: @{ | ||
| 3756 | 3: int tmp = a; | ||
| 3757 | 4: a = b; | ||
| 3758 | 5: b = tmp; | ||
| 3759 | 6: @} | ||
| 3760 | @end example | ||
| 3761 | |||
| 3762 | @noindent | ||
| 3763 | We can use @kbd{C-c C-s} (@code{c-show-syntactic-information}) to | ||
| 3764 | report what the syntactic analysis is for the current line: | ||
| 3765 | |||
| 3766 | @table @asis | ||
| 3767 | @item @kbd{C-c C-s} (@code{c-show-syntactic-information}) | ||
| 3768 | @kindex C-c C-s | ||
| 3769 | @findex c-show-syntactic-information | ||
| 3770 | @findex show-syntactic-information (c-) | ||
| 3771 | This command calculates the syntactic analysis of the current line and | ||
| 3772 | displays it in the minibuffer. The command also highlights the anchor | ||
| 3773 | position(s). | ||
| 3774 | @end table | ||
| 3775 | |||
| 3776 | Running this command on line 4 of this example, we'd see in the echo | ||
| 3777 | area@footnote{With a universal argument (i.e. @kbd{C-u C-c C-s}) the | ||
| 3778 | analysis is inserted into the buffer as a comment on the current | ||
| 3779 | line.}: | ||
| 3780 | |||
| 3781 | @example | ||
| 3782 | ((statement 35)) | ||
| 3783 | @end example | ||
| 3784 | |||
| 3785 | @noindent | ||
| 3786 | and the @samp{i} of @code{int} on line 3 would be highlighted. This | ||
| 3787 | tells us that the line is a statement and it is indented relative to | ||
| 3788 | buffer position 35, the highlighted position. If you were to move | ||
| 3789 | point to line 3 and hit @kbd{C-c C-s}, you would see: | ||
| 3790 | |||
| 3791 | @example | ||
| 3792 | ((defun-block-intro 29)) | ||
| 3793 | @end example | ||
| 3794 | |||
| 3795 | @noindent | ||
| 3796 | This indicates that the @samp{int} line is the first statement in a top | ||
| 3797 | level function block, and is indented relative to buffer position 29, | ||
| 3798 | which is the brace just after the function header. | ||
| 3799 | |||
| 3800 | Here's another example: | ||
| 3801 | |||
| 3802 | @example | ||
| 3803 | 1: int add( int val, int incr, int doit ) | ||
| 3804 | 2: @{ | ||
| 3805 | 3: if( doit ) | ||
| 3806 | 4: @{ | ||
| 3807 | 5: return( val + incr ); | ||
| 3808 | 6: @} | ||
| 3809 | 7: return( val ); | ||
| 3810 | 8: @} | ||
| 3811 | @end example | ||
| 3812 | |||
| 3813 | @noindent | ||
| 3814 | Hitting @kbd{C-c C-s} on line 4 gives us: | ||
| 3815 | |||
| 3816 | @example | ||
| 3817 | ((substatement-open 46)) | ||
| 3818 | @end example | ||
| 3819 | |||
| 3820 | @cindex substatement | ||
| 3821 | @cindex substatement block | ||
| 3822 | @noindent | ||
| 3823 | which tells us that this is a brace that @emph{opens} a substatement | ||
| 3824 | block. @footnote{A @dfn{substatement} is the line after a | ||
| 3825 | conditional statement, such as @code{if}, @code{else}, @code{while}, | ||
| 3826 | @code{do}, @code{switch}, etc. A @dfn{substatement | ||
| 3827 | block} is a brace block following one of these conditional statements.} | ||
| 3828 | |||
| 3829 | @cindex comment-only line | ||
| 3830 | Syntactic contexts can contain more than one element, and syntactic | ||
| 3831 | elements need not have anchor positions. The most common example of | ||
| 3832 | this is a @dfn{comment-only line}: | ||
| 3833 | |||
| 3834 | @example | ||
| 3835 | 1: void draw_list( List<Drawables>& drawables ) | ||
| 3836 | 2: @{ | ||
| 3837 | 3: // call the virtual draw() method on each element in list | ||
| 3838 | 4: for( int i=0; i < drawables.count(), ++i ) | ||
| 3839 | 5: @{ | ||
| 3840 | 6: drawables[i].draw(); | ||
| 3841 | 7: @} | ||
| 3842 | 8: @} | ||
| 3843 | @end example | ||
| 3844 | |||
| 3845 | @noindent | ||
| 3846 | Hitting @kbd{C-c C-s} on line 3 of this example gives: | ||
| 3847 | |||
| 3848 | @example | ||
| 3849 | ((comment-intro) (defun-block-intro 46)) | ||
| 3850 | @end example | ||
| 3851 | |||
| 3852 | @noindent | ||
| 3853 | and you can see that the syntactic context contains two syntactic | ||
| 3854 | elements. Notice that the first element, @samp{(comment-intro)}, has no | ||
| 3855 | anchor position. | ||
| 3856 | |||
| 3857 | |||
| 3858 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 3859 | @node Syntactic Symbols, Indentation Calculation, Syntactic Analysis, Indentation Engine Basics | ||
| 3860 | @comment node-name, next, previous, up | ||
| 3861 | @section Syntactic Symbols | ||
| 3313 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 3862 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3314 | 3863 | ||
| 3315 | @cindex syntactic symbols, brief list | 3864 | @cindex syntactic symbols, brief list |
| 3316 | @vindex c-offsets-alist | 3865 | @vindex c-offsets-alist |
| 3317 | @vindex offsets-alist (c-) | 3866 | @vindex offsets-alist (c-) |
| 3318 | Here is a complete list of the recognized syntactic symbols as described | 3867 | This section is a complete list of the syntactic symbols which appear |
| 3319 | in the @code{c-offsets-alist} style variable, along with a brief | 3868 | in the @code{c-offsets-alist} style variable, along with brief |
| 3320 | description. More detailed descriptions follow. | 3869 | descriptions. The previous section (@pxref{Syntactic Analysis}) |
| 3870 | states what syntactic symbols are and how the indentation engine uses | ||
| 3871 | them. | ||
| 3872 | |||
| 3873 | More detailed descriptions of these symbols, together with snippets of | ||
| 3874 | source code to which they apply, appear in the examples in the | ||
| 3875 | subsections below. Note that, in the interests of brevity, the anchor | ||
| 3876 | position associated with most syntactic symbols is @emph{not} | ||
| 3877 | specified. In cases of doubt, type @kbd{C-c C-s} on a pertinent | ||
| 3878 | line---this highlights the anchor position. | ||
| 3879 | |||
| 3880 | @ssindex -open symbols | ||
| 3881 | @ssindex -close symbols | ||
| 3882 | @ssindex -block-intro symbols | ||
| 3883 | The syntactic symbols which indicate brace constructs follow a general | ||
| 3884 | naming convention. When a line begins with an open or close brace, | ||
| 3885 | its syntactic symbol will contain the suffix @code{-open} or | ||
| 3886 | @code{-close} respectively. The first line within the brace block | ||
| 3887 | construct will contain the suffix @code{-block-intro}. | ||
| 3888 | |||
| 3889 | @ssindex -intro symbols | ||
| 3890 | @ssindex -cont symbols | ||
| 3891 | In constructs which can span several lines, a distinction is usually | ||
| 3892 | made between the first line that introduces the construct and the | ||
| 3893 | lines that continue it. The syntactic symbols that indicate these | ||
| 3894 | lines will contain the suffixes @code{-intro} or @code{-cont} | ||
| 3895 | respectively. | ||
| 3896 | |||
| 3897 | The best way to understand how all this works is by looking at some | ||
| 3898 | examples. Remember that you can see the syntax of any source code | ||
| 3899 | line by using @kbd{C-c C-s}. | ||
| 3321 | 3900 | ||
| 3322 | @table @code | 3901 | @table @code |
| 3323 | @item string | 3902 | @item string |
| 3324 | Inside a multiline string. | 3903 | Inside a multiline string. @ref{Literal Symbols}. |
| 3325 | @item c | 3904 | @item c |
| 3326 | Inside a multiline C style block comment. | 3905 | Inside a multiline C style block comment. @ref{Literal Symbols}. |
| 3327 | @item defun-open | 3906 | @item defun-open |
| 3328 | Brace that opens a top-level function definition. | 3907 | Brace that opens a top-level function definition. @ref{Function |
| 3908 | Symbols}. | ||
| 3329 | @item defun-close | 3909 | @item defun-close |
| 3330 | Brace that closes a top-level function definition. | 3910 | Brace that closes a top-level function definition. @ref{Function |
| 3911 | Symbols}. | ||
| 3331 | @item defun-block-intro | 3912 | @item defun-block-intro |
| 3332 | The first line in a top-level defun. | 3913 | The first line in a top-level defun. @ref{Function Symbols}. |
| 3333 | @item class-open | 3914 | @item class-open |
| 3334 | Brace that opens a class definition. | 3915 | Brace that opens a class definition. @ref{Class Symbols}. |
| 3335 | @item class-close | 3916 | @item class-close |
| 3336 | Brace that closes a class definition. | 3917 | Brace that closes a class definition. @ref{Class Symbols}. |
| 3337 | @item inline-open | 3918 | @item inline-open |
| 3338 | Brace that opens an in-class inline method. | 3919 | Brace that opens an in-class inline method. @ref{Class Symbols}. |
| 3339 | @item inline-close | 3920 | @item inline-close |
| 3340 | Brace that closes an in-class inline method. | 3921 | Brace that closes an in-class inline method. @ref{Class Symbols}. |
| 3341 | @item func-decl-cont | 3922 | @item func-decl-cont |
| 3342 | The region between a function definition's argument list and the | 3923 | The region between a function definition's argument list and the |
| 3343 | function opening brace (excluding K&R argument declarations). In C, you | 3924 | function opening brace (excluding K&R argument declarations). In C, |
| 3344 | cannot put anything but whitespace and comments in this region, however | 3925 | you cannot put anything but whitespace and comments in this region, |
| 3345 | in C++ and Java, @code{throws} declarations and other things can appear | 3926 | however in C++ and Java, @code{throws} declarations and other things |
| 3346 | here. | 3927 | can appear here. @ref{Literal Symbols}. @c @emph{FIXME!!! Can it not |
| 3928 | @c go somewhere better?} | ||
| 3347 | @item knr-argdecl-intro | 3929 | @item knr-argdecl-intro |
| 3348 | First line of a K&R C argument declaration. | 3930 | First line of a K&R C argument declaration. @ref{K&R Symbols}. |
| 3349 | @item knr-argdecl | 3931 | @item knr-argdecl |
| 3350 | Subsequent lines in a K&R C argument declaration. | 3932 | Subsequent lines in a K&R C argument declaration. @ref{K&R Symbols}. |
| 3351 | @item topmost-intro | 3933 | @item topmost-intro |
| 3352 | The first line in a ``topmost'' definition. | 3934 | The first line in a ``topmost'' definition. @ref{Function Symbols}. |
| 3353 | @item topmost-intro-cont | 3935 | @item topmost-intro-cont |
| 3354 | Topmost definition continuation lines. This is only used in the parts | 3936 | Topmost definition continuation lines. This is only used in the parts |
| 3355 | that aren't covered by other symbols such as @code{func-decl-cont} and | 3937 | that aren't covered by other symbols such as @code{func-decl-cont} and |
| 3356 | @code{knr-argdecl}. | 3938 | @code{knr-argdecl}. @ref{Function Symbols}. |
| 3357 | @item member-init-intro | 3939 | @item member-init-intro |
| 3358 | First line in a member initialization list. | 3940 | First line in a member initialization list. @ref{Class Symbols}. |
| 3359 | @item member-init-cont | 3941 | @item member-init-cont |
| 3360 | Subsequent member initialization list lines. | 3942 | Subsequent member initialization list lines. @ref{Class Symbols}. |
| 3361 | @item inher-intro | 3943 | @item inher-intro |
| 3362 | First line of a multiple inheritance list. | 3944 | First line of a multiple inheritance list. @ref{Class Symbols}. |
| 3363 | @item inher-cont | 3945 | @item inher-cont |
| 3364 | Subsequent multiple inheritance lines. | 3946 | Subsequent multiple inheritance lines. @ref{Class Symbols}. |
| 3365 | @item block-open | 3947 | @item block-open |
| 3366 | Statement block open brace. | 3948 | Statement block open brace. @ref{Literal Symbols}. |
| 3367 | @item block-close | 3949 | @item block-close |
| 3368 | Statement block close brace. | 3950 | Statement block close brace. @ref{Conditional Construct Symbols}. |
| 3369 | @item brace-list-open | 3951 | @item brace-list-open |
| 3370 | Open brace of an enum or static array list. | 3952 | Open brace of an enum or static array list. @ref{Brace List Symbols}. |
| 3371 | @item brace-list-close | 3953 | @item brace-list-close |
| 3372 | Close brace of an enum or static array list. | 3954 | Close brace of an enum or static array list. @ref{Brace List Symbols}. |
| 3373 | @item brace-list-intro | 3955 | @item brace-list-intro |
| 3374 | First line in an enum or static array list. | 3956 | First line in an enum or static array list. @ref{Brace List Symbols}. |
| 3375 | @item brace-list-entry | 3957 | @item brace-list-entry |
| 3376 | Subsequent lines in an enum or static array list. | 3958 | Subsequent lines in an enum or static array list. @ref{Brace List |
| 3959 | Symbols}. | ||
| 3377 | @item brace-entry-open | 3960 | @item brace-entry-open |
| 3378 | Subsequent lines in an enum or static array list where the line begins | 3961 | Subsequent lines in an enum or static array list where the line begins |
| 3379 | with an open brace. | 3962 | with an open brace. @ref{Brace List Symbols}. |
| 3380 | @item statement | 3963 | @item statement |
| 3381 | A statement. | 3964 | A statement. @ref{Function Symbols}. |
| 3382 | @item statement-cont | 3965 | @item statement-cont |
| 3383 | A continuation of a statement. | 3966 | A continuation of a statement. @ref{Function Symbols}. |
| 3384 | @item statement-block-intro | 3967 | @item statement-block-intro |
| 3385 | The first line in a new statement block. | 3968 | The first line in a new statement block. @ref{Conditional Construct |
| 3969 | Symbols}. | ||
| 3386 | @item statement-case-intro | 3970 | @item statement-case-intro |
| 3387 | The first line in a case block. | 3971 | The first line in a case block. @ref{Switch Statement Symbols}. |
| 3388 | @item statement-case-open | 3972 | @item statement-case-open |
| 3389 | The first line in a case block that starts with a brace. | 3973 | The first line in a case block that starts with a brace. @ref{Switch |
| 3974 | Statement Symbols}. | ||
| 3390 | @item substatement | 3975 | @item substatement |
| 3391 | The first line after a conditional or loop construct. | 3976 | The first line after a conditional or loop construct. |
| 3977 | @ref{Conditional Construct Symbols}. | ||
| 3392 | @item substatement-open | 3978 | @item substatement-open |
| 3393 | The brace that opens a substatement block. | 3979 | The brace that opens a substatement block. @ref{Conditional Construct |
| 3980 | Symbols}. | ||
| 3394 | @item substatement-label | 3981 | @item substatement-label |
| 3395 | The first line after a conditional or loop construct if it's a label. | 3982 | The first line after a conditional or loop construct if it's a label. |
| 3983 | @ref{Conditional Construct Symbols}. | ||
| 3396 | @item case-label | 3984 | @item case-label |
| 3397 | A label in a @code{switch} block. | 3985 | A label in a @code{switch} block. @ref{Switch Statement Symbols}. |
| 3398 | @item access-label | 3986 | @item access-label |
| 3399 | C++ access control label. | 3987 | C++ access control label. @ref{Class Symbols}. |
| 3400 | @item label | 3988 | @item label |
| 3401 | Any other label. | 3989 | Any other label. @ref{Literal Symbols}. |
| 3402 | @item do-while-closure | 3990 | @item do-while-closure |
| 3403 | The @code{while} line that ends a @code{do}-@code{while} construct. | 3991 | The @code{while} line that ends a @code{do}-@code{while} construct. |
| 3992 | @ref{Conditional Construct Symbols}. | ||
| 3404 | @item else-clause | 3993 | @item else-clause |
| 3405 | The @code{else} line of an @code{if}-@code{else} construct. | 3994 | The @code{else} line of an @code{if}-@code{else} construct. |
| 3995 | @ref{Conditional Construct Symbols}. | ||
| 3406 | @item catch-clause | 3996 | @item catch-clause |
| 3407 | The @code{catch} or @code{finally} (in Java) line of a | 3997 | The @code{catch} or @code{finally} (in Java) line of a |
| 3408 | @code{try}-@code{catch} construct. | 3998 | @code{try}-@code{catch} construct. @ref{Conditional Construct |
| 3999 | Symbols}. | ||
| 3409 | @item comment-intro | 4000 | @item comment-intro |
| 3410 | A line containing only a comment introduction. | 4001 | A line containing only a comment introduction. @ref{Literal Symbols}. |
| 3411 | @item arglist-intro | 4002 | @item arglist-intro |
| 3412 | The first line in an argument list. | 4003 | The first line in an argument list. @ref{Paren List Symbols}. |
| 3413 | @item arglist-cont | 4004 | @item arglist-cont |
| 3414 | Subsequent argument list lines when no arguments follow on the same line | 4005 | Subsequent argument list lines when no arguments follow on the same |
| 3415 | as the arglist opening paren. | 4006 | line as the arglist opening paren. @ref{Paren List Symbols}. |
| 3416 | @item arglist-cont-nonempty | 4007 | @item arglist-cont-nonempty |
| 3417 | Subsequent argument list lines when at least one argument follows on the | 4008 | Subsequent argument list lines when at least one argument follows on |
| 3418 | same line as the arglist opening paren. | 4009 | the same line as the arglist opening paren. @ref{Paren List Symbols}. |
| 3419 | @item arglist-close | 4010 | @item arglist-close |
| 3420 | The solo close paren of an argument list. | 4011 | The solo close paren of an argument list. @ref{Paren List Symbols}. |
| 3421 | @item stream-op | 4012 | @item stream-op |
| 3422 | Lines continuing a stream operator (C++ only). | 4013 | Lines continuing a stream operator (C++ only). @ref{Literal |
| 4014 | Symbols}. @c @emph{FIXME!!! Can this not be moved somewhere better?} | ||
| 3423 | @item inclass | 4015 | @item inclass |
| 3424 | The line is nested inside a class definition. | 4016 | The line is nested inside a class definition. @ref{Class Symbols}. |
| 3425 | @item cpp-macro | 4017 | @item cpp-macro |
| 3426 | The start of a preprocessor macro definition. | 4018 | The start of a preprocessor macro definition. @ref{Literal Symbols}. |
| 3427 | @item cpp-define-intro | 4019 | @item cpp-define-intro |
| 3428 | The first line inside a multiline preproprocessor macro if | 4020 | The first line inside a multiline preproprocessor macro if |
| 3429 | @code{c-syntactic-indentation-in-macros} is set. | 4021 | @code{c-syntactic-indentation-in-macros} is set. @ref{Multiline Macro |
| 4022 | Symbols}. | ||
| 3430 | @item cpp-macro-cont | 4023 | @item cpp-macro-cont |
| 3431 | All lines inside multiline preprocessor macros if | 4024 | All lines inside multiline preprocessor macros if |
| 3432 | @code{c-syntactic-indentation-in-macros} is @code{nil}. | 4025 | @code{c-syntactic-indentation-in-macros} is @code{nil}. |
| 4026 | @ref{Multiline Macro Symbols}. | ||
| 3433 | @item friend | 4027 | @item friend |
| 3434 | A C++ friend declaration. | 4028 | A C++ friend declaration. @ref{Class Symbols}. |
| 3435 | @item objc-method-intro | 4029 | @item objc-method-intro |
| 3436 | The first line of an Objective-C method definition. | 4030 | The first line of an Objective-C method definition. @ref{Objective-C |
| 4031 | Method Symbols}. | ||
| 3437 | @item objc-method-args-cont | 4032 | @item objc-method-args-cont |
| 3438 | Lines continuing an Objective-C method definition. | 4033 | Lines continuing an Objective-C method definition. @ref{Objective-C |
| 4034 | Method Symbols}. | ||
| 3439 | @item objc-method-call-cont | 4035 | @item objc-method-call-cont |
| 3440 | Lines continuing an Objective-C method call. | 4036 | Lines continuing an Objective-C method call. @ref{Objective-C Method |
| 4037 | Symbols}. | ||
| 3441 | @item extern-lang-open | 4038 | @item extern-lang-open |
| 3442 | Brace that opens an @code{extern} block (e.g., @code{extern "C" @{...@}}). | 4039 | Brace that opens an @code{extern} block (e.g. @code{extern "C" |
| 4040 | @{...@}}). @ref{External Scope Symbols}. | ||
| 3443 | @item extern-lang-close | 4041 | @item extern-lang-close |
| 3444 | Brace that closes an @code{extern} block. | 4042 | Brace that closes an @code{extern} block. @ref{External Scope |
| 4043 | Symbols}. | ||
| 3445 | @item inextern-lang | 4044 | @item inextern-lang |
| 3446 | Analogous to @code{inclass} syntactic symbol, but used inside | 4045 | Analogous to @code{inclass} syntactic symbol, but used inside |
| 3447 | @code{extern} blocks. | 4046 | @code{extern} blocks. @ref{External Scope Symbols}. |
| 3448 | @item namespace-open | 4047 | @item namespace-open |
| 3449 | @itemx namespace-close | 4048 | @itemx namespace-close |
| 3450 | @itemx innamespace | 4049 | @itemx innamespace |
| 3451 | These are analogous to the three @code{extern-lang} symbols above, but | 4050 | These are analogous to the three @code{extern-lang} symbols above, but |
| 3452 | are returned for C++ namespace blocks. | 4051 | are returned for C++ namespace blocks. @ref{External Scope Symbols}. |
| 3453 | @item module-open | 4052 | @item module-open |
| 3454 | @itemx module-close | 4053 | @itemx module-close |
| 3455 | @itemx inmodule | 4054 | @itemx inmodule |
| 3456 | Analogous to the above, but for CORBA IDL @code{module} blocks. | 4055 | Analogous to the above, but for CORBA IDL @code{module} blocks. |
| 4056 | @ref{External Scope Symbols}. | ||
| 3457 | @item composition-open | 4057 | @item composition-open |
| 3458 | @itemx composition-close | 4058 | @itemx composition-close |
| 3459 | @itemx incomposition | 4059 | @itemx incomposition |
| 3460 | Analogous to the above, but for CORBA CIDL @code{composition} blocks. | 4060 | Analogous to the above, but for CORBA CIDL @code{composition} blocks. |
| 4061 | @ref{External Scope Symbols}. | ||
| 3461 | @item template-args-cont | 4062 | @item template-args-cont |
| 3462 | C++ template argument list continuations. | 4063 | C++ template argument list continuations. @ref{Class Symbols}. |
| 3463 | @item inlambda | 4064 | @item inlambda |
| 3464 | Analogous to @code{inclass} syntactic symbol, but used inside lambda | 4065 | Analogous to @code{inclass} syntactic symbol, but used inside lambda |
| 3465 | (i.e., anonymous) functions. Only used in Pike mode. | 4066 | (i.e. anonymous) functions. Only used in Pike mode. @ref{Statement |
| 4067 | Block Symbols}. | ||
| 3466 | @item lambda-intro-cont | 4068 | @item lambda-intro-cont |
| 3467 | Lines continuing the header of a lambda function, i.e., between the | 4069 | Lines continuing the header of a lambda function, i.e. between the |
| 3468 | @code{lambda} keyword and the function body. Only used in Pike mode. | 4070 | @code{lambda} keyword and the function body. Only used in Pike mode. |
| 4071 | @ref{Statement Block Symbols}. | ||
| 3469 | @item inexpr-statement | 4072 | @item inexpr-statement |
| 3470 | A statement block inside an expression. The gcc C and C++ extension for | 4073 | A statement block inside an expression. The gcc C and C++ extension |
| 3471 | this is recognized. It's also used for the special functions that take | 4074 | for this is recognized. It's also used for the special functions that |
| 3472 | a statement block as an argument in Pike. | 4075 | take a statement block as an argument in Pike. @ref{Statement Block |
| 4076 | Symbols}. | ||
| 3473 | @item inexpr-class | 4077 | @item inexpr-class |
| 3474 | A class definition inside an expression. This is used for anonymous | 4078 | A class definition inside an expression. This is used for anonymous |
| 3475 | classes in Java. It's also used for anonymous array initializers in | 4079 | classes in Java. It's also used for anonymous array initializers in |
| 3476 | Java. | 4080 | Java. @ref{Anonymous Class Symbol}. |
| 3477 | @end table | 4081 | @end table |
| 3478 | 4082 | ||
| 3479 | @ssindex -open symbols | 4083 | @menu |
| 3480 | @ssindex -close symbols | 4084 | * Function Symbols:: |
| 3481 | Most syntactic symbol names follow a general naming convention. When a | 4085 | * Class Symbols:: |
| 3482 | line begins with an open or close brace, the syntactic symbol will | 4086 | * Conditional Construct Symbols:: |
| 3483 | contain the suffix @code{-open} or @code{-close} respectively. | 4087 | * Switch Statement Symbols:: |
| 4088 | * Brace List Symbols:: | ||
| 4089 | * External Scope Symbols:: | ||
| 4090 | * Paren List Symbols:: | ||
| 4091 | * Literal Symbols:: | ||
| 4092 | * Multiline Macro Symbols:: | ||
| 4093 | * Objective-C Method Symbols:: | ||
| 4094 | * Anonymous Class Symbol:: | ||
| 4095 | * Statement Block Symbols:: | ||
| 4096 | * K&R Symbols:: | ||
| 4097 | @end menu | ||
| 3484 | 4098 | ||
| 3485 | @ssindex -intro symbols | 4099 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3486 | @ssindex -cont symbols | 4100 | @node Function Symbols, Class Symbols, Syntactic Symbols, Syntactic Symbols |
| 3487 | @ssindex -block-intro symbols | 4101 | @comment node-name, next, previous, up |
| 3488 | Usually, a distinction is made between the first line that introduces a | 4102 | @subsection Function Symbols |
| 3489 | construct and lines that continue a construct, and the syntactic symbols | 4103 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3490 | that represent these lines will contain the suffix @code{-intro} or | ||
| 3491 | @code{-cont} respectively. As a sub-classification of this scheme, a | ||
| 3492 | line which is the first of a particular brace block construct will | ||
| 3493 | contain the suffix @code{-block-intro}. | ||
| 3494 | 4104 | ||
| 3495 | Let's look at some examples to understand how this works. Remember that | 4105 | This example shows a typical function declaration. |
| 3496 | you can check the syntax of any line by using @kbd{C-c C-s}. | ||
| 3497 | 4106 | ||
| 3498 | @example | 4107 | @example |
| 3499 | 1: void | 4108 | 1: void |
| @@ -3519,7 +4128,7 @@ top-level construct introduction so it has the syntax | |||
| 3519 | the brace that opens a top-level function definition. Line 9 is the | 4128 | the brace that opens a top-level function definition. Line 9 is the |
| 3520 | corresponding | 4129 | corresponding |
| 3521 | @code{defun-close} since it contains the brace that closes the top-level | 4130 | @code{defun-close} since it contains the brace that closes the top-level |
| 3522 | function definition. Line 4 is a @code{defun-block-intro}, i.e., it is | 4131 | function definition. Line 4 is a @code{defun-block-intro}, i.e. it is |
| 3523 | the first line of a brace-block, enclosed in a | 4132 | the first line of a brace-block, enclosed in a |
| 3524 | top-level function definition. | 4133 | top-level function definition. |
| 3525 | 4134 | ||
| @@ -3530,8 +4139,13 @@ isn't much special about them. Note however that line 8 is given | |||
| 3530 | @code{statement-cont} syntax since it continues the statement begun | 4139 | @code{statement-cont} syntax since it continues the statement begun |
| 3531 | on the previous line. | 4140 | on the previous line. |
| 3532 | 4141 | ||
| 3533 | Here's another example, which illustrates some C++ class syntactic | 4142 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3534 | symbols: | 4143 | @node Class Symbols, Conditional Construct Symbols, Function Symbols, Syntactic Symbols |
| 4144 | @comment node-name, next, previous, up | ||
| 4145 | @subsection Class related Symbols | ||
| 4146 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4147 | |||
| 4148 | Here's an example which illustrates some C++ class syntactic symbols: | ||
| 3535 | 4149 | ||
| 3536 | @example | 4150 | @example |
| 3537 | 1: class Bass | 4151 | 1: class Bass |
| @@ -3657,9 +4271,10 @@ elements: | |||
| 3657 | ((inclass 58) (topmost-intro 380) (friend)) | 4271 | ((inclass 58) (topmost-intro 380) (friend)) |
| 3658 | @end example | 4272 | @end example |
| 3659 | 4273 | ||
| 3660 | The @code{friend} syntactic symbol is a modifier that typically does not | 4274 | The @code{friend} and @code{inline-open} syntactic symbols are |
| 3661 | have a relative buffer position. | 4275 | modifiers that do not have anchor positions. |
| 3662 | 4276 | ||
| 4277 | @ssindex template-args-cont | ||
| 3663 | Template definitions introduce yet another syntactic symbol: | 4278 | Template definitions introduce yet another syntactic symbol: |
| 3664 | 4279 | ||
| 3665 | @example | 4280 | @example |
| @@ -3671,8 +4286,14 @@ Template definitions introduce yet another syntactic symbol: | |||
| 3671 | Here, line 1 is analyzed as a @code{topmost-intro}, but lines 2 and 3 | 4286 | Here, line 1 is analyzed as a @code{topmost-intro}, but lines 2 and 3 |
| 3672 | are both analyzed as @code{template-args-cont} lines. | 4287 | are both analyzed as @code{template-args-cont} lines. |
| 3673 | 4288 | ||
| 3674 | Here is another (totally contrived) example which illustrates how syntax | 4289 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 3675 | is assigned to various conditional constructs: | 4290 | @node Conditional Construct Symbols, Switch Statement Symbols, Class Symbols, Syntactic Symbols |
| 4291 | @comment node-name, next, previous, up | ||
| 4292 | @subsection Conditional Construct Symbols | ||
| 4293 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4294 | |||
| 4295 | Here is a (totally contrived) example which illustrates how syntax is | ||
| 4296 | assigned to various conditional constructs: | ||
| 3676 | 4297 | ||
| 3677 | @example | 4298 | @example |
| 3678 | 1: void spam( int index ) | 4299 | 1: void spam( int index ) |
| @@ -3695,14 +4316,16 @@ is assigned to various conditional constructs: | |||
| 3695 | Only the lines that illustrate new syntactic symbols will be discussed. | 4316 | Only the lines that illustrate new syntactic symbols will be discussed. |
| 3696 | 4317 | ||
| 3697 | @ssindex substatement-open | 4318 | @ssindex substatement-open |
| 3698 | @ssindex substatement-block-intro | 4319 | @ssindex statement-block-intro |
| 3699 | @ssindex block-close | 4320 | @ssindex block-close |
| 3700 | Line 4 has a brace which opens a conditional's substatement block. It | 4321 | Line 4 has a brace which opens a conditional's substatement block. It |
| 3701 | is thus assigned @code{substatement-open} syntax, and since line 5 is | 4322 | is thus assigned @code{substatement-open} syntax, and since line 5 is |
| 3702 | the first line in the substatement block, it is assigned | 4323 | the first line in the substatement block, it is assigned |
| 3703 | @code{substatement-block-intro} syntax. Line 10 contains the brace that | 4324 | @code{statement-block-intro} syntax. Line 10 contains the brace |
| 3704 | closes the inner substatement block, and is therefore given the syntax | 4325 | that closes the inner substatement block, and is therefore given the |
| 3705 | @code{block-close}. Line 13 is treated the same way. | 4326 | syntax @code{block-close}@footnote{@code{block-open} is used only for |
| 4327 | ``free-standing'' blocks, and is somewhat rare (@pxref{Literal | ||
| 4328 | Symbols} for an example.)}. Line 13 is treated the same way. | ||
| 3706 | 4329 | ||
| 3707 | @ssindex substatement | 4330 | @ssindex substatement |
| 3708 | Lines 6 and 9 are also substatements of conditionals, but since they | 4331 | Lines 6 and 9 are also substatements of conditionals, but since they |
| @@ -3731,6 +4354,12 @@ appears on a line by itself. Note that if the @code{while} appeared on | |||
| 3731 | the same line as the preceding close brace, that line would still have | 4354 | the same line as the preceding close brace, that line would still have |
| 3732 | @code{block-close} syntax. | 4355 | @code{block-close} syntax. |
| 3733 | 4356 | ||
| 4357 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4358 | @node Switch Statement Symbols, Brace List Symbols, Conditional Construct Symbols, Syntactic Symbols | ||
| 4359 | @comment node-name, next, previous, up | ||
| 4360 | @subsection Switch Statement Symbols | ||
| 4361 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4362 | |||
| 3734 | Switch statements have their own set of syntactic symbols. Here's an | 4363 | Switch statements have their own set of syntactic symbols. Here's an |
| 3735 | example: | 4364 | example: |
| 3736 | 4365 | ||
| @@ -3761,6 +4390,12 @@ while lines 5 and 8 are assigned @code{statement-case-intro}. Line 11 | |||
| 3761 | is treated slightly differently since it contains a brace that opens a | 4390 | is treated slightly differently since it contains a brace that opens a |
| 3762 | block --- it is given @code{statement-case-open} syntax. | 4391 | block --- it is given @code{statement-case-open} syntax. |
| 3763 | 4392 | ||
| 4393 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4394 | @node Brace List Symbols, External Scope Symbols, Switch Statement Symbols, Syntactic Symbols | ||
| 4395 | @comment node-name, next, previous, up | ||
| 4396 | @subsection Brace List Symbols | ||
| 4397 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4398 | |||
| 3764 | @cindex brace lists | 4399 | @cindex brace lists |
| 3765 | There are a set of syntactic symbols that are used to recognize | 4400 | There are a set of syntactic symbols that are used to recognize |
| 3766 | constructs inside of brace lists. A brace list is defined as an | 4401 | constructs inside of brace lists. A brace list is defined as an |
| @@ -3815,6 +4450,12 @@ pretty standard, and line 7 is a @code{brace-list-close} as you'd | |||
| 3815 | expect. Once again, line 8 is assigned as @code{brace-entry-open} as is | 4450 | expect. Once again, line 8 is assigned as @code{brace-entry-open} as is |
| 3816 | line 10. | 4451 | line 10. |
| 3817 | 4452 | ||
| 4453 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4454 | @node External Scope Symbols, Paren List Symbols, Brace List Symbols, Syntactic Symbols | ||
| 4455 | @comment node-name, next, previous, up | ||
| 4456 | @subsection External Scope Symbols | ||
| 4457 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4458 | |||
| 3818 | External language definition blocks also have their own syntactic | 4459 | External language definition blocks also have their own syntactic |
| 3819 | symbols. In this example: | 4460 | symbols. In this example: |
| 3820 | 4461 | ||
| @@ -3844,7 +4485,7 @@ where @code{inextern-lang} is a modifier similar in purpose to | |||
| 3844 | 4485 | ||
| 3845 | There are various other top level blocks like @code{extern}, and they | 4486 | There are various other top level blocks like @code{extern}, and they |
| 3846 | are all treated in the same way except that the symbols are named after | 4487 | are all treated in the same way except that the symbols are named after |
| 3847 | the keyword that introduces the block. e.g., C++ namespace blocks get | 4488 | the keyword that introduces the block. E.g. C++ namespace blocks get |
| 3848 | the three symbols @code{namespace-open}, @code{namespace-close} and | 4489 | the three symbols @code{namespace-open}, @code{namespace-close} and |
| 3849 | @code{innamespace}. The currently recognized top level blocks are: | 4490 | @code{innamespace}. The currently recognized top level blocks are: |
| 3850 | 4491 | ||
| @@ -3873,6 +4514,12 @@ that isn't the case for historical reasons.} | |||
| 3873 | @code{composition} blocks in CORBA CIDL. | 4514 | @code{composition} blocks in CORBA CIDL. |
| 3874 | @end table | 4515 | @end table |
| 3875 | 4516 | ||
| 4517 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4518 | @node Paren List Symbols, Literal Symbols, External Scope Symbols, Syntactic Symbols | ||
| 4519 | @comment node-name, next, previous, up | ||
| 4520 | @subsection Parenthesis (Argument) List Symbols | ||
| 4521 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4522 | |||
| 3876 | A number of syntactic symbols are associated with parenthesis lists, | 4523 | A number of syntactic symbols are associated with parenthesis lists, |
| 3877 | a.k.a argument lists, as found in function declarations and function | 4524 | a.k.a argument lists, as found in function declarations and function |
| 3878 | calls. This example illustrates these: | 4525 | calls. This example illustrates these: |
| @@ -3916,10 +4563,23 @@ parenthesis. Contrast this against lines 6 and 13 which are assigned | |||
| 3916 | @code{arglist-cont} syntax. This is because the parenthesis that opens | 4563 | @code{arglist-cont} syntax. This is because the parenthesis that opens |
| 3917 | their argument lists is the last character on that line. | 4564 | their argument lists is the last character on that line. |
| 3918 | 4565 | ||
| 4566 | Syntactic elements with @code{arglist-intro}, | ||
| 4567 | @code{arglist-cont-nonempty}, and @code{arglist-close} contain two | ||
| 4568 | buffer positions: the anchor position (the beginning of the | ||
| 4569 | declaration or statement) and the position of the open parenthesis. | ||
| 4570 | The latter position can be used in a line-up function (@pxref{Line-Up | ||
| 4571 | Functions}). | ||
| 4572 | |||
| 3919 | Note that there is no @code{arglist-open} syntax. This is because any | 4573 | Note that there is no @code{arglist-open} syntax. This is because any |
| 3920 | parenthesis that opens an argument list, appearing on a separate line, | 4574 | parenthesis that opens an argument list, appearing on a separate line, |
| 3921 | is assigned the @code{statement-cont} syntax instead. | 4575 | is assigned the @code{statement-cont} syntax instead. |
| 3922 | 4576 | ||
| 4577 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4578 | @node Literal Symbols, Multiline Macro Symbols, Paren List Symbols, Syntactic Symbols | ||
| 4579 | @comment node-name, next, previous, up | ||
| 4580 | @subsection Comment String Label and Macro Symbols | ||
| 4581 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4582 | |||
| 3923 | A few miscellaneous syntactic symbols that haven't been previously | 4583 | A few miscellaneous syntactic symbols that haven't been previously |
| 3924 | covered are illustrated by this C++ example: | 4584 | covered are illustrated by this C++ example: |
| 3925 | 4585 | ||
| @@ -3955,7 +4615,9 @@ Line 2 is assigned the @code{func-decl-cont} syntax. | |||
| 3955 | @item | 4615 | @item |
| 3956 | @ssindex comment-intro | 4616 | @ssindex comment-intro |
| 3957 | Line 4 is assigned both @code{defun-block-intro} @emph{and} | 4617 | Line 4 is assigned both @code{defun-block-intro} @emph{and} |
| 3958 | @code{comment-intro} syntax. | 4618 | @code{comment-intro} syntax. A syntactic element with |
| 4619 | @code{comment-intro} has no anchor point --- It is always accompanied | ||
| 4620 | by another syntactic element which does have one. | ||
| 3959 | 4621 | ||
| 3960 | @item | 4622 | @item |
| 3961 | @ssindex c | 4623 | @ssindex c |
| @@ -3980,7 +4642,10 @@ Line 10 is assigned @code{label} syntax. | |||
| 3980 | 4642 | ||
| 3981 | @item | 4643 | @item |
| 3982 | @ssindex block-open | 4644 | @ssindex block-open |
| 3983 | Line 11 is assigned @code{block-open} syntax. | 4645 | Line 11 is assigned @code{block-open} as well as @code{statement} |
| 4646 | syntax. A @code{block-open} syntactic element doesn't have an anchor | ||
| 4647 | position, since it always appears with another syntactic element which | ||
| 4648 | does have one. | ||
| 3984 | 4649 | ||
| 3985 | @item | 4650 | @item |
| 3986 | @ssindex cpp-macro | 4651 | @ssindex cpp-macro |
| @@ -3990,20 +4655,28 @@ normal syntactic symbols (@code{statement-block-intro} and | |||
| 3990 | configured to cancel out the normal syntactic context to make all | 4655 | configured to cancel out the normal syntactic context to make all |
| 3991 | preprocessor directives stick to the first column, but that's easily | 4656 | preprocessor directives stick to the first column, but that's easily |
| 3992 | changed if you want preprocessor directives to be indented like the rest | 4657 | changed if you want preprocessor directives to be indented like the rest |
| 3993 | of the code. | 4658 | of the code. Like @code{comment-intro}, a syntactic element with |
| 4659 | @code{cpp-macro} doesn't contain an anchor position. | ||
| 3994 | 4660 | ||
| 3995 | @item | 4661 | @item |
| 3996 | @ssindex stream-op | 4662 | @ssindex stream-op |
| 3997 | Line 17 is assigned @code{stream-op} syntax. | 4663 | Line 17 is assigned @code{stream-op} syntax. |
| 3998 | @end itemize | 4664 | @end itemize |
| 3999 | 4665 | ||
| 4666 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4667 | @node Multiline Macro Symbols, Objective-C Method Symbols, Literal Symbols, Syntactic Symbols | ||
| 4668 | @comment node-name, next, previous, up | ||
| 4669 | @subsection Multiline Macro Symbols | ||
| 4670 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4671 | |||
| 4000 | @cindex multiline macros | 4672 | @cindex multiline macros |
| 4001 | @cindex syntactic whitespace | 4673 | @cindex syntactic whitespace |
| 4002 | @ssindex cpp-define-intro | 4674 | @ssindex cpp-define-intro |
| 4675 | @ssindex cpp-macro-cont | ||
| 4003 | Multiline preprocessor macro definitions are normally handled just like | 4676 | Multiline preprocessor macro definitions are normally handled just like |
| 4004 | other code, i.e., the lines inside them are indented according to the | 4677 | other code, i.e. the lines inside them are indented according to the |
| 4005 | syntactic analysis of the preceding lines inside the macro. The first | 4678 | syntactic analysis of the preceding lines inside the macro. The first |
| 4006 | line inside a macro definition (i.e., the line after the starting line of | 4679 | line inside a macro definition (i.e. the line after the starting line of |
| 4007 | the cpp directive itself) gets @code{cpp-define-intro}. In this example: | 4680 | the cpp directive itself) gets @code{cpp-define-intro}. In this example: |
| 4008 | 4681 | ||
| 4009 | @example | 4682 | @example |
| @@ -4019,17 +4692,23 @@ line 1 is given the syntactic symbol @code{cpp-macro}. The first line | |||
| 4019 | of a cpp directive is always given that symbol. Line 2 is given | 4692 | of a cpp directive is always given that symbol. Line 2 is given |
| 4020 | @code{cpp-define-intro}, so that you can give the macro body as a whole | 4693 | @code{cpp-define-intro}, so that you can give the macro body as a whole |
| 4021 | some extra indentation. Lines 3 through 5 are then analyzed as normal | 4694 | some extra indentation. Lines 3 through 5 are then analyzed as normal |
| 4022 | code, i.e., @code{substatement} on lines 3 and 4, and @code{else-clause} | 4695 | code, i.e. @code{substatement} on lines 3 and 4, and @code{else-clause} |
| 4023 | on line 5. | 4696 | on line 5. |
| 4024 | 4697 | ||
| 4025 | The syntactic analysis inside macros can be turned off with | 4698 | The syntactic analysis inside macros can be turned off with |
| 4026 | @code{c-syntactic-indentation-in-macros}. In that case, lines 2 through | 4699 | @code{c-syntactic-indentation-in-macros} (@pxref{Custom Macros}). In |
| 4027 | 5 would all be given @code{cpp-macro-cont} with a relative buffer | 4700 | that case, lines 2 through 5 would all be given @code{cpp-macro-cont} |
| 4028 | position pointing to the @code{#} which starts the cpp | 4701 | with an anchor position pointing to the @code{#} which starts the cpp |
| 4029 | directive@footnote{This is how @ccmode{} 5.28 and earlier analyzed | 4702 | directive@footnote{This is how @ccmode{} 5.28 and earlier analyzed |
| 4030 | macros.}. | 4703 | macros.}. |
| 4031 | 4704 | ||
| 4032 | @xref{Macro Handling}, for more info about the treatment of macros. | 4705 | @xref{Custom Macros}, for more info about the treatment of macros. |
| 4706 | |||
| 4707 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4708 | @node Objective-C Method Symbols, Anonymous Class Symbol, Multiline Macro Symbols, Syntactic Symbols | ||
| 4709 | @comment node-name, next, previous, up | ||
| 4710 | @subsection Objective-C Method Symbols | ||
| 4711 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4033 | 4712 | ||
| 4034 | In Objective-C buffers, there are three additional syntactic symbols | 4713 | In Objective-C buffers, there are three additional syntactic symbols |
| 4035 | assigned to various message calling constructs. Here's an example | 4714 | assigned to various message calling constructs. Here's an example |
| @@ -4052,7 +4731,13 @@ Here, line 1 is assigned @code{objc-method-intro} syntax, and line 2 is | |||
| 4052 | assigned @code{objc-method-args-cont} syntax. Lines 5 and 6 are both | 4731 | assigned @code{objc-method-args-cont} syntax. Lines 5 and 6 are both |
| 4053 | assigned @code{objc-method-call-cont} syntax. | 4732 | assigned @code{objc-method-call-cont} syntax. |
| 4054 | 4733 | ||
| 4055 | Java has a concept of anonymous classes, which may look something like | 4734 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 4735 | @node Anonymous Class Symbol, Statement Block Symbols, Objective-C Method Symbols, Syntactic Symbols | ||
| 4736 | @comment node-name, next, previous, up | ||
| 4737 | @subsection Anonymous Class Symbol (Java) | ||
| 4738 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4739 | |||
| 4740 | Java has a concept of anonymous classes which can look something like | ||
| 4056 | this: | 4741 | this: |
| 4057 | 4742 | ||
| 4058 | @example | 4743 | @example |
| @@ -4070,11 +4755,18 @@ The brace following the @code{new} operator opens the anonymous class. | |||
| 4070 | Lines 3 and 6 are assigned the @code{inexpr-class} syntax, besides the | 4755 | Lines 3 and 6 are assigned the @code{inexpr-class} syntax, besides the |
| 4071 | @code{inclass} symbol used in normal classes. Thus, the class will be | 4756 | @code{inclass} symbol used in normal classes. Thus, the class will be |
| 4072 | indented just like a normal class, with the added indentation given to | 4757 | indented just like a normal class, with the added indentation given to |
| 4073 | @code{inexpr-class}. | 4758 | @code{inexpr-class}. An @code{inexpr-class} syntactic element doesn't |
| 4759 | have an anchor position. | ||
| 4760 | |||
| 4761 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4762 | @node Statement Block Symbols, K&R Symbols, Anonymous Class Symbol, Syntactic Symbols | ||
| 4763 | @comment node-name, next, previous, up | ||
| 4764 | @subsection Statement Block Symbols | ||
| 4765 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4074 | 4766 | ||
| 4075 | There are a few occasions where a statement block may be used inside an | 4767 | There are a few occasions where a statement block might be used inside |
| 4076 | expression. One is in C or C++ code using the gcc extension for this, | 4768 | an expression. One is in C or C++ code using the gcc extension for |
| 4077 | e.g: | 4769 | this, e.g: |
| 4078 | 4770 | ||
| 4079 | @example | 4771 | @example |
| 4080 | 1: int res = (@{ | 4772 | 1: int res = (@{ |
| @@ -4088,7 +4780,8 @@ e.g: | |||
| 4088 | Lines 2 and 5 get the @code{inexpr-statement} syntax, besides the | 4780 | Lines 2 and 5 get the @code{inexpr-statement} syntax, besides the |
| 4089 | symbols they'd get in a normal block. Therefore, the indentation put on | 4781 | symbols they'd get in a normal block. Therefore, the indentation put on |
| 4090 | @code{inexpr-statement} is added to the normal statement block | 4782 | @code{inexpr-statement} is added to the normal statement block |
| 4091 | indentation. | 4783 | indentation. An @code{inexpr-statement} syntactic element doesn't |
| 4784 | contain an anchor position. | ||
| 4092 | 4785 | ||
| 4093 | In Pike code, there are a few other situations where blocks occur inside | 4786 | In Pike code, there are a few other situations where blocks occur inside |
| 4094 | statements, as illustrated here: | 4787 | statements, as illustrated here: |
| @@ -4129,6 +4822,12 @@ with the @code{inexpr-statement} syntax, just like the gcc extended C | |||
| 4129 | example above. The other similar special function, @code{gauge}, is | 4822 | example above. The other similar special function, @code{gauge}, is |
| 4130 | handled like this too. | 4823 | handled like this too. |
| 4131 | 4824 | ||
| 4825 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4826 | @node K&R Symbols, , Statement Block Symbols, Syntactic Symbols | ||
| 4827 | @comment node-name, next, previous, up | ||
| 4828 | @subsection K&R Symbols | ||
| 4829 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4830 | |||
| 4132 | @ssindex knr-argdecl-intro | 4831 | @ssindex knr-argdecl-intro |
| 4133 | @ssindex knr-argdecl | 4832 | @ssindex knr-argdecl |
| 4134 | Two other syntactic symbols can appear in old style, non-prototyped C | 4833 | Two other syntactic symbols can appear in old style, non-prototyped C |
| @@ -4146,30 +4845,467 @@ code @footnote{a.k.a. K&R C, or Kernighan & Ritchie C}: | |||
| 4146 | 4845 | ||
| 4147 | Here, line 2 is the first line in an argument declaration list and so is | 4846 | Here, line 2 is the first line in an argument declaration list and so is |
| 4148 | given the @code{knr-argdecl-intro} syntactic symbol. Subsequent lines | 4847 | given the @code{knr-argdecl-intro} syntactic symbol. Subsequent lines |
| 4149 | (i.e., lines 3 and 4 in this example), are given @code{knr-argdecl} | 4848 | (i.e. lines 3 and 4 in this example), are given @code{knr-argdecl} |
| 4150 | syntax. | 4849 | syntax. |
| 4151 | 4850 | ||
| 4152 | 4851 | ||
| 4153 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 4852 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 4154 | @node Indentation Functions, AWK Mode, Syntactic Symbols, Top | 4853 | @node Indentation Calculation, , Syntactic Symbols, Indentation Engine Basics |
| 4155 | @comment node-name, next, previous, up | 4854 | @comment node-name, next, previous, up |
| 4156 | @chapter Indentation Functions | 4855 | @section Indentation Calculation |
| 4856 | @cindex indentation | ||
| 4157 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 4857 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 4158 | 4858 | ||
| 4159 | @cindex indentation function | 4859 | Indentation for a line is calculated from the syntactic context |
| 4160 | @cindex line-up function | 4860 | (@pxref{Syntactic Analysis}). |
| 4161 | Often there are cases when a simple offset setting on a syntactic | 4861 | |
| 4162 | symbol isn't enough to get the desired indentation. Therefore, it's | 4862 | First, a buffer position is found whose column will be the base for the |
| 4163 | also possible to use an @dfn{indentation function} (a.k.a. @dfn{line-up | 4863 | indentation calculation. It's the anchor position in the first |
| 4164 | function}) for a syntactic symbol. | 4864 | syntactic element that provides one that is used. If no syntactic |
| 4865 | element has an anchor position then column zero is used. | ||
| 4866 | |||
| 4867 | Second, the syntactic symbols in each syntactic element are looked up | ||
| 4868 | in the @code{c-offsets-alist} style variable | ||
| 4869 | (@pxref{c-offsets-alist}), which is an association list of syntactic | ||
| 4870 | symbols and the offsets to apply for those symbols. These offsets are | ||
| 4871 | added together with the base column to produce the new indentation | ||
| 4872 | column. | ||
| 4873 | |||
| 4874 | Let's use our two code examples above to see how this works. Here is | ||
| 4875 | our first example again: | ||
| 4876 | |||
| 4877 | @example | ||
| 4878 | 1: void swap( int& a, int& b ) | ||
| 4879 | 2: @{ | ||
| 4880 | 3: int tmp = a; | ||
| 4881 | 4: a = b; | ||
| 4882 | 5: b = tmp; | ||
| 4883 | 6: @} | ||
| 4884 | @end example | ||
| 4885 | |||
| 4886 | Let's say point is on line 3 and we hit the @kbd{TAB} key to reindent | ||
| 4887 | the line. The syntactic context for that line is: | ||
| 4888 | |||
| 4889 | @example | ||
| 4890 | ((defun-block-intro 29)) | ||
| 4891 | @end example | ||
| 4892 | |||
| 4893 | @noindent | ||
| 4894 | Since buffer position 29 is the first and only anchor position in the | ||
| 4895 | list, @ccmode{} goes there and asks for the current column. This brace | ||
| 4896 | is in column zero, so @ccmode{} uses @samp{0} as the base column. | ||
| 4897 | |||
| 4898 | Next, @ccmode{} looks up @code{defun-block-intro} in the | ||
| 4899 | @code{c-offsets-alist} style variable. Let's say it finds the value | ||
| 4900 | @samp{4}; it adds this to the base column @samp{0}, yielding a running | ||
| 4901 | total indentation of 4 spaces. | ||
| 4902 | |||
| 4903 | Since there is only one syntactic element on the list for this line, | ||
| 4904 | indentation calculation is complete, and the total indentation for the | ||
| 4905 | line is 4 spaces. | ||
| 4906 | |||
| 4907 | Here's another example: | ||
| 4908 | |||
| 4909 | @example | ||
| 4910 | 1: int add( int val, int incr, int doit ) | ||
| 4911 | 2: @{ | ||
| 4912 | 3: if( doit ) | ||
| 4913 | 4: @{ | ||
| 4914 | 5: return( val + incr ); | ||
| 4915 | 6: @} | ||
| 4916 | 7: return( val ); | ||
| 4917 | 8: @} | ||
| 4918 | @end example | ||
| 4919 | |||
| 4920 | If we were to hit @kbd{TAB} on line 4 in the above example, the same | ||
| 4921 | basic process is performed, despite the differences in the syntactic | ||
| 4922 | context. The context for this line is: | ||
| 4923 | |||
| 4924 | @example | ||
| 4925 | ((substatement-open 46)) | ||
| 4926 | @end example | ||
| 4927 | |||
| 4928 | Here, @ccmode{} goes to buffer position 46, which is the @samp{i} in | ||
| 4929 | @code{if} on line 3. This character is in the fourth column on that | ||
| 4930 | line so the base column is @samp{4}. Then @ccmode{} looks up the | ||
| 4931 | @code{substatement-open} symbol in @code{c-offsets-alist}. Let's say it | ||
| 4932 | finds the value @samp{4}. It's added with the base column and yields an | ||
| 4933 | indentation for the line of 8 spaces. | ||
| 4934 | |||
| 4935 | Simple, huh? | ||
| 4936 | |||
| 4937 | Actually, it's a bit more complicated than that since the entries on | ||
| 4938 | @code{c-offsets-alist} can be much more than plain offsets. | ||
| 4939 | @xref{c-offsets-alist}, for the full story. | ||
| 4940 | |||
| 4941 | Anyway, the mode usually just does The Right Thing without you having to | ||
| 4942 | think about it in this much detail. But when customizing indentation, | ||
| 4943 | it's helpful to understand the general indentation model being used. | ||
| 4944 | |||
| 4945 | As you configure @ccmode{}, you might want to set the variable | ||
| 4946 | @code{c-echo-syntactic-information-p} to non-@code{nil} so that the | ||
| 4947 | syntactic context and calculated offset always is echoed in the | ||
| 4948 | minibuffer when you hit @kbd{TAB}. | ||
| 4949 | |||
| 4950 | |||
| 4951 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4952 | @node Customizing Indentation, Custom Macros, Indentation Engine Basics, Top | ||
| 4953 | @comment node-name, next, previous, up | ||
| 4954 | @chapter Customizing Indentation | ||
| 4955 | @cindex customization, indentation | ||
| 4956 | @cindex indentation | ||
| 4957 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4958 | |||
| 4959 | The principal variable for customizing indentation is the style | ||
| 4960 | variable @code{c-offsets-alist}, which gives an @dfn{offset} (an | ||
| 4961 | indentation rule) for each syntactic symbol. Its structure and | ||
| 4962 | semantics are completely described in @ref{c-offsets-alist}. The | ||
| 4963 | various ways you can set the variable, including the use of the | ||
| 4964 | @ccmode{} style system, are described in @ref{Config Basics} and its | ||
| 4965 | sections, in particular @ref{Style Variables}. | ||
| 4966 | |||
| 4967 | The simplest and most used kind of ``offset'' setting in | ||
| 4968 | @code{c-offsets-alist} is in terms of multiples of | ||
| 4969 | @code{c-basic-offset}: | ||
| 4970 | |||
| 4971 | @defopt c-basic-offset | ||
| 4972 | @vindex basic-offset (c-) | ||
| 4973 | This style variable holds the basic offset between indentation levels. | ||
| 4974 | It's factory default is 4, but all the built-in styles set it | ||
| 4975 | themselves, to some value between 2 (for @code{gnu} style) and 8 (for | ||
| 4976 | @code{bsd}, @code{linux}, and @code{python} styles). | ||
| 4977 | @end defopt | ||
| 4978 | |||
| 4979 | The most flexible ``offset'' setting you can make in | ||
| 4980 | @code{c-offsets-alist} is a line-up function (or even a list of them), | ||
| 4981 | either one supplied by @ccmode{} (@pxref{Line-Up Functions}) or one | ||
| 4982 | you write yourself (@pxref{Custom Line-Up}). | ||
| 4983 | |||
| 4984 | Finally, in @ref{Other Indentation} you'll find the tool of last | ||
| 4985 | resort: a hook which is called after a line has been indented. You | ||
| 4986 | can install functions here to make ad-hoc adjustments to any line's | ||
| 4987 | indentation. | ||
| 4988 | |||
| 4989 | @menu | ||
| 4990 | * c-offsets-alist:: | ||
| 4991 | * Interactive Customization:: | ||
| 4992 | * Line-Up Functions:: | ||
| 4993 | * Custom Line-Up:: | ||
| 4994 | * Other Indentation:: | ||
| 4995 | @end menu | ||
| 4996 | |||
| 4997 | |||
| 4998 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4999 | @node c-offsets-alist, Interactive Customization, Customizing Indentation, Customizing Indentation | ||
| 5000 | @comment node-name, next, previous, up | ||
| 5001 | @section c-offsets-alist | ||
| 5002 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5003 | |||
| 5004 | This section explains the structure and semantics of the style | ||
| 5005 | variable @code{c-offset-alist}, the principal variable for configuring | ||
| 5006 | indentation. Details of how to set it up, and its relationship to | ||
| 5007 | @ccmode{}'s style system are given in @ref{Style Variables}. | ||
| 5008 | |||
| 5009 | @defopt c-offsets-alist | ||
| 5010 | @vindex offsets-alist (c-) | ||
| 5011 | This is an alist which associates an offset with each syntactic | ||
| 5012 | symbol. This @dfn{offset} is a rule specifying how to indent a line | ||
| 5013 | whose syntactic context matches the symbol. @xref{Syntactic | ||
| 5014 | Analysis}. | ||
| 5015 | |||
| 5016 | Note that the buffer-local binding of this alist in a @ccmode{} buffer | ||
| 5017 | contains an entry for @emph{every} syntactic symbol. Its global | ||
| 5018 | binding and its settings within style specifications usually contain | ||
| 5019 | only a few entries. @xref{Style Variables}. | ||
| 5020 | |||
| 5021 | The offset specification associated with any particular syntactic | ||
| 5022 | symbol can be an integer, a variable name, a vector, a function or | ||
| 5023 | lambda expression, a list, or one of the following special symbols: | ||
| 5024 | @code{+}, @code{-}, @code{++}, @code{--}, @code{*}, or @code{/}. The | ||
| 5025 | meanings of these values are described in detail below. | ||
| 5026 | |||
| 5027 | Here is an example fragment of a @code{c-offsets-alist}, showing some | ||
| 5028 | of these kinds of offsets: | ||
| 5029 | |||
| 5030 | @example | ||
| 5031 | ((statement . 0) | ||
| 5032 | (substatement . +) | ||
| 5033 | (cpp-macro . [0]) | ||
| 5034 | (topmost-intro-cont . c-lineup-topmost-intro-cont) | ||
| 5035 | (statement-block-intro . (add c-lineup-whitesmith-in-block | ||
| 5036 | c-indent-multi-line-block)) | ||
| 5037 | @dots{} | ||
| 5038 | @*) | ||
| 5039 | @end example | ||
| 5040 | @end defopt | ||
| 5041 | |||
| 5042 | @deffn Command c-set-offset (@kbd{C-c C-o}) | ||
| 5043 | @findex set-offset (c-) | ||
| 5044 | @kindex C-c C-o | ||
| 5045 | This command changes the entry for a syntactic symbol in the current | ||
| 5046 | binding of @code{c-offsets-alist}, or it inserts a new entry if there | ||
| 5047 | isn't already one for that syntactic symbol. | ||
| 5048 | |||
| 5049 | You can use @code{c-set-offsets} interactively within a @ccmode{} | ||
| 5050 | buffer to make experimental changes to your indentation settings. | ||
| 5051 | @kbd{C-c C-o} prompts you for the syntactic symbol to change | ||
| 5052 | (defaulting to that of the current line) and the new offset | ||
| 5053 | (defaulting to the current offset). | ||
| 5054 | |||
| 5055 | @code{c-set-offsets} takes two arguments when used programmatically: | ||
| 5056 | @var{symbol}, the syntactic element symbol to change and @var{offset}, | ||
| 5057 | the new offset for that syntactic element. You can call the command | ||
| 5058 | in your @file{.emacs} to change the global binding of | ||
| 5059 | @code{c-offsets-alist} (@pxref{Style Variables}); you can use it in a | ||
| 5060 | hook function to make changes from the current style. @ccmode{} | ||
| 5061 | itself uses this function when initializing styles. | ||
| 5062 | @end deffn | ||
| 5063 | |||
| 5064 | @cindex offset specification | ||
| 5065 | The ``offset specifications'' in @code{c-offsets-alist} can be any of | ||
| 5066 | the following: | ||
| 5067 | |||
| 5068 | @table @asis | ||
| 5069 | @item An integer | ||
| 5070 | The integer specifies a relative offset. All relative | ||
| 5071 | offsets@footnote{The syntactic context @code{@w{((defun-block-intro | ||
| 5072 | 2724) (comment-intro))}} would likely have two relative offsets.} will | ||
| 5073 | be added together and used to calculate the indentation relative to an | ||
| 5074 | anchor position earlier in the buffer. @xref{Indentation | ||
| 5075 | Calculation}, for details. Most of the time, it's probably better to | ||
| 5076 | use one of the special symbols like @code{+} than an integer (apart | ||
| 5077 | from zero). | ||
| 5078 | |||
| 5079 | @item One of the symbols @code{+}, @code{-}, @code{++}, @code{--}, @code{*}, or @code{/} | ||
| 5080 | These special symbols describe a relative offset in multiples of | ||
| 5081 | @code{c-basic-offset}: | ||
| 5082 | |||
| 5083 | By defining a style's indentation in terms of @code{c-basic-offset}, | ||
| 5084 | you can change the amount of whitespace given to an indentation level | ||
| 5085 | while maintaining the same basic shape of your code. Here are the | ||
| 5086 | values that the special symbols correspond to: | ||
| 5087 | |||
| 5088 | @table @code | ||
| 5089 | @item + | ||
| 5090 | @code{c-basic-offset} times 1 | ||
| 5091 | @item - | ||
| 5092 | @code{c-basic-offset} times -1 | ||
| 5093 | @item ++ | ||
| 5094 | @code{c-basic-offset} times 2 | ||
| 5095 | @item -- | ||
| 5096 | @code{c-basic-offset} times -2 | ||
| 5097 | @item * | ||
| 5098 | @code{c-basic-offset} times 0.5 | ||
| 5099 | @item / | ||
| 5100 | @code{c-basic-offset} times -0.5 | ||
| 5101 | @end table | ||
| 5102 | |||
| 5103 | @item A vector | ||
| 5104 | The first element of the vector, an integer, sets the absolute | ||
| 5105 | indentation column. This will override any previously calculated | ||
| 5106 | indentation, but won't override relative indentation calculated from | ||
| 5107 | syntactic elements later on in the syntactic context of the line being | ||
| 5108 | indented. @xref{Indentation Calculation}. Any elements in the vector | ||
| 5109 | beyond the first will be ignored. | ||
| 5110 | |||
| 5111 | @item A function or lambda expression | ||
| 5112 | The function will be called and its return value will in turn be | ||
| 5113 | evaluated as an offset specification. Functions are useful when more | ||
| 5114 | context than just the syntactic symbol is needed to get the desired | ||
| 5115 | indentation. @xref{Line-Up Functions}, and @ref{Custom Line-Up}, for | ||
| 5116 | details about them. | ||
| 5117 | |||
| 5118 | @item A symbol with a variable binding | ||
| 5119 | If the symbol also has a function binding, the function takes | ||
| 5120 | precedence over the variable. Otherwise the value of the variable is | ||
| 5121 | used. It must be an integer (which is used as relative offset) or a | ||
| 5122 | vector (an absolute offset). | ||
| 5123 | |||
| 5124 | @item A list | ||
| 5125 | The offset can also be a list containing several offset | ||
| 5126 | specifications; these are evaluated recursively and combined. A list | ||
| 5127 | is typically only useful when some of the offsets are line-up | ||
| 5128 | functions. A common strategy is calling a sequence of functions in | ||
| 5129 | turn until one of them recognizes that it is appropriate for the | ||
| 5130 | source line and returns a non-@code{nil} value. | ||
| 5131 | |||
| 5132 | @code{nil} values are always ignored when the offsets are combined. | ||
| 5133 | The first element of the list specifies the method of combining the | ||
| 5134 | non-@code{nil} offsets from the remaining elements: | ||
| 5135 | |||
| 5136 | @table @code | ||
| 5137 | @item first | ||
| 5138 | Use the first offset that doesn't evaluate to @code{nil}. Subsequent | ||
| 5139 | elements of the list don't get evaluated. | ||
| 5140 | @item min | ||
| 5141 | Use the minimum of all the offsets. All must be either relative or | ||
| 5142 | absolute - they can't be mixed. | ||
| 5143 | @item max | ||
| 5144 | Use the maximum of all the offsets. All must be either relative or | ||
| 5145 | absolute - they can't be mixed. | ||
| 5146 | @item add | ||
| 5147 | Add all the evaluated offsets together. Exactly one of them may be | ||
| 5148 | absolute, in which case the result is absolute. Any relative offsets | ||
| 5149 | that preceded the absolute one in the list will be ignored in that case. | ||
| 5150 | @end table | ||
| 5151 | |||
| 5152 | As a compatibility measure, if the first element is none of the above | ||
| 5153 | then it too will be taken as an offset specification and the whole list | ||
| 5154 | will be combined according to the method @code{first}. | ||
| 5155 | @end table | ||
| 5156 | |||
| 5157 | @vindex c-strict-syntax-p | ||
| 5158 | @vindex strict-syntax-p (c-) | ||
| 5159 | If an offset specification evaluates to @code{nil}, then a relative | ||
| 5160 | offset of 0 (zero) is used@footnote{There is however a variable | ||
| 5161 | @code{c-strict-syntax-p} that when set to non-@code{nil} will cause an | ||
| 5162 | error to be signaled in that case. It's now considered obsolete since | ||
| 5163 | it doesn't work well with some of the alignment functions that returns | ||
| 5164 | @code{nil} instead of zero. You should therefore leave | ||
| 5165 | @code{c-strict-syntax-p} set to @code{nil}.}. | ||
| 5166 | |||
| 5167 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5168 | @node Interactive Customization, Line-Up Functions, c-offsets-alist, Customizing Indentation | ||
| 5169 | @comment node-name, next, previous, up | ||
| 5170 | @section Interactive Customization | ||
| 5171 | @cindex customization, interactive | ||
| 5172 | @cindex interactive customization | ||
| 5173 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5174 | |||
| 5175 | As an example of how to customize indentation, let's change the | ||
| 5176 | style of this example@footnote{In this and subsequent examples, the | ||
| 5177 | original code is formatted using the @samp{gnu} style unless otherwise | ||
| 5178 | indicated. @xref{Styles}.}: | ||
| 5179 | |||
| 5180 | @example | ||
| 5181 | @group | ||
| 5182 | 1: int add( int val, int incr, int doit ) | ||
| 5183 | 2: @{ | ||
| 5184 | 3: if( doit ) | ||
| 5185 | 4: @{ | ||
| 5186 | 5: return( val + incr ); | ||
| 5187 | 6: @} | ||
| 5188 | 7: return( val ); | ||
| 5189 | 8: @} | ||
| 5190 | @end group | ||
| 5191 | @end example | ||
| 5192 | |||
| 5193 | @noindent | ||
| 5194 | to: | ||
| 5195 | |||
| 5196 | @example | ||
| 5197 | @group | ||
| 5198 | 1: int add( int val, int incr, int doit ) | ||
| 5199 | 2: @{ | ||
| 5200 | 3: if( doit ) | ||
| 5201 | 4: @{ | ||
| 5202 | 5: return( val + incr ); | ||
| 5203 | 6: @} | ||
| 5204 | 7: return( val ); | ||
| 5205 | 8: @} | ||
| 5206 | @end group | ||
| 5207 | @end example | ||
| 5208 | |||
| 5209 | In other words, we want to change the indentation of braces that open a | ||
| 5210 | block following a condition so that the braces line up under the | ||
| 5211 | conditional, instead of being indented. Notice that the construct we | ||
| 5212 | want to change starts on line 4. To change the indentation of a line, | ||
| 5213 | we need to see which syntactic symbols affect the offset calculations | ||
| 5214 | for that line. Hitting @kbd{C-c C-s} on line 4 yields: | ||
| 5215 | |||
| 5216 | @example | ||
| 5217 | ((substatement-open 44)) | ||
| 5218 | @end example | ||
| 5219 | |||
| 5220 | @noindent | ||
| 5221 | so we know that to change the offset of the open brace, we need to | ||
| 5222 | change the indentation for the @code{substatement-open} syntactic | ||
| 5223 | symbol. | ||
| 5224 | |||
| 5225 | To do this interactively, just hit @kbd{C-c C-o}. This prompts | ||
| 5226 | you for the syntactic symbol to change, providing a reasonable default. | ||
| 5227 | In this case, the default is @code{substatement-open}, which is just the | ||
| 5228 | syntactic symbol we want to change! | ||
| 5229 | |||
| 5230 | After you hit return, @ccmode{} will then prompt you for the new | ||
| 5231 | offset value, with the old value as the default. The default in this | ||
| 5232 | case is @samp{+}, but we want no extra indentation so enter | ||
| 5233 | @samp{0} and @kbd{RET}. This will associate the offset 0 with the | ||
| 5234 | syntactic symbol @code{substatement-open}. | ||
| 4165 | 5235 | ||
| 4166 | @ccmode{} comes with many predefined indentation functions for common | 5236 | To check your changes quickly, just hit @kbd{C-c C-q} |
| 4167 | situations. If none of these does what you want, you can write your | 5237 | (@code{c-indent-defun}) to reindent the entire function. The example |
| 4168 | own, see @ref{Custom Indentation Functions}. If you do, it's probably a | 5238 | should now look like: |
| 4169 | good idea to start working from one of these predefined functions, they | ||
| 4170 | can be found in the file @file{cc-align.el}. | ||
| 4171 | 5239 | ||
| 4172 | For every function below there is a ``works with'' list that indicates | 5240 | @example |
| 5241 | @group | ||
| 5242 | 1: int add( int val, int incr, int doit ) | ||
| 5243 | 2: @{ | ||
| 5244 | 3: if( doit ) | ||
| 5245 | 4: @{ | ||
| 5246 | 5: return( val + incr ); | ||
| 5247 | 6: @} | ||
| 5248 | 7: return( val ); | ||
| 5249 | 8: @} | ||
| 5250 | @end group | ||
| 5251 | @end example | ||
| 5252 | |||
| 5253 | Notice how just changing the open brace offset on line 4 is all we | ||
| 5254 | needed to do. Since the other affected lines are indented relative to | ||
| 5255 | line 4, they are automatically indented the way you'd expect. For more | ||
| 5256 | complicated examples, this might not always work. The general approach | ||
| 5257 | to take is to always start adjusting offsets for lines higher up in the | ||
| 5258 | file, then reindent and see if any following lines need further | ||
| 5259 | adjustments. | ||
| 5260 | |||
| 5261 | @c Move this bit to "Styles" (2005/10/7) | ||
| 5262 | @deffn Command c-set-offset symbol offset | ||
| 5263 | @findex set-offset (c-) | ||
| 5264 | @kindex C-c C-o | ||
| 5265 | This is the command bound to @kbd{C-c C-o}. It provides a convenient | ||
| 5266 | way to set offsets on @code{c-offsets-alist} both interactively (see | ||
| 5267 | the example above) and from your mode hook. | ||
| 5268 | |||
| 5269 | It takes two arguments when used programmatically: @var{symbol} is the | ||
| 5270 | syntactic element symbol to change and @var{offset} is the new offset | ||
| 5271 | for that syntactic element. | ||
| 5272 | @end deffn | ||
| 5273 | @c End of MOVE THIS BIT. | ||
| 5274 | |||
| 5275 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5276 | @node Line-Up Functions, Custom Line-Up, Interactive Customization, Customizing Indentation | ||
| 5277 | @comment node-name, next, previous, up | ||
| 5278 | @section Line-Up Functions | ||
| 5279 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5280 | |||
| 5281 | @cindex line-up function | ||
| 5282 | @cindex indentation function | ||
| 5283 | Often there are cases when a simple offset setting on a syntactic | ||
| 5284 | symbol isn't enough to get the desired indentation---for example, you | ||
| 5285 | might want to line up a closing parenthesis with the matching opening | ||
| 5286 | one rather than indenting relative to its ``anchor point''. @ccmode{} | ||
| 5287 | provides this flexibility with @dfn{line-up functions}. | ||
| 5288 | |||
| 5289 | The way you associate a line-up function with a syntactic symbol is | ||
| 5290 | described in @ref{c-offsets-alist}. @ccmode{} comes with many | ||
| 5291 | predefined line-up functions for common situations. If none of these | ||
| 5292 | does what you want, you can write your own. @xref{Custom Line-Up}. | ||
| 5293 | Sometimes, it is easier to tweak the standard indentation by adding a | ||
| 5294 | function to @code{c-special-indent-hook} (@pxref{Other Indentation}). | ||
| 5295 | |||
| 5296 | The line-up functions haven't been adapted for AWK buffers or tested | ||
| 5297 | with them. Some of them might work serendipitously. There shouldn't be | ||
| 5298 | any problems writing custom line-up functions for AWK mode. | ||
| 5299 | |||
| 5300 | The calling convention for line-up functions is described fully in | ||
| 5301 | @ref{Custom Line-Up}. Roughly speaking, the return value is either an | ||
| 5302 | offset itself (such as @code{+} or @code{[0]}) or it's @code{nil}, | ||
| 5303 | meaning ``this function is inappropriate in this case - try a | ||
| 5304 | different one''. @xref{c-offsets-alist}. | ||
| 5305 | |||
| 5306 | The subsections below describe all the standard line-up functions, | ||
| 5307 | categorized by the sort of token the lining-up centres around. For | ||
| 5308 | each of these functions there is a ``works with'' list that indicates | ||
| 4173 | which syntactic symbols the function is intended to be used with. | 5309 | which syntactic symbols the function is intended to be used with. |
| 4174 | 5310 | ||
| 4175 | @macro workswith | 5311 | @macro workswith |
| @@ -4202,6 +5338,77 @@ Works with: | |||
| 4202 | @end macro | 5338 | @end macro |
| 4203 | @end iftex | 5339 | @end iftex |
| 4204 | 5340 | ||
| 5341 | @menu | ||
| 5342 | * Brace/Paren Line-Up:: | ||
| 5343 | * List Line-Up:: | ||
| 5344 | * Operator Line-Up:: | ||
| 5345 | * Comment Line-Up:: | ||
| 5346 | * Misc Line-Up:: | ||
| 5347 | @end menu | ||
| 5348 | |||
| 5349 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5350 | @node Brace/Paren Line-Up, List Line-Up, Line-Up Functions, Line-Up Functions | ||
| 5351 | @comment node-name, next, previous, up | ||
| 5352 | @subsection Brace and Parenthesis Line-Up Functions | ||
| 5353 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5354 | |||
| 5355 | The line-up functions here calculate the indentation for braces, | ||
| 5356 | parentheses and statements within brace blocks. | ||
| 5357 | |||
| 5358 | @defun c-lineup-close-paren | ||
| 5359 | @findex lineup-close-paren (c-) | ||
| 5360 | Line up the closing paren under its corresponding open paren if the | ||
| 5361 | open paren is followed by code. If the open paren ends its line, no | ||
| 5362 | indentation is added. E.g: | ||
| 5363 | |||
| 5364 | @example | ||
| 5365 | @group | ||
| 5366 | main (int, | ||
| 5367 | char ** | ||
| 5368 | ) @hereFn{c-lineup-close-paren} | ||
| 5369 | @end group | ||
| 5370 | @end example | ||
| 5371 | |||
| 5372 | @noindent | ||
| 5373 | and | ||
| 5374 | |||
| 5375 | @example | ||
| 5376 | @group | ||
| 5377 | main ( | ||
| 5378 | int, char ** | ||
| 5379 | ) @hereFn{c-lineup-close-paren} | ||
| 5380 | @end group | ||
| 5381 | @end example | ||
| 5382 | |||
| 5383 | As a special case, if a brace block is opened at the same line as the | ||
| 5384 | open parenthesis of the argument list, the indentation is | ||
| 5385 | @code{c-basic-offset} instead of the open paren column. See | ||
| 5386 | @code{c-lineup-arglist} for further discussion of this ``DWIM'' measure. | ||
| 5387 | |||
| 5388 | @workswith All @code{*-close} symbols. | ||
| 5389 | @end defun | ||
| 5390 | |||
| 5391 | @comment ------------------------------------------------------------ | ||
| 5392 | |||
| 5393 | @anchor{c-lineup-arglist-close-under-paren} | ||
| 5394 | @defun c-lineup-arglist-close-under-paren | ||
| 5395 | @findex lineup-arglist-close-under-paren (c-) | ||
| 5396 | Set your @code{arglist-close} syntactic symbol to this line-up function | ||
| 5397 | so that parentheses that close argument lists will line up under the | ||
| 5398 | parenthesis that opened the argument list. It can also be used with | ||
| 5399 | @code{arglist-cont} and @code{arglist-cont-nonempty} to line up all | ||
| 5400 | lines inside a parenthesis under the open paren. | ||
| 5401 | |||
| 5402 | As a special case, if a brace block is opened at the same line as the | ||
| 5403 | open parenthesis of the argument list, the indentation is | ||
| 5404 | @code{c-basic-offset} only. See @code{c-lineup-arglist} for further | ||
| 5405 | discussion of this ``DWIM'' measure. | ||
| 5406 | |||
| 5407 | @workswith Almost all symbols, but are typically most useful on | ||
| 5408 | @code{arglist-close}, @code{brace-list-close}, @code{arglist-cont} and | ||
| 5409 | @code{arglist-cont-nonempty}. | ||
| 5410 | @end defun | ||
| 5411 | |||
| 4205 | @comment ------------------------------------------------------------ | 5412 | @comment ------------------------------------------------------------ |
| 4206 | 5413 | ||
| 4207 | @defun c-indent-one-line-block | 5414 | @defun c-indent-one-line-block |
| @@ -4274,29 +5481,141 @@ block, which makes the function usable in list expressions. | |||
| 4274 | 5481 | ||
| 4275 | @comment ------------------------------------------------------------ | 5482 | @comment ------------------------------------------------------------ |
| 4276 | 5483 | ||
| 4277 | @defun c-lineup-argcont | 5484 | @defun c-lineup-runin-statements |
| 4278 | @findex lineup-argcont (c-) | 5485 | @findex lineup-runin-statements (c-) |
| 4279 | Line up a continued argument. E.g: | 5486 | Line up statements for coding standards which place the first statement |
| 5487 | in a block on the same line as the block opening brace@footnote{Run-in | ||
| 5488 | style doesn't really work too well. You might need to write your own | ||
| 5489 | custom line-up functions to better support this style.}. E.g: | ||
| 4280 | 5490 | ||
| 4281 | @example | 5491 | @example |
| 4282 | @group | 5492 | @group |
| 4283 | foo (xyz, aaa + bbb + ccc | 5493 | int main() |
| 4284 | + ddd + eee + fff); @hereFn{c-lineup-argcont} | 5494 | @{ puts ("Hello!"); |
| 5495 | return 0; @hereFn{c-lineup-runin-statements} | ||
| 5496 | @} | ||
| 4285 | @end group | 5497 | @end group |
| 4286 | @end example | 5498 | @end example |
| 4287 | 5499 | ||
| 4288 | Only continuation lines like this are touched, @code{nil} is returned on | 5500 | If there is no statement after the opening brace to align with, |
| 4289 | lines which are the start of an argument. | 5501 | @code{nil} is returned. This makes the function usable in list |
| 5502 | expressions. | ||
| 4290 | 5503 | ||
| 4291 | Within a gcc @code{asm} block, @code{:} is recognised as an argument | 5504 | @workswith The @code{statement} syntactic symbol. |
| 4292 | separator, but of course only between operand specifications, not in the | 5505 | @end defun |
| 4293 | expressions for the operands. | ||
| 4294 | 5506 | ||
| 4295 | @workswith @code{arglist-cont}, @code{arglist-cont-nonempty}. | 5507 | @comment ------------------------------------------------------------ |
| 5508 | |||
| 5509 | @defun c-lineup-inexpr-block | ||
| 5510 | @findex lineup-inexpr-block (c-) | ||
| 5511 | This can be used with the in-expression block symbols to indent the | ||
| 5512 | whole block to the column where the construct is started. E.g. for Java | ||
| 5513 | anonymous classes, this lines up the class under the @samp{new} keyword, | ||
| 5514 | and in Pike it lines up the lambda function body under the @samp{lambda} | ||
| 5515 | keyword. Returns @code{nil} if the block isn't part of such a | ||
| 5516 | construct. | ||
| 5517 | |||
| 5518 | @workswith @code{inlambda}, @code{inexpr-statement}, | ||
| 5519 | @code{inexpr-class}. | ||
| 4296 | @end defun | 5520 | @end defun |
| 4297 | 5521 | ||
| 4298 | @comment ------------------------------------------------------------ | 5522 | @comment ------------------------------------------------------------ |
| 4299 | 5523 | ||
| 5524 | @defun c-lineup-after-whitesmith-blocks | ||
| 5525 | @findex lineup-after-whitesmith-blocks (c-) | ||
| 5526 | Compensate for Whitesmith style indentation of blocks. Due to the way | ||
| 5527 | @ccmode{} calculates anchor positions for normal lines inside blocks, | ||
| 5528 | this function is necessary for those lines to get correct Whitesmith | ||
| 5529 | style indentation. Consider the following examples: | ||
| 5530 | |||
| 5531 | @example | ||
| 5532 | @group | ||
| 5533 | int foo() | ||
| 5534 | @{ | ||
| 5535 | a; | ||
| 5536 | x; @hereFn{c-lineup-after-whitesmith-blocks} | ||
| 5537 | @end group | ||
| 5538 | @end example | ||
| 5539 | |||
| 5540 | @example | ||
| 5541 | @group | ||
| 5542 | int foo() | ||
| 5543 | @{ | ||
| 5544 | @{ | ||
| 5545 | a; | ||
| 5546 | @} | ||
| 5547 | x; @hereFn{c-lineup-after-whitesmith-blocks} | ||
| 5548 | @end group | ||
| 5549 | @end example | ||
| 5550 | |||
| 5551 | The fact that the line with @code{x} is preceded by a Whitesmith style | ||
| 5552 | indented block in the latter case and not the first should not affect | ||
| 5553 | its indentation. But since CC Mode in cases like this uses the | ||
| 5554 | indentation of the preceding statement as anchor position, the @code{x} | ||
| 5555 | would in the second case be indented too much if the offset for | ||
| 5556 | @code{statement} was set simply to zero. | ||
| 5557 | |||
| 5558 | This lineup function corrects for this situation by detecting if the | ||
| 5559 | anchor position is at an open paren character. In that case, it instead | ||
| 5560 | indents relative to the surrounding block just like | ||
| 5561 | @code{c-lineup-whitesmith-in-block}. | ||
| 5562 | |||
| 5563 | @workswith @code{brace-list-entry}, @code{brace-entry-open}, | ||
| 5564 | @code{statement}, @code{arglist-cont}. | ||
| 5565 | @end defun | ||
| 5566 | |||
| 5567 | @comment ------------------------------------------------------------ | ||
| 5568 | |||
| 5569 | @defun c-lineup-whitesmith-in-block | ||
| 5570 | @findex lineup-whitesmith-in-block (c-) | ||
| 5571 | Line up lines inside a block in Whitesmith style. It's done in a way | ||
| 5572 | that works both when the opening brace hangs and when it doesn't. E.g: | ||
| 5573 | |||
| 5574 | @example | ||
| 5575 | @group | ||
| 5576 | something | ||
| 5577 | @{ | ||
| 5578 | foo; @hereFn{c-lineup-whitesmith-in-block} | ||
| 5579 | @} | ||
| 5580 | @end group | ||
| 5581 | @end example | ||
| 5582 | |||
| 5583 | @noindent | ||
| 5584 | and | ||
| 5585 | |||
| 5586 | @example | ||
| 5587 | @group | ||
| 5588 | something @{ | ||
| 5589 | foo; @hereFn{c-lineup-whitesmith-in-block} | ||
| 5590 | @} | ||
| 5591 | @sssTBasicOffset{} | ||
| 5592 | @end group | ||
| 5593 | @end example | ||
| 5594 | |||
| 5595 | In the first case the indentation is kept unchanged, in the second | ||
| 5596 | @code{c-basic-offset} is added. | ||
| 5597 | |||
| 5598 | @workswith @code{defun-close}, @code{defun-block-intro}, | ||
| 5599 | @code{inline-close}, @code{block-close}, @code{brace-list-close}, | ||
| 5600 | @code{brace-list-intro}, @code{statement-block-intro}, | ||
| 5601 | @code{arglist-intro}, @code{arglist-cont-nonempty}, | ||
| 5602 | @code{arglist-close}, and all @code{in*} symbols, e.g. @code{inclass} | ||
| 5603 | and @code{inextern-lang}. | ||
| 5604 | @end defun | ||
| 5605 | |||
| 5606 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5607 | @node List Line-Up, Operator Line-Up, Brace/Paren Line-Up, Line-Up Functions | ||
| 5608 | @comment node-name, next, previous, up | ||
| 5609 | @subsection List Line-Up Functions | ||
| 5610 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5611 | |||
| 5612 | The line-up functions here calculate the indentation for lines which | ||
| 5613 | form lists of items, usually separated by commas. | ||
| 5614 | |||
| 5615 | The function @ref{c-lineup-arglist-close-under-paren}, which is mainly | ||
| 5616 | for indenting a close parenthesis, is also useful for the lines | ||
| 5617 | contained within parentheses. | ||
| 5618 | |||
| 4300 | @defun c-lineup-arglist | 5619 | @defun c-lineup-arglist |
| 4301 | @findex lineup-arglist (c-) | 5620 | @findex lineup-arglist (c-) |
| 4302 | Line up the current argument line under the first argument. | 5621 | Line up the current argument line under the first argument. |
| @@ -4304,7 +5623,7 @@ Line up the current argument line under the first argument. | |||
| 4304 | As a special case, if an argument on the same line as the open | 5623 | As a special case, if an argument on the same line as the open |
| 4305 | parenthesis starts with a brace block opener, the indentation is | 5624 | parenthesis starts with a brace block opener, the indentation is |
| 4306 | @code{c-basic-offset} only. This is intended as a ``DWIM'' measure in | 5625 | @code{c-basic-offset} only. This is intended as a ``DWIM'' measure in |
| 4307 | cases like macros that contains statement blocks, e.g: | 5626 | cases like macros that contain statement blocks, e.g: |
| 4308 | 5627 | ||
| 4309 | @example | 5628 | @example |
| 4310 | @group | 5629 | @group |
| @@ -4337,22 +5656,188 @@ brace block. | |||
| 4337 | 5656 | ||
| 4338 | @comment ------------------------------------------------------------ | 5657 | @comment ------------------------------------------------------------ |
| 4339 | 5658 | ||
| 4340 | @defun c-lineup-arglist-close-under-paren | 5659 | @defun c-lineup-multi-inher |
| 4341 | @findex lineup-arglist-close-under-paren (c-) | 5660 | @findex lineup-multi-inher (c-) |
| 4342 | Set your @code{arglist-close} syntactic symbol to this line-up function | 5661 | Line up the classes in C++ multiple inheritance clauses and member |
| 4343 | so that parentheses that close argument lists will line up under the | 5662 | initializers under each other. E.g: |
| 4344 | parenthesis that opened the argument list. It can also be used with | ||
| 4345 | @code{arglist-cont} and @code{arglist-cont-nonempty} to line up all | ||
| 4346 | lines inside a parenthesis under the open paren. | ||
| 4347 | 5663 | ||
| 4348 | As a special case, if a brace block is opened at the same line as the | 5664 | @example |
| 4349 | open parenthesis of the argument list, the indentation is | 5665 | @group |
| 4350 | @code{c-basic-offset} only. See @code{c-lineup-arglist} for further | 5666 | Foo::Foo (int a, int b): |
| 4351 | discussion of this ``DWIM'' measure. | 5667 | Cyphr (a), |
| 5668 | Bar (b) @hereFn{c-lineup-multi-inher} | ||
| 5669 | @end group | ||
| 5670 | @end example | ||
| 4352 | 5671 | ||
| 4353 | @workswith Almost all symbols, but are typically most useful on | 5672 | @noindent |
| 4354 | @code{arglist-close}, @code{brace-list-close}, @code{arglist-cont} and | 5673 | and |
| 4355 | @code{arglist-cont-nonempty}. | 5674 | |
| 5675 | @example | ||
| 5676 | @group | ||
| 5677 | class Foo | ||
| 5678 | : public Cyphr, | ||
| 5679 | public Bar @hereFn{c-lineup-multi-inher} | ||
| 5680 | @end group | ||
| 5681 | @end example | ||
| 5682 | |||
| 5683 | @noindent | ||
| 5684 | and | ||
| 5685 | |||
| 5686 | @example | ||
| 5687 | @group | ||
| 5688 | Foo::Foo (int a, int b) | ||
| 5689 | : Cyphr (a) | ||
| 5690 | , Bar (b) @hereFn{c-lineup-multi-inher} | ||
| 5691 | @end group | ||
| 5692 | @end example | ||
| 5693 | |||
| 5694 | @workswith @code{inher-cont}, @code{member-init-cont}. | ||
| 5695 | @end defun | ||
| 5696 | |||
| 5697 | @comment ------------------------------------------------------------ | ||
| 5698 | |||
| 5699 | @defun c-lineup-java-inher | ||
| 5700 | @findex lineup-java-inher (c-) | ||
| 5701 | Line up Java implements and extends declarations. If class names | ||
| 5702 | follow on the same line as the @samp{implements}/@samp{extends} | ||
| 5703 | keyword, they are lined up under each other. Otherwise, they are | ||
| 5704 | indented by adding @code{c-basic-offset} to the column of the keyword. | ||
| 5705 | E.g: | ||
| 5706 | |||
| 5707 | @example | ||
| 5708 | @group | ||
| 5709 | class Foo | ||
| 5710 | extends | ||
| 5711 | Bar @hereFn{c-lineup-java-inher} | ||
| 5712 | @sssTBasicOffset{} | ||
| 5713 | @end group | ||
| 5714 | @end example | ||
| 5715 | |||
| 5716 | @noindent | ||
| 5717 | and | ||
| 5718 | |||
| 5719 | @example | ||
| 5720 | @group | ||
| 5721 | class Foo | ||
| 5722 | extends Cyphr, | ||
| 5723 | Bar @hereFn{c-lineup-java-inher} | ||
| 5724 | @end group | ||
| 5725 | @end example | ||
| 5726 | |||
| 5727 | @workswith @code{inher-cont}. | ||
| 5728 | @end defun | ||
| 5729 | |||
| 5730 | @comment ------------------------------------------------------------ | ||
| 5731 | |||
| 5732 | @defun c-lineup-java-throws | ||
| 5733 | @findex lineup-java-throws (c-) | ||
| 5734 | Line up Java throws declarations. If exception names follow on the | ||
| 5735 | same line as the throws keyword, they are lined up under each other. | ||
| 5736 | Otherwise, they are indented by adding @code{c-basic-offset} to the | ||
| 5737 | column of the @samp{throws} keyword. The @samp{throws} keyword itself | ||
| 5738 | is also indented by @code{c-basic-offset} from the function declaration | ||
| 5739 | start if it doesn't hang. E.g: | ||
| 5740 | |||
| 5741 | @example | ||
| 5742 | @group | ||
| 5743 | int foo() | ||
| 5744 | throws @hereFn{c-lineup-java-throws} | ||
| 5745 | Bar @hereFn{c-lineup-java-throws} | ||
| 5746 | @sssTsssTBasicOffset{} | ||
| 5747 | @end group | ||
| 5748 | @end example | ||
| 5749 | |||
| 5750 | @noindent | ||
| 5751 | and | ||
| 5752 | |||
| 5753 | @example | ||
| 5754 | @group | ||
| 5755 | int foo() throws Cyphr, | ||
| 5756 | Bar, @hereFn{c-lineup-java-throws} | ||
| 5757 | Vlod @hereFn{c-lineup-java-throws} | ||
| 5758 | @end group | ||
| 5759 | @end example | ||
| 5760 | |||
| 5761 | @workswith @code{func-decl-cont}. | ||
| 5762 | @end defun | ||
| 5763 | |||
| 5764 | @comment ------------------------------------------------------------ | ||
| 5765 | |||
| 5766 | @defun c-lineup-template-args | ||
| 5767 | @findex lineup-template-args (c-) | ||
| 5768 | Line up the arguments of a template argument list under each other, but | ||
| 5769 | only in the case where the first argument is on the same line as the | ||
| 5770 | opening @samp{<}. | ||
| 5771 | |||
| 5772 | To allow this function to be used in a list expression, @code{nil} is | ||
| 5773 | returned if there's no template argument on the first line. | ||
| 5774 | |||
| 5775 | @workswith @code{template-args-cont}. | ||
| 5776 | @end defun | ||
| 5777 | |||
| 5778 | @comment ------------------------------------------------------------ | ||
| 5779 | |||
| 5780 | @defun c-lineup-ObjC-method-call | ||
| 5781 | @findex lineup-ObjC-method-call (c-) | ||
| 5782 | For Objective-C code, line up selector args as Emacs Lisp mode does | ||
| 5783 | with function args: go to the position right after the message receiver, | ||
| 5784 | and if you are at the end of the line, indent the current line | ||
| 5785 | c-basic-offset columns from the opening bracket; otherwise you are | ||
| 5786 | looking at the first character of the first method call argument, so | ||
| 5787 | lineup the current line with it. | ||
| 5788 | |||
| 5789 | @workswith @code{objc-method-call-cont}. | ||
| 5790 | @end defun | ||
| 5791 | |||
| 5792 | @comment ------------------------------------------------------------ | ||
| 5793 | |||
| 5794 | @defun c-lineup-ObjC-method-args | ||
| 5795 | @findex lineup-ObjC-method-args (c-) | ||
| 5796 | For Objective-C code, line up the colons that separate args. The colon | ||
| 5797 | on the current line is aligned with the one on the first line. | ||
| 5798 | |||
| 5799 | @workswith @code{objc-method-args-cont}. | ||
| 5800 | @end defun | ||
| 5801 | |||
| 5802 | @comment ------------------------------------------------------------ | ||
| 5803 | |||
| 5804 | @defun c-lineup-ObjC-method-args-2 | ||
| 5805 | @findex lineup-ObjC-method-args-2 (c-) | ||
| 5806 | Similar to @code{c-lineup-ObjC-method-args} but lines up the colon on | ||
| 5807 | the current line with the colon on the previous line. | ||
| 5808 | |||
| 5809 | @workswith @code{objc-method-args-cont}. | ||
| 5810 | @end defun | ||
| 5811 | |||
| 5812 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5813 | @node Operator Line-Up, Comment Line-Up, List Line-Up, Line-Up Functions | ||
| 5814 | @comment node-name, next, previous, up | ||
| 5815 | @subsection Operator Line-Up Functions | ||
| 5816 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5817 | |||
| 5818 | The line-up functions here calculate the indentation for lines which | ||
| 5819 | start with an operator, by lining it up with something on the previous | ||
| 5820 | line. | ||
| 5821 | |||
| 5822 | @defun c-lineup-argcont | ||
| 5823 | @findex lineup-argcont (c-) | ||
| 5824 | Line up a continued argument. E.g: | ||
| 5825 | |||
| 5826 | @example | ||
| 5827 | @group | ||
| 5828 | foo (xyz, aaa + bbb + ccc | ||
| 5829 | + ddd + eee + fff); @hereFn{c-lineup-argcont} | ||
| 5830 | @end group | ||
| 5831 | @end example | ||
| 5832 | |||
| 5833 | Only continuation lines like this are touched, @code{nil} is returned on | ||
| 5834 | lines which are the start of an argument. | ||
| 5835 | |||
| 5836 | Within a gcc @code{asm} block, @code{:} is recognised as an argument | ||
| 5837 | separator, but of course only between operand specifications, not in the | ||
| 5838 | expressions for the operands. | ||
| 5839 | |||
| 5840 | @workswith @code{arglist-cont}, @code{arglist-cont-nonempty}. | ||
| 4356 | @end defun | 5841 | @end defun |
| 4357 | 5842 | ||
| 4358 | @comment ------------------------------------------------------------ | 5843 | @comment ------------------------------------------------------------ |
| @@ -4361,7 +5846,7 @@ discussion of this ``DWIM'' measure. | |||
| 4361 | @findex lineup-arglist-operators (c-) | 5846 | @findex lineup-arglist-operators (c-) |
| 4362 | Line up lines starting with an infix operator under the open paren. | 5847 | Line up lines starting with an infix operator under the open paren. |
| 4363 | Return @code{nil} on lines that don't start with an operator, to leave | 5848 | Return @code{nil} on lines that don't start with an operator, to leave |
| 4364 | those cases to other lineup functions. Example: | 5849 | those cases to other line-up functions. Example: |
| 4365 | 5850 | ||
| 4366 | @example | 5851 | @example |
| 4367 | @group | 5852 | @group |
| @@ -4374,7 +5859,7 @@ if ( x < 10 | |||
| 4374 | 5859 | ||
| 4375 | Since this function doesn't do anything for lines without an infix | 5860 | Since this function doesn't do anything for lines without an infix |
| 4376 | operator you typically want to use it together with some other lineup | 5861 | operator you typically want to use it together with some other lineup |
| 4377 | settings, e.g., as follows (the @code{arglist-close} setting is just a | 5862 | settings, e.g. as follows (the @code{arglist-close} setting is just a |
| 4378 | suggestion to get a consistent style): | 5863 | suggestion to get a consistent style): |
| 4379 | 5864 | ||
| 4380 | @example | 5865 | @example |
| @@ -4391,6 +5876,96 @@ suggestion to get a consistent style): | |||
| 4391 | 5876 | ||
| 4392 | @comment ------------------------------------------------------------ | 5877 | @comment ------------------------------------------------------------ |
| 4393 | 5878 | ||
| 5879 | @defun c-lineup-assignments | ||
| 5880 | @findex lineup-assignments (c-) | ||
| 5881 | Line up the current line after the assignment operator on the first line | ||
| 5882 | in the statement. If there isn't any, return nil to allow stacking with | ||
| 5883 | other line-up functions. If the current line contains an assignment | ||
| 5884 | operator too, try to align it with the first one. | ||
| 5885 | |||
| 5886 | @workswith @code{topmost-intro-cont}, @code{statement-cont}, | ||
| 5887 | @code{arglist-cont}, @code{arglist-cont-nonempty}. | ||
| 5888 | |||
| 5889 | @end defun | ||
| 5890 | |||
| 5891 | @comment ------------------------------------------------------------ | ||
| 5892 | |||
| 5893 | @defun c-lineup-math | ||
| 5894 | @findex lineup-math (c-) | ||
| 5895 | Like @code{c-lineup-assignments} but indent with @code{c-basic-offset} | ||
| 5896 | if no assignment operator was found on the first line. I.e. this | ||
| 5897 | function is the same as specifying a list @code{(c-lineup-assignments | ||
| 5898 | +)}. It's provided for compatibility with old configurations. | ||
| 5899 | |||
| 5900 | @workswith @code{topmost-intro-cont}, @code{statement-cont}, | ||
| 5901 | @code{arglist-cont}, @code{arglist-cont-nonempty}. | ||
| 5902 | @end defun | ||
| 5903 | |||
| 5904 | @comment ------------------------------------------------------------ | ||
| 5905 | |||
| 5906 | @defun c-lineup-cascaded-calls | ||
| 5907 | @findex lineup-cascaded-calls (c-) | ||
| 5908 | Line up ``cascaded calls'' under each other. If the line begins with | ||
| 5909 | @code{->} or @code{.} and the preceding line ends with one or more | ||
| 5910 | function calls preceded by the same token, then the arrow is lined up | ||
| 5911 | with the first of those tokens. E.g: | ||
| 5912 | |||
| 5913 | @example | ||
| 5914 | @group | ||
| 5915 | r = proc->add(17)->add(18) | ||
| 5916 | ->add(19) + @hereFn{c-lineup-cascaded-calls} | ||
| 5917 | offset; @hereFn{c-lineup-cascaded-calls@r{ (inactive)}} | ||
| 5918 | @end group | ||
| 5919 | @end example | ||
| 5920 | |||
| 5921 | In any other situation @code{nil} is returned to allow use in list | ||
| 5922 | expressions. | ||
| 5923 | |||
| 5924 | @workswith @code{topmost-intro-cont}, @code{statement-cont}, | ||
| 5925 | @code{arglist-cont}, @code{arglist-cont-nonempty}. | ||
| 5926 | @end defun | ||
| 5927 | |||
| 5928 | @comment ------------------------------------------------------------ | ||
| 5929 | |||
| 5930 | @defun c-lineup-streamop | ||
| 5931 | @findex lineup-streamop (c-) | ||
| 5932 | Line up C++ stream operators (i.e. @samp{<<} and @samp{>>}). | ||
| 5933 | |||
| 5934 | @workswith @code{stream-op}. | ||
| 5935 | @end defun | ||
| 5936 | |||
| 5937 | @comment ------------------------------------------------------------ | ||
| 5938 | |||
| 5939 | @defun c-lineup-string-cont | ||
| 5940 | @findex lineup-string-cont (c-) | ||
| 5941 | Line up a continued string under the one it continues. A continued | ||
| 5942 | string in this sense is where a string literal follows directly after | ||
| 5943 | another one. E.g: | ||
| 5944 | |||
| 5945 | @example | ||
| 5946 | @group | ||
| 5947 | result = prefix + "A message " | ||
| 5948 | "string."; @hereFn{c-lineup-string-cont} | ||
| 5949 | @end group | ||
| 5950 | @end example | ||
| 5951 | |||
| 5952 | @code{nil} is returned in other situations, to allow stacking with other | ||
| 5953 | lineup functions. | ||
| 5954 | |||
| 5955 | @workswith @code{topmost-intro-cont}, @code{statement-cont}, | ||
| 5956 | @code{arglist-cont}, @code{arglist-cont-nonempty}. | ||
| 5957 | @end defun | ||
| 5958 | |||
| 5959 | |||
| 5960 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5961 | @node Comment Line-Up, Misc Line-Up, Operator Line-Up, Line-Up Functions | ||
| 5962 | @comment node-name, next, previous, up | ||
| 5963 | @subsection Comment Line-Up Functions | ||
| 5964 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5965 | |||
| 5966 | The lineup functions here calculate the indentation for several types | ||
| 5967 | of comment structure. | ||
| 5968 | |||
| 4394 | @defun c-lineup-C-comments | 5969 | @defun c-lineup-C-comments |
| 4395 | @findex lineup-C-comments (c-) | 5970 | @findex lineup-C-comments (c-) |
| 4396 | Line up C block comment continuation lines. Various heuristics are used | 5971 | Line up C block comment continuation lines. Various heuristics are used |
| @@ -4435,7 +6010,7 @@ to handle most of the common comment styles. Some examples: | |||
| 4435 | @end example | 6010 | @end example |
| 4436 | 6011 | ||
| 4437 | The style variable @code{c-comment-prefix-regexp} is used to recognize | 6012 | The style variable @code{c-comment-prefix-regexp} is used to recognize |
| 4438 | the comment line prefix, e.g., the @samp{*} that usually starts every | 6013 | the comment line prefix, e.g. the @samp{*} that usually starts every |
| 4439 | line inside a comment. | 6014 | line inside a comment. |
| 4440 | 6015 | ||
| 4441 | @workswith The @code{c} syntactic symbol. | 6016 | @workswith The @code{c} syntactic symbol. |
| @@ -4443,65 +6018,6 @@ line inside a comment. | |||
| 4443 | 6018 | ||
| 4444 | @comment ------------------------------------------------------------ | 6019 | @comment ------------------------------------------------------------ |
| 4445 | 6020 | ||
| 4446 | @defun c-lineup-cascaded-calls | ||
| 4447 | @findex lineup-cascaded-calls (c-) | ||
| 4448 | Line up ``cascaded calls'' under each other. If the line begins with | ||
| 4449 | @code{->} or @code{.} and the preceding line ends with one or more | ||
| 4450 | function calls preceded by the same token, then the arrow is lined up | ||
| 4451 | with the first of those tokens. E.g: | ||
| 4452 | |||
| 4453 | @example | ||
| 4454 | @group | ||
| 4455 | r = proc->add(17)->add(18) | ||
| 4456 | ->add(19) + @hereFn{c-lineup-cascaded-calls} | ||
| 4457 | offset; @hereFn{c-lineup-cascaded-calls@r{ (inactive)}} | ||
| 4458 | @end group | ||
| 4459 | @end example | ||
| 4460 | |||
| 4461 | In any other situation @code{nil} is returned to allow use in list | ||
| 4462 | expressions. | ||
| 4463 | |||
| 4464 | @workswith @code{topmost-intro-cont}, @code{statement-cont}, | ||
| 4465 | @code{arglist-cont}, @code{arglist-cont-nonempty}. | ||
| 4466 | @end defun | ||
| 4467 | |||
| 4468 | @comment ------------------------------------------------------------ | ||
| 4469 | |||
| 4470 | @defun c-lineup-close-paren | ||
| 4471 | @findex lineup-close-paren (c-) | ||
| 4472 | Line up the closing paren under its corresponding open paren if the | ||
| 4473 | open paren is followed by code. If the open paren ends its line, no | ||
| 4474 | indentation is added. E.g: | ||
| 4475 | |||
| 4476 | @example | ||
| 4477 | @group | ||
| 4478 | main (int, | ||
| 4479 | char ** | ||
| 4480 | ) @hereFn{c-lineup-close-paren} | ||
| 4481 | @end group | ||
| 4482 | @end example | ||
| 4483 | |||
| 4484 | @noindent | ||
| 4485 | and | ||
| 4486 | |||
| 4487 | @example | ||
| 4488 | @group | ||
| 4489 | main ( | ||
| 4490 | int, char ** | ||
| 4491 | ) @hereFn{c-lineup-close-paren} | ||
| 4492 | @end group | ||
| 4493 | @end example | ||
| 4494 | |||
| 4495 | As a special case, if a brace block is opened at the same line as the | ||
| 4496 | open parenthesis of the argument list, the indentation is | ||
| 4497 | @code{c-basic-offset} instead of the open paren column. See | ||
| 4498 | @code{c-lineup-arglist} for further discussion of this ``DWIM'' measure. | ||
| 4499 | |||
| 4500 | @workswith All @code{*-close} symbols. | ||
| 4501 | @end defun | ||
| 4502 | |||
| 4503 | @comment ------------------------------------------------------------ | ||
| 4504 | |||
| 4505 | @defun c-lineup-comment | 6021 | @defun c-lineup-comment |
| 4506 | @findex lineup-comment (c-) | 6022 | @findex lineup-comment (c-) |
| 4507 | Line up a comment-only line according to the style variable | 6023 | Line up a comment-only line according to the style variable |
| @@ -4529,6 +6045,47 @@ is equivalent to @code{(@r{@var{value}} . -1000)}. | |||
| 4529 | 6045 | ||
| 4530 | @comment ------------------------------------------------------------ | 6046 | @comment ------------------------------------------------------------ |
| 4531 | 6047 | ||
| 6048 | @defun c-lineup-knr-region-comment | ||
| 6049 | @findex lineup-knr-region-comment (c-) | ||
| 6050 | Line up a comment in the ``K&R region'' with the declaration. That is | ||
| 6051 | the region between the function or class header and the beginning of the | ||
| 6052 | block. E.g: | ||
| 6053 | |||
| 6054 | @example | ||
| 6055 | @group | ||
| 6056 | int main() | ||
| 6057 | /* Called at startup. */ @hereFn{c-lineup-knr-region-comment} | ||
| 6058 | @{ | ||
| 6059 | return 0; | ||
| 6060 | @} | ||
| 6061 | @end group | ||
| 6062 | @end example | ||
| 6063 | |||
| 6064 | Return @code{nil} if called in any other situation, to be useful in list | ||
| 6065 | expressions. | ||
| 6066 | |||
| 6067 | @workswith @code{comment-intro}. | ||
| 6068 | @end defun | ||
| 6069 | |||
| 6070 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 6071 | @node Misc Line-Up, , Comment Line-Up, Line-Up Functions | ||
| 6072 | @comment node-name, next, previous, up | ||
| 6073 | @subsection Miscellaneous Line-Up Functions | ||
| 6074 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 6075 | |||
| 6076 | The line-up functions here are the odds and ends which didn't fit into | ||
| 6077 | any earlier category. | ||
| 6078 | |||
| 6079 | @defun c-lineup-dont-change | ||
| 6080 | @findex lineup-dont-change (c-) | ||
| 6081 | This lineup function makes the line stay at whatever indentation it | ||
| 6082 | already has; think of it as an identity function for lineups. | ||
| 6083 | |||
| 6084 | @workswith Any syntactic symbol. | ||
| 6085 | @end defun | ||
| 6086 | |||
| 6087 | @comment ------------------------------------------------------------ | ||
| 6088 | |||
| 4532 | @defun c-lineup-cpp-define | 6089 | @defun c-lineup-cpp-define |
| 4533 | @findex lineup-cpp-define (c-) | 6090 | @findex lineup-cpp-define (c-) |
| 4534 | Line up macro continuation lines according to the indentation of the | 6091 | Line up macro continuation lines according to the indentation of the |
| @@ -4564,7 +6121,7 @@ int dribble() @{ | |||
| 4564 | 6121 | ||
| 4565 | If @code{c-syntactic-indentation-in-macros} is non-@code{nil}, the | 6122 | If @code{c-syntactic-indentation-in-macros} is non-@code{nil}, the |
| 4566 | function returns the relative indentation to the macro start line to | 6123 | function returns the relative indentation to the macro start line to |
| 4567 | allow accumulation with other offsets. e.g., in the following cases, | 6124 | allow accumulation with other offsets. E.g. in the following cases, |
| 4568 | @code{cpp-define-intro} is combined with the | 6125 | @code{cpp-define-intro} is combined with the |
| 4569 | @code{statement-block-intro} that comes from the @samp{do @{} that hangs | 6126 | @code{statement-block-intro} that comes from the @samp{do @{} that hangs |
| 4570 | on the @samp{#define} line: | 6127 | on the @samp{#define} line: |
| @@ -4618,16 +6175,6 @@ described above. | |||
| 4618 | 6175 | ||
| 4619 | @comment ------------------------------------------------------------ | 6176 | @comment ------------------------------------------------------------ |
| 4620 | 6177 | ||
| 4621 | @defun c-lineup-dont-change | ||
| 4622 | @findex lineup-dont-change (c-) | ||
| 4623 | This lineup function makes the line stay at whatever indentation it | ||
| 4624 | already has; think of it as an identity function for lineups. | ||
| 4625 | |||
| 4626 | @workswith Any syntactic symbol. | ||
| 4627 | @end defun | ||
| 4628 | |||
| 4629 | @comment ------------------------------------------------------------ | ||
| 4630 | |||
| 4631 | @defun c-lineup-gcc-asm-reg | 6178 | @defun c-lineup-gcc-asm-reg |
| 4632 | @findex lineup-gcc-asm-reg (c-) | 6179 | @findex lineup-gcc-asm-reg (c-) |
| 4633 | Line up a gcc asm register under one on a previous line. | 6180 | Line up a gcc asm register under one on a previous line. |
| @@ -4660,269 +6207,6 @@ arglist lineups, e.g. | |||
| 4660 | 6207 | ||
| 4661 | @comment ------------------------------------------------------------ | 6208 | @comment ------------------------------------------------------------ |
| 4662 | 6209 | ||
| 4663 | @defun c-lineup-inexpr-block | ||
| 4664 | @findex lineup-inexpr-block (c-) | ||
| 4665 | This can be used with the in-expression block symbols to indent the | ||
| 4666 | whole block to the column where the construct is started. e.g., for Java | ||
| 4667 | anonymous classes, this lines up the class under the @samp{new} keyword, | ||
| 4668 | and in Pike it lines up the lambda function body under the @samp{lambda} | ||
| 4669 | keyword. Returns @code{nil} if the block isn't part of such a | ||
| 4670 | construct. | ||
| 4671 | |||
| 4672 | @workswith @code{inlambda}, @code{inexpr-statement}, | ||
| 4673 | @code{inexpr-class}. | ||
| 4674 | @end defun | ||
| 4675 | |||
| 4676 | @comment ------------------------------------------------------------ | ||
| 4677 | |||
| 4678 | @defun c-lineup-java-inher | ||
| 4679 | @findex lineup-java-inher (c-) | ||
| 4680 | Line up Java implements and extends declarations. If class names | ||
| 4681 | follow on the same line as the @samp{implements}/@samp{extends} | ||
| 4682 | keyword, they are lined up under each other. Otherwise, they are | ||
| 4683 | indented by adding @code{c-basic-offset} to the column of the keyword. | ||
| 4684 | E.g: | ||
| 4685 | |||
| 4686 | @example | ||
| 4687 | @group | ||
| 4688 | class Foo | ||
| 4689 | extends | ||
| 4690 | Bar @hereFn{c-lineup-java-inher} | ||
| 4691 | @sssTBasicOffset{} | ||
| 4692 | @end group | ||
| 4693 | @end example | ||
| 4694 | |||
| 4695 | @noindent | ||
| 4696 | and | ||
| 4697 | |||
| 4698 | @example | ||
| 4699 | @group | ||
| 4700 | class Foo | ||
| 4701 | extends Cyphr, | ||
| 4702 | Bar @hereFn{c-lineup-java-inher} | ||
| 4703 | @end group | ||
| 4704 | @end example | ||
| 4705 | |||
| 4706 | @workswith @code{inher-cont}. | ||
| 4707 | @end defun | ||
| 4708 | |||
| 4709 | @comment ------------------------------------------------------------ | ||
| 4710 | |||
| 4711 | @defun c-lineup-java-throws | ||
| 4712 | @findex lineup-java-throws (c-) | ||
| 4713 | Line up Java throws declarations. If exception names follow on the | ||
| 4714 | same line as the throws keyword, they are lined up under each other. | ||
| 4715 | Otherwise, they are indented by adding @code{c-basic-offset} to the | ||
| 4716 | column of the @samp{throws} keyword. The @samp{throws} keyword itself | ||
| 4717 | is also indented by @code{c-basic-offset} from the function declaration | ||
| 4718 | start if it doesn't hang. E.g: | ||
| 4719 | |||
| 4720 | @example | ||
| 4721 | @group | ||
| 4722 | int foo() | ||
| 4723 | throws @hereFn{c-lineup-java-throws} | ||
| 4724 | Bar @hereFn{c-lineup-java-throws} | ||
| 4725 | @sssTsssTBasicOffset{} | ||
| 4726 | @end group | ||
| 4727 | @end example | ||
| 4728 | |||
| 4729 | @noindent | ||
| 4730 | and | ||
| 4731 | |||
| 4732 | @example | ||
| 4733 | @group | ||
| 4734 | int foo() throws Cyphr, | ||
| 4735 | Bar, @hereFn{c-lineup-java-throws} | ||
| 4736 | Vlod @hereFn{c-lineup-java-throws} | ||
| 4737 | @end group | ||
| 4738 | @end example | ||
| 4739 | |||
| 4740 | @workswith @code{func-decl-cont}. | ||
| 4741 | @end defun | ||
| 4742 | |||
| 4743 | @comment ------------------------------------------------------------ | ||
| 4744 | |||
| 4745 | @defun c-lineup-knr-region-comment | ||
| 4746 | @findex lineup-knr-region-comment (c-) | ||
| 4747 | Line up a comment in the ``K&R region'' with the declaration. That is | ||
| 4748 | the region between the function or class header and the beginning of the | ||
| 4749 | block. E.g: | ||
| 4750 | |||
| 4751 | @example | ||
| 4752 | @group | ||
| 4753 | int main() | ||
| 4754 | /* Called at startup. */ @hereFn{c-lineup-knr-region-comment} | ||
| 4755 | @{ | ||
| 4756 | return 0; | ||
| 4757 | @} | ||
| 4758 | @end group | ||
| 4759 | @end example | ||
| 4760 | |||
| 4761 | Return @code{nil} if called in any other situation, to be useful in list | ||
| 4762 | expressions. | ||
| 4763 | |||
| 4764 | @workswith @code{comment-intro}. | ||
| 4765 | @end defun | ||
| 4766 | |||
| 4767 | @comment ------------------------------------------------------------ | ||
| 4768 | |||
| 4769 | @defun c-lineup-math | ||
| 4770 | @findex lineup-math (c-) | ||
| 4771 | Line up the current line to after the equal sign on the first line in the | ||
| 4772 | statement. If there isn't any, indent with @code{c-basic-offset}. If | ||
| 4773 | the current line contains an equal sign too, try to align it with the | ||
| 4774 | first one. | ||
| 4775 | |||
| 4776 | @workswith @code{topmost-intro-cont}, @code{statement-cont}, | ||
| 4777 | @code{arglist-cont}, @code{arglist-cont-nonempty}. | ||
| 4778 | @end defun | ||
| 4779 | |||
| 4780 | @comment ------------------------------------------------------------ | ||
| 4781 | |||
| 4782 | @defun c-lineup-multi-inher | ||
| 4783 | @findex lineup-multi-inher (c-) | ||
| 4784 | Line up the classes in C++ multiple inheritance clauses and member | ||
| 4785 | initializers under each other. E.g: | ||
| 4786 | |||
| 4787 | @example | ||
| 4788 | @group | ||
| 4789 | Foo::Foo (int a, int b): | ||
| 4790 | Cyphr (a), | ||
| 4791 | Bar (b) @hereFn{c-lineup-multi-inher} | ||
| 4792 | @end group | ||
| 4793 | @end example | ||
| 4794 | |||
| 4795 | @noindent | ||
| 4796 | and | ||
| 4797 | |||
| 4798 | @example | ||
| 4799 | @group | ||
| 4800 | class Foo | ||
| 4801 | : public Cyphr, | ||
| 4802 | public Bar @hereFn{c-lineup-multi-inher} | ||
| 4803 | @end group | ||
| 4804 | @end example | ||
| 4805 | |||
| 4806 | @noindent | ||
| 4807 | and | ||
| 4808 | |||
| 4809 | @example | ||
| 4810 | @group | ||
| 4811 | Foo::Foo (int a, int b) | ||
| 4812 | : Cyphr (a) | ||
| 4813 | , Bar (b) @hereFn{c-lineup-multi-inher} | ||
| 4814 | @end group | ||
| 4815 | @end example | ||
| 4816 | |||
| 4817 | @workswith @code{inher-cont}, @code{member-init-cont}. | ||
| 4818 | @end defun | ||
| 4819 | |||
| 4820 | @comment ------------------------------------------------------------ | ||
| 4821 | |||
| 4822 | @defun c-lineup-ObjC-method-call | ||
| 4823 | @findex lineup-ObjC-method-call (c-) | ||
| 4824 | For Objective-C code, line up selector args as Emacs Lisp mode does | ||
| 4825 | with function args: go to the position right after the message receiver, | ||
| 4826 | and if you are at the end of the line, indent the current line | ||
| 4827 | c-basic-offset columns from the opening bracket; otherwise you are | ||
| 4828 | looking at the first character of the first method call argument, so | ||
| 4829 | lineup the current line with it. | ||
| 4830 | |||
| 4831 | @workswith @code{objc-method-call-cont}. | ||
| 4832 | @end defun | ||
| 4833 | |||
| 4834 | @comment ------------------------------------------------------------ | ||
| 4835 | |||
| 4836 | @defun c-lineup-ObjC-method-args | ||
| 4837 | @findex lineup-ObjC-method-args (c-) | ||
| 4838 | For Objective-C code, line up the colons that separate args. The colon | ||
| 4839 | on the current line is aligned with the one on the first line. | ||
| 4840 | |||
| 4841 | @workswith @code{objc-method-args-cont}. | ||
| 4842 | @end defun | ||
| 4843 | |||
| 4844 | @comment ------------------------------------------------------------ | ||
| 4845 | |||
| 4846 | @defun c-lineup-ObjC-method-args-2 | ||
| 4847 | @findex lineup-ObjC-method-args-2 (c-) | ||
| 4848 | Similar to @code{c-lineup-ObjC-method-args} but lines up the colon on | ||
| 4849 | the current line with the colon on the previous line. | ||
| 4850 | |||
| 4851 | @workswith @code{objc-method-args-cont}. | ||
| 4852 | @end defun | ||
| 4853 | |||
| 4854 | @comment ------------------------------------------------------------ | ||
| 4855 | |||
| 4856 | @defun c-lineup-runin-statements | ||
| 4857 | @findex lineup-runin-statements (c-) | ||
| 4858 | Line up statements for coding standards which place the first statement | ||
| 4859 | in a block on the same line as the block opening brace@footnote{Run-in | ||
| 4860 | style doesn't really work too well. You might need to write your own | ||
| 4861 | custom indentation functions to better support this style.}. E.g: | ||
| 4862 | |||
| 4863 | @example | ||
| 4864 | @group | ||
| 4865 | int main() | ||
| 4866 | @{ puts ("Hello!"); | ||
| 4867 | return 0; @hereFn{c-lineup-runin-statements} | ||
| 4868 | @} | ||
| 4869 | @end group | ||
| 4870 | @end example | ||
| 4871 | |||
| 4872 | If there is no statement after the opening brace to align with, | ||
| 4873 | @code{nil} is returned. This makes the function usable in list | ||
| 4874 | expressions. | ||
| 4875 | |||
| 4876 | @workswith The @code{statement} syntactic symbol. | ||
| 4877 | @end defun | ||
| 4878 | |||
| 4879 | @comment ------------------------------------------------------------ | ||
| 4880 | |||
| 4881 | @defun c-lineup-streamop | ||
| 4882 | @findex lineup-streamop (c-) | ||
| 4883 | Line up C++ stream operators (i.e., @samp{<<} and @samp{>>}). | ||
| 4884 | |||
| 4885 | @workswith @code{stream-op}. | ||
| 4886 | @end defun | ||
| 4887 | |||
| 4888 | @comment ------------------------------------------------------------ | ||
| 4889 | |||
| 4890 | @defun c-lineup-string-cont | ||
| 4891 | @findex lineup-string-cont (c-) | ||
| 4892 | Line up a continued string under the one it continues. A continued | ||
| 4893 | string in this sense is where a string literal follows directly after | ||
| 4894 | another one. E.g: | ||
| 4895 | |||
| 4896 | @example | ||
| 4897 | @group | ||
| 4898 | result = prefix + "A message " | ||
| 4899 | "string."; @hereFn{c-lineup-string-cont} | ||
| 4900 | @end group | ||
| 4901 | @end example | ||
| 4902 | |||
| 4903 | @code{nil} is returned in other situations, to allow stacking with other | ||
| 4904 | lineup functions. | ||
| 4905 | |||
| 4906 | @workswith @code{topmost-intro-cont}, @code{statement-cont}, | ||
| 4907 | @code{arglist-cont}, @code{arglist-cont-nonempty}. | ||
| 4908 | @end defun | ||
| 4909 | |||
| 4910 | @comment ------------------------------------------------------------ | ||
| 4911 | |||
| 4912 | @defun c-lineup-template-args | ||
| 4913 | @findex lineup-template-args (c-) | ||
| 4914 | Line up the arguments of a template argument list under each other, but | ||
| 4915 | only in the case where the first argument is on the same line as the | ||
| 4916 | opening @samp{<}. | ||
| 4917 | |||
| 4918 | To allow this function to be used in a list expression, @code{nil} is | ||
| 4919 | returned if there's no template argument on the first line. | ||
| 4920 | |||
| 4921 | @workswith @code{template-args-cont}. | ||
| 4922 | @end defun | ||
| 4923 | |||
| 4924 | @comment ------------------------------------------------------------ | ||
| 4925 | |||
| 4926 | @defun c-lineup-topmost-intro-cont | 6210 | @defun c-lineup-topmost-intro-cont |
| 4927 | @findex lineup-topmost-intro-cont (c-) | 6211 | @findex lineup-topmost-intro-cont (c-) |
| 4928 | Line up declaration continuation lines zero or one indentation | 6212 | Line up declaration continuation lines zero or one indentation |
| @@ -4974,297 +6258,227 @@ the_larch, @hereFn{c-lineup-topmost-intro-cont} | |||
| 4974 | @workswith @code{topmost-intro-cont}. | 6258 | @workswith @code{topmost-intro-cont}. |
| 4975 | @end defun | 6259 | @end defun |
| 4976 | 6260 | ||
| 4977 | @comment ------------------------------------------------------------ | 6261 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 6262 | @node Custom Line-Up, Other Indentation, Line-Up Functions, Customizing Indentation | ||
| 6263 | @comment node-name, next, previous, up | ||
| 6264 | @section Custom Line-Up Functions | ||
| 6265 | @cindex customization, indentation functions | ||
| 6266 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 4978 | 6267 | ||
| 4979 | @defun c-lineup-whitesmith-in-block | 6268 | The most flexible way to customize indentation is by writing custom |
| 4980 | @findex lineup-whitesmith-in-block (c-) | 6269 | line-up functions, and associating them with specific syntactic |
| 4981 | Line up lines inside a block in Whitesmith style. It's done in a way | 6270 | symbols (@pxref{c-offsets-alist}). Depending on the effect you want, |
| 4982 | that works both when the opening brace hangs and when it doesn't. E.g: | 6271 | it might be better to write a @code{c-special-indent-hook} function |
| 6272 | rather than a line-up function (@pxref{Other Indentation}). | ||
| 6273 | |||
| 6274 | @ccmode{} comes with an extensive set of predefined line-up functions, | ||
| 6275 | not all of which are used by the default styles. So there's a good | ||
| 6276 | chance the function you want already exists. @xref{Line-Up | ||
| 6277 | Functions}, for a list of them. If you write your own line-up | ||
| 6278 | function, it's probably a good idea to start working from one of these | ||
| 6279 | predefined functions, which can be found in the file | ||
| 6280 | @file{cc-align.el}. If you have written a line-up function that you | ||
| 6281 | think is generally useful, you're very welcome to contribute it; | ||
| 6282 | please contact @email{bug-cc-mode@@gnu.org}. | ||
| 6283 | |||
| 6284 | Line-up functions are passed a single argument, the syntactic | ||
| 6285 | element (see below). The return value is a @code{c-offsets-alist} | ||
| 6286 | offset specification: for example, an integer, a symbol such as | ||
| 6287 | @code{+}, a vector, @code{nil}@footnote{Returning @code{nil} is useful | ||
| 6288 | when the offset specification for a syntactic element is a list | ||
| 6289 | containing the line-up function (@pxref{c-offsets-alist}).}, or even | ||
| 6290 | another line-up function. Full details of these are in | ||
| 6291 | @ref{c-offsets-alist}. | ||
| 6292 | |||
| 6293 | Line-up functions must not move point or change the content of the | ||
| 6294 | buffer (except temporarily). They are however allowed to do | ||
| 6295 | @dfn{hidden buffer changes}, i.e. setting text properties for caching | ||
| 6296 | purposes etc. Buffer undo recording is disabled while they run. | ||
| 6297 | |||
| 6298 | The syntactic element passed as the parameter to a line-up function is | ||
| 6299 | a cons cell of the form | ||
| 4983 | 6300 | ||
| 4984 | @example | 6301 | @example |
| 4985 | @group | 6302 | (@r{@var{syntactic-symbol}} . @r{@var{anchor-position}}) |
| 4986 | something | ||
| 4987 | @{ | ||
| 4988 | foo; @hereFn{c-lineup-whitesmith-in-block} | ||
| 4989 | @} | ||
| 4990 | @end group | ||
| 4991 | @end example | 6303 | @end example |
| 4992 | 6304 | ||
| 4993 | @noindent | 6305 | @noindent |
| 4994 | and | 6306 | @c FIXME!!! The following sentence might be better omitted, since the |
| 4995 | 6307 | @c information is in the cross reference "Syntactic Analysis". 2005/10/2. | |
| 4996 | @example | 6308 | where @var{syntactic-symbol} is the symbol that the function was |
| 4997 | @group | 6309 | called for, and @var{anchor-position} is the anchor position (if any) |
| 4998 | something @{ | 6310 | for the construct that triggered the syntactic symbol |
| 4999 | foo; @hereFn{c-lineup-whitesmith-in-block} | 6311 | (@pxref{Syntactic Analysis}). This cons cell is how the syntactic |
| 5000 | @} | 6312 | element of a line used to be represented in @ccmode{} 5.28 and |
| 5001 | @sssTBasicOffset{} | 6313 | earlier. Line-up functions are still passed this cons cell, so as to |
| 5002 | @end group | 6314 | preserve compatibility with older configurations. In the future, we |
| 5003 | @end example | 6315 | may decide to convert to using the full list format---you can prepare |
| 5004 | 6316 | your setup for this by using the access functions | |
| 5005 | In the first case the indentation is kept unchanged, in the second | 6317 | (@code{c-langelem-sym}, etc.) described below. |
| 5006 | @code{c-basic-offset} is added. | 6318 | |
| 5007 | 6319 | @vindex c-syntactic-element | |
| 5008 | @workswith @code{defun-close}, @code{defun-block-intro}, | 6320 | @vindex syntactic-element (c-) |
| 5009 | @code{block-close}, @code{brace-list-close}, @code{brace-list-intro}, | 6321 | @vindex c-syntactic-context |
| 5010 | @code{statement-block-intro} and all @code{in*} symbols, | 6322 | @vindex syntactic-context (c-) |
| 5011 | e.g., @code{inclass} and @code{inextern-lang}. | 6323 | Some syntactic symbols, e.g. @code{arglist-cont-nonempty}, have more |
| 6324 | info in the syntactic element - typically other positions that can be | ||
| 6325 | interesting besides the anchor position. That info can't be accessed | ||
| 6326 | through the passed argument, which is a cons cell. Instead, you can | ||
| 6327 | get this information from the variable @code{c-syntactic-element}, | ||
| 6328 | which is dynamically bound to the complete syntactic element. The | ||
| 6329 | variable @code{c-syntactic-context} might also be useful - it gets | ||
| 6330 | dynamically bound to the complete syntactic context. @xref{Custom | ||
| 6331 | Braces}. | ||
| 6332 | |||
| 6333 | @ccmode{} provides a few functions to access parts of syntactic | ||
| 6334 | elements in a more abstract way. Besides making the code easier to | ||
| 6335 | read, they also hide the difference between the old cons cell form | ||
| 6336 | used in the line-up function argument and the new list form used in | ||
| 6337 | @code{c-syntactic-element} and everywhere else. The functions are: | ||
| 6338 | |||
| 6339 | @defun c-langelem-sym langelem | ||
| 6340 | @findex langelem-sym (c-) | ||
| 6341 | Return the syntactic symbol in @var{langelem}. | ||
| 5012 | @end defun | 6342 | @end defun |
| 5013 | 6343 | ||
| 6344 | @defun c-langelem-pos langelem | ||
| 6345 | @findex langelem-pos (c-) | ||
| 6346 | Return the anchor position in @var{langelem}, or nil if there is none. | ||
| 6347 | @end defun | ||
| 5014 | 6348 | ||
| 5015 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6349 | @defun c-langelem-col langelem &optional preserve-point |
| 5016 | @node AWK Mode, Odds and Ends, Indentation Functions, Top | 6350 | @findex langelem-col (c-) |
| 5017 | @comment node-name, next, previous, up | 6351 | Return the column of the anchor position in @var{langelem}. Also move |
| 5018 | @chapter Status of AWK Mode | 6352 | the point to that position unless @var{preserve-point} is |
| 5019 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6353 | non-@code{nil}. |
| 5020 | 6354 | @end defun | |
| 5021 | @dfn{AWK mode} existed until recently in the file @file{awk-mode.el} | ||
| 5022 | as a mode derived from c-mode. It had not been actively maintained to | ||
| 5023 | keep pace with the newer @ccmode{}, and its indentation mechanism no | ||
| 5024 | longer worked satisfactorally. | ||
| 5025 | |||
| 5026 | The current AWK mode is based around the GNU implementation, | ||
| 5027 | @emph{GAWK version 3.1.0}, though it should work pretty well with any | ||
| 5028 | AWK. It has now been updated and integrated into @ccmode{} to a | ||
| 5029 | substantial extent, though as yet not all the features of @ccmode{} | ||
| 5030 | have been adapted to support it. | ||
| 5031 | |||
| 5032 | If your (X)Emacs is set up to use the old file @file{awk-mode.elc} | ||
| 5033 | (which will usually be the case if you have obtained this @ccmode{} | ||
| 5034 | independently of (X)Emacs itself), or if you are not sure, insert the | ||
| 5035 | following form into your @file{.emacs} or @file{init.el} so that the new | ||
| 5036 | AWK mode will be used instead: | ||
| 5037 | |||
| 5038 | @example | ||
| 5039 | (autoload 'awk-mode "cc-mode" nil t) | ||
| 5040 | @end example | ||
| 5041 | |||
| 5042 | You can check which AWK mode you are running by displaying the mode | ||
| 5043 | documentation string with @kbd{C-h m} from an AWK buffer. The newer | ||
| 5044 | mode's doc string contains @code{To submit a problem report, enter | ||
| 5045 | `C-c C-b'} near the top of the doc string where the older mode has | ||
| 5046 | @code{This is much like C mode except ....}. | ||
| 5047 | |||
| 5048 | Since this newer AWK mode makes essential use of a relatively new | ||
| 5049 | Emacs Lisp feature@footnote{Specifically, the @code{syntax-table} text | ||
| 5050 | property.}, you need either GNU Emacs 20.1 (or later) or XEmacs 21.4 | ||
| 5051 | (or later) to use it. If your Emacs version is earlier than one of | ||
| 5052 | these, the older @file{awk-mode.el} will get loaded and run in place | ||
| 5053 | of the AWK mode described here, even when you have put the above | ||
| 5054 | @code{autoload} form into your @file{.emacs} or @file{init.el}. | ||
| 5055 | Upgrading your (X)Emacs is strongly recommended if this is the case. | ||
| 5056 | |||
| 5057 | Here is an overview of which @ccmode{} features currently work with | ||
| 5058 | AWK mode and which don't: | ||
| 5059 | |||
| 5060 | @table @asis | ||
| 5061 | @item Indentation Engine | ||
| 5062 | The @ccmode{} indentation engine fully supports AWK mode. | ||
| 5063 | @xref{Indentation Engine}. | ||
| 5064 | |||
| 5065 | AWK mode handles code formatted in the conventional AWK fashion: | ||
| 5066 | @samp{@{}s which start actions, user-defined functions, or compound | ||
| 5067 | statements are placed on the same line as the associated construct; the | ||
| 5068 | matching @samp{@}}s are normally placed under the start of the | ||
| 5069 | respective pattern, function definition, or structured statement. | ||
| 5070 | @c Add in a bit about the @samp{@}} being on the same line when the | ||
| 5071 | @c contents are short. | ||
| 5072 | |||
| 5073 | The predefined indentation functions (@pxref{Indentation Functions}) | ||
| 5074 | haven't yet been adapted for AWK mode, though some of them may work | ||
| 5075 | serendipitously. There shouldn't be any problems writing custom | ||
| 5076 | indentation functions for AWK mode. | ||
| 5077 | |||
| 5078 | The command @kbd{C-c C-q} (@code{c-indent-defun}) hasn't yet been | ||
| 5079 | adapted for AWK, though in practice it works properly nearly all the | ||
| 5080 | time. Should it fail, explicitly set the region around the function | ||
| 5081 | (using @kbd{C-u C-SPC}: @kbd{C-M-h} probably won't work either) then do | ||
| 5082 | @kbd{C-M-\} (@code{indent-region}). | ||
| 5083 | |||
| 5084 | @item Font Locking | ||
| 5085 | There is a single level of font locking in AWK mode, rather than the | ||
| 5086 | three distinct levels the other modes have. There are several | ||
| 5087 | idiosyncrasies in AWK mode's font-locking due to the peculiarities of | ||
| 5088 | the AWK language itself. @xref{AWK Mode Font Locking}. | ||
| 5089 | |||
| 5090 | @item Comment Commands | ||
| 5091 | @kbd{M-;} (@code{indent-for-comment}) works fine. None of the other | ||
| 5092 | @ccmode{} comment formatting commands have yet been adapted for AWK | ||
| 5093 | mode. @xref{Text Filling and Line Breaking}. | ||
| 5094 | |||
| 5095 | @item Movement Commands | ||
| 5096 | Most of the movement commands work in AWK mode. The most important | ||
| 5097 | exceptions are @kbd{M-a} (@code{c-beginning-of-statement}) and | ||
| 5098 | @kbd{M-e} (@code{c-end-of-statement}) which haven't yet been adapted. | ||
| 5099 | |||
| 5100 | The notion of @dfn{defun} has been augmented to include pattern-action | ||
| 5101 | pairs. See @ref{AWK Mode Defuns} for a description of commands which | ||
| 5102 | work on AWK ``defuns''. | ||
| 5103 | |||
| 5104 | Since there is no preprocessor in AWK, the commands which move to | ||
| 5105 | preprocessor directives (e.g., @code{c-up-conditional}) are meaningless | ||
| 5106 | in AWK mode and are not bound in the AWK mode keymap. | ||
| 5107 | |||
| 5108 | @item Auto-newline Insertion and Clean-ups | ||
| 5109 | Auto-newline insertion hasn't yet been adapted for AWK. Some of the | ||
| 5110 | clean-ups can actually convert good AWK code into syntactically | ||
| 5111 | invalid code. | ||
| 5112 | |||
| 5113 | If auto-newline or its associated clean-ups are enabled generally for | ||
| 5114 | the modes in @ccmode{}, you are strongly recommended to disable them | ||
| 5115 | in the AWK Mode hook. @xref{Initialising AWK Mode}. | ||
| 5116 | |||
| 5117 | The clean-up @code{space-before-funcall}, which is independent of | ||
| 5118 | auto-newline, should never be active in AWK mode (since inserting a | ||
| 5119 | space between a user function's name and its opening @samp{(} makes | ||
| 5120 | the call syntactically invalid). If necessary, this should be | ||
| 5121 | disabled in the AWK Mode hook. @xref{Initialising AWK Mode}. | ||
| 5122 | |||
| 5123 | @end table | ||
| 5124 | |||
| 5125 | @menu | ||
| 5126 | * Initialising AWK Mode:: | ||
| 5127 | * AWK Mode Font Locking:: | ||
| 5128 | * AWK Mode Defuns:: | ||
| 5129 | @end menu | ||
| 5130 | |||
| 5131 | |||
| 5132 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5133 | @node Initialising AWK Mode, AWK Mode Font Locking, , AWK Mode | ||
| 5134 | @comment node-name, next, previous, up | ||
| 5135 | @section AWK mode - What to put in your @file{.emacs} or @file{init.el} | ||
| 5136 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5137 | |||
| 5138 | Much of the AWK mode initialization can, of course, be done by the | ||
| 5139 | @ccmode{} general initialization procedure. You may want to use certain | ||
| 5140 | @ccmode{} features such as @code{auto-newline} and @code{clean-ups} in | ||
| 5141 | the other modes, and you might thus have enabled them in a | ||
| 5142 | @code{c-mode-common-hook} function, as described in @ref{Sample .emacs File}. | ||
| 5143 | These features have not yet been amended for AWK mode, and far from | ||
| 5144 | being useful, can be irritating in AWK mode or actually make AWK code | ||
| 5145 | syntactically invalid. Adding the following code to your | ||
| 5146 | @file{.emacs} or @file{init.el} file will disable them for AWK mode. | ||
| 5147 | |||
| 5148 | @example | ||
| 5149 | (defun my-awk-mode-hook () | ||
| 5150 | "Disable certain @ccmode{} features which could impair AWK mode." | ||
| 5151 | (c-toggle-auto-state -1) ; disable automatic insertions of newlines | ||
| 5152 | (if (memq 'space-before-funcall c-cleanup-list) | ||
| 5153 | (setq c-cleanup-list ; don't automatically insert a space into "foo(" | ||
| 5154 | (remove 'space-before-funcall c-cleanup-list)))) | ||
| 5155 | (add-hook 'awk-mode-hook 'my-awk-mode-hook) | ||
| 5156 | @end example | ||
| 5157 | |||
| 5158 | Naturally you can add your own AWK-specific customizations to this | ||
| 5159 | function. @xref{Hooks}. | ||
| 5160 | |||
| 5161 | |||
| 5162 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5163 | @node AWK Mode Font Locking, AWK Mode Defuns, Initialising AWK Mode, AWK Mode | ||
| 5164 | @comment node-name, next, previous, up | ||
| 5165 | @section AWK Mode Font Locking | ||
| 5166 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5167 | |||
| 5168 | The general appearance of font-locking in AWK mode is much like in any | ||
| 5169 | other programming mode. @xref{Faces For Font Lock,,,elisp}. | ||
| 5170 | |||
| 5171 | The following faces are, however, used in a non-standard fashion in | ||
| 5172 | AWK mode: | ||
| 5173 | |||
| 5174 | @table @asis | ||
| 5175 | @item @code{font-lock-variable-name-face} | ||
| 5176 | This face was intended for variable declarations. Since variables are | ||
| 5177 | not declared in AWK, this face is used instead for AWK system | ||
| 5178 | variables (such as @code{NF}) and ``Special File Names'' (such as | ||
| 5179 | @code{"/dev/stderr"}). | ||
| 5180 | |||
| 5181 | @item @code{font-lock-builtin-face} (Emacs)/@code{font-lock-preprocessor-face} (XEmacs) | ||
| 5182 | This face is normally used for preprocessor directives in @ccmode{}. | ||
| 5183 | There are no such things in AWK, so this face is used instead for | ||
| 5184 | standard functions (such as @code{match}). | ||
| 5185 | 6355 | ||
| 5186 | @item @code{font-lock-string-face} | 6356 | @defun c-langelem-2nd-pos langelem |
| 5187 | As well as being used for strings, including localizable strings, | 6357 | @findex langelem-2nd-pos (c-) |
| 5188 | (delimited by @samp{"} and @samp{_"}), this face is also used for AWK | 6358 | Return the secondary position in @var{langelem}, or @code{nil} if there |
| 5189 | regular expressions (delimited by @samp{/}). | 6359 | is none. |
| 5190 | 6360 | ||
| 5191 | @item @code{font-lock-warning-face} (Emacs)/@code{c-invalid-face} (XEmacs) | 6361 | Note that the return value of this function is always @code{nil} if |
| 5192 | This face highlights the following syntactically invalid AWK | 6362 | @var{langelem} is in the old cons cell form. Thus this function is |
| 5193 | constructs: | 6363 | only meaningful when used on syntactic elements taken from |
| 6364 | @code{c-syntactic-element} or @code{c-syntactic-context}. | ||
| 6365 | @end defun | ||
| 5194 | 6366 | ||
| 5195 | @itemize @bullet | 6367 | Custom line-up functions can be as simple or as complex as you like, and |
| 5196 | @item | 6368 | any syntactic symbol that appears in @code{c-offsets-alist} can have a |
| 5197 | An unterminated string or regular expression. Here the opening | 6369 | custom line-up function associated with it. |
| 5198 | delimiter (@samp{"} or @samp{/} or @samp{_"}) is displayed in | ||
| 5199 | @code{font-lock-warning-face}. This is most noticeable when typing in a | ||
| 5200 | new string/regular expression into a buffer, when the warning-face | ||
| 5201 | serves as a continual reminder to terminate the construct. | ||
| 5202 | 6370 | ||
| 5203 | AWK mode fontifies unterminated strings/regular expressions | 6371 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 5204 | differently from other modes: Only the text up to the end of the line | 6372 | @node Other Indentation, , Custom Line-Up, Customizing Indentation |
| 5205 | is fontified as a string (escaped newlines being handled correctly), | 6373 | @comment node-name, next, previous, up |
| 5206 | rather than the text up to the next string quote. | 6374 | @section Other Special Indentations |
| 6375 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5207 | 6376 | ||
| 5208 | @item | 6377 | Here are the remaining odds and ends regarding indentation: |
| 5209 | A space between the function name and opening parenthesis when calling | ||
| 5210 | a user function. The last character of the function name and the | ||
| 5211 | opening parenthesis are highlighted. This font-locking rule will | ||
| 5212 | spuriously highlight a valid concatenation expression where an | ||
| 5213 | identifier precedes a parenthesised expression. Unfortunately. | ||
| 5214 | 6378 | ||
| 5215 | @item | 6379 | @defopt c-label-minimum-indentation |
| 5216 | Whitespace following the @samp{\} in what otherwise looks like an | 6380 | @vindex label-minimum-indentation (c-) |
| 5217 | escaped newline. The @samp{\} is highlighted. | 6381 | In @samp{gnu} style (@pxref{Built-in Styles}), a minimum indentation is |
| 5218 | @end itemize | 6382 | imposed on lines inside code blocks. This minimum indentation is |
| 5219 | @end table | 6383 | controlled by this style variable. The default value is 1. |
| 6384 | |||
| 6385 | @findex c-gnu-impose-minimum | ||
| 6386 | @findex gnu-impose-minimum (c-) | ||
| 6387 | It's the function @code{c-gnu-impose-minimum} that enforces this minimum | ||
| 6388 | indentation. It must be present on @code{c-special-indent-hook} to | ||
| 6389 | work. | ||
| 6390 | @end defopt | ||
| 5220 | 6391 | ||
| 6392 | @defopt c-special-indent-hook | ||
| 6393 | @vindex special-indent-hook (c-) | ||
| 6394 | This style variable is a standard hook variable that is called after | ||
| 6395 | every line is indented by @ccmode{}. It is called only if | ||
| 6396 | @code{c-syntactic-indentation} is non-@code{nil} (which it is by | ||
| 6397 | default (@pxref{Indentation Engine Basics})). You can put a function | ||
| 6398 | on this hook to do any special indentation or ad hoc line adjustments | ||
| 6399 | your style dictates, such as adding extra indentation to constructors | ||
| 6400 | or destructor declarations in a class definition, etc. Sometimes it | ||
| 6401 | is better to write a custom Line-up Function instead (@pxref{Custom | ||
| 6402 | Line-Up}). | ||
| 6403 | |||
| 6404 | When the indentation engine calls this hook, the variable | ||
| 6405 | @code{c-syntactic-context} is bound to the current syntactic context | ||
| 6406 | (i.e. what you would get by typing @kbd{C-c C-s} on the source line. | ||
| 6407 | @xref{Custom Braces}.). Note that you should not change point or mark | ||
| 6408 | inside a @code{c-special-indent-hook} function, i.e. you'll probably | ||
| 6409 | want to wrap your function in a @code{save-excursion}@footnote{The | ||
| 6410 | numerical value returned by @code{point} will change if you change the | ||
| 6411 | indentation of the line within a @code{save-excursion} form, but point | ||
| 6412 | itself will still be over the same piece of text.}. | ||
| 6413 | |||
| 6414 | Setting @code{c-special-indent-hook} in style definitions is handled | ||
| 6415 | slightly differently from other variables---A style can only add | ||
| 6416 | functions to this hook, not remove them. @xref{Style Variables}. | ||
| 6417 | @end defopt | ||
| 5221 | 6418 | ||
| 5222 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5223 | @node AWK Mode Defuns, , AWK Mode Font Locking, AWK Mode | ||
| 5224 | @comment node-name, next, previous, up | ||
| 5225 | @section AWK Mode Defuns | ||
| 5226 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5227 | 6419 | ||
| 5228 | In AWK mode, @dfn{defun} means either a user-defined function or a | 6420 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 5229 | pattern-action pair. Either the pattern or the action may be | 6421 | @node Custom Macros, Odds and Ends, Customizing Indentation, Top |
| 5230 | implicit. | 6422 | @comment node-name, next, previous, up |
| 6423 | @chapter Customizing Macros | ||
| 6424 | @cindex macros | ||
| 6425 | @cindex preprocessor directives | ||
| 6426 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5231 | 6427 | ||
| 5232 | The beginning of a defun is recognised heuristically as, more or less, | 6428 | Normally, the lines in a multi-line macro are indented relative to |
| 5233 | code which begins in column zero. Having the @samp{@{} in column zero, | 6429 | eachother as though they were code. You can suppress this behaviour |
| 5234 | as is suggested for some modes, is neither necessary nor helpful in AWK | 6430 | by setting the following user option: |
| 5235 | mode. | ||
| 5236 | 6431 | ||
| 5237 | More precisely, the beginning of a defun is code which begins in | 6432 | @defopt c-syntactic-indentation-in-macros |
| 5238 | column zero, and which isn't a closing brace, a comment, or a | 6433 | @vindex syntactic-indentation-in-macros (c-) |
| 5239 | continuation of the previous line. Code is the @dfn{continuation of | 6434 | Enable syntactic analysis inside macros, which is the default. If this |
| 5240 | the previous line} when that line is syntactically incomplete, for | 6435 | is @code{nil}, all lines inside macro definitions are analyzed as |
| 5241 | example when it ends with @samp{@{} or an escaped newline. | 6436 | @code{cpp-macro-cont}. |
| 6437 | @end defopt | ||
| 5242 | 6438 | ||
| 5243 | The end of a defun is the @samp{@}} which matches the @samp{@{} (if | 6439 | @ccmode{} provides some tools to help keep the line continuation |
| 5244 | any) at the beginning of the action or function body, or the EOL or | 6440 | backslashes in macros neat and tidy. Their precise action is |
| 5245 | @samp{;} which marks an implicit action. Although this @samp{@}} is | 6441 | customized with these variables: |
| 5246 | usually placed in column zero, AWK mode doesn't need it to be placed | ||
| 5247 | there. | ||
| 5248 | 6442 | ||
| 5249 | @table @asis | 6443 | @defopt c-backslash-column |
| 5250 | @item @kbd{C-M-a} @code{c-awk-beginning-of-defun} | 6444 | @vindex backslash-column (c-) |
| 5251 | @itemx @kbd{C-M-e} @code{c-awk-end-of-defun} | 6445 | @defoptx c-backslash-max-column |
| 5252 | @findex c-awk-beginning-of-defun | 6446 | @vindex backslash-max-column (c-) |
| 5253 | @findex awk-beginning-of-defun (c-) | 6447 | These variables control the alignment columns for line continuation |
| 5254 | @findex c-awk-end-of-defun | 6448 | backslashes in multiline macros. They are used by the functions that |
| 5255 | @findex awk-end-of-defun (c-) | 6449 | automatically insert or align such backslashes, |
| 5256 | Move point back to the beginning or forward to the end of the current | 6450 | e.g. @code{c-backslash-region} and @code{c-context-line-break}. |
| 5257 | AWK defun. These functions can take prefix-arguments, their | ||
| 5258 | functionality being entirely equivalent to @code{beginning-of-defun} | ||
| 5259 | and @code{end-of-defun}. @xref{Moving by Defuns,,,emacs}. | ||
| 5260 | 6451 | ||
| 5261 | @item @kbd{C-M-h} @code{c-mark-function} | 6452 | @code{c-backslash-column} specifies the minimum column for the |
| 5262 | This works fine with AWK defuns. @xref{Indentation Commands}. | 6453 | backslashes. If any line in the macro goes past this column, then the |
| 5263 | @end table | 6454 | next tab stop (i.e. next multiple of @code{tab-width}) in that line is |
| 6455 | used as the alignment column for all the backslashes, so that they | ||
| 6456 | remain in a single column. However, if any lines go past | ||
| 6457 | @code{c-backslash-max-column} then the backslashes in the rest of the | ||
| 6458 | macro will be kept at that column, so that the lines which are too | ||
| 6459 | long ``stick out'' instead. | ||
| 6460 | |||
| 6461 | Don't ever set these variables to @code{nil}. If you want to disable | ||
| 6462 | the automatic alignment of backslashes, use | ||
| 6463 | @code{c-auto-align-backslashes}. | ||
| 6464 | @end defopt | ||
| 5264 | 6465 | ||
| 6466 | @defopt c-auto-align-backslashes | ||
| 6467 | @vindex auto-align-backslashes (c-) | ||
| 6468 | Align automatically inserted line continuation backslashes if | ||
| 6469 | non-@code{nil}. When line continuation backslashes are inserted | ||
| 6470 | automatically for line breaks in multiline macros, e.g. by | ||
| 6471 | @code{c-context-line-break}, they are aligned with the other | ||
| 6472 | backslashes in the same macro if this flag is set. | ||
| 6473 | |||
| 6474 | If @code{c-auto-align-backslashes} is @code{nil}, automatically | ||
| 6475 | inserted backslashes are preceded by a single space, and backslashes | ||
| 6476 | get aligned only when you explicitly invoke the command | ||
| 6477 | @code{c-backslash-region} (@kbd{C-c C-\}). | ||
| 6478 | @end defopt | ||
| 5265 | 6479 | ||
| 5266 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6480 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 5267 | @node Odds and Ends, Performance Issues, AWK Mode, Top | 6481 | @node Odds and Ends, Sample .emacs File, Custom Macros, Top |
| 5268 | @comment node-name, next, previous, up | 6482 | @comment node-name, next, previous, up |
| 5269 | @chapter Odds and Ends | 6483 | @chapter Odds and Ends |
| 5270 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6484 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| @@ -5273,16 +6487,16 @@ The stuff that didn't fit in anywhere else is documented here. | |||
| 5273 | 6487 | ||
| 5274 | @defopt c-require-final-newline | 6488 | @defopt c-require-final-newline |
| 5275 | @vindex require-final-newline (c-) | 6489 | @vindex require-final-newline (c-) |
| 5276 | Controls whether a final newline is ensured when the file is saved. The | 6490 | Controls whether a final newline is enforced when the file is saved. |
| 5277 | value is an association list that for each language mode specifies the | 6491 | The value is an association list that for each language mode specifies |
| 5278 | value to give to @code{require-final-newline} at mode initialization; | 6492 | the value to give to @code{require-final-newline} (@pxref{Saving |
| 5279 | see that variable for details about the value. If a language isn't | 6493 | Buffers,,, @lispref{}, @lispreftitle{}}) at mode initialization. If a |
| 5280 | present on the association list, CC Mode won't touch | 6494 | language isn't present on the association list, CC Mode won't touch |
| 5281 | @code{require-final-newline} in buffers for that language. | 6495 | @code{require-final-newline} in buffers for that language. |
| 5282 | 6496 | ||
| 5283 | The default is to set @code{require-final-newline} to @code{t} in the | 6497 | The default is to set @code{require-final-newline} to @code{t} in the |
| 5284 | languages that mandates that source files should end with newlines, | 6498 | languages that mandate that source files should end with newlines. |
| 5285 | i.e., C, C++ and Objective-C. | 6499 | These are C, C++ and Objective-C. |
| 5286 | @end defopt | 6500 | @end defopt |
| 5287 | 6501 | ||
| 5288 | @defopt c-echo-syntactic-information-p | 6502 | @defopt c-echo-syntactic-information-p |
| @@ -5308,7 +6522,68 @@ anchoring position to indent the line in that case. | |||
| 5308 | 6522 | ||
| 5309 | 6523 | ||
| 5310 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6524 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 5311 | @node Performance Issues, Limitations and Known Bugs, Odds and Ends, Top | 6525 | @node Sample .emacs File, Performance Issues, Odds and Ends, Top |
| 6526 | @comment node-name, next, previous, up | ||
| 6527 | @appendix Sample .emacs File | ||
| 6528 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 6529 | |||
| 6530 | @verbatim | ||
| 6531 | ;; Here's a sample .emacs file fragment that might help you along the | ||
| 6532 | ;; way. Just copy this region and paste it into your .emacs file. | ||
| 6533 | ;; You might want to change some of the actual values. | ||
| 6534 | |||
| 6535 | ;; Make some non-standard key bindings. We can put these in | ||
| 6536 | ;; c-mode-base-map because c-mode-map, c++-mode-map, and so on, | ||
| 6537 | ;; inherit from it. | ||
| 6538 | (defun my-c-initialization-hook () | ||
| 6539 | (define-key c-mode-base-map "\C-m" 'c-context-line-break) | ||
| 6540 | (define-key c-mode-base-map [?\C-\M-a] 'c-beginning-of-defun) | ||
| 6541 | (define-key c-mode-base-map [?\C-\M-e] 'c-end-of-defun) | ||
| 6542 | (add-hook 'c-initialization-hook 'my-c-initialization-hook) | ||
| 6543 | |||
| 6544 | ;; offset customizations not in my-c-style | ||
| 6545 | ;; This will take precedence over any setting of the syntactic symbol | ||
| 6546 | ;; made by a style. | ||
| 6547 | (setq c-offsets-alist '((member-init-intro . ++))) | ||
| 6548 | |||
| 6549 | ;; Create my personal style. | ||
| 6550 | (defconst my-c-style | ||
| 6551 | '((c-tab-always-indent . t) | ||
| 6552 | (c-comment-only-line-offset . 4) | ||
| 6553 | (c-hanging-braces-alist . ((substatement-open after) | ||
| 6554 | (brace-list-open))) | ||
| 6555 | (c-hanging-colons-alist . ((member-init-intro before) | ||
| 6556 | (inher-intro) | ||
| 6557 | (case-label after) | ||
| 6558 | (label after) | ||
| 6559 | (access-label after))) | ||
| 6560 | (c-cleanup-list . (scope-operator | ||
| 6561 | empty-defun-braces | ||
| 6562 | defun-close-semi)) | ||
| 6563 | (c-offsets-alist . ((arglist-close . c-lineup-arglist) | ||
| 6564 | (substatement-open . 0) | ||
| 6565 | (case-label . 4) | ||
| 6566 | (block-open . 0) | ||
| 6567 | (knr-argdecl-intro . -))) | ||
| 6568 | (c-echo-syntactic-information-p . t)) | ||
| 6569 | "My C Programming Style") | ||
| 6570 | (c-add-style "PERSONAL" my-c-style) | ||
| 6571 | |||
| 6572 | ;; Customizations for all modes in CC Mode. | ||
| 6573 | (defun my-c-mode-common-hook () | ||
| 6574 | ;; set my personal style for the current buffer | ||
| 6575 | (c-set-style "PERSONAL") | ||
| 6576 | ;; other customizations | ||
| 6577 | (setq tab-width 8 | ||
| 6578 | ;; this will make sure spaces are used instead of tabs | ||
| 6579 | indent-tabs-mode nil) | ||
| 6580 | ;; we like auto-newline, but not hungry-delete | ||
| 6581 | (c-toggle-auto-newline 1)) | ||
| 6582 | (add-hook 'c-mode-common-hook 'my-c-mode-common-hook) | ||
| 6583 | @end verbatim | ||
| 6584 | |||
| 6585 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 6586 | @node Performance Issues, Limitations and Known Bugs, Sample .emacs File, Top | ||
| 5312 | @comment node-name, next, previous, up | 6587 | @comment node-name, next, previous, up |
| 5313 | @chapter Performance Issues | 6588 | @chapter Performance Issues |
| 5314 | @cindex performance | 6589 | @cindex performance |
| @@ -5323,10 +6598,10 @@ pathological code can cause @ccmode{} to perform fairly badly. This | |||
| 5323 | section gives some insight in how @ccmode{} operates, how that interacts | 6598 | section gives some insight in how @ccmode{} operates, how that interacts |
| 5324 | with some coding styles, and what you can use to improve performance. | 6599 | with some coding styles, and what you can use to improve performance. |
| 5325 | 6600 | ||
| 5326 | The overall goal is that @ccmode{} shouldn't be overly slow (i.e., take | 6601 | The overall goal is that @ccmode{} shouldn't be overly slow (i.e. take |
| 5327 | more than a fraction of a second) in any interactive operation. | 6602 | more than a fraction of a second) in any interactive operation. |
| 5328 | i.e., it's tuned to limit the maximum response time in single operations, | 6603 | I.e. it's tuned to limit the maximum response time in single operations, |
| 5329 | which sometimes is at the expense of batch-like operations like | 6604 | which is sometimes at the expense of batch-like operations like |
| 5330 | reindenting whole blocks. If you find that @ccmode{} gradually gets | 6605 | reindenting whole blocks. If you find that @ccmode{} gradually gets |
| 5331 | slower and slower in certain situations, perhaps as the file grows in | 6606 | slower and slower in certain situations, perhaps as the file grows in |
| 5332 | size or as the macro or comment you're editing gets bigger, then chances | 6607 | size or as the macro or comment you're editing gets bigger, then chances |
| @@ -5337,28 +6612,30 @@ Because @ccmode{} has to scan the buffer backwards from the current | |||
| 5337 | insertion point, and because C's syntax is fairly difficult to parse in | 6612 | insertion point, and because C's syntax is fairly difficult to parse in |
| 5338 | the backwards direction, @ccmode{} often tries to find the nearest | 6613 | the backwards direction, @ccmode{} often tries to find the nearest |
| 5339 | position higher up in the buffer from which to begin a forward scan | 6614 | position higher up in the buffer from which to begin a forward scan |
| 5340 | (it's typically an opening or closing parethesis of some kind). The | 6615 | (it's typically an opening or closing parenthesis of some kind). The |
| 5341 | farther this position is from the current insertion point, the slower it | 6616 | farther this position is from the current insertion point, the slower it |
| 5342 | gets. | 6617 | gets. |
| 5343 | 6618 | ||
| 5344 | @findex beginning-of-defun | 6619 | @findex beginning-of-defun |
| 5345 | @findex defun-prompt-regexp | 6620 | In earlier versions of @ccmode{}, we used to recommend putting the |
| 5346 | One of the simplest things you can do to reduce scan time, is make sure | 6621 | opening brace of a top-level construct@footnote{E.g. a function in C, |
| 5347 | any brace that opens a top-level construct@footnote{e.g., a function in | 6622 | or outermost class definition in C++ or Java.} into the leftmost |
| 5348 | C, or outermost class definition in C++ or Java.} always appears in the | 6623 | column. Earlier still, this used to be a rigid Emacs constraint, as |
| 5349 | leftmost column. This is actually an Emacs constraint, as embodied in | 6624 | embodied in the @code{beginning-of-defun} function. @ccmode now |
| 5350 | the @code{beginning-of-defun} function which @ccmode{} uses heavily. If | 6625 | caches syntactic information much better, so that the delay caused by |
| 5351 | you hang top-level open braces on the right side of the line, then you | 6626 | searching for such a brace when it's not in column 0 is minimal, |
| 5352 | might want to set the variable @code{defun-prompt-regexp} to something | 6627 | except perhaps when you've just moved a long way inside the file. |
| 5353 | reasonable, however that ``something reasonable'' is difficult to | 6628 | Don't forget to rebind @kbd{C-M-a} and @kbd{C-M-e} to the @ccmode{} |
| 5354 | define, so @ccmode{} doesn't do it for you. | 6629 | functions @code{beginning-of-defun} and @code{end-of-defun} if you're |
| 6630 | going to be hanging your braces! @xref{Sample .emacs File}. | ||
| 5355 | 6631 | ||
| 6632 | @findex defun-prompt-regexp | ||
| 5356 | @vindex c-Java-defun-prompt-regexp | 6633 | @vindex c-Java-defun-prompt-regexp |
| 5357 | @vindex Java-defun-prompt-regexp (c-) | 6634 | @vindex Java-defun-prompt-regexp (c-) |
| 5358 | A special note about @code{defun-prompt-regexp} in Java mode: The common | 6635 | A special note about @code{defun-prompt-regexp} in Java mode: The common |
| 5359 | style is to hang the opening braces of functions and classes on the | 6636 | style is to hang the opening braces of functions and classes on the |
| 5360 | right side of the line, and that doesn't work well with the Emacs | 6637 | right side of the line, and that doesn't work well with the Emacs |
| 5361 | approach. @ccmode{} comes with a variable | 6638 | approach. @ccmode{} comes with a constant |
| 5362 | @code{c-Java-defun-prompt-regexp} which tries to define a regular | 6639 | @code{c-Java-defun-prompt-regexp} which tries to define a regular |
| 5363 | expression usable for this style, but there are problems with it. In | 6640 | expression usable for this style, but there are problems with it. In |
| 5364 | some cases it can cause @code{beginning-of-defun} to hang@footnote{This | 6641 | some cases it can cause @code{beginning-of-defun} to hang@footnote{This |
| @@ -5386,7 +6663,7 @@ XEmacs users can set the variable | |||
| 5386 | tells @ccmode{} to use XEmacs-specific built-in functions which, in some | 6663 | tells @ccmode{} to use XEmacs-specific built-in functions which, in some |
| 5387 | circumstances, can locate the top-most opening brace much more quickly than | 6664 | circumstances, can locate the top-most opening brace much more quickly than |
| 5388 | @code{beginning-of-defun}. Preliminary testing has shown that for | 6665 | @code{beginning-of-defun}. Preliminary testing has shown that for |
| 5389 | styles where these braces are hung (e.g., most JDK-derived Java styles), | 6666 | styles where these braces are hung (e.g. most JDK-derived Java styles), |
| 5390 | this hack can improve performance of the core syntax parsing routines | 6667 | this hack can improve performance of the core syntax parsing routines |
| 5391 | from 3 to 60 times. However, for styles which @emph{do} conform to | 6668 | from 3 to 60 times. However, for styles which @emph{do} conform to |
| 5392 | Emacs' recommended style of putting top-level braces in column zero, | 6669 | Emacs' recommended style of putting top-level braces in column zero, |
| @@ -5397,7 +6674,7 @@ in Emacs since the necessary built-in functions don't exist (in Emacs | |||
| 5397 | 21.3 as of this writing in May 2003). | 6674 | 21.3 as of this writing in May 2003). |
| 5398 | 6675 | ||
| 5399 | Text properties are used to speed up skipping over syntactic whitespace, | 6676 | Text properties are used to speed up skipping over syntactic whitespace, |
| 5400 | i.e., comments and preprocessor directives. Indenting a line after a | 6677 | i.e. comments and preprocessor directives. Indenting a line after a |
| 5401 | huge macro definition can be slow the first time, but after that the | 6678 | huge macro definition can be slow the first time, but after that the |
| 5402 | text properties are in place and it should be fast (even after you've | 6679 | text properties are in place and it should be fast (even after you've |
| 5403 | edited other parts of the file and then moved back). | 6680 | edited other parts of the file and then moved back). |
| @@ -5405,7 +6682,7 @@ edited other parts of the file and then moved back). | |||
| 5405 | Font locking can be a CPU hog, especially the font locking done on | 6682 | Font locking can be a CPU hog, especially the font locking done on |
| 5406 | decoration level 3 which tries to be very accurate. Note that that | 6683 | decoration level 3 which tries to be very accurate. Note that that |
| 5407 | level is designed to be used with a font lock support mode that only | 6684 | level is designed to be used with a font lock support mode that only |
| 5408 | fontifies the text that's actually shown, i.e., Lazy Lock or Just-in-time | 6685 | fontifies the text that's actually shown, i.e. Lazy Lock or Just-in-time |
| 5409 | Lock mode, so make sure you use one of them. Fontification of a whole | 6686 | Lock mode, so make sure you use one of them. Fontification of a whole |
| 5410 | buffer with some thousand lines can often take over a minute. That is | 6687 | buffer with some thousand lines can often take over a minute. That is |
| 5411 | a known weakness; the idea is that it never should happen. | 6688 | a known weakness; the idea is that it never should happen. |
| @@ -5418,7 +6695,7 @@ more info. | |||
| 5418 | 6695 | ||
| 5419 | 6696 | ||
| 5420 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6697 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 5421 | @node Limitations and Known Bugs, Frequently Asked Questions, Performance Issues, Top | 6698 | @node Limitations and Known Bugs, FAQ, Performance Issues, Top |
| 5422 | @comment node-name, next, previous, up | 6699 | @comment node-name, next, previous, up |
| 5423 | @chapter Limitations and Known Bugs | 6700 | @chapter Limitations and Known Bugs |
| 5424 | @cindex limitations | 6701 | @cindex limitations |
| @@ -5427,9 +6704,9 @@ more info. | |||
| 5427 | 6704 | ||
| 5428 | @itemize @bullet | 6705 | @itemize @bullet |
| 5429 | @item | 6706 | @item |
| 5430 | There is no way to apply auto newline settings (@pxref{Auto-newline | 6707 | There is no way to apply auto newline settings (@pxref{Auto-newlines}) |
| 5431 | Insertion}) on already typed lines. That's only a feature to ease | 6708 | on already typed lines. That's only a feature to ease interactive |
| 5432 | interactive editing. | 6709 | editing. |
| 5433 | 6710 | ||
| 5434 | To generalize this issue a bit: @ccmode{} is not intended to be used as | 6711 | To generalize this issue a bit: @ccmode{} is not intended to be used as |
| 5435 | a reformatter for old code in some more or less batch-like way. With | 6712 | a reformatter for old code in some more or less batch-like way. With |
| @@ -5438,47 +6715,29 @@ geared to be used interactively to edit new code. There's currently no | |||
| 5438 | intention to change this goal. | 6715 | intention to change this goal. |
| 5439 | 6716 | ||
| 5440 | If you want to reformat old code, you're probably better off using some | 6717 | If you want to reformat old code, you're probably better off using some |
| 5441 | other tool instead, e.g., @ref{Top, , GNU indent, indent, The `indent' | 6718 | other tool instead, e.g. @ref{Top, , GNU indent, indent, The `indent' |
| 5442 | Manual}, which has more powerful reformatting capabilities than | 6719 | Manual}, which has more powerful reformatting capabilities than |
| 5443 | @ccmode{}. | 6720 | @ccmode{}. |
| 5444 | 6721 | ||
| 5445 | @item | 6722 | @item |
| 5446 | @vindex signal-error-on-buffer-boundary | 6723 | The support for C++ templates (in angle brackets) is not yet complete. |
| 5447 | XEmacs has a variable called @code{signal-error-on-buffer-boundary}. | 6724 | When a non-nested template is used in a declaration, @ccmode{} indents |
| 5448 | It's used as a solution to user interface problems associated with | 6725 | it and font-locks it OK. Templates used in expressions, and nested |
| 5449 | buffer movement and the @code{zmacs-region} deactivation on errors. | 6726 | templates do not fare so well. Sometimes a workaround is to refontify |
| 5450 | However, setting this variable to a non-default value in XEmacs 19 and | 6727 | the expression after typing the closing @samp{>}. |
| 5451 | 20 had the deleterious side effect of breaking many built-in primitive | ||
| 5452 | functions. @strong{Do not set this variable to @code{nil} in XEmacs | ||
| 5453 | 19 and 20}; you will cause serious problems in @ccmode{} and probably | ||
| 5454 | other XEmacs packages! In XEmacs 21 the effects of the variable is | ||
| 5455 | limited to some functions that are only used interactively, so it's | ||
| 5456 | not a problem there. | ||
| 5457 | @end itemize | 6728 | @end itemize |
| 5458 | 6729 | ||
| 5459 | |||
| 5460 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6730 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 5461 | @node Frequently Asked Questions, Getting the Latest CC Mode Release, Limitations and Known Bugs, Top | 6731 | @node FAQ, Updating CC Mode, Limitations and Known Bugs, Top |
| 5462 | @comment node-name, next, previous, up | 6732 | @comment node-name, next, previous, up |
| 5463 | @appendix Frequently Asked Questions | 6733 | @appendix Frequently Asked Questions |
| 5464 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6734 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 5465 | 6735 | ||
| 5466 | @itemize @bullet | 6736 | @itemize @bullet |
| 5467 | @item | 6737 | @item |
| 5468 | @kindex C-x h | 6738 | @emph{How can I change the indent level from 4 spaces to 2 spaces?} |
| 5469 | @kindex C-M-\ | ||
| 5470 | @emph{How do I reindent the whole file?} | ||
| 5471 | 6739 | ||
| 5472 | Visit the file and hit @kbd{C-x h} to mark the whole buffer. Then hit | 6740 | Set the variable @code{c-basic-offset}. @xref{Getting Started}. |
| 5473 | @kbd{C-M-\}. | ||
| 5474 | |||
| 5475 | @item | ||
| 5476 | @kindex C-M-q | ||
| 5477 | @kindex C-M-u | ||
| 5478 | @emph{How do I reindent the current block?} | ||
| 5479 | |||
| 5480 | First move to the brace which opens the block with @kbd{C-M-u}, then | ||
| 5481 | reindent that expression with @kbd{C-M-q}. | ||
| 5482 | 6741 | ||
| 5483 | @item | 6742 | @item |
| 5484 | @kindex RET | 6743 | @kindex RET |
| @@ -5487,57 +6746,55 @@ reindent that expression with @kbd{C-M-q}. | |||
| 5487 | 6746 | ||
| 5488 | Emacs' convention is that @kbd{RET} just adds a newline, and that | 6747 | Emacs' convention is that @kbd{RET} just adds a newline, and that |
| 5489 | @kbd{C-j} adds a newline and indents it. You can make @kbd{RET} do this | 6748 | @kbd{C-j} adds a newline and indents it. You can make @kbd{RET} do this |
| 5490 | too by adding this to your @code{c-mode-common-hook}: | 6749 | too by adding this to your @code{c-initialization-hook}: |
| 5491 | 6750 | ||
| 5492 | @example | 6751 | @example |
| 5493 | (define-key c-mode-base-map "\C-m" 'c-context-line-break) | 6752 | (define-key c-mode-base-map "\C-m" 'c-context-line-break) |
| 5494 | @end example | 6753 | @end example |
| 5495 | 6754 | ||
| 5496 | This is a very common question. If you want this to be the default | 6755 | @xref{Getting Started}. This is a very common question. If you want |
| 5497 | behavior, don't lobby me, lobby RMS! @t{:-)} | 6756 | this to be the default behavior, don't lobby us, lobby RMS! @t{:-)} |
| 6757 | |||
| 6758 | @item | ||
| 6759 | @emph{How do I stop my code jumping all over the place when I type?} | ||
| 6760 | |||
| 6761 | Deactivate ``electric minor mode'' with @kbd{C-c C-l}. @xref{Getting | ||
| 6762 | Started}. | ||
| 6763 | |||
| 6764 | @item | ||
| 6765 | @kindex C-x h | ||
| 6766 | @kindex C-M-\ | ||
| 6767 | @emph{How do I reindent the whole file?} | ||
| 6768 | |||
| 6769 | Visit the file and hit @kbd{C-x h} to mark the whole buffer. Then hit | ||
| 6770 | @kbd{C-M-\}. @xref{Indentation Commands}. | ||
| 6771 | |||
| 6772 | @item | ||
| 6773 | @kindex C-M-q | ||
| 6774 | @kindex C-M-u | ||
| 6775 | @emph{How do I reindent the current block?} | ||
| 6776 | |||
| 6777 | First move to the brace which opens the block with @kbd{C-M-u}, then | ||
| 6778 | reindent that expression with @kbd{C-M-q}. @xref{Indentation | ||
| 6779 | Commands}. | ||
| 5498 | 6780 | ||
| 5499 | @item | 6781 | @item |
| 5500 | @emph{I put @code{(c-set-offset 'substatement-open 0)} in my | 6782 | @emph{I put @code{(c-set-offset 'substatement-open 0)} in my |
| 5501 | @file{.emacs} file but I get an error saying that @code{c-set-offset}'s | 6783 | @file{.emacs} file but I get an error saying that @code{c-set-offset}'s |
| 5502 | function definition is void. What's wrong?} | 6784 | function definition is void. What's wrong?} |
| 5503 | 6785 | ||
| 5504 | This means that @ccmode{} wasn't loaded into your Emacs session by the | 6786 | This means that @ccmode{} hasn't yet been loaded into your Emacs |
| 5505 | time the @code{c-set-offset} call was reached, most likely because | 6787 | session by the time the @code{c-set-offset} call is reached, most |
| 5506 | @ccmode{} is being autoloaded. Instead of putting the | 6788 | likely because @ccmode{} is being autoloaded. Instead of putting the |
| 5507 | @code{c-set-offset} line in your top-level @file{.emacs} file, put it in | 6789 | @code{c-set-offset} line in your top-level @file{.emacs} file, put it |
| 5508 | your @code{c-mode-common-hook}, or simply modify @code{c-offsets-alist} | 6790 | in your @code{c-initialization-hook} (@pxref{CC Hooks}), or simply |
| 5509 | directly: | 6791 | modify @code{c-offsets-alist} directly: |
| 5510 | 6792 | ||
| 5511 | @example | 6793 | @example |
| 5512 | (setq c-offsets-alist '((substatement-open . 0))) | 6794 | (setq c-offsets-alist '((substatement-open . 0))) |
| 5513 | @end example | 6795 | @end example |
| 5514 | 6796 | ||
| 5515 | @item | 6797 | @item |
| 5516 | @kindex M-a | ||
| 5517 | @kindex M-e | ||
| 5518 | @emph{@kbd{M-a} and @kbd{M-e} used to move over entire balanced brace | ||
| 5519 | lists, but now they move into blocks. How do I get the old behavior | ||
| 5520 | back?} | ||
| 5521 | |||
| 5522 | Use @kbd{C-M-f} and @kbd{C-M-b} to move over balanced brace blocks. Use | ||
| 5523 | @kbd{M-a} and @kbd{M-e} to move by statements, which will also move into | ||
| 5524 | blocks. | ||
| 5525 | |||
| 5526 | @item | ||
| 5527 | @emph{Whenever I try to indent a line or type an ``electric'' key such | ||
| 5528 | as @kbd{;}, @kbd{@{}, or @kbd{@}}, I get an error that look like this: | ||
| 5529 | @code{Invalid function: (macro . #[...}. What gives?} | ||
| 5530 | |||
| 5531 | This is a common error when @ccmode{} hasn't been compiled correctly, | ||
| 5532 | especially under Emacs 19.34@footnote{Technically, it's because some | ||
| 5533 | macro wasn't defined during the compilation, so the byte compiler put | ||
| 5534 | in function calls instead of the macro expansions. Later, when the | ||
| 5535 | interpreter tries to call the macro as a function, it shows this | ||
| 5536 | (somewhat cryptic) error message.}. If you are using the standalone | ||
| 5537 | @ccmode{} distribution, try recompiling it according to the instructions | ||
| 5538 | in the @file{README} file. | ||
| 5539 | |||
| 5540 | @item | ||
| 5541 | @cindex open paren in column zero | 6798 | @cindex open paren in column zero |
| 5542 | @emph{I have an open paren character at column zero inside a comment or | 6799 | @emph{I have an open paren character at column zero inside a comment or |
| 5543 | multiline string literal, and it causes the fontification and/or | 6800 | multiline string literal, and it causes the fontification and/or |
| @@ -5546,20 +6803,25 @@ indentation to go haywire. What gives?} | |||
| 5546 | It's due to the ad-hoc rule in (X)Emacs that such open parens always | 6803 | It's due to the ad-hoc rule in (X)Emacs that such open parens always |
| 5547 | start defuns (which translates to functions, classes, namespaces or any | 6804 | start defuns (which translates to functions, classes, namespaces or any |
| 5548 | other top-level block constructs in the @ccmode{} languages). | 6805 | other top-level block constructs in the @ccmode{} languages). |
| 5549 | @xref{Left Margin Paren,,, emacs, The Emacs Editor}, for details | 6806 | @ifset XEMACS |
| 5550 | (@xref{Defuns,,, emacs, The Emacs Editor}, in the Emacs 20 manual). | 6807 | @xref{Defuns,,, xemacs, XEmacs User's Manual}, for details. |
| 6808 | @end ifset | ||
| 6809 | @ifclear XEMACS | ||
| 6810 | @xref{Left Margin Paren,,, emacs, GNU Emacs Manual}, for details | ||
| 6811 | (@xref{Defuns,,, emacs, GNU Emacs Manual}, in the Emacs 20 manual). | ||
| 6812 | @end ifclear | ||
| 5551 | 6813 | ||
| 5552 | This heuristic is built into the core syntax analysis routines in | 6814 | This heuristic is built into the core syntax analysis routines in |
| 5553 | (X)Emacs, so it's not really a @ccmode{} issue. However, in Emacs 22.1 | 6815 | (X)Emacs, so it's not really a @ccmode{} issue. However, in Emacs |
| 5554 | it has become possible to turn it off@footnote{Using the variable | 6816 | 21.1 it became possible to turn it off@footnote{Using the variable |
| 5555 | @code{open-paren-in-column-0-is-defun-start}.} and @ccmode{} does so | 6817 | @code{open-paren-in-column-0-is-defun-start}.} and @ccmode{} does so |
| 5556 | there since it got its own system to keep track of blocks. | 6818 | there since it's got its own system to keep track of blocks. |
| 5557 | 6819 | ||
| 5558 | @end itemize | 6820 | @end itemize |
| 5559 | 6821 | ||
| 5560 | 6822 | ||
| 5561 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6823 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 5562 | @node Getting the Latest CC Mode Release, Mailing Lists and Submitting Bug Reports, Frequently Asked Questions, Top | 6824 | @node Updating CC Mode, Mailing Lists and Bug Reports, FAQ, Top |
| 5563 | @comment node-name, next, previous, up | 6825 | @comment node-name, next, previous, up |
| 5564 | @appendix Getting the Latest CC Mode Release | 6826 | @appendix Getting the Latest CC Mode Release |
| 5565 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6827 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| @@ -5579,7 +6841,7 @@ compatibility, etc. are all available on the web site: | |||
| 5579 | 6841 | ||
| 5580 | 6842 | ||
| 5581 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6843 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 5582 | @node Mailing Lists and Submitting Bug Reports, Sample .emacs File, Getting the Latest CC Mode Release, Top | 6844 | @node Mailing Lists and Bug Reports, Command and Function Index, Updating CC Mode, Top |
| 5583 | @comment node-name, next, previous, up | 6845 | @comment node-name, next, previous, up |
| 5584 | @appendix Mailing Lists and Submitting Bug Reports | 6846 | @appendix Mailing Lists and Submitting Bug Reports |
| 5585 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6847 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| @@ -5597,83 +6859,33 @@ to include any code that appears @emph{before} your bug example, if | |||
| 5597 | you think it might affect our ability to reproduce it. | 6859 | you think it might affect our ability to reproduce it. |
| 5598 | 6860 | ||
| 5599 | Please try to produce the problem in an Emacs instance without any | 6861 | Please try to produce the problem in an Emacs instance without any |
| 5600 | customizations loaded (i.e., start it with the @samp{-q --no-site-file} | 6862 | customizations loaded (i.e. start it with the @samp{-q -no-site-file} |
| 5601 | arguments). If it works correctly there, the problem might be caused by | 6863 | arguments). If it works correctly there, the problem might be caused |
| 5602 | faulty customizations in either your own or your site configuration. In | 6864 | by faulty customizations in either your own or your site |
| 5603 | that case, we'd appreciate if you isolate the Emacs Lisp code that trigs | 6865 | configuration. In that case, we'd appreciate if you isolate the Emacs |
| 5604 | the bug and include it in your report. | 6866 | Lisp code that triggers the bug and include it in your report. |
| 5605 | 6867 | ||
| 5606 | @cindex bug report mailing list | 6868 | @cindex bug report mailing list |
| 5607 | Bug reports are sent to @email{bug-cc-mode@@gnu.org}. You can also send | 6869 | Bug reports should be sent to @email{bug-cc-mode@@gnu.org}. You can |
| 5608 | other questions and suggestions (kudos? @t{;-)} to that address. It's a | 6870 | also send other questions and suggestions (kudos? @t{;-)} to that |
| 5609 | mailing list which you can join or browse an archive of; see the web | 6871 | address. It's a mailing list which you can join or browse an archive |
| 5610 | site at @uref{http://cc-mode.sourceforge.net/} for further details. | 6872 | of; see the web site at @uref{http://cc-mode.sourceforge.net/} for |
| 6873 | further details. | ||
| 5611 | 6874 | ||
| 5612 | @cindex announcement mailing list | 6875 | @cindex announcement mailing list |
| 5613 | If you want to get announcements of new @ccmode{} releases, send the | 6876 | If you want to get announcements of new @ccmode{} releases, send the |
| 5614 | word @emph{subscribe} in the body of a message to | 6877 | word @emph{subscribe} in the body of a message to |
| 5615 | @email{cc-mode-announce-request@@lists.sourceforge.net}. It's possible | 6878 | @email{cc-mode-announce-request@@lists.sourceforge.net}. It's possible |
| 5616 | to subscribe from the web site too. Announcements will also be posted | 6879 | to subscribe from the web site too. Announcements will also be posted |
| 5617 | to the Usenet newsgroups @code{gnu.emacs.sources}, @code{comp.emacs} and | 6880 | to the Usenet newsgroups @code{gnu.emacs.sources}, @code{comp.emacs}, |
| 5618 | @code{comp.emacs.xemacs}. | 6881 | @code{comp.emacs.xemacs}, @code{comp.lang.c}, @code{comp.lang.c++}, |
| 5619 | 6882 | @code{comp.lang.objective-c}, @code{comp.lang.java.softwaretools}, | |
| 6883 | @code{comp.lang.idl}, and @code{comp.lang.awk}. | ||
| 6884 | @c There is no newsgroup for Pike. :-( | ||
| 5620 | 6885 | ||
| 6886 | @c Removed the tentative node "Mode Initialization" from here, 2005/8/27. | ||
| 5621 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6887 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 5622 | @node Sample .emacs File, Command and Function Index, Mailing Lists and Submitting Bug Reports, Top | 6888 | @node Command and Function Index, Variable Index, Mailing Lists and Bug Reports, Top |
| 5623 | @comment node-name, next, previous, up | ||
| 5624 | @appendix Sample .emacs file | ||
| 5625 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5626 | |||
| 5627 | @example | ||
| 5628 | ;; Here's a sample .emacs file that might help you along the way. | ||
| 5629 | ;; Just copy this region and paste it into your .emacs file. You may | ||
| 5630 | ;; want to change some of the actual values. | ||
| 5631 | |||
| 5632 | (defconst my-c-style | ||
| 5633 | '((c-tab-always-indent . t) | ||
| 5634 | (c-comment-only-line-offset . 4) | ||
| 5635 | (c-hanging-braces-alist . ((substatement-open after) | ||
| 5636 | (brace-list-open))) | ||
| 5637 | (c-hanging-colons-alist . ((member-init-intro before) | ||
| 5638 | (inher-intro) | ||
| 5639 | (case-label after) | ||
| 5640 | (label after) | ||
| 5641 | (access-label after))) | ||
| 5642 | (c-cleanup-list . (scope-operator | ||
| 5643 | empty-defun-braces | ||
| 5644 | defun-close-semi)) | ||
| 5645 | (c-offsets-alist . ((arglist-close . c-lineup-arglist) | ||
| 5646 | (substatement-open . 0) | ||
| 5647 | (case-label . 4) | ||
| 5648 | (block-open . 0) | ||
| 5649 | (knr-argdecl-intro . -))) | ||
| 5650 | (c-echo-syntactic-information-p . t)) | ||
| 5651 | "My C Programming Style") | ||
| 5652 | |||
| 5653 | ;; offset customizations not in my-c-style | ||
| 5654 | (setq c-offsets-alist '((member-init-intro . ++))) | ||
| 5655 | |||
| 5656 | ;; Customizations for all modes in CC Mode. | ||
| 5657 | (defun my-c-mode-common-hook () | ||
| 5658 | ;; add my personal style and set it for the current buffer | ||
| 5659 | (c-add-style "PERSONAL" my-c-style t) | ||
| 5660 | ;; other customizations | ||
| 5661 | (setq tab-width 8 | ||
| 5662 | ;; this will make sure spaces are used instead of tabs | ||
| 5663 | indent-tabs-mode nil) | ||
| 5664 | ;; we like auto-newline and hungry-delete | ||
| 5665 | (c-toggle-auto-hungry-state 1) | ||
| 5666 | ;; key bindings for all supported languages. We can put these in | ||
| 5667 | ;; c-mode-base-map because c-mode-map, c++-mode-map, objc-mode-map, | ||
| 5668 | ;; java-mode-map, idl-mode-map, and pike-mode-map inherit from it. | ||
| 5669 | (define-key c-mode-base-map "\C-m" 'c-context-line-break)) | ||
| 5670 | |||
| 5671 | (add-hook 'c-mode-common-hook 'my-c-mode-common-hook) | ||
| 5672 | @end example | ||
| 5673 | |||
| 5674 | |||
| 5675 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| 5676 | @node Command and Function Index, Variable Index, Sample .emacs File, Top | ||
| 5677 | @comment node-name, next, previous, up | 6889 | @comment node-name, next, previous, up |
| 5678 | @unnumbered Command and Function Index | 6890 | @unnumbered Command and Function Index |
| 5679 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6891 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| @@ -5688,7 +6900,7 @@ Since most @ccmode{} commands are prepended with the string | |||
| 5688 | 6900 | ||
| 5689 | 6901 | ||
| 5690 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6902 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 5691 | @node Variable Index, Concept Index, Command and Function Index, Top | 6903 | @node Variable Index, Concept and Key Index, Command and Function Index, Top |
| 5692 | @comment node-name, next, previous, up | 6904 | @comment node-name, next, previous, up |
| 5693 | @unnumbered Variable Index | 6905 | @unnumbered Variable Index |
| 5694 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6906 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| @@ -5703,9 +6915,9 @@ Since most @ccmode{} variables are prepended with the string | |||
| 5703 | 6915 | ||
| 5704 | 6916 | ||
| 5705 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6917 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 5706 | @node Concept Index, , Variable Index, Top | 6918 | @node Concept and Key Index, , Variable Index, Top |
| 5707 | @comment node-name, next, previous, up | 6919 | @comment node-name, next, previous, up |
| 5708 | @unnumbered Concept Index | 6920 | @unnumbered Concept and Key Index |
| 5709 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 6921 | @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 5710 | 6922 | ||
| 5711 | @printindex cp | 6923 | @printindex cp |