Mercurial > hg > xemacs-beta
diff lisp/cc-mode/cc-vars.el @ 165:5a88923fcbfe r20-3b9
Import from CVS: tag r20-3b9
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:44:42 +0200 |
parents | |
children | 929b76928fce |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/cc-mode/cc-vars.el Mon Aug 13 09:44:42 2007 +0200 @@ -0,0 +1,390 @@ +;;; cc-vars.el --- user customization variables for CC Mode + +;; Copyright (C) 1985,87,92,93,94,95,96,97 Free Software Foundation, Inc. + +;; Authors: 1992-1997 Barry A. Warsaw +;; 1987 Dave Detlefs and Stewart Clamen +;; 1985 Richard M. Stallman +;; Maintainer: cc-mode-help@python.org +;; Created: 22-Apr-1997 (split from cc-mode.el) +;; Version: 5.11 +;; Keywords: c languages oop + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +(require 'custom) + + +(defcustom c-strict-syntax-p nil + "*If non-nil, all syntactic symbols must be found in `c-offsets-alist'. +If the syntactic symbol for a particular line does not match a symbol +in the offsets alist, an error is generated, otherwise no error is +reported and the syntactic symbol is ignored." + :type 'boolean + :group 'c) + +(defcustom c-echo-syntactic-information-p nil + "*If non-nil, syntactic info is echoed when the line is indented." + :type 'boolean + :group 'c) + +(defcustom c-basic-offset 4 + "*Amount of basic offset used by + and - symbols in `c-offsets-alist'." + :type 'integer + :group 'c) + +(defcustom c-tab-always-indent t + "*Controls the operation of the TAB key. +If t, hitting TAB always just indents the current line. If nil, +hitting TAB indents the current line if point is at the left margin or +in the line's indentation, otherwise it insert a `real' tab character +\(see note\). If other than nil or t, then tab is inserted only +within literals -- defined as comments and strings -- and inside +preprocessor directives, but line is always reindented. + +Note: The value of `indent-tabs-mode' will determine whether a real +tab character will be inserted, or the equivalent number of space. +When inserting a tab, actually the function stored in the variable +`c-insert-tab-function' is called. + +Note: indentation of lines containing only comments is also controlled +by the `c-comment-only-line-offset' variable." + :type '(radio + :extra-offset 8 + :format "%{Tab Always Indent%}:\n The TAB key\n%v" + (const :tag "always indents, never inserts TAB" t) + (const :tag "indents in left margin, otherwise inserts TAB" nil) + (const :tag "inserts TAB in literals, otherwise indent" other)) + :group 'c) + +(defcustom c-insert-tab-function 'insert-tab + "*Function used when inserting a tab for \\[TAB]. +Only used when `c-tab-always-indent' indicates a `real' tab character +should be inserted. Value must be a function taking no arguments." + :type 'function + :group 'c) + +(defcustom c-comment-only-line-offset 0 + "*Extra offset for line which contains only the start of a comment. +Can contain an integer or a cons cell of the form: + + (NON-ANCHORED-OFFSET . ANCHORED-OFFSET) + +Where NON-ANCHORED-OFFSET is the amount of offset given to +non-column-zero anchored comment-only lines, and ANCHORED-OFFSET is +the amount of offset to give column-zero anchored comment-only lines. +Just an integer as value is equivalent to (<val> . -1000)." + :type '(choice (integer :tag "Non-anchored offset") + (cons :tag "Non-anchored & anchored offset" + :value (0 . 0) + :extra-offset 8 + (integer :tag "Non-anchored offset") + (integer :tag "Anchored offset"))) + :group 'c) + +(defcustom c-indent-comments-syntactically-p nil + "*Specifies how comment-only lines should be indented. +When this variable is non-nil, comment-only lines are indented +according to syntactic analysis via `c-offsets-alist', even when +\\[indent-for-comment] is used." + :type 'boolean + :group 'c) + +(defcustom c-cleanup-list '(scope-operator) + "*List of various C/C++/ObjC constructs to \"clean up\". +These clean ups only take place when the auto-newline feature is +turned on, as evidenced by the `/a' or `/ah' appearing next to the +mode name. Valid symbols are: + + brace-else-brace -- cleans up `} else {' constructs by placing entire + construct on a single line. This clean up + only takes place when there is nothing but + white space between the braces and the `else'. + Clean up occurs when the open-brace after the + `else' is typed. + brace-elseif-brace -- similar to brace-else-brace, but cleans up + `} else if {' constructs. + empty-defun-braces -- cleans up empty defun braces by placing the + braces on the same line. Clean up occurs when + the defun closing brace is typed. + defun-close-semi -- cleans up the terminating semi-colon on defuns + by placing the semi-colon on the same line as + the closing brace. Clean up occurs when the + semi-colon is typed. + list-close-comma -- cleans up commas following braces in array + and aggregate initializers. Clean up occurs + when the comma is typed. + scope-operator -- cleans up double colons which may designate + a C++ scope operator split across multiple + lines. Note that certain C++ constructs can + generate ambiguous situations. This clean up + only takes place when there is nothing but + whitespace between colons. Clean up occurs + when the second colon is typed." + :type '(set + :extra-offset 8 + (const :tag "Put `} else {' on one line" brace-else-brace) + (const :tag "Put `} else if {' on one line" brace-elseif-brace) + (const :tag "Put empty defun braces on one line" empty-defun-braces) + (const :tag "Put `},' in aggregates on one line" list-close-comma) + (const :tag "Put C++ style `::' on one line" scope-operator)) + :group 'c) + +(defcustom c-hanging-braces-alist '((brace-list-open) + (substatement-open after) + (block-close . c-snug-do-while) + (extern-lang-open after) + ) + "*Controls the insertion of newlines before and after braces. +This variable contains an association list with elements of the +following form: (SYNTACTIC-SYMBOL . ACTION). + +When a brace (either opening or closing) is inserted, the syntactic +context it defines is looked up in this list, and if found, the +associated ACTION is used to determine where newlines are inserted. +If the context is not found, the default is to insert a newline both +before and after the brace. + +SYNTACTIC-SYMBOL can be any of: defun-open, defun-close, class-open, +class-close, inline-open, inline-close, block-open, block-close, +substatement-open, statement-case-open, extern-lang-open, +extern-lang-close, brace-list-open, brace-list-close, +brace-list-intro, or brace-list-entry. See `c-offsets-alist' for +details. + +ACTION can be either a function symbol or a list containing any +combination of the symbols `before' or `after'. If the list is empty, +no newlines are inserted either before or after the brace. + +When ACTION is a function symbol, the function is called with a two +arguments: the syntactic symbol for the brace and the buffer position +at which the brace was inserted. The function must return a list as +described in the preceding paragraph. Note that during the call to +the function, the variable `c-syntactic-context' is set to the entire +syntactic context for the brace line." + :type '(repeat + (cons :format "%v" + (choice :tag "Syntax" + (const defun-open) (const defun-close) + (const class-open) (const class-close) + (const inline-open) (const inline-close) + (const block-open) (const block-close) + (const substatement-open) (const statement-case-open) + (const extern-lang-open) (const extern-lang-close) + (const brace-list-open) (const brace-list-close) + (const brace-list-intro) (const brace-list-entry)) + (choice :tag "Action" + (set :format "%v" + :extra-offset 8 + (const before) (const after)) + (function :format "%v" :value c-) + ))) + :group 'c) + +(defcustom c-hanging-colons-alist nil + "*Controls the insertion of newlines before and after certain colons. +This variable contains an association list with elements of the +following form: (SYNTACTIC-SYMBOL . ACTION). + +SYNTACTIC-SYMBOL can be any of: case-label, label, access-label, +member-init-intro, or inher-intro. + +See the variable `c-hanging-braces-alist' for the semantics of this +variable. Note however that making ACTION a function symbol is +currently not supported for this variable." + :type '(repeat + (cons :format "%v" + (choice :tag "Syntax" + (const case-label) (const label) (const access-label) + (const member-init-intro) (const inher-intro)) + (set :tag "Action" + :format "%t: %v" + :extra-offset 8 + (const before) (const after)))) + :group 'c) + +(defcustom c-hanging-semi&comma-criteria '(c-semi&comma-inside-parenlist) + "*List of functions that decide whether to insert a newline or not. +The functions in this list are called, in order, whenever the +auto-newline minor mode is activated (as evidenced by a `/a' or `/ah' +string in the mode line), and a semicolon or comma is typed (see +`c-electric-semi&comma'). Each function in this list is called with +no arguments, and should return one of the following values: + + nil -- no determination made, continue checking + 'stop -- do not insert a newline, and stop checking + (anything else) -- insert a newline, and stop checking + +If every function in the list is called with no determination made, +then no newline is inserted." + :type '(repeat function) + :group 'c) + +(defcustom c-hanging-comment-ender-p t + "*Controls what \\[fill-paragraph] does to C block comment enders. +When set to nil, C block comment enders are left on their own line. +When set to t, block comment enders will be placed at the end of the +previous line (i.e. they `hang' on that line)." + :type 'boolean + :group 'c) + +(defcustom c-hanging-comment-starter-p t + "*Controls what \\[fill-paragraph] does to C block comment starters. +When set to nil, C block comment starters are left on their own line. +When set to t, text that follows a block comment starter will be +placed on the same line as the block comment starter (i.e. the text +`hangs' on that line)." + :type 'boolean + :group 'c) + +(defcustom c-backslash-column 48 + "*Column to insert backslashes when macroizing a region." + :type 'integer + :group 'c) + +(defcustom c-special-indent-hook nil + "*Hook for user defined special indentation adjustments. +This hook gets called after a line is indented by the mode." + :type 'hook + :group 'c) + +(defcustom c-backspace-function 'backward-delete-char-untabify + "*Function called by `c-electric-backspace' when deleting backwards." + :type 'function + :group 'c) + +(defcustom c-delete-function 'delete-char + "*Function called by `c-electric-delete' when deleting forwards." + :type 'function + :group 'c) + +(defcustom c-electric-pound-behavior nil + "*List of behaviors for electric pound insertion. +Only currently supported behavior is `alignleft'." + :type '(set :extra-offset 8 (const alignleft)) + :group 'c) + +(defcustom c-label-minimum-indentation 1 + "*Minimum indentation for lines inside of top-level constructs. +This variable typically only affects code using the `gnu' style, which +mandates a minimum of one space in front of every line inside +top-level constructs. Specifically, the function +`c-gnu-impose-minimum' on your `c-special-indent-hook' is what +enforces this." + :type 'integer + :group 'c) + +(defcustom c-progress-interval 5 + "*Interval used to update progress status during long re-indentation. +If a number, percentage complete gets updated after each interval of +that many seconds. Set to nil to inhibit updating. This is only +useful for Emacs 19." + :type 'integer + :group 'c) + +(defcustom c-site-default-style "gnu" + "Default style for your site. +To change the default style at your site, you can set this variable to +any style defined in `c-style-alist'. However, if CC Mode is usually +loaded into your Emacs at compile time, you will need to set this +variable in the `site-init.el' file before CC Mode is loaded, then +re-dump Emacs." + :type 'string + :group 'c) + +(defcustom c-style-variables-are-local-p nil + "*Whether style variables should be buffer local by default. +If non-nil, then all indentation style related variables will be made +buffer local by default. If nil, they will remain global. Variables +are made buffer local when this file is loaded, and once buffer +localized, they cannot be made global again. + +The list of variables to buffer localize are: + c-offsets-alist + c-basic-offset + c-file-style + c-file-offsets + c-comment-only-line-offset + c-cleanup-list + c-hanging-braces-alist + c-hanging-colons-alist + c-hanging-comment-starter-p + c-hanging-comment-ender-p + c-backslash-column + c-label-minimum-indentation + c-special-indent-hook + c-indentation-style" + :type 'boolean + :group 'c) + +(defcustom c-mode-hook nil + "*Hook called by `c-mode'." + :type '(hook :format "%{C Mode Hook%}:\n%v") + :group 'c) + +(defcustom c++-mode-hook nil + "*Hook called by `c++-mode'." + :type 'hook + :group 'c) + +(defcustom objc-mode-hook nil + "*Hook called by `objc-mode'." + :type 'hook + :group 'c) + +(defcustom java-mode-hook nil + "*Hook called by `java-mode'." + :type 'hook + :group 'c) + +(defcustom c-mode-common-hook nil + "*Hook called by all CC Mode modes for common initializations." + :type '(hook :format "%{CC Mode Common Hook%}:\n%v") + :group 'c) + + + +;; Non-customizable variables, still part of the interface to CC Mode +(defvar c-file-style nil + "Variable interface for setting style via File Local Variables. +In a file's Local Variable section, you can set this variable to a +string suitable for `c-set-style'. When the file is visited, CC Mode +will set the style of the file to this value automatically. + +Note that file style settings are applied before file offset settings +as designated in the variable `c-file-offsets'.") + +(defvar c-file-offsets nil + "Variable interface for setting offsets via File Local Variables. +In a file's Local Variable section, you can set this variable to an +association list similar to the values allowed in `c-offsets-alist'. +When the file is visited, CC Mode will institute these offset settings +automatically. + +Note that file offset settings are applied after file style settings +as designated in the variable `c-file-style'.") + +(defvar c-syntactic-context nil + "Variable containing syntactic analysis list during indentation.") + +(defvar c-indentation-style c-site-default-style + "Name of style installed in the current buffer.") + + +(provide 'cc-vars) +;;; cc-vars.el ends here