Mercurial > emacs
annotate lisp/progmodes/cc-vars.el @ 25897:9475708c45eb
#
author | Dave Love <fx@gnu.org> |
---|---|
date | Thu, 07 Oct 1999 13:06:22 +0000 |
parents | 5b0864259a4b |
children | 03befb219d03 |
rev | line source |
---|---|
18720 | 1 ;;; cc-vars.el --- user customization variables for CC Mode |
2 | |
20919
9cffecf3b1ca
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20144
diff
changeset
|
3 ;; Copyright (C) 1985,87,92,93,94,95,96,97,98 Free Software Foundation, Inc. |
18720 | 4 |
24282 | 5 ;; Authors: 1998 Barry A. Warsaw and Martin Stjernholm |
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 |
32 (require 'cc-defs)) | |
33 | |
18720 | 34 (require 'custom) |
35 | |
36 | |
37 (defcustom c-strict-syntax-p nil | |
38 "*If non-nil, all syntactic symbols must be found in `c-offsets-alist'. | |
39 If the syntactic symbol for a particular line does not match a symbol | |
24282 | 40 in the offsets alist, or if no non-nil offset value can be determined |
41 for a symbol, an error is generated, otherwise no error is reported | |
42 and the syntactic symbol is ignored." | |
18720 | 43 :type 'boolean |
44 :group 'c) | |
45 | |
46 (defcustom c-echo-syntactic-information-p nil | |
47 "*If non-nil, syntactic info is echoed when the line is indented." | |
48 :type 'boolean | |
49 :group 'c) | |
50 | |
51 (defcustom c-basic-offset 4 | |
52 "*Amount of basic offset used by + and - symbols in `c-offsets-alist'." | |
53 :type 'integer | |
54 :group 'c) | |
55 | |
24282 | 56 ;; This widget will show up in newer versions of the Custom library |
57 (or (get 'other 'widget-type) | |
58 (define-widget 'other 'sexp | |
59 "Matches everything, but doesn't let the user edit the value. | |
60 Useful as last item in a `choice' widget." | |
61 :tag "Other" | |
62 :format "%t%n" | |
63 :value 'other)) | |
64 | |
18720 | 65 (defcustom c-tab-always-indent t |
66 "*Controls the operation of the TAB key. | |
67 If t, hitting TAB always just indents the current line. If nil, | |
68 hitting TAB indents the current line if point is at the left margin or | |
69 in the line's indentation, otherwise it insert a `real' tab character | |
24282 | 70 \(see note\). If the symbol `other', then tab is inserted only within |
71 literals -- defined as comments and strings -- and inside preprocessor | |
72 directives, but the line is always reindented. | |
18720 | 73 |
74 Note: The value of `indent-tabs-mode' will determine whether a real | |
75 tab character will be inserted, or the equivalent number of space. | |
76 When inserting a tab, actually the function stored in the variable | |
77 `c-insert-tab-function' is called. | |
78 | |
79 Note: indentation of lines containing only comments is also controlled | |
80 by the `c-comment-only-line-offset' variable." | |
81 :type '(radio | |
82 :extra-offset 8 | |
83 :format "%{C Tab Always Indent%}:\n The TAB key:\n%v" | |
84 (const :tag "always indents, never inserts TAB" t) | |
85 (const :tag "indents in left margin, otherwise inserts TAB" nil) | |
24282 | 86 (other :tag "inserts TAB in literals, otherwise indent" other)) |
18720 | 87 :group 'c) |
88 | |
89 (defcustom c-insert-tab-function 'insert-tab | |
90 "*Function used when inserting a tab for \\[TAB]. | |
91 Only used when `c-tab-always-indent' indicates a `real' tab character | |
92 should be inserted. Value must be a function taking no arguments." | |
93 :type 'function | |
94 :group 'c) | |
95 | |
96 (defcustom c-comment-only-line-offset 0 | |
97 "*Extra offset for line which contains only the start of a comment. | |
98 Can contain an integer or a cons cell of the form: | |
99 | |
100 (NON-ANCHORED-OFFSET . ANCHORED-OFFSET) | |
101 | |
102 Where NON-ANCHORED-OFFSET is the amount of offset given to | |
103 non-column-zero anchored comment-only lines, and ANCHORED-OFFSET is | |
104 the amount of offset to give column-zero anchored comment-only lines. | |
105 Just an integer as value is equivalent to (<val> . -1000)." | |
106 :type '(choice (integer :tag "Non-anchored offset") | |
107 (cons :tag "Non-anchored & anchored offset" | |
108 :value (0 . 0) | |
109 :extra-offset 8 | |
110 (integer :tag "Non-anchored offset") | |
111 (integer :tag "Anchored offset"))) | |
112 :group 'c) | |
113 | |
114 (defcustom c-indent-comments-syntactically-p nil | |
115 "*Specifies how comment-only lines should be indented. | |
116 When this variable is non-nil, comment-only lines are indented | |
117 according to syntactic analysis via `c-offsets-alist', even when | |
118 \\[indent-for-comment] is used." | |
119 :type 'boolean | |
120 :group 'c) | |
121 | |
19298
4a99e63dc4a9
(c-buffer-is-cc-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19255
diff
changeset
|
122 (defcustom c-comment-continuation-stars "* " |
4a99e63dc4a9
(c-buffer-is-cc-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19255
diff
changeset
|
123 "*Specifies the leader of continued block comments. |
4a99e63dc4a9
(c-buffer-is-cc-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19255
diff
changeset
|
124 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
|
125 at the front of continued block style comment lines. This should |
4a99e63dc4a9
(c-buffer-is-cc-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19255
diff
changeset
|
126 either be the empty string, or some number of stars followed by a |
4a99e63dc4a9
(c-buffer-is-cc-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19255
diff
changeset
|
127 single space. Note that for line style comments, this variable is not |
4a99e63dc4a9
(c-buffer-is-cc-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19255
diff
changeset
|
128 used." |
4a99e63dc4a9
(c-buffer-is-cc-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19255
diff
changeset
|
129 :type '(choice (const :tag "Use old semantics" nil) |
4a99e63dc4a9
(c-buffer-is-cc-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19255
diff
changeset
|
130 string) |
4a99e63dc4a9
(c-buffer-is-cc-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19255
diff
changeset
|
131 :group 'c) |
4a99e63dc4a9
(c-buffer-is-cc-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19255
diff
changeset
|
132 |
18720 | 133 (defcustom c-cleanup-list '(scope-operator) |
134 "*List of various C/C++/ObjC constructs to \"clean up\". | |
135 These clean ups only take place when the auto-newline feature is | |
136 turned on, as evidenced by the `/a' or `/ah' appearing next to the | |
137 mode name. Valid symbols are: | |
138 | |
139 brace-else-brace -- cleans up `} else {' constructs by placing entire | |
140 construct on a single line. This clean up | |
141 only takes place when there is nothing but | |
142 white space between the braces and the `else'. | |
143 Clean up occurs when the open-brace after the | |
144 `else' is typed. | |
145 brace-elseif-brace -- similar to brace-else-brace, but cleans up | |
24282 | 146 `} else if (...) {' constructs. Clean up occurs |
147 both after the open parenthesis and after the | |
148 open brace. | |
149 brace-catch-brace -- similar to brace-elseif-brace, but cleans up | |
150 `} catch (...) {' constructs. | |
18720 | 151 empty-defun-braces -- cleans up empty defun braces by placing the |
152 braces on the same line. Clean up occurs when | |
153 the defun closing brace is typed. | |
154 defun-close-semi -- cleans up the terminating semi-colon on defuns | |
155 by placing the semi-colon on the same line as | |
156 the closing brace. Clean up occurs when the | |
157 semi-colon is typed. | |
158 list-close-comma -- cleans up commas following braces in array | |
159 and aggregate initializers. Clean up occurs | |
160 when the comma is typed. | |
161 scope-operator -- cleans up double colons which may designate | |
162 a C++ scope operator split across multiple | |
163 lines. Note that certain C++ constructs can | |
164 generate ambiguous situations. This clean up | |
165 only takes place when there is nothing but | |
166 whitespace between colons. Clean up occurs | |
167 when the second colon is typed." | |
168 :type '(set | |
169 :extra-offset 8 | |
170 (const :tag "Put `} else {' on one line" brace-else-brace) | |
24282 | 171 (const :tag "Put `} else if (...) {' on one line" brace-elseif-brace) |
172 (const :tag "Put `} catch (...) {' on one line" brace-catch-brace) | |
18720 | 173 (const :tag "Put empty defun braces on one line" empty-defun-braces) |
174 (const :tag "Put `},' in aggregates on one line" list-close-comma) | |
175 (const :tag "Put C++ style `::' on one line" scope-operator)) | |
176 :group 'c) | |
177 | |
178 (defcustom c-hanging-braces-alist '((brace-list-open) | |
24282 | 179 (brace-entry-open) |
18720 | 180 (substatement-open after) |
181 (block-close . c-snug-do-while) | |
182 (extern-lang-open after) | |
24282 | 183 (inexpr-class-open after) |
184 (inexpr-class-close before) | |
18720 | 185 ) |
186 "*Controls the insertion of newlines before and after braces. | |
187 This variable contains an association list with elements of the | |
188 following form: (SYNTACTIC-SYMBOL . ACTION). | |
189 | |
190 When a brace (either opening or closing) is inserted, the syntactic | |
191 context it defines is looked up in this list, and if found, the | |
192 associated ACTION is used to determine where newlines are inserted. | |
193 If the context is not found, the default is to insert a newline both | |
194 before and after the brace. | |
195 | |
196 SYNTACTIC-SYMBOL can be any of: defun-open, defun-close, class-open, | |
197 class-close, inline-open, inline-close, block-open, block-close, | |
198 substatement-open, statement-case-open, extern-lang-open, | |
199 extern-lang-close, brace-list-open, brace-list-close, | |
24282 | 200 brace-list-intro, brace-entry-open, inexpr-class-open, or |
201 inexpr-class-close. See `c-offsets-alist' for details, except for | |
202 inexpr-class-open and inexpr-class-close, which doesn't have any | |
203 corresponding symbols there. Those two symbols are used for the | |
204 opening and closing braces, respectively, of anonymous inner classes | |
205 in Java. | |
18720 | 206 |
207 ACTION can be either a function symbol or a list containing any | |
208 combination of the symbols `before' or `after'. If the list is empty, | |
209 no newlines are inserted either before or after the brace. | |
210 | |
211 When ACTION is a function symbol, the function is called with a two | |
212 arguments: the syntactic symbol for the brace and the buffer position | |
213 at which the brace was inserted. The function must return a list as | |
214 described in the preceding paragraph. Note that during the call to | |
215 the function, the variable `c-syntactic-context' is set to the entire | |
216 syntactic context for the brace line." | |
217 :type '(repeat | |
218 (cons :format "%v" | |
219 (choice :tag "Syntax" | |
220 (const defun-open) (const defun-close) | |
221 (const class-open) (const class-close) | |
222 (const inline-open) (const inline-close) | |
223 (const block-open) (const block-close) | |
224 (const substatement-open) (const statement-case-open) | |
225 (const extern-lang-open) (const extern-lang-close) | |
226 (const brace-list-open) (const brace-list-close) | |
24282 | 227 (const brace-list-intro) (const brace-entry-open) |
228 (const inexpr-class-open) (const inexpr-class-close)) | |
18720 | 229 (choice :tag "Action" |
230 (set :format "Insert a newline %v" | |
231 :extra-offset 38 | |
232 (const :tag "before brace" before) | |
233 (const :tag "after brace" after)) | |
234 (function :format "Run function %v" :value c-) | |
235 ))) | |
236 :group 'c) | |
237 | |
238 (defcustom c-hanging-colons-alist nil | |
239 "*Controls the insertion of newlines before and after certain colons. | |
240 This variable contains an association list with elements of the | |
241 following form: (SYNTACTIC-SYMBOL . ACTION). | |
242 | |
243 SYNTACTIC-SYMBOL can be any of: case-label, label, access-label, | |
244 member-init-intro, or inher-intro. | |
245 | |
246 See the variable `c-hanging-braces-alist' for the semantics of this | |
247 variable. Note however that making ACTION a function symbol is | |
248 currently not supported for this variable." | |
249 :type '(repeat | |
250 (cons :format "%v" | |
251 (choice :tag "Syntax" | |
252 (const case-label) (const label) (const access-label) | |
253 (const member-init-intro) (const inher-intro)) | |
254 (set :tag "Action" | |
255 :format "%t: %v" | |
256 :extra-offset 8 | |
257 (const before) (const after)))) | |
258 :group 'c) | |
259 | |
260 (defcustom c-hanging-semi&comma-criteria '(c-semi&comma-inside-parenlist) | |
261 "*List of functions that decide whether to insert a newline or not. | |
262 The functions in this list are called, in order, whenever the | |
263 auto-newline minor mode is activated (as evidenced by a `/a' or `/ah' | |
264 string in the mode line), and a semicolon or comma is typed (see | |
265 `c-electric-semi&comma'). Each function in this list is called with | |
266 no arguments, and should return one of the following values: | |
267 | |
268 nil -- no determination made, continue checking | |
269 'stop -- do not insert a newline, and stop checking | |
270 (anything else) -- insert a newline, and stop checking | |
271 | |
272 If every function in the list is called with no determination made, | |
273 then no newline is inserted." | |
274 :type '(repeat function) | |
275 :group 'c) | |
276 | |
277 (defcustom c-hanging-comment-ender-p t | |
278 "*Controls what \\[fill-paragraph] does to C block comment enders. | |
279 When set to nil, C block comment enders are left on their own line. | |
280 When set to t, block comment enders will be placed at the end of the | |
281 previous line (i.e. they `hang' on that line)." | |
282 :type 'boolean | |
283 :group 'c) | |
284 | |
285 (defcustom c-hanging-comment-starter-p t | |
286 "*Controls what \\[fill-paragraph] does to C block comment starters. | |
287 When set to nil, C block comment starters are left on their own line. | |
288 When set to t, text that follows a block comment starter will be | |
289 placed on the same line as the block comment starter (i.e. the text | |
290 `hangs' on that line)." | |
291 :type 'boolean | |
292 :group 'c) | |
293 | |
294 (defcustom c-backslash-column 48 | |
295 "*Column to insert backslashes when macroizing a region." | |
296 :type 'integer | |
297 :group 'c) | |
298 | |
299 (defcustom c-special-indent-hook nil | |
300 "*Hook for user defined special indentation adjustments. | |
301 This hook gets called after a line is indented by the mode." | |
302 :type 'hook | |
303 :group 'c) | |
304 | |
305 (defcustom c-backspace-function 'backward-delete-char-untabify | |
306 "*Function called by `c-electric-backspace' when deleting backwards." | |
307 :type 'function | |
308 :group 'c) | |
309 | |
310 (defcustom c-delete-function 'delete-char | |
311 "*Function called by `c-electric-delete' when deleting forwards." | |
312 :type 'function | |
313 :group 'c) | |
314 | |
315 (defcustom c-electric-pound-behavior nil | |
316 "*List of behaviors for electric pound insertion. | |
317 Only currently supported behavior is `alignleft'." | |
318 :type '(set :extra-offset 8 (const alignleft)) | |
319 :group 'c) | |
320 | |
321 (defcustom c-label-minimum-indentation 1 | |
322 "*Minimum indentation for lines inside of top-level constructs. | |
323 This variable typically only affects code using the `gnu' style, which | |
324 mandates a minimum of one space in front of every line inside | |
325 top-level constructs. Specifically, the function | |
326 `c-gnu-impose-minimum' on your `c-special-indent-hook' is what | |
327 enforces this." | |
328 :type 'integer | |
329 :group 'c) | |
330 | |
331 (defcustom c-progress-interval 5 | |
332 "*Interval used to update progress status during long re-indentation. | |
333 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
|
334 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
|
335 this variable to nil." |
18720 | 336 :type 'integer |
337 :group 'c) | |
338 | |
20919
9cffecf3b1ca
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20144
diff
changeset
|
339 (defcustom c-default-style "gnu" |
24282 | 340 "*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
|
341 |
9cffecf3b1ca
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20144
diff
changeset
|
342 The value of this variable can be any style defined in |
24282 | 343 `c-style-alist', including styles you add. The value can also be an |
344 association list of major mode symbols to style names. | |
345 | |
346 When the value is a string, all CC Mode major modes will install this | |
347 style by default, except `java-mode', which always installs the | |
348 \"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
|
349 |
24282 | 350 When the value is an alist, the named style is installed. If the |
351 major mode is not listed in the alist, then the symbol `other' is | |
352 looked up in the alist, and if found, the associated style is used. | |
353 If `other' is not found in the alist, then \"gnu\" style is used. | |
354 | |
355 Note that if you set any CC Mode variables in the top-level of your | |
356 .emacs file (i.e. *not* in a hook), these get incorporated into the | |
357 `user' style, so you would need to add: | |
358 | |
359 (setq c-default-style '((other . \"user\"))) | |
20919
9cffecf3b1ca
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20144
diff
changeset
|
360 |
9cffecf3b1ca
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20144
diff
changeset
|
361 to see your customizations. This is also true if you use the Custom |
24282 | 362 interface -- be sure to set the default style to `user'. |
363 | |
364 Finally, the default style gets installed before your mode hooks run, | |
365 so you can always override the use of `c-default-style' by making | |
366 calls to `c-set-style' in the appropriate mode hook." | |
367 :type '(choice string | |
368 (repeat :tag "" :menu-tag "Major mode list" | |
369 (cons :tag "" | |
370 (choice :tag "Mode" | |
371 (const c-mode) (const c++-mode) (const objc-mode) | |
372 (const java-mode) (const idl-mode) | |
373 (const pike-mode) (const other)) | |
374 (string :tag "Style") | |
375 ))) | |
18720 | 376 :group 'c) |
377 | |
378 (defcustom c-style-variables-are-local-p nil | |
379 "*Whether style variables should be buffer local by default. | |
380 If non-nil, then all indentation style related variables will be made | |
381 buffer local by default. If nil, they will remain global. Variables | |
382 are made buffer local when this file is loaded, and once buffer | |
383 localized, they cannot be made global again. | |
384 | |
385 The list of variables to buffer localize are: | |
386 c-offsets-alist | |
387 c-basic-offset | |
388 c-file-style | |
389 c-file-offsets | |
390 c-comment-only-line-offset | |
391 c-cleanup-list | |
392 c-hanging-braces-alist | |
393 c-hanging-colons-alist | |
394 c-hanging-comment-starter-p | |
395 c-hanging-comment-ender-p | |
396 c-backslash-column | |
397 c-label-minimum-indentation | |
398 c-special-indent-hook | |
399 c-indentation-style" | |
400 :type 'boolean | |
401 :group 'c) | |
402 | |
403 (defcustom c-mode-hook nil | |
404 "*Hook called by `c-mode'." | |
405 :type '(hook :format "%{C Mode Hook%}:\n%v") | |
406 :group 'c) | |
407 | |
408 (defcustom c++-mode-hook nil | |
409 "*Hook called by `c++-mode'." | |
410 :type 'hook | |
411 :group 'c) | |
412 | |
413 (defcustom objc-mode-hook nil | |
414 "*Hook called by `objc-mode'." | |
415 :type 'hook | |
416 :group 'c) | |
417 | |
418 (defcustom java-mode-hook nil | |
419 "*Hook called by `java-mode'." | |
420 :type 'hook | |
421 :group 'c) | |
422 | |
19255
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
423 (defcustom idl-mode-hook nil |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
424 "*Hook called by `idl-mode'." |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
425 :type 'hook |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
426 :group 'c) |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
427 |
18720 | 428 (defcustom c-mode-common-hook nil |
429 "*Hook called by all CC Mode modes for common initializations." | |
430 :type '(hook :format "%{CC Mode Common Hook%}:\n%v") | |
431 :group 'c) | |
432 | |
19255
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
433 (defcustom c-initialization-hook nil |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
434 "*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
|
435 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
|
436 `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
|
437 :type 'hook |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
438 :group 'c) |
40a9475f22ea
(idl-mode-hook): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18848
diff
changeset
|
439 |
24282 | 440 (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
|
441 "*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
|
442 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
|
443 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
|
444 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
|
445 styles that conform to the Emacs recommendation of putting these |
24282 | 446 braces in column zero, this can degrade performance about as much. |
447 This variable only has effect in XEmacs.") | |
18720 | 448 |
449 | |
450 ;; Non-customizable variables, still part of the interface to CC Mode | |
451 (defvar c-file-style nil | |
452 "Variable interface for setting style via File Local Variables. | |
453 In a file's Local Variable section, you can set this variable to a | |
454 string suitable for `c-set-style'. When the file is visited, CC Mode | |
455 will set the style of the file to this value automatically. | |
456 | |
457 Note that file style settings are applied before file offset settings | |
458 as designated in the variable `c-file-offsets'.") | |
459 | |
460 (defvar c-file-offsets nil | |
461 "Variable interface for setting offsets via File Local Variables. | |
462 In a file's Local Variable section, you can set this variable to an | |
463 association list similar to the values allowed in `c-offsets-alist'. | |
464 When the file is visited, CC Mode will institute these offset settings | |
465 automatically. | |
466 | |
467 Note that file offset settings are applied after file style settings | |
468 as designated in the variable `c-file-style'.") | |
469 | |
470 (defvar c-syntactic-context nil | |
471 "Variable containing syntactic analysis list during indentation.") | |
472 | |
20919
9cffecf3b1ca
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20144
diff
changeset
|
473 (defvar c-indentation-style c-default-style |
18720 | 474 "Name of style installed in the current buffer.") |
475 | |
19298
4a99e63dc4a9
(c-buffer-is-cc-mode): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19255
diff
changeset
|
476 |
18720 | 477 |
21105
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
478 ;; 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
|
479 ;;;###autoload |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
480 (defconst c-emacs-features |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
481 (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
|
482 (comments |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
483 ;; 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
|
484 ;; 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
|
485 ;; 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
|
486 (let ((table (copy-syntax-table)) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
487 entry) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
488 (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
|
489 (cond |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
490 ;; 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
|
491 ((arrayp table) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
492 (setq entry (aref table ?a)) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
493 ;; 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
|
494 (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
|
495 ;; XEmacs 20 |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
496 ((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
|
497 ;; 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
|
498 ((and (fboundp 'char-table-p) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
499 (char-table-p table)) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
500 (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
|
501 ;; incompatible |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
502 (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
|
503 (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
|
504 '8-bit |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
505 '1-bit)))) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
506 (if infodock-p |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
507 (list comments 'infodock) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
508 (list comments))) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
509 "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
|
510 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
|
511 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
|
512 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
|
513 |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
514 XEmacs 19: (8-bit) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
515 XEmacs 20: (8-bit) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
516 Emacs 19: (1-bit) |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
517 |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
518 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
|
519 `infodock'.") |
21105
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
520 |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
521 |
b40ae72a5b26
(c-enable-xemacs-performance-kludge-p): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20919
diff
changeset
|
522 |
18720 | 523 (provide 'cc-vars) |
524 ;;; cc-vars.el ends here |