Switch to recommended form of GPLv3 permissions notice.
[bpt/emacs.git] / lisp / cus-start.el
CommitLineData
1cd7adc6 1;;; cus-start.el --- define customization properties of builtins
1444b0c0 2;;
0d30b337 3;; Copyright (C) 1997, 1999, 2000, 2001, 2002, 2003, 2004,
409cc4a3 4;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
1444b0c0
PA
5;;
6;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
7;; Keywords: internal
8
c2383d2d
RS
9;; This file is part of GNU Emacs.
10
eb3fa2cf 11;; GNU Emacs is free software: you can redistribute it and/or modify
c2383d2d 12;; it under the terms of the GNU General Public License as published by
eb3fa2cf
GM
13;; the Free Software Foundation, either version 3 of the License, or
14;; (at your option) any later version.
c2383d2d
RS
15
16;; GNU Emacs is distributed in the hope that it will be useful,
17;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19;; GNU General Public License for more details.
20
21;; You should have received a copy of the GNU General Public License
eb3fa2cf 22;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
c2383d2d 23
1444b0c0
PA
24;;; Commentary:
25;;
4883633e 26;; This file adds customize support for built-in variables.
1444b0c0 27
4883633e
RS
28;; While dumping Emacs, this file is loaded, but it only records
29;; the standard values; it does not do the rest of the job.
30;; Later on, if the user makes a customization buffer,
31;; this file is loaded again with (require 'cus-start);
32;; then it does the whole job.
1444b0c0 33
4883633e 34;;; Code:
1444b0c0 35
e047f448 36(let ((all '(;; alloc.c
1444b0c0 37 (gc-cons-threshold alloc integer)
0f014aa1 38 (garbage-collection-messages alloc boolean)
1444b0c0 39 ;; buffer.c
e45db0fb 40 (mode-line-format mode-line sexp) ;Hard to do right.
1444b0c0 41 (default-major-mode internal function)
924ef223 42 (enable-multibyte-characters mule boolean)
1444b0c0
PA
43 (case-fold-search matching boolean)
44 (fill-column fill integer)
45 (left-margin fill integer)
46 (tab-width editing-basics integer)
47 (ctl-arrow display boolean)
48 (truncate-lines display boolean)
1444b0c0 49 (selective-display-ellipses display boolean)
516b77a3 50 (indicate-empty-lines fringe boolean)
eb94dac6
LT
51 (indicate-buffer-boundaries
52 fringe
53 (choice
54 (const :tag "No indicators" nil)
55 (const :tag "On left, with arrows" left)
56 (const :tag "On right, with arrows" right)
a4fbb790
LT
57 (set :tag "Pick your own design"
58 :value ((t . nil))
59 :format "%{%t%}:\n%v\n%d"
60 :doc "You can specify a default and then override it \
61for individual indicators.
62Leaving \"Default\" unchecked is equivalent with specifying a default of
63\"Do not show\"."
64 (choice :tag "Default"
65 :value (t . nil)
66 (const :tag "Do not show" (t . nil))
67 (const :tag "On the left" (t . left))
68 (const :tag "On the right" (t . right)))
69 (choice :tag "Top"
70 :value (top . left)
71 (const :tag "Do not show" (top . nil))
72 (const :tag "On the left" (top . left))
73 (const :tag "On the right" (top . right)))
74 (choice :tag "Bottom"
75 :value (bottom . left)
76 (const :tag "Do not show" (bottom . nil))
77 (const :tag "On the left" (bottom . left))
78 (const :tag "On the right" (bottom . right)))
79 (choice :tag "Up arrow"
80 :value (up . left)
81 (const :tag "Do not show" (up . nil))
82 (const :tag "On the left" (up . left))
83 (const :tag "On the right" (up . right)))
84 (choice :tag "Down arrow"
85 :value (down . left)
86 (const :tag "Do not show" (down . nil))
87 (const :tag "On the left" (down . left))
88 (const :tag "On the right" (down . right))))
516b77a3 89 (other :tag "On left, no arrows" t)))
c6d57325
RS
90 (scroll-up-aggressively windows
91 (choice (const :tag "off" nil) number)
92 "21.1")
93 (scroll-down-aggressively windows
94 (choice (const :tag "off" nil) number)
95 "21.1")
6671cab3
MR
96 (line-spacing display (choice (const :tag "none" nil) integer)
97 "22.1")
1444b0c0
PA
98 ;; callint.c
99 (mark-even-if-inactive editing-basics boolean)
100 ;; callproc.c
101 (shell-file-name execute file)
102 (exec-path execute
f747a488 103 (repeat (choice (const :tag "default directory" nil)
72e869ba 104 (directory :format "%v"))))
5e3097cd 105 ;; charset.c
c11f69e1
KH
106 (charset-map-path installation
107 (repeat (directory :format "%v")))
5fc9eb7c
DL
108 ;; coding.c
109 (inhibit-eol-conversion mule boolean)
de0d1fc5
EZ
110 (eol-mnemonic-undecided mule string)
111 (eol-mnemonic-unix mule string)
112 (eol-mnemonic-dos mule string)
113 (eol-mnemonic-mac mule string)
13eb63ff
DL
114 (file-coding-system-alist
115 mule
116 (alist
117 :key-type (regexp :tag "File regexp")
118 :value-type (choice
119 :value (undecided . undecided)
120 (cons :tag "Encoding/decoding pair"
121 :value (undecided . undecided)
122 (coding-system :tag "Decoding")
123 (coding-system :tag "Encoding"))
70c2811c
KY
124 (coding-system
125 :tag "Single coding system"
126 :value undecided
127 :match (lambda (widget value)
128 (and value (not (functionp value)))))
13eb63ff 129 (function :value ignore))))
1444b0c0 130 ;; dired.c
71296446 131 (completion-ignored-extensions dired
1444b0c0 132 (repeat (string :format "%v")))
0849a37e 133 ;; dispnew.c
1444b0c0
PA
134 (baud-rate display integer)
135 (inverse-video display boolean)
136 (visible-bell display boolean)
137 (no-redraw-on-reenter display boolean)
138 ;; editfns.c
139 (user-full-name mail string)
140 ;; eval.c
141 (max-specpdl-size limits integer)
142 (max-lisp-eval-depth limits integer)
f8add097
RS
143 (max-mini-window-height limits
144 (choice (const :tag "quarter screen" nil)
6671cab3 145 number) "23.1")
1444b0c0
PA
146 (stack-trace-on-error debug
147 (choice (const :tag "off")
148 (repeat :menu-tag "When"
149 :value (nil)
150 (symbol :format "%v"))
151 (const :tag "always" t)))
71296446 152 (debug-on-error debug
1444b0c0
PA
153 (choice (const :tag "off")
154 (repeat :menu-tag "When"
155 :value (nil)
156 (symbol :format "%v"))
157 (const :tag "always" t)))
158 (debug-ignored-errors debug (repeat (choice symbol regexp)))
507c9247
RS
159 (debug-on-quit debug
160 (choice (const :tag "off")
161 (repeat :menu-tag "When"
162 :value (nil)
163 (symbol :format "%v"))
164 (const :tag "always" t)))
78976e0a 165 ;; fns.c
37328bcd 166 (use-dialog-box menu boolean "21.1")
bf247b6e 167 (use-file-dialog menu boolean "22.1")
f4c307a5 168 (focus-follows-mouse frames boolean "20.3")
1444b0c0
PA
169 ;; frame.c
170 (default-frame-alist frames
171 (repeat (cons :format "%v"
172 (symbol :tag "Parameter")
173 (sexp :tag "Value"))))
140fb7ff
KS
174 (mouse-highlight mouse (choice (const :tag "disabled" nil)
175 (const :tag "always shown" t)
6671cab3
MR
176 (other :tag "hidden by keypress" 1))
177 "22.1")
48d707c5 178 ;; fringe.c
516b77a3 179 (overflow-newline-into-fringe fringe boolean)
1444b0c0 180 ;; indent.c
01892a52 181 (indent-tabs-mode indent boolean)
1444b0c0
PA
182 ;; keyboard.c
183 (meta-prefix-char keyboard character)
184 (auto-save-interval auto-save integer)
185 (auto-save-timeout auto-save (choice (const :tag "off" nil)
186 (integer :format "%v")))
ac1b1728 187 (echo-keystrokes minibuffer number)
1444b0c0 188 (polling-period keyboard integer)
4db2b1c7
RS
189 (double-click-time mouse (restricted-sexp
190 :match-alternatives (integerp 'nil 't)))
6671cab3 191 (double-click-fuzz mouse integer "22.1")
1444b0c0
PA
192 (inhibit-local-menu-bar-menus menu boolean)
193 (help-char keyboard character)
194 (help-event-list keyboard (repeat (sexp :format "%v")))
195 (menu-prompting menu boolean)
1444b0c0
PA
196 (suggest-key-bindings keyboard (choice (const :tag "off" nil)
197 (integer :tag "time" 2)
79221864 198 (other :tag "on")))
2f566b18
YM
199 ;; macselect.c
200 (mac-dnd-known-types mac (repeat string) "22.1")
814b36fe
YM
201 ;; macterm.c
202 (mac-control-modifier mac (choice (const :tag "No modifier" nil)
203 (const control) (const meta)
204 (const alt) (const hyper)
205 (const super)) "22.1")
206 (mac-command-modifier mac (choice (const :tag "No modifier" nil)
207 (const control) (const meta)
208 (const alt) (const hyper)
209 (const super)) "22.1")
210 (mac-option-modifier mac (choice (const :tag "No modifier (work as option)" nil)
211 (const control) (const meta)
212 (const alt) (const hyper)
213 (const super)) "22.1")
214 (mac-function-modifier mac
215 (choice (const :tag "No modifier (work as function)" nil)
216 (const control) (const meta)
217 (const alt) (const hyper)
218 (const super)) "22.1")
219 (mac-emulate-three-button-mouse mac
220 (choice (const :tag "No emulation" nil)
221 (const :tag "Option->2, Command->3" t)
222 (const :tag "Command->2, Option->3" reverse))
223 "22.1")
224 (mac-wheel-button-is-mouse-2 mac boolean "22.1")
225 (mac-pass-command-to-system mac boolean "22.1")
226 (mac-pass-control-to-system mac boolean "22.1")
227 (mac-allow-anti-aliasing mac boolean "22.1")
2d4a5c50
YM
228 (mac-ts-script-language-on-focus mac
229 (choice (const :tag "System default behavior" nil)
230 (const :tag "Restore to script/language used in the last focus frame" t)
231 (cons :tag "Specify script/language"
232 (integer :tag "Script code")
233 (integer :tag "Language code")))
234 "22.1")
5f537e54 235
37328bcd
DL
236;; This is not good news because it will use the wrong
237;; version-specific directories when you upgrade. We need
238;; customization of the front of the list, maintaining the standard
239;; value intact at the back.
71296446 240;;; (load-path environment
37328bcd
DL
241;;; (repeat (choice :tag "[Current dir?]"
242;;; :format "%[Current dir?%] %v"
243;;; (const :tag " current dir" nil)
244;;; (directory :format "%v"))))
1444b0c0 245 ;; minibuf.c
1444b0c0 246 (enable-recursive-minibuffers minibuffer boolean)
408f56b2 247 (history-length minibuffer
6671cab3
MR
248 (choice (const :tag "Infinite" t) integer)
249 "22.1")
250 (history-delete-duplicates minibuffer boolean "22.1")
8f62f2b8
MB
251 (minibuffer-prompt-properties
252 minibuffer
253 (list
254 (checklist :inline t
255 (const :tag "Read-Only"
256 :doc "Prevent prompt from being modified"
257 :format "%t%n%h"
258 :inline t
259 (read-only t))
c9133fa6 260 (const :tag "Don't Enter"
8f62f2b8
MB
261 :doc "Prevent point from ever entering prompt"
262 :format "%t%n%h"
263 :inline t
264 (point-entered minibuffer-avoid-prompt)))
265 (repeat :inline t
266 :tag "Other Properties"
267 (list :inline t
268 :format "%v"
269 (symbol :tag "Property")
ecf5279a
DL
270 (sexp :tag "Value"))))
271 "21.1")
1444b0c0 272 (minibuffer-auto-raise minibuffer boolean)
ecf5279a 273 ;; options property set at end
a8a1b05d
DL
274 (read-buffer-function minibuffer
275 (choice (const nil)
276 (function-item iswitchb-read-buffer)
277 function))
b78fba02
EZ
278 ;; msdos.c
279 (dos-unsupported-char-glyph display integer)
1444b0c0 280 ;; process.c
4883633e 281 (delete-exited-processes processes-basics boolean)
1444b0c0
PA
282 ;; syntax.c
283 (parse-sexp-ignore-comments editing-basics boolean)
284 (words-include-escapes editing-basics boolean)
6b61353c
KH
285 (open-paren-in-column-0-is-defun-start editing-basics boolean
286 "21.1")
98e071b5
SM
287 ;; term.c
288 (visible-cursor cursor boolean "22.1")
0f08b956
LT
289 ;; undo.c
290 (undo-limit undo integer)
291 (undo-strong-limit undo integer)
292 (undo-outer-limit undo
293 (choice integer
294 (const :tag "No limit"
295 :format "%t\n%d"
296 :doc
297 "With this choice, \
298the undo info for the current command never gets discarded.
299This should only be chosen under exceptional circumstances,
300since it could result in memory overflow and make Emacs crash."
301 nil))
302 "22.1")
1444b0c0 303 ;; window.c
4cb464b7
DL
304 (temp-buffer-show-function windows (choice (const nil) function))
305 (display-buffer-function windows (choice (const nil) function))
1444b0c0
PA
306 (pop-up-frames frames boolean)
307 (pop-up-frame-function frames function)
71296446
JB
308 (special-display-buffer-names
309 frames
1444b0c0
PA
310 (repeat (choice :tag "Buffer"
311 :value ""
312 (string :format "%v")
313 (cons :tag "With attributes"
314 :format "%v"
315 :value ("" . nil)
316 (string :format "%v")
317 (repeat :tag "Attributes"
318 (cons :format "%v"
319 (symbol :tag "Parameter")
320 (sexp :tag "Value")))))))
321 (special-display-regexps
71296446 322 frames
1444b0c0
PA
323 (repeat (choice :tag "Buffer"
324 :value ""
325 (regexp :format "%v")
326 (cons :tag "With attributes"
327 :format "%v"
328 :value ("" . nil)
329 (regexp :format "%v")
330 (repeat :tag "Attributes"
331 (cons :format "%v"
332 (symbol :tag "Parameter")
333 (sexp :tag "Value")))))))
334 (special-display-function frames function)
335 (same-window-buffer-names windows (repeat (string :format "%v")))
336 (same-window-regexps windows (repeat (regexp :format "%v")))
337 (pop-up-windows windows boolean)
d2946490 338 (even-window-heights windows boolean)
74f54b54 339 (next-screen-context-lines windows integer)
1444b0c0 340 (split-height-threshold windows integer)
c8f1ea76
SM
341 (split-window-preferred-function
342 windows
f1917c6f 343 (choice (const :tag "vertically" nil)
c8f1ea76
SM
344 ;; FIXME: Add `sensibly' which chooses between
345 ;; vertical or horizontal splits depending on the size
346 ;; and shape of the window.
347 (const :tag "horizontally"
f1917c6f 348 split-window-preferred-horizontally))
6671cab3 349 "23.1")
1444b0c0
PA
350 (window-min-height windows integer)
351 (window-min-width windows integer)
7704b6b1
KS
352 (scroll-preserve-screen-position
353 windows (choice
354 (const :tag "Off (nil)" :value nil)
355 (const :tag "Full screen (t)" :value t)
6671cab3 356 (other :tag "Always" 1)) "22.1")
13eb63ff 357 (display-buffer-reuse-frames windows boolean "21.1")
1444b0c0
PA
358 ;; xdisp.c
359 (scroll-step windows integer)
ccbb360e
RS
360 (scroll-conservatively windows integer)
361 (scroll-margin windows integer)
4e371ce8
EZ
362 (hscroll-margin windows integer "22.1")
363 (hscroll-step windows number "22.1")
1444b0c0 364 (truncate-partial-width-windows display boolean)
e45db0fb
MR
365 (mode-line-inverse-video mode-line boolean)
366 (mode-line-in-non-selected-windows mode-line boolean "22.1")
37328bcd
DL
367 (line-number-display-limit display
368 (choice integer
369 (const :tag "No limit" nil)))
6671cab3 370 (line-number-display-limit-width display integer "22.1")
1444b0c0
PA
371 (highlight-nonselected-windows display boolean)
372 (message-log-max debug (choice (const :tag "Disable" nil)
373 (integer :menu-tag "lines"
374 :format "%v")
79221864 375 (other :tag "Unlimited" t)))
daba3e25 376 (unibyte-display-via-language-environment mule boolean)
bf247b6e 377 (blink-cursor-alist cursor alist "22.1")
03c25271 378 (overline-margin display integer "22.1")
612c16f1
CY
379 (mouse-autoselect-window
380 display (choice
381 (const :tag "Off (nil)" :value nil)
382 (const :tag "Immediate" :value t)
383 (number :tag "Delay by secs" :value 0.5)) "22.1")
e5f51929 384 ;; xfaces.c
6671cab3 385 (scalable-fonts-allowed display boolean "22.1")
1444b0c0
PA
386 ;; xfns.c
387 (x-bitmap-file-path installation
0849a37e 388 (repeat (directory :format "%v")))
c4823934 389 (x-gtk-use-old-file-dialog menu boolean "22.1")
91b5a204 390 (x-gtk-show-hidden-files menu boolean "22.1")
c4823934 391 (x-gtk-file-dialog-help-text menu boolean "22.1")
0dd95b49 392 (x-gtk-whole-detached-tool-bar x boolean "22.1")
0849a37e 393 ;; xterm.c
4e371ce8 394 (x-use-underline-position-properties display boolean "22.1")
03c25271 395 (x-underline-at-descent-line display boolean "22.1")
37328bcd 396 (x-stretch-cursor display boolean "21.1")))
a200d998 397 this symbol group type standard version native-p
4883633e
RS
398 ;; This function turns a value
399 ;; into an expression which produces that value.
400 (quoter (lambda (sexp)
401 (if (or (memq sexp '(t nil))
017266f8 402 (keywordp sexp)
4883633e
RS
403 (and (listp sexp)
404 (memq (car sexp) '(lambda)))
405 (stringp sexp)
37328bcd 406 (numberp sexp))
4883633e
RS
407 sexp
408 (list 'quote sexp)))))
71296446 409 (while all
1444b0c0
PA
410 (setq this (car all)
411 all (cdr all)
412 symbol (nth 0 this)
413 group (nth 1 this)
00377857 414 type (nth 2 this)
37328bcd 415 version (nth 3 this)
a200d998
RS
416 ;; If we did not specify any standard value expression above,
417 ;; use the current value as the standard value.
418 standard (if (nthcdr 4 this)
419 (nth 4 this)
720f4c79 420 (when (default-boundp symbol)
92233e7e 421 (funcall quoter (default-value symbol))))
00377857
EZ
422 ;; Don't complain about missing variables which are
423 ;; irrelevant to this platform.
424 native-p (save-match-data
425 (cond
426 ((string-match "\\`dos-" (symbol-name symbol))
427 (eq system-type 'ms-dos))
428 ((string-match "\\`w32-" (symbol-name symbol))
429 (eq system-type 'windows-nt))
feba0cd6 430 ((string-match "\\`mac-" (symbol-name symbol))
ce00d093 431 (featurep 'mac-carbon))
2702394e 432 ((string-match "\\`x-.*gtk" (symbol-name symbol))
79cf2123 433 (featurep 'gtk))
197a09bf
EZ
434 ((string-match "\\`x-" (symbol-name symbol))
435 (fboundp 'x-create-frame))
6eb33acb
EZ
436 ((string-match "selection" (symbol-name symbol))
437 (fboundp 'x-selection-exists-p))
438 ((string-match "fringe" (symbol-name symbol))
439 (fboundp 'define-fringe-bitmap))
00377857 440 (t t))))
1444b0c0
PA
441 (if (not (boundp symbol))
442 ;; If variables are removed from C code, give an error here!
00377857
EZ
443 (and native-p
444 (message "Note, built-in variable `%S' not bound" symbol))
4883633e
RS
445 ;; Save the standard value, unless we already did.
446 (or (get symbol 'standard-value)
a200d998 447 (put symbol 'standard-value (list standard)))
4883633e
RS
448 ;; If this is NOT while dumping Emacs,
449 ;; set up the rest of the customization info.
450 (unless purify-flag
451 ;; Add it to the right group.
452 (custom-add-to-group group symbol 'custom-variable)
453 ;; Set the type.
37328bcd
DL
454 (put symbol 'custom-type type)
455 (put symbol 'custom-version version)))))
4883633e 456
ecf5279a 457(custom-add-to-group 'iswitchb 'read-buffer-function 'custom-variable)
6b61353c
KH
458(custom-add-to-group 'font-lock 'open-paren-in-column-0-is-defun-start
459 'custom-variable)
ecf5279a 460
4883633e
RS
461;; Record cus-start as loaded
462;; if we have set up all the info that we can set up.
463;; Don't record cus-start as loaded
464;; if we have set up only the standard values.
465(unless purify-flag
466 (provide 'cus-start))
1444b0c0 467
c8f1ea76 468;; arch-tag: 4502730d-bcb3-4f5e-99a3-a86f2d54af60
1cd7adc6 469;;; cus-start.el ends here