;;; cus-start.el --- define customization properties of builtins
-;;
-;; Copyright (C) 1997, 1999, 2000, 2001, 2002, 2003, 2004,
-;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
-;;
+
+;; Copyright (C) 1997, 1999-2012 Free Software Foundation, Inc.
+
;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
;; Keywords: internal
;; Package: emacs
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
-;;
+
;; This file adds customize support for built-in variables.
;; While dumping Emacs, this file is loaded, but it only records
;;; Code:
+;; Elements of this list have the form:
+;; SYMBOL GROUP TYPE VERSION REST...
+;; SYMBOL is the name of the variable.
+;; GROUP is the custom group to which it belongs (may also be a list
+;; of groups)
+;; TYPE is the defcustom :type.
+;; VERSION is the defcustom :version (or nil).
+;; REST is a set of :KEYWORD VALUE pairs. Accepted :KEYWORDs are:
+;; :standard - standard value for SYMBOL (else use current value)
+;; :set - custom-set property
+;; :risky - risky-local-variable property
+;; :safe - safe-local-variable property
+;; :tag - custom-tag property
(let ((all '(;; alloc.c
(gc-cons-threshold alloc integer)
+ (gc-cons-percentage alloc float)
(garbage-collection-messages alloc boolean)
;; buffer.c
(mode-line-format mode-line sexp) ;Hard to do right.
"21.1")
(line-spacing display (choice (const :tag "none" nil) integer)
"22.1")
+ (cursor-in-non-selected-windows
+ cursor boolean nil
+ :tag "Cursor In Non-selected Windows"
+ :set (lambda (symbol value)
+ (set-default symbol value)
+ (force-mode-line-update t)))
+ (transient-mark-mode editing-basics boolean nil
+ :standard (not noninteractive)
+ :initialize custom-initialize-delay
+ :set custom-set-minor-mode)
+ (bidi-paragraph-direction
+ paragraphs
+ (choice
+ (const :tag "Left to Right" left-to-right)
+ (const :tag "Right to Left" right-to-left)
+ (const :tag "Dynamic, according to paragraph text" nil))
+ "24.1")
;; callint.c
(mark-even-if-inactive editing-basics boolean)
;; callproc.c
(exec-path execute
(repeat (choice (const :tag "default directory" nil)
(directory :format "%v"))))
+ (exec-suffixes execute (repeat string))
;; charset.c
(charset-map-path installation
(repeat (directory :format "%v")))
;; coding.c
(inhibit-eol-conversion mule boolean)
(eol-mnemonic-undecided mule string)
- (eol-mnemonic-unix mule string)
- (eol-mnemonic-dos mule string)
- (eol-mnemonic-mac mule string)
+ ;; startup.el fiddles with the values. IMO, would be
+ ;; simpler to just use #ifdefs in coding.c.
+ (eol-mnemonic-unix mule string nil
+ :standard
+ (if (memq system-type '(ms-dos windows-nt))
+ "(Unix)" ":"))
+ (eol-mnemonic-dos mule string nil
+ :standard
+ (if (memq system-type '(ms-dos windows-nt))
+ "\\" "(DOS)"))
+ (eol-mnemonic-mac mule string nil
+ :standard "(Mac)")
(file-coding-system-alist
mule
(alist
(inverse-video display boolean)
(visible-bell display boolean)
(no-redraw-on-reenter display boolean)
+
+ ;; dosfns.c
+ (dos-display-scancodes display boolean)
+ (dos-hyper-key keyboard integer)
+ (dos-super-key keyboard integer)
+ (dos-keypad-mode keyboard integer)
+
;; editfns.c
(user-full-name mail string)
;; eval.c
(max-mini-window-height limits
(choice (const :tag "quarter screen" nil)
number) "23.1")
- (stack-trace-on-error debug
- (choice (const :tag "off")
- (repeat :menu-tag "When"
- :value (nil)
- (symbol :format "%v"))
- (const :tag "always" t)))
(debug-on-error debug
(choice (const :tag "off")
(repeat :menu-tag "When"
(symbol :format "%v"))
(const :tag "always" t)))
(debug-ignored-errors debug (repeat (choice symbol regexp)))
- (debug-on-quit debug
- (choice (const :tag "off")
- (repeat :menu-tag "When"
- :value (nil)
- (symbol :format "%v"))
- (const :tag "always" t)))
- ;; fileio.c
- (delete-by-moving-to-trash auto-save boolean "23.1")
+ (debug-on-quit debug boolean)
+ (debug-on-signal debug boolean)
+ ;; fileio.c
+ (delete-by-moving-to-trash auto-save boolean "23.1")
(auto-save-visited-file-name auto-save boolean)
+ ;; filelock.c
+ (create-lockfiles files boolean "24.3")
+ (temporary-file-directory
+ ;; Darwin section added 24.1, does not seem worth :version bump.
+ files directory nil
+ :standard
+ (file-name-as-directory
+ ;; FIXME ? Should there be Ftemporary_file_directory to do this
+ ;; more robustly (cf set_local_socket in emacsclient.c).
+ ;; It could be used elsewhere, eg Fcall_process_region,
+ ;; server-socket-dir. See bug#7135.
+ (cond ((memq system-type '(ms-dos windows-nt))
+ (or (getenv "TEMP") (getenv "TMPDIR") (getenv "TMP")
+ "c:/temp"))
+ ((eq system-type 'darwin)
+ (or (getenv "TMPDIR") (getenv "TMP") (getenv "TEMP")
+ ;; See bug#7135.
+ (let ((tmp (ignore-errors
+ (shell-command-to-string
+ "getconf DARWIN_USER_TEMP_DIR"))))
+ (and (stringp tmp)
+ (setq tmp (replace-regexp-in-string
+ "\n\\'" "" tmp))
+ ;; Handles "getconf: Unrecognized variable..."
+ (file-directory-p tmp)
+ tmp))
+ "/tmp"))
+ (t
+ (or (getenv "TMPDIR") (getenv "TMP") (getenv "TEMP")
+ "/tmp"))))
+ :initialize custom-initialize-delay)
;; fns.c
(use-dialog-box menu boolean "21.1")
(use-file-dialog menu boolean "22.1")
(focus-follows-mouse frames boolean "20.3")
+ ;; fontset.c
+ (vertical-centering-font-regexp display regexp)
;; frame.c
(default-frame-alist frames
(repeat (cons :format "%v"
(other :tag "hidden by keypress" 1))
"22.1")
(make-pointer-invisible mouse boolean "23.2")
+ (menu-bar-mode frames boolean nil
+ ;; FIXME?
+; :initialize custom-initialize-default
+ :set custom-set-minor-mode)
+ (tool-bar-mode (frames mouse) boolean nil
+; :initialize custom-initialize-default
+ :set custom-set-minor-mode)
;; fringe.c
(overflow-newline-into-fringe fringe boolean)
+ ;; image.c
+ (imagemagick-render-type image integer "24.1")
;; indent.c
(indent-tabs-mode indent boolean)
;; keyboard.c
(const :tag "only shift-selection or mouse-drag" only)
(const :tag "off" nil))
"24.1")
- (suggest-key-bindings keyboard (choice (const :tag "off" nil)
- (integer :tag "time" 2)
- (other :tag "on")))
+ (debug-on-event debug
+ (choice (const :tag "None" nil)
+ (const :tag "When sent SIGUSR1" sigusr1)
+ (const :tag "When sent SIGUSR2" sigusr2))
+ "24.1")
;; This is not good news because it will use the wrong
;; version-specific directories when you upgrade. We need
(const control) (const meta)
(const alt) (const hyper)
(const super)) "23.1")
+ (ns-right-control-modifier
+ ns
+ (choice (const :tag "No modifier (work as control)" none)
+ (const :tag "Use the value of ns-control-modifier"
+ left)
+ (const control) (const meta)
+ (const alt) (const hyper)
+ (const super)) "24.0")
(ns-command-modifier
ns
(choice (const :tag "No modifier" nil)
(const control) (const meta)
(const alt) (const hyper)
(const super)) "23.1")
+ (ns-right-command-modifier
+ ns
+ (choice (const :tag "No modifier (work as command)" none)
+ (const :tag "Use the value of ns-command-modifier"
+ left)
+ (const control) (const meta)
+ (const alt) (const hyper)
+ (const super)) "24.0")
(ns-alternate-modifier
ns
(choice (const :tag "No modifier (work as alternate/option)" none)
(const alt) (const hyper)
(const super)) "23.1")
(ns-antialias-text ns boolean "23.1")
+ (ns-auto-hide-menu-bar ns boolean "24.0")
;; process.c
(delete-exited-processes processes-basics boolean)
;; syntax.c
;; window.c
(temp-buffer-show-function windows (choice (const nil) function))
(next-screen-context-lines windows integer)
- (window-min-height windows integer)
- (window-min-width windows integer)
(scroll-preserve-screen-position
windows (choice
(const :tag "Off (nil)" :value nil)
(const :tag "Full screen (t)" :value t)
(other :tag "Always" 1)) "22.1")
- (recenter-redisplay windows
- (choice
- (const :tag "Never (nil)" :value nil)
- (const :tag "Only on ttys" :value tty)
- (other :tag "Always" t))
- "23.1")
+ (recenter-redisplay
+ windows (choice
+ (const :tag "Never (nil)" :value nil)
+ (const :tag "Only on ttys" :value tty)
+ (other :tag "Always" t)) "23.1")
+ (window-combination-resize windows boolean "24.1")
+ (window-combination-limit windows boolean "24.1")
;; xdisp.c
+ (show-trailing-whitespace whitespace-faces boolean nil
+ :safe booleanp)
(scroll-step windows integer)
(scroll-conservatively windows integer)
(scroll-margin windows integer)
(hscroll-margin windows integer "22.1")
(hscroll-step windows number "22.1")
(truncate-partial-width-windows display boolean "23.1")
+ (make-cursor-line-fully-visible windows boolean)
(mode-line-inverse-video mode-line boolean)
(mode-line-in-non-selected-windows mode-line boolean "22.1")
(line-number-display-limit display
(const :tag "Both" :value both)
(const :tag "Both-horiz" :value both-horiz)
(const :tag "Text-image-horiz" :value text-image-horiz)
- (const :tag "System default" :value nil)) "23.3")
- (tool-bar-max-label-size frames integer "23.3")
+ (const :tag "System default" :value nil)) "24.1")
+ (tool-bar-max-label-size frames integer "24.1")
+ (auto-hscroll-mode scrolling boolean "21.1")
+ (void-text-area-pointer cursor
+ (choice
+ (const :tag "Standard (text pointer)" :value nil)
+ (const :tag "Arrow" :value arrow)
+ (const :tag "Text pointer" :value text)
+ (const :tag "Hand" :value hand)
+ (const :tag "Vertical dragger" :value vdrag)
+ (const :tag "Horizontal dragger" :value hdrag)
+ (const :tag "Same as mode line" :value modeline)
+ (const :tag "Hourglass" :value hourglass)))
+ (display-hourglass cursor boolean)
+ (hourglass-delay cursor number)
;; xfaces.c
+ (font-list-limit display integer)
(scalable-fonts-allowed display boolean "22.1")
;; xfns.c
(x-bitmap-file-path installation
(x-use-underline-position-properties display boolean "22.1")
(x-underline-at-descent-line display boolean "22.1")
(x-stretch-cursor display boolean "21.1")
+ ;; xselect.c
+ (x-select-enable-clipboard-manager killing boolean "24.1")
;; xsettings.c
(font-use-system-font font-selection boolean "23.2")))
- this symbol group type standard version native-p
+ this symbol group type standard version native-p rest prop propval
;; This function turns a value
;; into an expression which produces that value.
(quoter (lambda (sexp)
group (nth 1 this)
type (nth 2 this)
version (nth 3 this)
+ rest (nthcdr 4 this)
;; If we did not specify any standard value expression above,
;; use the current value as the standard value.
- standard (if (nthcdr 4 this)
- (nth 4 this)
- (when (default-boundp symbol)
- (funcall quoter (default-value symbol))))
+ standard (if (setq prop (memq :standard rest))
+ (cadr prop)
+ (if (default-boundp symbol)
+ (funcall quoter (default-value symbol))))
;; Don't complain about missing variables which are
;; irrelevant to this platform.
native-p (save-match-data
(featurep 'ns))
((string-match "\\`x-.*gtk" (symbol-name symbol))
(featurep 'gtk))
+ ((string-match "clipboard-manager" (symbol-name symbol))
+ (boundp 'x-select-enable-clipboard-manager))
((string-match "\\`x-" (symbol-name symbol))
(fboundp 'x-create-frame))
((string-match "selection" (symbol-name symbol))
(fboundp 'x-selection-exists-p))
((string-match "fringe" (symbol-name symbol))
(fboundp 'define-fringe-bitmap))
+ ((string-match "\\`imagemagick" (symbol-name symbol))
+ (fboundp 'imagemagick-types))
((equal "font-use-system-font" (symbol-name symbol))
(featurep 'system-font-setting))
;; Conditioned on x-create-frame, because that's
;; the condition for loadup.el to preload tool-bar.el.
((string-match "tool-bar-" (symbol-name symbol))
(fboundp 'x-create-frame))
+ ((equal "vertical-centering-font-regexp"
+ (symbol-name symbol))
+ ;; Any function from fontset.c will do.
+ (fboundp 'new-fontset))
(t t))))
(if (not (boundp symbol))
;; If variables are removed from C code, give an error here!
;; Save the standard value, unless we already did.
(or (get symbol 'standard-value)
(put symbol 'standard-value (list standard)))
- ;; If this is NOT while dumping Emacs,
- ;; set up the rest of the customization info.
+ ;; We need these properties independent of whether cus-start is loaded.
+ (if (setq prop (memq :safe rest))
+ (put symbol 'safe-local-variable (cadr prop)))
+ (if (setq prop (memq :risky rest))
+ (put symbol 'risky-local-variable (cadr prop)))
+ (if (setq prop (memq :set rest))
+ (put symbol 'custom-set (cadr prop)))
+ ;; Note this is the _only_ initialize property we handle.
+ (if (eq (cadr (memq :initialize rest)) 'custom-initialize-delay)
+ (push symbol custom-delayed-init-variables))
+ ;; If this is NOT while dumping Emacs, set up the rest of the
+ ;; customization info. This is the stuff that is not needed
+ ;; until someone does M-x customize etc.
(unless purify-flag
- ;; Add it to the right group.
- (custom-add-to-group group symbol 'custom-variable)
+ ;; Add it to the right group(s).
+ (if (listp group)
+ (dolist (g group)
+ (custom-add-to-group g symbol 'custom-variable))
+ (custom-add-to-group group symbol 'custom-variable))
;; Set the type.
(put symbol 'custom-type type)
- (put symbol 'custom-version version)))))
+ (if version (put symbol 'custom-version version))
+ (while rest
+ (setq prop (car rest)
+ propval (cadr rest)
+ rest (nthcdr 2 rest))
+ (cond ((memq prop '(:standard :risky :safe :set))) ; handled above
+ ((eq prop :tag)
+ (put symbol 'custom-tag propval))))))))
(custom-add-to-group 'iswitchb 'read-buffer-function 'custom-variable)
(custom-add-to-group 'font-lock 'open-paren-in-column-0-is-defun-start
'custom-variable)
-;; Record cus-start as loaded
-;; if we have set up all the info that we can set up.
-;; Don't record cus-start as loaded
-;; if we have set up only the standard values.
+;; Record cus-start as loaded if we have set up all the info that we can.
+;; Don't record it as loaded if we have only set up the standard values
+;; and safe/risky properties.
(unless purify-flag
(provide 'cus-start))
-;; arch-tag: 4502730d-bcb3-4f5e-99a3-a86f2d54af60
;;; cus-start.el ends here