(c-make-styles-buffer-local): Take an optional argument which switches
[bpt/emacs.git] / lisp / progmodes / cc-vars.el
CommitLineData
785eecbb
RS
1;;; cc-vars.el --- user customization variables for CC Mode
2
3;; Copyright (C) 1985,87,92,93,94,95,96,97 Free Software Foundation, Inc.
4
5;; Authors: 1992-1997 Barry A. Warsaw
6;; 1987 Dave Detlefs and Stewart Clamen
7;; 1985 Richard M. Stallman
8;; Maintainer: cc-mode-help@python.org
9;; Created: 22-Apr-1997 (split from cc-mode.el)
541aeedf 10;; Version: See cc-mode.el
785eecbb
RS
11;; Keywords: c languages oop
12
13;; This file is part of GNU Emacs.
14
15;; GNU Emacs is free software; you can redistribute it and/or modify
16;; it under the terms of the GNU General Public License as published by
17;; the Free Software Foundation; either version 2, or (at your option)
18;; any later version.
19
20;; GNU Emacs is distributed in the hope that it will be useful,
21;; but WITHOUT ANY WARRANTY; without even the implied warranty of
22;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23;; GNU General Public License for more details.
24
25;; You should have received a copy of the GNU General Public License
26;; along with GNU Emacs; see the file COPYING. If not, write to the
27;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
28;; Boston, MA 02111-1307, USA.
29
30(require 'custom)
31
32\f
33(defcustom c-strict-syntax-p nil
34 "*If non-nil, all syntactic symbols must be found in `c-offsets-alist'.
35If the syntactic symbol for a particular line does not match a symbol
36in the offsets alist, an error is generated, otherwise no error is
37reported and the syntactic symbol is ignored."
38 :type 'boolean
39 :group 'c)
40
41(defcustom c-echo-syntactic-information-p nil
42 "*If non-nil, syntactic info is echoed when the line is indented."
43 :type 'boolean
44 :group 'c)
45
46(defcustom c-basic-offset 4
47 "*Amount of basic offset used by + and - symbols in `c-offsets-alist'."
48 :type 'integer
49 :group 'c)
50
51(defcustom c-tab-always-indent t
52 "*Controls the operation of the TAB key.
53If t, hitting TAB always just indents the current line. If nil,
54hitting TAB indents the current line if point is at the left margin or
55in the line's indentation, otherwise it insert a `real' tab character
56\(see note\). If other than nil or t, then tab is inserted only
57within literals -- defined as comments and strings -- and inside
58preprocessor directives, but line is always reindented.
59
60Note: The value of `indent-tabs-mode' will determine whether a real
61tab character will be inserted, or the equivalent number of space.
62When inserting a tab, actually the function stored in the variable
63`c-insert-tab-function' is called.
64
65Note: indentation of lines containing only comments is also controlled
66by the `c-comment-only-line-offset' variable."
67 :type '(radio
68 :extra-offset 8
69 :format "%{C Tab Always Indent%}:\n The TAB key:\n%v"
70 (const :tag "always indents, never inserts TAB" t)
71 (const :tag "indents in left margin, otherwise inserts TAB" nil)
72 (const :tag "inserts TAB in literals, otherwise indent" other))
73 :group 'c)
74
75(defcustom c-insert-tab-function 'insert-tab
76 "*Function used when inserting a tab for \\[TAB].
77Only used when `c-tab-always-indent' indicates a `real' tab character
78should be inserted. Value must be a function taking no arguments."
79 :type 'function
80 :group 'c)
81
82(defcustom c-comment-only-line-offset 0
83 "*Extra offset for line which contains only the start of a comment.
84Can contain an integer or a cons cell of the form:
85
86 (NON-ANCHORED-OFFSET . ANCHORED-OFFSET)
87
88Where NON-ANCHORED-OFFSET is the amount of offset given to
89non-column-zero anchored comment-only lines, and ANCHORED-OFFSET is
90the amount of offset to give column-zero anchored comment-only lines.
91Just an integer as value is equivalent to (<val> . -1000)."
92 :type '(choice (integer :tag "Non-anchored offset")
93 (cons :tag "Non-anchored & anchored offset"
94 :value (0 . 0)
95 :extra-offset 8
96 (integer :tag "Non-anchored offset")
97 (integer :tag "Anchored offset")))
98 :group 'c)
99
100(defcustom c-indent-comments-syntactically-p nil
101 "*Specifies how comment-only lines should be indented.
102When this variable is non-nil, comment-only lines are indented
103according to syntactic analysis via `c-offsets-alist', even when
104\\[indent-for-comment] is used."
105 :type 'boolean
106 :group 'c)
107
d278ad4f
RS
108(defcustom c-comment-continuation-stars "* "
109 "*Specifies the leader of continued block comments.
110You should set this variable to the literal string that gets inserted
111at the front of continued block style comment lines. This should
112either be the empty string, or some number of stars followed by a
113single space. Note that for line style comments, this variable is not
114used."
115 :type '(choice (const :tag "Use old semantics" nil)
116 string)
117 :group 'c)
118
785eecbb
RS
119(defcustom c-cleanup-list '(scope-operator)
120 "*List of various C/C++/ObjC constructs to \"clean up\".
121These clean ups only take place when the auto-newline feature is
122turned on, as evidenced by the `/a' or `/ah' appearing next to the
123mode name. Valid symbols are:
124
125 brace-else-brace -- cleans up `} else {' constructs by placing entire
126 construct on a single line. This clean up
127 only takes place when there is nothing but
128 white space between the braces and the `else'.
129 Clean up occurs when the open-brace after the
130 `else' is typed.
131 brace-elseif-brace -- similar to brace-else-brace, but cleans up
132 `} else if {' constructs.
133 empty-defun-braces -- cleans up empty defun braces by placing the
134 braces on the same line. Clean up occurs when
135 the defun closing brace is typed.
136 defun-close-semi -- cleans up the terminating semi-colon on defuns
137 by placing the semi-colon on the same line as
138 the closing brace. Clean up occurs when the
139 semi-colon is typed.
140 list-close-comma -- cleans up commas following braces in array
141 and aggregate initializers. Clean up occurs
142 when the comma is typed.
143 scope-operator -- cleans up double colons which may designate
144 a C++ scope operator split across multiple
145 lines. Note that certain C++ constructs can
146 generate ambiguous situations. This clean up
147 only takes place when there is nothing but
148 whitespace between colons. Clean up occurs
149 when the second colon is typed."
150 :type '(set
151 :extra-offset 8
152 (const :tag "Put `} else {' on one line" brace-else-brace)
153 (const :tag "Put `} else if {' on one line" brace-elseif-brace)
154 (const :tag "Put empty defun braces on one line" empty-defun-braces)
155 (const :tag "Put `},' in aggregates on one line" list-close-comma)
156 (const :tag "Put C++ style `::' on one line" scope-operator))
157 :group 'c)
158
159(defcustom c-hanging-braces-alist '((brace-list-open)
160 (substatement-open after)
161 (block-close . c-snug-do-while)
162 (extern-lang-open after)
163 )
164 "*Controls the insertion of newlines before and after braces.
165This variable contains an association list with elements of the
166following form: (SYNTACTIC-SYMBOL . ACTION).
167
168When a brace (either opening or closing) is inserted, the syntactic
169context it defines is looked up in this list, and if found, the
170associated ACTION is used to determine where newlines are inserted.
171If the context is not found, the default is to insert a newline both
172before and after the brace.
173
174SYNTACTIC-SYMBOL can be any of: defun-open, defun-close, class-open,
175class-close, inline-open, inline-close, block-open, block-close,
176substatement-open, statement-case-open, extern-lang-open,
177extern-lang-close, brace-list-open, brace-list-close,
178brace-list-intro, or brace-list-entry. See `c-offsets-alist' for
179details.
180
181ACTION can be either a function symbol or a list containing any
182combination of the symbols `before' or `after'. If the list is empty,
183no newlines are inserted either before or after the brace.
184
185When ACTION is a function symbol, the function is called with a two
186arguments: the syntactic symbol for the brace and the buffer position
187at which the brace was inserted. The function must return a list as
188described in the preceding paragraph. Note that during the call to
189the function, the variable `c-syntactic-context' is set to the entire
190syntactic context for the brace line."
191 :type '(repeat
192 (cons :format "%v"
193 (choice :tag "Syntax"
194 (const defun-open) (const defun-close)
195 (const class-open) (const class-close)
196 (const inline-open) (const inline-close)
197 (const block-open) (const block-close)
198 (const substatement-open) (const statement-case-open)
199 (const extern-lang-open) (const extern-lang-close)
200 (const brace-list-open) (const brace-list-close)
201 (const brace-list-intro) (const brace-list-entry))
202 (choice :tag "Action"
203 (set :format "Insert a newline %v"
204 :extra-offset 38
205 (const :tag "before brace" before)
206 (const :tag "after brace" after))
207 (function :format "Run function %v" :value c-)
208 )))
209 :group 'c)
210
211(defcustom c-hanging-colons-alist nil
212 "*Controls the insertion of newlines before and after certain colons.
213This variable contains an association list with elements of the
214following form: (SYNTACTIC-SYMBOL . ACTION).
215
216SYNTACTIC-SYMBOL can be any of: case-label, label, access-label,
217member-init-intro, or inher-intro.
218
219See the variable `c-hanging-braces-alist' for the semantics of this
220variable. Note however that making ACTION a function symbol is
221currently not supported for this variable."
222 :type '(repeat
223 (cons :format "%v"
224 (choice :tag "Syntax"
225 (const case-label) (const label) (const access-label)
226 (const member-init-intro) (const inher-intro))
227 (set :tag "Action"
228 :format "%t: %v"
229 :extra-offset 8
230 (const before) (const after))))
231 :group 'c)
232
233(defcustom c-hanging-semi&comma-criteria '(c-semi&comma-inside-parenlist)
234 "*List of functions that decide whether to insert a newline or not.
235The functions in this list are called, in order, whenever the
236auto-newline minor mode is activated (as evidenced by a `/a' or `/ah'
237string in the mode line), and a semicolon or comma is typed (see
238`c-electric-semi&comma'). Each function in this list is called with
239no arguments, and should return one of the following values:
240
241 nil -- no determination made, continue checking
242 'stop -- do not insert a newline, and stop checking
243 (anything else) -- insert a newline, and stop checking
244
245If every function in the list is called with no determination made,
246then no newline is inserted."
247 :type '(repeat function)
248 :group 'c)
249
250(defcustom c-hanging-comment-ender-p t
251 "*Controls what \\[fill-paragraph] does to C block comment enders.
252When set to nil, C block comment enders are left on their own line.
253When set to t, block comment enders will be placed at the end of the
254previous line (i.e. they `hang' on that line)."
255 :type 'boolean
256 :group 'c)
257
258(defcustom c-hanging-comment-starter-p t
259 "*Controls what \\[fill-paragraph] does to C block comment starters.
260When set to nil, C block comment starters are left on their own line.
261When set to t, text that follows a block comment starter will be
262placed on the same line as the block comment starter (i.e. the text
263`hangs' on that line)."
264 :type 'boolean
265 :group 'c)
266
267(defcustom c-backslash-column 48
268 "*Column to insert backslashes when macroizing a region."
269 :type 'integer
270 :group 'c)
271
272(defcustom c-special-indent-hook nil
273 "*Hook for user defined special indentation adjustments.
274This hook gets called after a line is indented by the mode."
275 :type 'hook
276 :group 'c)
277
278(defcustom c-backspace-function 'backward-delete-char-untabify
279 "*Function called by `c-electric-backspace' when deleting backwards."
280 :type 'function
281 :group 'c)
282
283(defcustom c-delete-function 'delete-char
284 "*Function called by `c-electric-delete' when deleting forwards."
285 :type 'function
286 :group 'c)
287
288(defcustom c-electric-pound-behavior nil
289 "*List of behaviors for electric pound insertion.
290Only currently supported behavior is `alignleft'."
291 :type '(set :extra-offset 8 (const alignleft))
292 :group 'c)
293
294(defcustom c-label-minimum-indentation 1
295 "*Minimum indentation for lines inside of top-level constructs.
296This variable typically only affects code using the `gnu' style, which
297mandates a minimum of one space in front of every line inside
298top-level constructs. Specifically, the function
299`c-gnu-impose-minimum' on your `c-special-indent-hook' is what
300enforces this."
301 :type 'integer
302 :group 'c)
303
304(defcustom c-progress-interval 5
305 "*Interval used to update progress status during long re-indentation.
306If a number, percentage complete gets updated after each interval of
541aeedf
KH
307that many seconds. To inhibit all messages during indentation, set
308this variable to nil."
785eecbb
RS
309 :type 'integer
310 :group 'c)
311
312(defcustom c-site-default-style "gnu"
313 "Default style for your site.
314To change the default style at your site, you can set this variable to
315any style defined in `c-style-alist'. However, if CC Mode is usually
316loaded into your Emacs at compile time, you will need to set this
317variable in the `site-init.el' file before CC Mode is loaded, then
318re-dump Emacs."
319 :type 'string
320 :group 'c)
321
322(defcustom c-style-variables-are-local-p nil
323 "*Whether style variables should be buffer local by default.
324If non-nil, then all indentation style related variables will be made
325buffer local by default. If nil, they will remain global. Variables
326are made buffer local when this file is loaded, and once buffer
327localized, they cannot be made global again.
328
329The list of variables to buffer localize are:
330 c-offsets-alist
331 c-basic-offset
332 c-file-style
333 c-file-offsets
334 c-comment-only-line-offset
335 c-cleanup-list
336 c-hanging-braces-alist
337 c-hanging-colons-alist
338 c-hanging-comment-starter-p
339 c-hanging-comment-ender-p
340 c-backslash-column
341 c-label-minimum-indentation
342 c-special-indent-hook
343 c-indentation-style"
344 :type 'boolean
345 :group 'c)
346
347(defcustom c-mode-hook nil
348 "*Hook called by `c-mode'."
349 :type '(hook :format "%{C Mode Hook%}:\n%v")
350 :group 'c)
351
352(defcustom c++-mode-hook nil
353 "*Hook called by `c++-mode'."
354 :type 'hook
355 :group 'c)
356
357(defcustom objc-mode-hook nil
358 "*Hook called by `objc-mode'."
359 :type 'hook
360 :group 'c)
361
362(defcustom java-mode-hook nil
363 "*Hook called by `java-mode'."
364 :type 'hook
365 :group 'c)
366
253011b3
RS
367(defcustom idl-mode-hook nil
368 "*Hook called by `idl-mode'."
369 :type 'hook
370 :group 'c)
371
785eecbb
RS
372(defcustom c-mode-common-hook nil
373 "*Hook called by all CC Mode modes for common initializations."
374 :type '(hook :format "%{CC Mode Common Hook%}:\n%v")
375 :group 'c)
376
253011b3
RS
377(defcustom c-initialization-hook nil
378 "*Hook called when the CC Mode package gets initialized.
379This hook is only run once per Emacs session and can be used as a
380`load-hook' or in place of using `eval-after-load'."
381 :type 'hook
382 :group 'c)
383
785eecbb
RS
384
385\f
386;; Non-customizable variables, still part of the interface to CC Mode
387(defvar c-file-style nil
388 "Variable interface for setting style via File Local Variables.
389In a file's Local Variable section, you can set this variable to a
390string suitable for `c-set-style'. When the file is visited, CC Mode
391will set the style of the file to this value automatically.
392
393Note that file style settings are applied before file offset settings
394as designated in the variable `c-file-offsets'.")
395
396(defvar c-file-offsets nil
397 "Variable interface for setting offsets via File Local Variables.
398In a file's Local Variable section, you can set this variable to an
399association list similar to the values allowed in `c-offsets-alist'.
400When the file is visited, CC Mode will institute these offset settings
401automatically.
402
403Note that file offset settings are applied after file style settings
404as designated in the variable `c-file-style'.")
405
406(defvar c-syntactic-context nil
407 "Variable containing syntactic analysis list during indentation.")
408
409(defvar c-indentation-style c-site-default-style
410 "Name of style installed in the current buffer.")
411
d278ad4f 412
785eecbb
RS
413\f
414(provide 'cc-vars)
415;;; cc-vars.el ends here