| 1 | ;;; cus-start.el --- define customization properties of builtins |
| 2 | ;; |
| 3 | ;; Copyright (C) 1997, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. |
| 4 | ;; |
| 5 | ;; Author: Per Abrahamsen <abraham@dina.kvl.dk> |
| 6 | ;; Keywords: internal |
| 7 | |
| 8 | ;; This file is part of GNU Emacs. |
| 9 | |
| 10 | ;; GNU Emacs is free software; you can redistribute it and/or modify |
| 11 | ;; it under the terms of the GNU General Public License as published by |
| 12 | ;; the Free Software Foundation; either version 2, or (at your option) |
| 13 | ;; any later version. |
| 14 | |
| 15 | ;; GNU Emacs is distributed in the hope that it will be useful, |
| 16 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 17 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 18 | ;; GNU General Public License for more details. |
| 19 | |
| 20 | ;; You should have received a copy of the GNU General Public License |
| 21 | ;; along with GNU Emacs; see the file COPYING. If not, write to the |
| 22 | ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
| 23 | ;; Boston, MA 02111-1307, USA. |
| 24 | |
| 25 | ;;; Commentary: |
| 26 | ;; |
| 27 | ;; This file adds customize support for built-in variables. |
| 28 | |
| 29 | ;; While dumping Emacs, this file is loaded, but it only records |
| 30 | ;; the standard values; it does not do the rest of the job. |
| 31 | ;; Later on, if the user makes a customization buffer, |
| 32 | ;; this file is loaded again with (require 'cus-start); |
| 33 | ;; then it does the whole job. |
| 34 | |
| 35 | ;;; Code: |
| 36 | |
| 37 | (let ((all '(;; abbrev.c |
| 38 | (abbrev-all-caps abbrev-mode boolean) |
| 39 | (pre-abbrev-expand-hook abbrev-mode hook) |
| 40 | ;; alloc.c |
| 41 | (gc-cons-threshold alloc integer) |
| 42 | (undo-limit undo integer) |
| 43 | (undo-strong-limit undo integer) |
| 44 | (garbage-collection-messages alloc boolean) |
| 45 | ;; buffer.c |
| 46 | (mode-line-format modeline sexp) ;Hard to do right. |
| 47 | (default-major-mode internal function) |
| 48 | (enable-multibyte-characters mule boolean) |
| 49 | (case-fold-search matching boolean) |
| 50 | (fill-column fill integer) |
| 51 | (left-margin fill integer) |
| 52 | (tab-width editing-basics integer) |
| 53 | (ctl-arrow display boolean) |
| 54 | (truncate-lines display boolean) |
| 55 | (selective-display-ellipses display boolean) |
| 56 | (indicate-empty-lines display boolean "21.1") |
| 57 | (scroll-up-aggressively windows |
| 58 | (choice (const :tag "off" nil) number) |
| 59 | "21.1") |
| 60 | (scroll-down-aggressively windows |
| 61 | (choice (const :tag "off" nil) number) |
| 62 | "21.1") |
| 63 | ;; callint.c |
| 64 | (mark-even-if-inactive editing-basics boolean) |
| 65 | ;; callproc.c |
| 66 | (shell-file-name execute file) |
| 67 | (exec-path execute |
| 68 | (repeat (choice (const :tag "default" nil) |
| 69 | (file :format "%v")))) |
| 70 | ;; charset.c |
| 71 | (charset-map-directory installation directory) |
| 72 | ;; coding.c |
| 73 | (inhibit-eol-conversion mule boolean) |
| 74 | (eol-mnemonic-undecided mule string) |
| 75 | (eol-mnemonic-unix mule string) |
| 76 | (eol-mnemonic-dos mule string) |
| 77 | (eol-mnemonic-mac mule string) |
| 78 | (file-coding-system-alist |
| 79 | mule |
| 80 | (alist |
| 81 | :key-type (regexp :tag "File regexp") |
| 82 | :value-type (choice |
| 83 | :value (undecided . undecided) |
| 84 | (cons :tag "Encoding/decoding pair" |
| 85 | :value (undecided . undecided) |
| 86 | (coding-system :tag "Decoding") |
| 87 | (coding-system :tag "Encoding")) |
| 88 | (coding-system :tag "Single coding system" |
| 89 | :value undecided) |
| 90 | (function :value ignore)))) |
| 91 | (selection-coding-system mule coding-system) |
| 92 | ;; dired.c |
| 93 | (completion-ignored-extensions dired |
| 94 | (repeat (string :format "%v"))) |
| 95 | ;; dispnew.c |
| 96 | (baud-rate display integer) |
| 97 | (inverse-video display boolean) |
| 98 | (visible-bell display boolean) |
| 99 | (no-redraw-on-reenter display boolean) |
| 100 | ;; editfns.c |
| 101 | (user-full-name mail string) |
| 102 | ;; eval.c |
| 103 | (max-specpdl-size limits integer) |
| 104 | (max-lisp-eval-depth limits integer) |
| 105 | (stack-trace-on-error debug |
| 106 | (choice (const :tag "off") |
| 107 | (repeat :menu-tag "When" |
| 108 | :value (nil) |
| 109 | (symbol :format "%v")) |
| 110 | (const :tag "always" t))) |
| 111 | (debug-on-error debug |
| 112 | (choice (const :tag "off") |
| 113 | (repeat :menu-tag "When" |
| 114 | :value (nil) |
| 115 | (symbol :format "%v")) |
| 116 | (const :tag "always" t))) |
| 117 | (debug-ignored-errors debug (repeat (choice symbol regexp))) |
| 118 | (debug-on-quit debug |
| 119 | (choice (const :tag "off") |
| 120 | (repeat :menu-tag "When" |
| 121 | :value (nil) |
| 122 | (symbol :format "%v")) |
| 123 | (const :tag "always" t))) |
| 124 | ;; fileio.c |
| 125 | (insert-default-directory minibuffer boolean) |
| 126 | ;; fns.c |
| 127 | (use-dialog-box menu boolean "21.1") |
| 128 | ;; frame.c |
| 129 | (default-frame-alist frames |
| 130 | (repeat (cons :format "%v" |
| 131 | (symbol :tag "Parameter") |
| 132 | (sexp :tag "Value")))) |
| 133 | (mouse-highlight mouse (choice (const :tag "disabled" nil) |
| 134 | (const :tag "always shown" t) |
| 135 | (other :tag "hidden by keypress" 1))) |
| 136 | ;; indent.c |
| 137 | (indent-tabs-mode fill boolean) |
| 138 | ;; keyboard.c |
| 139 | (meta-prefix-char keyboard character) |
| 140 | (auto-save-interval auto-save integer) |
| 141 | (auto-save-timeout auto-save (choice (const :tag "off" nil) |
| 142 | (integer :format "%v"))) |
| 143 | (echo-keystrokes minibuffer number) |
| 144 | (polling-period keyboard integer) |
| 145 | (double-click-time mouse (restricted-sexp |
| 146 | :match-alternatives (integerp 'nil 't))) |
| 147 | (double-click-fuzz mouse integer) |
| 148 | (inhibit-local-menu-bar-menus menu boolean) |
| 149 | (help-char keyboard character) |
| 150 | (help-event-list keyboard (repeat (sexp :format "%v"))) |
| 151 | (menu-prompting menu boolean) |
| 152 | (suggest-key-bindings keyboard (choice (const :tag "off" nil) |
| 153 | (integer :tag "time" 2) |
| 154 | (other :tag "on"))) |
| 155 | |
| 156 | ;; This is not good news because it will use the wrong |
| 157 | ;; version-specific directories when you upgrade. We need |
| 158 | ;; customization of the front of the list, maintaining the standard |
| 159 | ;; value intact at the back. |
| 160 | ;;; (load-path environment |
| 161 | ;;; (repeat (choice :tag "[Current dir?]" |
| 162 | ;;; :format "%[Current dir?%] %v" |
| 163 | ;;; (const :tag " current dir" nil) |
| 164 | ;;; (directory :format "%v")))) |
| 165 | ;; minibuf.c |
| 166 | (completion-auto-help minibuffer boolean) |
| 167 | (enable-recursive-minibuffers minibuffer boolean) |
| 168 | (history-length minibuffer |
| 169 | (choice (const :tag "Infinite" t) |
| 170 | integer)) |
| 171 | (minibuffer-prompt-properties |
| 172 | minibuffer |
| 173 | (list |
| 174 | (checklist :inline t |
| 175 | (const :tag "Read-Only" |
| 176 | :doc "Prevent prompt from being modified" |
| 177 | :format "%t%n%h" |
| 178 | :inline t |
| 179 | (read-only t)) |
| 180 | (const :tag "Inviolable" |
| 181 | :doc "Prevent point from ever entering prompt" |
| 182 | :format "%t%n%h" |
| 183 | :inline t |
| 184 | (point-entered minibuffer-avoid-prompt))) |
| 185 | (repeat :inline t |
| 186 | :tag "Other Properties" |
| 187 | (list :inline t |
| 188 | :format "%v" |
| 189 | (symbol :tag "Property") |
| 190 | (sexp :tag "Value")))) |
| 191 | "21.1") |
| 192 | (minibuffer-auto-raise minibuffer boolean) |
| 193 | ;; options property set at end |
| 194 | (read-buffer-function minibuffer |
| 195 | (choice (const nil) |
| 196 | (function-item iswitchb-read-buffer) |
| 197 | function)) |
| 198 | ;; msdos.c |
| 199 | (dos-unsupported-char-glyph display integer) |
| 200 | ;; process.c |
| 201 | (delete-exited-processes processes-basics boolean) |
| 202 | ;; syntax.c |
| 203 | (parse-sexp-ignore-comments editing-basics boolean) |
| 204 | (words-include-escapes editing-basics boolean) |
| 205 | ;; window.c |
| 206 | (temp-buffer-show-function windows (choice (const nil) function)) |
| 207 | (display-buffer-function windows (choice (const nil) function)) |
| 208 | (pop-up-frames frames boolean) |
| 209 | (pop-up-frame-function frames function) |
| 210 | (special-display-buffer-names |
| 211 | frames |
| 212 | (repeat (choice :tag "Buffer" |
| 213 | :value "" |
| 214 | (string :format "%v") |
| 215 | (cons :tag "With attributes" |
| 216 | :format "%v" |
| 217 | :value ("" . nil) |
| 218 | (string :format "%v") |
| 219 | (repeat :tag "Attributes" |
| 220 | (cons :format "%v" |
| 221 | (symbol :tag "Parameter") |
| 222 | (sexp :tag "Value"))))))) |
| 223 | (special-display-regexps |
| 224 | frames |
| 225 | (repeat (choice :tag "Buffer" |
| 226 | :value "" |
| 227 | (regexp :format "%v") |
| 228 | (cons :tag "With attributes" |
| 229 | :format "%v" |
| 230 | :value ("" . nil) |
| 231 | (regexp :format "%v") |
| 232 | (repeat :tag "Attributes" |
| 233 | (cons :format "%v" |
| 234 | (symbol :tag "Parameter") |
| 235 | (sexp :tag "Value"))))))) |
| 236 | (special-display-function frames function) |
| 237 | (same-window-buffer-names windows (repeat (string :format "%v"))) |
| 238 | (same-window-regexps windows (repeat (regexp :format "%v"))) |
| 239 | (pop-up-windows windows boolean) |
| 240 | (even-window-heights windows boolean) |
| 241 | (next-screen-context-lines windows integer) |
| 242 | (split-height-threshold windows integer) |
| 243 | (window-min-height windows integer) |
| 244 | (window-min-width windows integer) |
| 245 | (scroll-preserve-screen-position windows boolean) |
| 246 | (display-buffer-reuse-frames windows boolean "21.1") |
| 247 | ;; xdisp.c |
| 248 | (scroll-step windows integer) |
| 249 | (scroll-conservatively windows integer) |
| 250 | (scroll-margin windows integer) |
| 251 | (hscroll-margin windows integer "21.3") |
| 252 | (hscroll-step windows number "21.3") |
| 253 | (truncate-partial-width-windows display boolean) |
| 254 | (mode-line-inverse-video modeline boolean) |
| 255 | (mode-line-in-non-selected-windows modeline boolean "21.3") |
| 256 | (line-number-display-limit display |
| 257 | (choice integer |
| 258 | (const :tag "No limit" nil))) |
| 259 | (highlight-nonselected-windows display boolean) |
| 260 | (message-log-max debug (choice (const :tag "Disable" nil) |
| 261 | (integer :menu-tag "lines" |
| 262 | :format "%v") |
| 263 | (other :tag "Unlimited" t))) |
| 264 | (unibyte-display-via-language-environment mule boolean) |
| 265 | ;; xfaces.c |
| 266 | (scalable-fonts-allowed display boolean) |
| 267 | ;; xfns.c |
| 268 | (x-bitmap-file-path installation |
| 269 | (repeat (directory :format "%v"))) |
| 270 | ;; xterm.c |
| 271 | (mouse-autoselect-window display boolean "21.3") |
| 272 | (x-use-underline-position-properties display boolean "21.3") |
| 273 | (x-stretch-cursor display boolean "21.1"))) |
| 274 | this symbol group type native-p version |
| 275 | ;; This function turns a value |
| 276 | ;; into an expression which produces that value. |
| 277 | (quoter (lambda (sexp) |
| 278 | (if (or (memq sexp '(t nil)) |
| 279 | (keywordp sexp) |
| 280 | (and (listp sexp) |
| 281 | (memq (car sexp) '(lambda))) |
| 282 | (stringp sexp) |
| 283 | ;; (and (fboundp 'characterp) |
| 284 | ;; (characterp sexp)) |
| 285 | (numberp sexp)) |
| 286 | sexp |
| 287 | (list 'quote sexp))))) |
| 288 | (while all |
| 289 | (setq this (car all) |
| 290 | all (cdr all) |
| 291 | symbol (nth 0 this) |
| 292 | group (nth 1 this) |
| 293 | type (nth 2 this) |
| 294 | version (nth 3 this) |
| 295 | ;; Don't complain about missing variables which are |
| 296 | ;; irrelevant to this platform. |
| 297 | native-p (save-match-data |
| 298 | (cond |
| 299 | ((string-match "\\`dos-" (symbol-name symbol)) |
| 300 | (eq system-type 'ms-dos)) |
| 301 | ((string-match "\\`w32-" (symbol-name symbol)) |
| 302 | (eq system-type 'windows-nt)) |
| 303 | ((string-match "\\`x-" (symbol-name symbol)) |
| 304 | (fboundp 'x-create-frame)) |
| 305 | (t t)))) |
| 306 | (if (not (boundp symbol)) |
| 307 | ;; If variables are removed from C code, give an error here! |
| 308 | (and native-p |
| 309 | (message "Note, built-in variable `%S' not bound" symbol)) |
| 310 | ;; Save the standard value, unless we already did. |
| 311 | (or (get symbol 'standard-value) |
| 312 | (put symbol 'standard-value |
| 313 | (list (funcall quoter (default-value symbol))))) |
| 314 | ;; If this is NOT while dumping Emacs, |
| 315 | ;; set up the rest of the customization info. |
| 316 | (unless purify-flag |
| 317 | ;; Add it to the right group. |
| 318 | (custom-add-to-group group symbol 'custom-variable) |
| 319 | ;; Set the type. |
| 320 | (put symbol 'custom-type type) |
| 321 | (put symbol 'custom-version version))))) |
| 322 | |
| 323 | (custom-add-to-group 'iswitchb 'read-buffer-function 'custom-variable) |
| 324 | (put 'selection-coding-system 'custom-set |
| 325 | (lambda (symbol value) |
| 326 | (set-selection-coding-system value) |
| 327 | (set symbol value))) |
| 328 | |
| 329 | ;; Record cus-start as loaded |
| 330 | ;; if we have set up all the info that we can set up. |
| 331 | ;; Don't record cus-start as loaded |
| 332 | ;; if we have set up only the standard values. |
| 333 | (unless purify-flag |
| 334 | (provide 'cus-start)) |
| 335 | |
| 336 | ;;; cus-start.el ends here |