Mercurial > emacs
annotate lisp/progmodes/cc-vars.el @ 28433:8605ab7873d4
Hyperlinks, help echo.
author | Dave Love <fx@gnu.org> |
---|---|
date | Thu, 30 Mar 2000 23:12:55 +0000 |
parents | 03befb219d03 |
children | 7b0a7b155fe2 |
rev | line source |
---|---|
18720 | 1 ;;; cc-vars.el --- user customization variables for CC Mode |
2 | |
26817 | 3 ;; Copyright (C) 1985,1987,1992-1999 Free Software Foundation, Inc. |
18720 | 4 |
26817 | 5 ;; Authors: 1998-1999 Barry A. Warsaw and Martin Stjernholm |
24282 | 6 ;; 1992-1997 Barry A. Warsaw |
18720 | 7 ;; 1987 Dave Detlefs and Stewart Clamen |
8 ;; 1985 Richard M. Stallman | |
24282 | 9 ;; Maintainer: bug-cc-mode@gnu.org |
18720 | 10 ;; Created: 22-Apr-1997 (split from cc-mode.el) |
20144
56d81cc7b4f5
(c-progress-interval): Document new semantics
Karl Heuer <kwzh@gnu.org>
parents:
20140
diff
changeset
|
11 ;; Version: See cc-mode.el |
18720 | 12 ;; Keywords: c languages oop |
13 | |
14 ;; This file is part of GNU Emacs. | |
15 | |
16 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
17 ;; it under the terms of the GNU General Public License as published by | |
18 ;; the Free Software Foundation; either version 2, or (at your option) | |
19 ;; any later version. | |
20 | |
21 ;; GNU Emacs is distributed in the hope that it will be useful, | |
22 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
23 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
24 ;; GNU General Public License for more details. | |
25 | |
26 ;; You should have received a copy of the GNU General Public License | |
27 ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
28 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
29 ;; Boston, MA 02111-1307, USA. | |
30 | |
24282 | 31 (eval-when-compile |
26817 | 32 (let ((load-path |
33 (if (and (boundp 'byte-compile-current-file) | |
34 (stringp byte-compile-current-file)) | |
35 (cons (file-name-directory byte-compile-current-file) | |
36 load-path) | |
37 load-path))) | |
38 (load "cc-defs" nil t))) | |
39 (require 'custom) | |
24282 | 40 |
18720 | 41 |
42 | |
26817 | 43 ;;; Helpers |
18720 | 44 |
24282 | 45 ;; This widget will show up in newer versions of the Custom library |
46 (or (get 'other 'widget-type) | |
47 (define-widget 'other 'sexp | |
48 "Matches everything, but doesn't let the user edit the value. | |
49 Useful as last item in a `choice' widget." | |
50 :tag "Other" | |
51 :format "%t%n" | |
52 :value 'other)) | |
53 | |
26817 | 54 (define-widget 'c-const-symbol 'item |
55 "An uneditable lisp symbol." | |
56 :value nil | |
57 :tag "Symbol" | |
58 :format "%t: %v\n%d" | |
59 :match (lambda (widget value) (symbolp value)) | |
60 :value-to-internal | |
61 (lambda (widget value) | |
62 (let ((s (if (symbolp value) | |
63 (symbol-name value) | |
64 value)) | |
65 (l (widget-get widget :size))) | |
66 (if l | |
67 (setq s (concat s (make-string (- l (length s)) ?\ )))) | |
68 s)) | |
69 :value-to-external | |
70 (lambda (widget value) | |
71 (if (stringp value) | |
72 (intern (progn | |
73 (string-match "\\`[^ ]*" value) | |
74 (match-string 0 value))) | |
75 value))) | |
76 | |
77 (defvar c-style-variables | |
78 '(c-basic-offset c-comment-only-line-offset c-block-comment-prefix | |
79 c-comment-prefix-regexp c-cleanup-list c-hanging-braces-alist | |
80 c-hanging-colons-alist c-hanging-semi&comma-criteria c-backslash-column | |
81 c-special-indent-hook c-label-minimum-indentation c-offsets-alist) | |
82 "List of the style variables.") | |
83 | |
84 (defmacro defcustom-c-stylevar (name val doc &rest args) | |
85 "Defines a style variable." | |
86 (setq val (if (eq (car-safe val) 'quote) | |
87 (nth 1 val) | |
88 (eval val))) | |
89 `(progn | |
90 (put ',name 'c-stylevar-fallback ',val) | |
91 (defcustom ,name 'set-from-style | |
92 ,(concat doc " | |
93 | |
94 This is a style variable. Apart from the valid values described | |
95 above, it can be set to the symbol `set-from-style'. In that case, it | |
96 takes its value from the style system (see `c-default-style' and | |
97 `c-styles-alist') when a CC Mode buffer is initialized. Otherwise, | |
98 the value set here overrides the style system (there is a variable | |
99 `c-old-style-variable-behavior' that changes this, though).") | |
100 ,@(plist-put | |
101 args ':type | |
102 `'(radio | |
103 (const :tag "Use style settings" | |
104 set-from-style) | |
105 ,(let ((type (eval (plist-get args ':type)))) | |
106 (unless (consp type) | |
107 (setq type (list type))) | |
108 (unless (c-safe (plist-get (cdr type) ':value)) | |
109 (setcdr type (append `(:value ,val) | |
110 (cdr type)))) | |
111 (unless (c-safe (plist-get (cdr type) ':tag)) | |
112 (setcdr type (append '(:tag "Override style settings") | |
113 (cdr type)))) | |
114 type)))))) | |
115 | |
116 (defun c-valid-offset (offset) | |
117 "Return non-nil iff OFFSET is a valid offset for a syntactic symbol. | |
118 See `c-offsets-alist'." | |
119 (or (eq offset '+) | |
120 (eq offset '-) | |
121 (eq offset '++) | |
122 (eq offset '--) | |
123 (eq offset '*) | |
124 (eq offset '/) | |
125 (integerp offset) | |
126 (functionp offset) | |
127 (and (symbolp offset) | |
128 (or (boundp offset) | |
129 (fboundp offset))) | |
130 (progn | |
131 (while (and (consp offset) | |
132 (c-valid-offset (car offset))) | |
133 (setq offset (cdr offset))) | |
134 (null offset)))) | |
135 | |
136 | |
137 | |
138 ;;; User variables | |
139 | |
140 (defcustom c-strict-syntax-p nil | |
141 "*If non-nil, all syntactic symbols must be found in `c-offsets-alist'. | |
142 If the syntactic symbol for a particular line does not match a symbol | |
143 in the offsets alist, or if no non-nil offset value can be determined | |
144 for a symbol, an error is generated, otherwise no error is reported | |
145 and the syntactic symbol is ignored. | |
146 | |
147 This variable is considered obsolete; it doesn't work well with lineup | |
148 functions that return nil to support the feature of using lists on | |
149 syntactic symbols in `c-offsets-alist'. Please keep it set to nil." | |
150 :type 'boolean | |
151 :group 'c) | |
152 | |
153 (defcustom c-echo-syntactic-information-p nil | |
154 "*If non-nil, syntactic info is echoed when the line is indented." | |
155 :type 'boolean | |
156 :group 'c) | |
157 | |
158 (defcustom-c-stylevar c-basic-offset 4 | |
159 "*Amount of basic offset used by + and - symbols in `c-offsets-alist'." | |
160 :type 'integer | |
161 :group 'c) | |
162 | |
18720 | 163 (defcustom c-tab-always-indent t |
164 "*Controls the operation of the TAB key. | |
165 If t, hitting TAB always just indents the current line. If nil, | |
166 hitting TAB indents the current line if point is at the left margin or | |
167 in the line's indentation, otherwise it insert a `real' tab character | |
24282 | 168 \(see note\). If the symbol `other', then tab is inserted only within |
169 literals -- defined as comments and strings -- and inside preprocessor | |
170 directives, but the line is always reindented. | |
18720 | 171 |
172 Note: The value of `indent-tabs-mode' will determine whether a real | |
26817 | 173 tab character will be inserted, or the equivalent number of spaces. |
18720 | 174 When inserting a tab, actually the function stored in the variable |
175 `c-insert-tab-function' is called. | |
176 | |
177 Note: indentation of lines containing only comments is also controlled | |
178 by the `c-comment-only-line-offset' variable." | |
179 :type '(radio | |
180 :extra-offset 8 | |
181 :format "%{C Tab Always Indent%}:\n The TAB key:\n%v" | |
182 (const :tag "always indents, never inserts TAB" t) | |
183 (const :tag "indents in left margin, otherwise inserts TAB" nil) | |
24282 | 184 (other :tag "inserts TAB in literals, otherwise indent" other)) |
18720 | 185 :group 'c) |
186 | |
187 (defcustom c-insert-tab-function 'insert-tab | |
188 "*Function used when inserting a tab for \\[TAB]. | |
189 Only used when `c-tab-always-indent' indicates a `real' tab character | |
190 should be inserted. Value must be a function taking no arguments." | |
191 :type 'function | |
192 :group 'c) | |
193 | |
26817 | 194 (defcustom-c-stylevar c-comment-only-line-offset 0 |
18720 | 195 "*Extra offset for line which contains only the start of a comment. |
196 Can contain an integer or a cons cell of the form: | |
197 | |
198 (NON-ANCHORED-OFFSET . ANCHORED-OFFSET) | |
199 | |
200 Where NON-ANCHORED-OFFSET is the amount of offset given to | |
201 non-column-zero anchored comment-only lines, and ANCHORED-OFFSET is | |
202 the amount of offset to give column-zero anchored comment-only lines. | |
26817 | 203 Just an integer as value is equivalent to (<val> . -1000). |
204 | |
205 Note that this variable only has effect when the `c-lineup-comment' | |
206 lineup function is used on the `comment-intro' syntactic symbol (the | |
207 default)." | |
208 :type '(choice (integer :tag "Non-anchored offset" 0) | |
18720 | 209 (cons :tag "Non-anchored & anchored offset" |
210 :value (0 . 0) | |
211 :extra-offset 8 | |
212 (integer :tag "Non-anchored offset") | |
213 (integer :tag "Anchored offset"))) | |
214 :group 'c) | |
215 | |
216 (defcustom c-indent-comments-syntactically-p nil | |
26817 | 217 "*Specifies how \\[indent-for-comment] should handle comment-only lines. |
18720 | 218 When this variable is non-nil, comment-only lines are indented |
26817 | 219 according to syntactic analysis via `c-offsets-alist'. Otherwise, the |
220 comment is indented as if it was preceded by code. Note that this | |
221 variable does not affect how the normal line indentation treats | |
222 comment-only lines." | |
18720 | 223 :type 'boolean |
224 :group 'c) | |
225 | |
26817 | 226 (defcustom-c-stylevar c-block-comment-prefix |
227 (if (boundp 'c-comment-continuation-stars) | |
228 c-comment-continuation-stars | |
229 "* ") | |
230 "*Specifies the line prefix of continued C-style block comments. | |
19298
4a99e63dc4a9
(c-buffer-is-cc-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19255
diff
changeset
|
231 You should set this variable to the literal string that gets inserted |
4a99e63dc4a9
(c-buffer-is-cc-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19255
diff
changeset
|
232 at the front of continued block style comment lines. This should |
26817 | 233 either be the empty string, or some characters without preceding |
234 spaces. To adjust the alignment under the comment starter, put an | |
235 appropriate value on the `c' syntactic symbol (see the | |
236 `c-offsets-alist' variable). | |
237 | |
238 It's only used when a one-line block comment is broken into two or | |
239 more lines for the first time; otherwise the appropriate prefix is | |
240 adapted from the comment. This variable is not used for C++ line | |
241 style comments." | |
242 :type 'string | |
19298
4a99e63dc4a9
(c-buffer-is-cc-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19255
diff
changeset
|
243 :group 'c) |
4a99e63dc4a9
(c-buffer-is-cc-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19255
diff
changeset
|
244 |
26817 | 245 (make-obsolete-variable 'c-comment-continuation-stars |
246 'c-block-comment-prefix) | |
247 | |
248 (defcustom-c-stylevar c-comment-prefix-regexp "//+\\|\\**" | |
249 "*Regexp to match the line prefix inside comments. | |
250 This regexp is used to recognize the fill prefix inside comments for | |
251 correct paragraph filling and other things. | |
252 | |
253 It should match the prefix used in both C++ style line comments and C | |
254 style block comments, but it does not need to match a block comment | |
255 starter. In other words, it should at least match \"//\" for line | |
256 comments and the string in `c-block-comment-prefix', which is | |
257 sometimes inserted by CC Mode inside block comments. It should not | |
258 match any surrounding whitespace. | |
259 | |
260 Note that CC Mode modifies other variables from this one at mode | |
261 initialization, so you might need to do \\[c-mode] (or whatever mode | |
262 you're currently using) if you change it in a CC Mode buffer." | |
263 :type 'regexp | |
264 :group 'c) | |
265 | |
266 (defcustom c-ignore-auto-fill '(string cpp code) | |
267 "*List of contexts in which automatic filling never occurs. | |
268 If Auto Fill mode is active, it will be temporarily disabled if point | |
269 is in any context on this list. It's e.g. useful to enable Auto Fill | |
270 in comments only, but not in strings or normal code. The valid | |
271 contexts are: | |
272 | |
273 string -- inside a string or character literal | |
274 c -- inside a C style block comment | |
275 c++ -- inside a C++ style line comment | |
276 cpp -- inside a preprocessor directive | |
277 code -- anywhere else, i.e. in normal code" | |
278 :type '(set | |
279 :extra-offset 8 | |
280 (const :tag "String literals" string) | |
281 (const :tag "C style block comments" c) | |
282 (const :tag "C++ style line comments" c++) | |
283 (const :tag "Preprocessor directives" cpp) | |
284 (const :tag "Normal code" code)) | |
285 :group 'c) | |
286 | |
287 (defcustom-c-stylevar c-cleanup-list '(scope-operator) | |
18720 | 288 "*List of various C/C++/ObjC constructs to \"clean up\". |
289 These clean ups only take place when the auto-newline feature is | |
290 turned on, as evidenced by the `/a' or `/ah' appearing next to the | |
291 mode name. Valid symbols are: | |
292 | |
293 brace-else-brace -- cleans up `} else {' constructs by placing entire | |
294 construct on a single line. This clean up | |
295 only takes place when there is nothing but | |
296 white space between the braces and the `else'. | |
26817 | 297 Clean up occurs when the open brace after the |
18720 | 298 `else' is typed. |
299 brace-elseif-brace -- similar to brace-else-brace, but cleans up | |
24282 | 300 `} else if (...) {' constructs. Clean up occurs |
26817 | 301 after the open parenthesis and the open brace. |
24282 | 302 brace-catch-brace -- similar to brace-elseif-brace, but cleans up |
303 `} catch (...) {' constructs. | |
18720 | 304 empty-defun-braces -- cleans up empty defun braces by placing the |
305 braces on the same line. Clean up occurs when | |
306 the defun closing brace is typed. | |
307 defun-close-semi -- cleans up the terminating semi-colon on defuns | |
308 by placing the semi-colon on the same line as | |
309 the closing brace. Clean up occurs when the | |
310 semi-colon is typed. | |
311 list-close-comma -- cleans up commas following braces in array | |
312 and aggregate initializers. Clean up occurs | |
313 when the comma is typed. | |
314 scope-operator -- cleans up double colons which may designate | |
315 a C++ scope operator split across multiple | |
316 lines. Note that certain C++ constructs can | |
317 generate ambiguous situations. This clean up | |
318 only takes place when there is nothing but | |
319 whitespace between colons. Clean up occurs | |
320 when the second colon is typed." | |
321 :type '(set | |
322 :extra-offset 8 | |
323 (const :tag "Put `} else {' on one line" brace-else-brace) | |
24282 | 324 (const :tag "Put `} else if (...) {' on one line" brace-elseif-brace) |
325 (const :tag "Put `} catch (...) {' on one line" brace-catch-brace) | |
18720 | 326 (const :tag "Put empty defun braces on one line" empty-defun-braces) |
26817 | 327 (const :tag "Put `};' ending defuns on one line" defun-close-semi) |
18720 | 328 (const :tag "Put `},' in aggregates on one line" list-close-comma) |
329 (const :tag "Put C++ style `::' on one line" scope-operator)) | |
330 :group 'c) | |
331 | |
26817 | 332 (defcustom-c-stylevar c-hanging-braces-alist '((brace-list-open) |
333 (brace-entry-open) | |
334 (substatement-open after) | |
335 (block-close . c-snug-do-while) | |
336 (extern-lang-open after) | |
337 (inexpr-class-open after) | |
338 (inexpr-class-close before)) | |
339 "*Controls the insertion of newlines before and after braces | |
340 when the auto-newline feature is active. This variable contains an | |
341 association list with elements of the following form: | |
342 \(SYNTACTIC-SYMBOL . ACTION). | |
18720 | 343 |
344 When a brace (either opening or closing) is inserted, the syntactic | |
345 context it defines is looked up in this list, and if found, the | |
346 associated ACTION is used to determine where newlines are inserted. | |
347 If the context is not found, the default is to insert a newline both | |
348 before and after the brace. | |
349 | |
350 SYNTACTIC-SYMBOL can be any of: defun-open, defun-close, class-open, | |
351 class-close, inline-open, inline-close, block-open, block-close, | |
352 substatement-open, statement-case-open, extern-lang-open, | |
353 extern-lang-close, brace-list-open, brace-list-close, | |
26817 | 354 brace-list-intro, brace-entry-open, namespace-open, namespace-close, |
355 inexpr-class-open, or inexpr-class-close. See `c-offsets-alist' for | |
356 details, except for inexpr-class-open and inexpr-class-close, which | |
357 doesn't have any corresponding symbols there. Those two symbols are | |
358 used for the opening and closing braces, respectively, of anonymous | |
359 inner classes in Java. | |
18720 | 360 |
361 ACTION can be either a function symbol or a list containing any | |
362 combination of the symbols `before' or `after'. If the list is empty, | |
363 no newlines are inserted either before or after the brace. | |
364 | |
365 When ACTION is a function symbol, the function is called with a two | |
366 arguments: the syntactic symbol for the brace and the buffer position | |
367 at which the brace was inserted. The function must return a list as | |
368 described in the preceding paragraph. Note that during the call to | |
369 the function, the variable `c-syntactic-context' is set to the entire | |
370 syntactic context for the brace line." | |
26817 | 371 :type |
372 `(set ,@(mapcar | |
373 (lambda (elt) | |
374 `(cons :format "%v" | |
375 (c-const-symbol :format "%v: " | |
376 :size 20 | |
377 :value ,elt) | |
378 (choice :format "%[Choice%] %v" | |
379 :value (before after) | |
380 (set :menu-tag "Before/after" | |
381 :format "Newline %v brace\n" | |
382 (const :format "%v, " before) | |
383 (const :format "%v" after)) | |
384 (function :menu-tag "Function" | |
385 :format "Run function: %v" | |
386 :value c-)))) | |
387 '(defun-open defun-close | |
388 class-open class-close | |
389 inline-open inline-close | |
390 block-open block-close | |
391 substatement-open statement-case-open | |
392 extern-lang-open extern-lang-close | |
393 brace-list-open brace-list-close | |
394 brace-list-intro brace-entry-open | |
395 namespace-open namespace-close | |
396 inexpr-class-open inexpr-class-close))) | |
397 :group 'c) | |
18720 | 398 |
26817 | 399 (defcustom-c-stylevar c-hanging-colons-alist nil |
18720 | 400 "*Controls the insertion of newlines before and after certain colons. |
401 This variable contains an association list with elements of the | |
402 following form: (SYNTACTIC-SYMBOL . ACTION). | |
403 | |
404 SYNTACTIC-SYMBOL can be any of: case-label, label, access-label, | |
405 member-init-intro, or inher-intro. | |
406 | |
407 See the variable `c-hanging-braces-alist' for the semantics of this | |
408 variable. Note however that making ACTION a function symbol is | |
409 currently not supported for this variable." | |
26817 | 410 :type |
411 `(set ,@(mapcar | |
412 (lambda (elt) | |
413 `(cons :format "%v" | |
414 (c-const-symbol :format "%v: " | |
415 :size 20 | |
416 :value ,elt) | |
417 (set :format "Newline %v brace\n" | |
418 (const :format "%v, " before) | |
419 (const :format "%v" after)))) | |
420 '(case-label label access-label member-init-intro inher-intro))) | |
18720 | 421 :group 'c) |
422 | |
26817 | 423 (defcustom-c-stylevar c-hanging-semi&comma-criteria |
424 '(c-semi&comma-inside-parenlist) | |
18720 | 425 "*List of functions that decide whether to insert a newline or not. |
426 The functions in this list are called, in order, whenever the | |
427 auto-newline minor mode is activated (as evidenced by a `/a' or `/ah' | |
428 string in the mode line), and a semicolon or comma is typed (see | |
429 `c-electric-semi&comma'). Each function in this list is called with | |
430 no arguments, and should return one of the following values: | |
431 | |
432 nil -- no determination made, continue checking | |
433 'stop -- do not insert a newline, and stop checking | |
434 (anything else) -- insert a newline, and stop checking | |
435 | |
436 If every function in the list is called with no determination made, | |
437 then no newline is inserted." | |
438 :type '(repeat function) | |
439 :group 'c) | |
440 | |
26817 | 441 (defcustom-c-stylevar c-backslash-column 48 |
18720 | 442 "*Column to insert backslashes when macroizing a region." |
443 :type 'integer | |
444 :group 'c) | |
445 | |
446 (defcustom c-special-indent-hook nil | |
447 "*Hook for user defined special indentation adjustments. | |
448 This hook gets called after a line is indented by the mode." | |
449 :type 'hook | |
450 :group 'c) | |
451 | |
452 (defcustom c-backspace-function 'backward-delete-char-untabify | |
453 "*Function called by `c-electric-backspace' when deleting backwards." | |
454 :type 'function | |
455 :group 'c) | |
456 | |
457 (defcustom c-delete-function 'delete-char | |
458 "*Function called by `c-electric-delete' when deleting forwards." | |
459 :type 'function | |
460 :group 'c) | |
461 | |
462 (defcustom c-electric-pound-behavior nil | |
463 "*List of behaviors for electric pound insertion. | |
464 Only currently supported behavior is `alignleft'." | |
465 :type '(set :extra-offset 8 (const alignleft)) | |
466 :group 'c) | |
467 | |
26817 | 468 (defcustom-c-stylevar c-label-minimum-indentation 1 |
18720 | 469 "*Minimum indentation for lines inside of top-level constructs. |
470 This variable typically only affects code using the `gnu' style, which | |
471 mandates a minimum of one space in front of every line inside | |
472 top-level constructs. Specifically, the function | |
473 `c-gnu-impose-minimum' on your `c-special-indent-hook' is what | |
474 enforces this." | |
475 :type 'integer | |
476 :group 'c) | |
477 | |
478 (defcustom c-progress-interval 5 | |
479 "*Interval used to update progress status during long re-indentation. | |
480 If a number, percentage complete gets updated after each interval of | |
20144
56d81cc7b4f5
(c-progress-interval): Document new semantics
Karl Heuer <kwzh@gnu.org>
parents:
20140
diff
changeset
|
481 that many seconds. To inhibit all messages during indentation, set |
56d81cc7b4f5
(c-progress-interval): Document new semantics
Karl Heuer <kwzh@gnu.org>
parents:
20140
diff
changeset
|
482 this variable to nil." |
18720 | 483 :type 'integer |
484 :group 'c) | |
485 | |
20919
9cffecf3b1ca
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20144
diff
changeset
|
486 (defcustom c-default-style "gnu" |
24282 | 487 "*Style which gets installed by default when a file is visited. |
20919
9cffecf3b1ca
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20144
diff
changeset
|
488 |
9cffecf3b1ca
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20144
diff
changeset
|
489 The value of this variable can be any style defined in |
24282 | 490 `c-style-alist', including styles you add. The value can also be an |
491 association list of major mode symbols to style names. | |
492 | |
493 When the value is a string, all CC Mode major modes will install this | |
494 style by default, except `java-mode', which always installs the | |
495 \"java\" style (this is for backwards compatibility). | |
20919
9cffecf3b1ca
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20144
diff
changeset
|
496 |
26817 | 497 When the value is an alist, the major mode symbol is looked up in it |
498 and the associated style is installed. If the major mode is not | |
499 listed in the alist, then the symbol `other' is looked up in it, and | |
500 if found, the style in that entry is used. If `other' is not found in | |
501 the alist, then \"gnu\" style is used. | |
502 | |
503 The default style gets installed before your mode hooks run, so you | |
504 can always override the use of `c-default-style' by making calls to | |
505 `c-set-style' in the appropriate mode hook. | |
24282 | 506 |
26817 | 507 Tip: If you use different styles in different languages, you probably |
508 want to set `c-style-variables-are-local-p'." | |
509 :type '(radio | |
510 (string :tag "Style in all modes (except Java)") | |
511 (repeat :tag "Mode-specific styles" | |
512 :value ((other . "user")) | |
513 (cons :format "%v" | |
514 (choice :tag "Mode" | |
515 (const c-mode) (const c++-mode) | |
516 (const objc-mode) (const java-mode) | |
517 (const idl-mode) (const pike-mode) | |
518 (const other)) | |
519 (string :tag "Style") | |
520 ))) | |
521 :group 'c) | |
20919
9cffecf3b1ca
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20144
diff
changeset
|
522 |
26817 | 523 (put 'c-offsets-alist 'c-stylevar-fallback |
524 '((string . c-lineup-dont-change) | |
525 ;; Relpos: Beg of previous line. | |
526 (c . c-lineup-C-comments) | |
527 ;; Relpos: Beg of the comment. | |
528 (defun-open . 0) | |
529 ;; Relpos: Boi at the func decl start when inside classes, bol | |
530 ;; at the func decl start when at top level. | |
531 (defun-close . 0) | |
532 ;; Relpos: Boi at the func decl start. | |
533 (defun-block-intro . +) | |
534 ;; Relpos: Boi at the block open. | |
535 (class-open . 0) | |
536 ;; Relpos: Boi at the class decl start. | |
537 (class-close . 0) | |
538 ;; Relpos: Boi at the class decl start. | |
539 (inline-open . +) | |
540 ;; Relpos: None for functions (inclass got the relpos then), | |
541 ;; boi at the lambda start for lambdas. | |
542 (inline-close . 0) | |
543 ;; Relpos: For functions: Boi at the func decl start. For | |
544 ;; lambdas: At the block open if it's at boi, at the boi of the | |
545 ;; lambda start otherwise. | |
546 (func-decl-cont . +) | |
547 ;; Relpos: Boi at the func decl start. | |
548 (knr-argdecl-intro . +) | |
549 ;; Relpos: Boi at the current line. | |
550 (knr-argdecl . 0) | |
551 ;; Relpos: Boi at the argdecl intro line. | |
552 (topmost-intro . 0) | |
553 ;; Relpos: Bol at the last line of previous construct. | |
554 (topmost-intro-cont . 0) | |
555 ;; Relpos: Boi at the topmost intro line. | |
556 (member-init-intro . +) | |
557 ;; Relpos: Boi at the func decl arglist open. | |
558 (member-init-cont . 0) | |
559 ;; Relpos: Beg of the first member init. | |
560 (inher-intro . +) | |
561 ;; Relpos: Java: Boi at the class decl start. Otherwise: Boi | |
562 ;; of current line (a bug?), unless it begins with an inher | |
563 ;; start colon, in which case boi of previous line is used. | |
564 (inher-cont . c-lineup-multi-inher) | |
565 ;; Relpos: Java: At the implements/extends keyword start. | |
566 ;; Otherwise: At the inher start colon, or boi at the class | |
567 ;; decl start if the first inherit clause hangs and it's not a | |
568 ;; func-local inherit clause (when does that occur?). | |
569 (block-open . 0) | |
570 ;; Relpos: Inexpr statement: Boi at the the preceding | |
571 ;; paren. Otherwise: None. | |
572 (block-close . 0) | |
573 ;; Relpos: At the open brace if it's at boi. Otherwise boi at | |
574 ;; the start of the statement the open brace hangs on, or boi | |
575 ;; at the preceding paren for inexpr statements. | |
576 (brace-list-open . 0) | |
577 ;; Relpos: Boi at the brace list decl start, but a starting | |
578 ;; "typedef" token is ignored. | |
579 (brace-list-close . 0) | |
580 ;; Relpos: Boi at the brace list open. | |
581 (brace-list-intro . +) | |
582 ;; Relpos: Boi at the brace list open. | |
583 (brace-list-entry . 0) | |
584 ;; Relpos: At the first non-ws char after the open paren if the | |
585 ;; first token is on the same line, otherwise boi at that | |
586 ;; token. | |
587 (brace-entry-open . 0) | |
588 ;; Relpos: Same as brace-list-entry. | |
589 (statement . 0) | |
590 ;; Relpos: After a ';' in the condition clause of a for | |
591 ;; statement: At the first token after the starting paren. | |
592 ;; Otherwise: Boi at the start of the closest non-hanging | |
593 ;; previous statement, but after any switch label. | |
594 (statement-cont . +) | |
595 ;; Relpos: After the first token in the condition clause of a | |
596 ;; for statement: At the first token after the starting paren. | |
597 ;; On the first line in a continued expression that starts with | |
598 ;; a stream op and there's no stream op on the previous line: | |
599 ;; Boi of previous line. Otherwise: Boi at the beginning of | |
600 ;; the statement, but after any type of label. | |
601 (statement-block-intro . +) | |
602 ;; Relpos: At the block start if it's at boi, otherwise boi at | |
603 ;; the start of the statement the open brace hangs on, or boi | |
604 ;; at the preceding paren for inexpr statements. | |
605 (statement-case-intro . +) | |
606 ;; Relpos: At the label keyword (always at boi). | |
607 (statement-case-open . 0) | |
608 ;; Relpos: At the label keyword (always at boi). | |
609 (substatement . +) | |
610 ;; Relpos: Boi at the containing statement or else clause. | |
611 (substatement-open . +) | |
612 ;; Relpos: Boi at the containing statement or else clause. | |
613 (case-label . 0) | |
614 ;; Relpos: At the switch block start if it's at boi, otherwise | |
615 ;; boi at the start of the switch condition clause. | |
616 (access-label . -) | |
617 ;; Relpos: Eol (a bug?). | |
618 (label . 2) | |
619 ;; Relpos: At the start of the containing block if it's at boi, | |
620 ;; otherwise boi at the start of the sexp before the block. | |
621 (do-while-closure . 0) | |
622 ;; Relpos: Boi at the corresponding while keyword. | |
623 (else-clause . 0) | |
624 ;; Relpos: Boi at the corresponding if keyword. | |
625 (catch-clause . 0) | |
626 ;; Relpos: Boi at the previous try or catch keyword in the try | |
627 ;; statement. | |
628 (comment-intro . c-lineup-comment) | |
629 ;; Relpos: None. | |
630 (arglist-intro . +) | |
631 ;; Relpos: Boi at the open paren. | |
632 (arglist-cont . 0) | |
633 ;; Relpos: At the first token after the open paren. | |
634 (arglist-cont-nonempty . c-lineup-arglist) | |
635 ;; Relpos: Boi at the open paren. | |
636 (arglist-close . +) | |
637 ;; Relpos: Boi at the open paren. | |
638 (stream-op . c-lineup-streamop) | |
639 ;; Relpos: Boi at the first stream op in the statement. | |
640 (inclass . +) | |
641 ;; Relpos: At the class open brace if it's at boi, otherwise | |
642 ;; boi at the class decl start. | |
643 (cpp-macro . -1000) | |
644 ;; Relpos: Boi. | |
645 (cpp-macro-cont . c-lineup-dont-change) | |
646 ;; Relpos: At the macro start (always at boi). | |
647 (friend . 0) | |
648 ;; Relpos: None. | |
649 (objc-method-intro . -1000) | |
650 ;; Relpos: Boi. | |
651 (objc-method-args-cont . c-lineup-ObjC-method-args) | |
652 ;; Relpos: At the method start (always at boi). | |
653 (objc-method-call-cont . c-lineup-ObjC-method-call) | |
654 ;; Relpos: At the open bracket. | |
655 (extern-lang-open . 0) | |
656 ;; Relpos: Boi at the extern keyword. | |
657 (extern-lang-close . 0) | |
658 ;; Relpos: Boi at the corresponding extern keyword. | |
659 (inextern-lang . +) | |
660 ;; Relpos: At the extern block open brace if it's at boi, | |
661 ;; otherwise boi at the extern keyword. | |
662 (namespace-open . 0) | |
663 ;; Relpos: Boi at the namespace keyword. | |
664 (namespace-close . 0) | |
665 ;; Relpos: Boi at the corresponding namespace keyword. | |
666 (innamespace . +) | |
667 ;; Relpos: At the namespace block open brace if it's at boi, | |
668 ;; otherwise boi at the namespace keyword. | |
669 (template-args-cont . (c-lineup-template-args +)) | |
670 ;; Relpos: Boi at the decl start. | |
671 (inlambda . c-lineup-inexpr-block) | |
672 ;; Relpos: None. | |
673 (lambda-intro-cont . +) | |
674 ;; Relpos: Boi at the lambda start. | |
675 (inexpr-statement . 0) | |
676 ;; Relpos: None. | |
677 (inexpr-class . +) | |
678 ;; Relpos: None. | |
679 )) | |
680 (defcustom c-offsets-alist nil | |
681 "Association list of syntactic element symbols and indentation offsets. | |
682 As described below, each cons cell in this list has the form: | |
24282 | 683 |
26817 | 684 (SYNTACTIC-SYMBOL . OFFSET) |
685 | |
686 When a line is indented, CC Mode first determines the syntactic | |
687 context of it by generating a list of symbols called syntactic | |
688 elements. This list can contain more than one syntactic element and | |
689 the global variable `c-syntactic-context' contains the context list | |
690 for the line being indented. Each element in this list is actually a | |
691 cons cell of the syntactic symbol and a buffer position. This buffer | |
692 position is called the relative indent point for the line. Some | |
693 syntactic symbols may not have a relative indent point associated with | |
694 them. | |
695 | |
696 After the syntactic context list for a line is generated, CC Mode | |
697 calculates the absolute indentation for the line by looking at each | |
698 syntactic element in the list. It compares the syntactic element | |
699 against the SYNTACTIC-SYMBOL's in `c-offsets-alist'. When it finds a | |
700 match, it adds the OFFSET to the column of the relative indent point. | |
701 The sum of this calculation for each element in the syntactic list is | |
702 the absolute offset for line being indented. | |
703 | |
704 If the syntactic element does not match any in the `c-offsets-alist', | |
705 an error is generated if `c-strict-syntax-p' is non-nil, otherwise the | |
706 element is ignored. | |
707 | |
708 Actually, OFFSET can be an integer, a function, a variable, or one of | |
709 the following symbols: `+', `-', `++', `--', `*', or `/'. These | |
710 latter designate positive or negative multiples of `c-basic-offset', | |
711 respectively: 1, -1, 2, -2, 0.5, and -0.5. If OFFSET is a function, | |
712 it is called with a single argument containing the cons of the | |
713 syntactic element symbol and the relative indent point. The function | |
714 should return an integer offset or nil if it can't decide. | |
715 | |
716 OFFSET can also be a list, in which case it is recursively evaluated | |
717 using the semantics described above. The first element of the list to | |
718 return a non-nil value succeeds. If none of the elements returns a | |
719 non-nil value, then what happends depends on the value of | |
720 `c-strict-syntax-p'. When `c-strict-syntax-p' is nil, then an offset | |
721 of zero is used, otherwise an error is generated. | |
722 | |
723 `c-offsets-alist' is a style variable. This means that the offsets on | |
724 this variable are normally taken from the style system in CC Mode | |
725 \(see `c-default-style' and `c-styles-alist'). However, any offsets | |
726 put explicitly on this list will override the style system when a CC | |
727 Mode buffer is initialized \(there is a variable | |
728 `c-old-style-variable-behavior' that changes this, though). | |
729 | |
730 Here is the current list of valid syntactic element symbols: | |
731 | |
732 string -- Inside multi-line string. | |
733 c -- Inside a multi-line C style block comment. | |
734 defun-open -- Brace that opens a function definition. | |
735 defun-close -- Brace that closes a function definition. | |
736 defun-block-intro -- The first line in a top-level defun. | |
737 class-open -- Brace that opens a class definition. | |
738 class-close -- Brace that closes a class definition. | |
739 inline-open -- Brace that opens an in-class inline method. | |
740 inline-close -- Brace that closes an in-class inline method. | |
741 func-decl-cont -- The region between a function definition's | |
742 argument list and the function opening brace | |
743 (excluding K&R argument declarations). In C, you | |
744 cannot put anything but whitespace and comments | |
745 between them; in C++ and Java, throws declarations | |
746 and other things can appear in this context. | |
747 knr-argdecl-intro -- First line of a K&R C argument declaration. | |
748 knr-argdecl -- Subsequent lines in a K&R C argument declaration. | |
749 topmost-intro -- The first line in a topmost construct definition. | |
750 topmost-intro-cont -- Topmost definition continuation lines. | |
751 member-init-intro -- First line in a member initialization list. | |
752 member-init-cont -- Subsequent member initialization list lines. | |
753 inher-intro -- First line of a multiple inheritance list. | |
754 inher-cont -- Subsequent multiple inheritance lines. | |
755 block-open -- Statement block open brace. | |
756 block-close -- Statement block close brace. | |
757 brace-list-open -- Open brace of an enum or static array list. | |
758 brace-list-close -- Close brace of an enum or static array list. | |
759 brace-list-intro -- First line in an enum or static array list. | |
760 brace-list-entry -- Subsequent lines in an enum or static array list. | |
761 brace-entry-open -- Subsequent lines in an enum or static array | |
762 list that start with an open brace. | |
763 statement -- A C (or like) statement. | |
764 statement-cont -- A continuation of a C (or like) statement. | |
765 statement-block-intro -- The first line in a new statement block. | |
766 statement-case-intro -- The first line in a case \"block\". | |
767 statement-case-open -- The first line in a case block starting with brace. | |
768 substatement -- The first line after an if/while/for/do/else. | |
769 substatement-open -- The brace that opens a substatement block. | |
770 case-label -- A `case' or `default' label. | |
771 access-label -- C++ private/protected/public access label. | |
772 label -- Any ordinary label. | |
773 do-while-closure -- The `while' that ends a do/while construct. | |
774 else-clause -- The `else' of an if/else construct. | |
775 catch-clause -- The `catch' or `finally' of a try/catch construct. | |
776 comment-intro -- A line containing only a comment introduction. | |
777 arglist-intro -- The first line in an argument list. | |
778 arglist-cont -- Subsequent argument list lines when no | |
779 arguments follow on the same line as the | |
780 arglist opening paren. | |
781 arglist-cont-nonempty -- Subsequent argument list lines when at | |
782 least one argument follows on the same | |
783 line as the arglist opening paren. | |
784 arglist-close -- The solo close paren of an argument list. | |
785 stream-op -- Lines continuing a stream operator construct. | |
786 inclass -- The construct is nested inside a class definition. | |
787 Used together with e.g. `topmost-intro'. | |
788 cpp-macro -- The start of a C preprocessor macro definition. | |
789 cpp-macro-cont -- Subsequent lines in a multi-line C preprocessor | |
790 macro definition. | |
791 friend -- A C++ friend declaration. | |
792 objc-method-intro -- The first line of an Objective-C method definition. | |
793 objc-method-args-cont -- Lines continuing an Objective-C method definition. | |
794 objc-method-call-cont -- Lines continuing an Objective-C method call. | |
795 extern-lang-open -- Brace that opens an external language block. | |
796 extern-lang-close -- Brace that closes an external language block. | |
797 inextern-lang -- Analogous to the `inclass' syntactic symbol, | |
798 but used inside extern constructs. | |
799 namespace-open -- Brace that opens a C++ namespace block. | |
800 namespace-close -- Brace that closes a C++ namespace block. | |
801 innamespace -- Analogous to the `inextern-lang' syntactic | |
802 symbol, but used inside C++ namespace constructs. | |
803 template-args-cont -- C++ template argument list continuations. | |
804 inlambda -- In the header or body of a lambda function. | |
805 lambda-intro-cont -- Continuation of the header of a lambda function. | |
806 inexpr-statement -- The statement is inside an expression. | |
807 inexpr-class -- The class is inside an expression. Used e.g. for | |
808 Java anonymous classes." | |
809 :type | |
810 `(set :format "%{%t%}: | |
811 Override style setting | |
812 | Syntax Offset | |
813 %v" | |
814 ,@(mapcar | |
815 (lambda (elt) | |
816 `(cons :format "%v" | |
817 :value ,elt | |
818 (c-const-symbol :format "%v: " | |
819 :size 25) | |
820 (sexp :format "%v" | |
821 :validate | |
822 (lambda (widget) | |
823 (unless (c-valid-offset (widget-value widget)) | |
824 (widget-put widget :error "Invalid offset") | |
825 widget))))) | |
826 (get 'c-offsets-alist 'c-stylevar-fallback))) | |
18720 | 827 :group 'c) |
828 | |
829 (defcustom c-style-variables-are-local-p nil | |
830 "*Whether style variables should be buffer local by default. | |
831 If non-nil, then all indentation style related variables will be made | |
832 buffer local by default. If nil, they will remain global. Variables | |
833 are made buffer local when this file is loaded, and once buffer | |
834 localized, they cannot be made global again. | |
835 | |
836 The list of variables to buffer localize are: | |
837 c-offsets-alist | |
838 c-basic-offset | |
839 c-comment-only-line-offset | |
26817 | 840 c-block-comment-prefix |
841 c-comment-prefix-regexp | |
18720 | 842 c-cleanup-list |
843 c-hanging-braces-alist | |
844 c-hanging-colons-alist | |
26817 | 845 c-hanging-semi&comma-criteria |
18720 | 846 c-backslash-column |
847 c-label-minimum-indentation | |
848 c-special-indent-hook | |
849 c-indentation-style" | |
850 :type 'boolean | |
851 :group 'c) | |
852 | |
853 (defcustom c-mode-hook nil | |
854 "*Hook called by `c-mode'." | |
26817 | 855 :type 'hook |
18720 | 856 :group 'c) |
857 | |
858 (defcustom c++-mode-hook nil | |
859 "*Hook called by `c++-mode'." | |
860 :type 'hook | |
861 :group 'c) | |
862 | |
863 (defcustom objc-mode-hook nil | |
864 "*Hook called by `objc-mode'." | |
865 :type 'hook | |
866 :group 'c) | |
867 | |
868 (defcustom java-mode-hook nil | |
869 "*Hook called by `java-mode'." | |
870 :type 'hook | |
871 :group 'c) | |
872 | |
19255
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
873 (defcustom idl-mode-hook nil |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
874 "*Hook called by `idl-mode'." |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
875 :type 'hook |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
876 :group 'c) |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
877 |
26817 | 878 (defcustom pike-mode-hook nil |
879 "*Hook called by `pike-mode'." | |
880 :type 'hook | |
881 :group 'c) | |
882 | |
18720 | 883 (defcustom c-mode-common-hook nil |
884 "*Hook called by all CC Mode modes for common initializations." | |
885 :type '(hook :format "%{CC Mode Common Hook%}:\n%v") | |
886 :group 'c) | |
887 | |
19255
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
888 (defcustom c-initialization-hook nil |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
889 "*Hook called when the CC Mode package gets initialized. |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
890 This hook is only run once per Emacs session and can be used as a |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
891 `load-hook' or in place of using `eval-after-load'." |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
892 :type 'hook |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
893 :group 'c) |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
894 |
24282 | 895 (defcustom c-enable-xemacs-performance-kludge-p nil |
20919
9cffecf3b1ca
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20144
diff
changeset
|
896 "*Enables a XEmacs only hack that may improve speed for some coding styles. |
9cffecf3b1ca
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20144
diff
changeset
|
897 For styles that hang top-level opening braces (as is common with JDK |
9cffecf3b1ca
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20144
diff
changeset
|
898 Java coding styles) this can improve performance between 3 and 60 |
9cffecf3b1ca
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20144
diff
changeset
|
899 times for core indentation functions (e.g. `c-parse-state'). For |
9cffecf3b1ca
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20144
diff
changeset
|
900 styles that conform to the Emacs recommendation of putting these |
24282 | 901 braces in column zero, this can degrade performance about as much. |
902 This variable only has effect in XEmacs.") | |
18720 | 903 |
26817 | 904 (defcustom c-old-style-variable-behavior nil |
905 "*Enables the old style variable behavior when non-nil. | |
906 | |
907 Normally the values of the style variables will override the style | |
908 settings specified by the variables `c-default-style' and | |
909 `c-styles-alist'. However, in CC Mode 5.25 and earlier, it was the | |
910 other way around, meaning that changes made to the style variables | |
911 from e.g. Customize would not take effect unless special precautions | |
912 were taken. That was confusing, especially for novice users. | |
913 | |
914 It's believed that despite this change, the new behavior will still | |
915 produce the same results for most old CC Mode configurations, since | |
916 all style variables are per default set in a special non-override | |
917 state. Set this variable only if your configuration has stopped | |
918 working due to this change.") | |
919 | |
920 | |
18720 | 921 |
922 ;; Non-customizable variables, still part of the interface to CC Mode | |
923 (defvar c-file-style nil | |
924 "Variable interface for setting style via File Local Variables. | |
925 In a file's Local Variable section, you can set this variable to a | |
926 string suitable for `c-set-style'. When the file is visited, CC Mode | |
927 will set the style of the file to this value automatically. | |
928 | |
929 Note that file style settings are applied before file offset settings | |
930 as designated in the variable `c-file-offsets'.") | |
26817 | 931 (make-variable-buffer-local 'c-file-style) |
18720 | 932 |
933 (defvar c-file-offsets nil | |
934 "Variable interface for setting offsets via File Local Variables. | |
935 In a file's Local Variable section, you can set this variable to an | |
936 association list similar to the values allowed in `c-offsets-alist'. | |
937 When the file is visited, CC Mode will institute these offset settings | |
938 automatically. | |
939 | |
940 Note that file offset settings are applied after file style settings | |
941 as designated in the variable `c-file-style'.") | |
26817 | 942 (make-variable-buffer-local 'c-file-offsets) |
18720 | 943 |
944 (defvar c-syntactic-context nil | |
945 "Variable containing syntactic analysis list during indentation.") | |
946 | |
26817 | 947 (defvar c-indentation-style nil |
948 "Name of the currently installed style.") | |
18720 | 949 |
19298
4a99e63dc4a9
(c-buffer-is-cc-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19255
diff
changeset
|
950 |
18720 | 951 |
21105
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
952 ;; Figure out what features this Emacs has |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
953 ;;;###autoload |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
954 (defconst c-emacs-features |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
955 (let ((infodock-p (boundp 'infodock-version)) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
956 (comments |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
957 ;; XEmacs 19 and beyond use 8-bit modify-syntax-entry flags. |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
958 ;; Emacs 19 uses a 1-bit flag. We will have to set up our |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
959 ;; syntax tables differently to handle this. |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
960 (let ((table (copy-syntax-table)) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
961 entry) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
962 (modify-syntax-entry ?a ". 12345678" table) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
963 (cond |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
964 ;; XEmacs 19, and beyond Emacs 19.34 |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
965 ((arrayp table) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
966 (setq entry (aref table ?a)) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
967 ;; In Emacs, table entries are cons cells |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
968 (if (consp entry) (setq entry (car entry)))) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
969 ;; XEmacs 20 |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
970 ((fboundp 'get-char-table) (setq entry (get-char-table ?a table))) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
971 ;; before and including Emacs 19.34 |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
972 ((and (fboundp 'char-table-p) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
973 (char-table-p table)) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
974 (setq entry (car (char-table-range table [?a])))) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
975 ;; incompatible |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
976 (t (error "CC Mode is incompatible with this version of Emacs"))) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
977 (if (= (logand (lsh entry -16) 255) 255) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
978 '8-bit |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
979 '1-bit)))) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
980 (if infodock-p |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
981 (list comments 'infodock) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
982 (list comments))) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
983 "A list of features extant in the Emacs you are using. |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
984 There are many flavors of Emacs out there, each with different |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
985 features supporting those needed by CC Mode. Here's the current |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
986 supported list, along with the values for this variable: |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
987 |
26817 | 988 XEmacs 19, 20, 21: (8-bit) |
989 Emacs 19, 20: (1-bit) | |
21105
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
990 |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
991 Infodock (based on XEmacs) has an additional symbol on this list: |
21111
dad4e4facdc0
(c-emacs-features): Var moved from cc-defs.el.
Richard M. Stallman <rms@gnu.org>
parents:
21105
diff
changeset
|
992 `infodock'.") |
21105
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
993 |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
994 |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
995 |
18720 | 996 (provide 'cc-vars) |
997 ;;; cc-vars.el ends here |