X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/bfab7c6ec74dc55d640ef36f8cb1790a1420f991..b336bfcdf39f1e4d35bff4a7bd01d3b4bca8f516:/lisp/cus-edit.el diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index 029de93baf..b815e31f31 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -1,7 +1,7 @@ ;;; cus-edit.el --- tools for customizing Emacs and Lisp packages ;; -;; Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +;; Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005, +;; 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. ;; ;; Author: Per Abrahamsen ;; Maintainer: FSF @@ -9,10 +9,10 @@ ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; 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 3, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, 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 @@ -20,9 +20,7 @@ ;; 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., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: ;; @@ -283,7 +281,7 @@ :group 'environment) (defgroup hardware nil - "Support for interfacing with exotic hardware." + "Support for interfacing with miscellaneous hardware." :group 'environment) (defgroup terminals nil @@ -294,10 +292,6 @@ "Front-ends/assistants for, or emulators of, UNIX features." :group 'environment) -(defgroup vms nil - "Support code for vms." - :group 'environment) - (defgroup i18n nil "Internationalization and alternate character-set support." :link '(custom-manual "(emacs)International") @@ -313,11 +307,11 @@ :group 'environment) (defgroup data nil - "Support editing files of data." + "Support for editing files of data." :group 'emacs) (defgroup files nil - "Support editing files." + "Support for editing files." :group 'emacs) (defgroup wp nil @@ -449,13 +443,6 @@ :link '(custom-manual "(emacs)Windows") :group 'environment) -(defgroup mac nil - "Mac specific features." - :link '(custom-manual "(emacs)Mac OS") - :group 'environment - :version "22.1" - :prefix "mac-") - ;;; Custom mode keymaps (defvar custom-mode-map @@ -722,7 +709,7 @@ If `last', order groups after non-groups." (const :tag "none" nil)) :group 'custom-menu) -;;;###autoload (add-hook 'same-window-regexps "\\`\\*Customiz.*\\*\\'") +;;;###autoload (add-hook 'same-window-regexps (purecopy "\\`\\*Customiz.*\\*\\'")) (defun custom-sort-items (items sort-alphabetically order-groups) "Return a sorted copy of ITEMS. @@ -754,8 +741,7 @@ groups after non-groups, if nil do not order groups at all." ;;; Custom Mode Commands. ;; This variable is used by `custom-tool-bar-map', or directly by -;; `custom-buffer-create-internal' if the toolbar is not present and -;; `custom-buffer-verbose-help' is non-nil. +;; `custom-buffer-create-internal' if `custom-buffer-verbose-help' is non-nil. (defvar custom-commands '(("Set for current session" Custom-set t @@ -1150,7 +1136,7 @@ Show the buffer in another window, but don't select it." (unless (eq symbol basevar) (message "`%s' is an alias for `%s'" symbol basevar)))) -(defvar customize-changed-options-previous-release "21.1" +(defvar customize-changed-options-previous-release "22.1" "Version for `customize-changed-options' to refer back to by default.") ;; Packages will update this variable, so make it available. @@ -1439,7 +1425,7 @@ that are not customizable options, as well as faces and groups ;;;###autoload (defun customize-apropos-options (regexp &optional arg) "Customize all loaded customizable options matching REGEXP. -With prefix arg, include variables that are not customizable options +With prefix ARG, include variables that are not customizable options \(but it is better to use `apropos-variable' if you want to find those)." (interactive "sCustomize options (regexp): \nP") (customize-apropos regexp (or arg 'options))) @@ -1469,7 +1455,7 @@ links: groups have links to subgroups." :group 'custom-buffer) (defcustom custom-buffer-done-kill nil - "*Non-nil means exiting a Custom buffer should kill it." + "Non-nil means exiting a Custom buffer should kill it." :type 'boolean :version "22.1" :group 'custom-buffer) @@ -1595,37 +1581,41 @@ possibly because you started Emacs with `-q'.") :help-echo "Read the Emacs manual." "(emacs)Top") (widget-insert ".")) - ;; Insert custom command buttons if the toolbar is not in use. - (widget-insert "\n") - ;; tool-bar is not dumped in builds without x. - (when (not (and (bound-and-true-p tool-bar-mode) (display-graphic-p))) - (if custom-buffer-verbose-help - (widget-insert "\n + ;; The custom command buttons are also in the toolbar, so for a + ;; time they were not inserted in the buffer if the toolbar was in use. + ;; But it can be a little confusing for the buffer layout to + ;; change according to whether or nor the toolbar is on, not to + ;; mention that a custom buffer can in theory be created in a + ;; frame with a toolbar, then later viewed in one without. + ;; So now the buttons are always inserted in the buffer. (Bug#1326) +;;; (when (not (and (bound-and-true-p tool-bar-mode) (display-graphic-p))) + (if custom-buffer-verbose-help + (widget-insert "\n Operate on all settings in this buffer that are not marked HIDDEN:\n")) - (let ((button (lambda (tag action active help icon) - (widget-insert " ") - (if (eval active) - (widget-create 'push-button :tag tag - :help-echo help :action action)))) - (commands custom-commands)) - (apply button (pop commands)) ; Set for current session - (apply button (pop commands)) ; Save for future sessions - (if custom-reset-button-menu - (progn - (widget-insert " ") - (widget-create 'push-button - :tag "Reset buffer" - :help-echo "Show a menu with reset operations." - :mouse-down-action 'ignore - :action 'custom-reset)) - (widget-insert "\n") - (apply button (pop commands)) ; Undo edits - (apply button (pop commands)) ; Reset to saved - (apply button (pop commands)) ; Erase customization - (widget-insert " ") - (pop commands) ; Help (omitted) - (apply button (pop commands))))) ; Exit + (let ((button (lambda (tag action active help icon) + (widget-insert " ") + (if (eval active) + (widget-create 'push-button :tag tag + :help-echo help :action action)))) + (commands custom-commands)) + (apply button (pop commands)) ; Set for current session + (apply button (pop commands)) ; Save for future sessions + (if custom-reset-button-menu + (progn + (widget-insert " ") + (widget-create 'push-button + :tag "Reset buffer" + :help-echo "Show a menu with reset operations." + :mouse-down-action 'ignore + :action 'custom-reset)) + (widget-insert "\n") + (apply button (pop commands)) ; Undo edits + (apply button (pop commands)) ; Reset to saved + (apply button (pop commands)) ; Erase customization + (widget-insert " ") + (pop commands) ; Help (omitted) + (apply button (pop commands)))) ; Exit (widget-insert "\n\n")) ;; Now populate the custom buffer. @@ -1823,8 +1813,7 @@ item in another window.\n\n")) (:weight bold :slant italic :underline t))) "Face used when the customize item is invalid." :group 'custom-magic-faces) -;; backward-compatibility alias -(put 'custom-invalid-face 'face-alias 'custom-invalid) +(define-obsolete-face-alias 'custom-invalid-face 'custom-invalid "22.1") (defface custom-rogue '((((class color)) (:foreground "pink" :background "black")) @@ -1832,8 +1821,7 @@ item in another window.\n\n")) (:underline t))) "Face used when the customize item is not defined for customization." :group 'custom-magic-faces) -;; backward-compatibility alias -(put 'custom-rogue-face 'face-alias 'custom-rogue) +(define-obsolete-face-alias 'custom-rogue-face 'custom-rogue "22.1") (defface custom-modified '((((min-colors 88) (class color)) (:foreground "white" :background "blue1")) @@ -1843,8 +1831,7 @@ item in another window.\n\n")) (:slant italic :bold))) "Face used when the customize item has been modified." :group 'custom-magic-faces) -;; backward-compatibility alias -(put 'custom-modified-face 'face-alias 'custom-modified) +(define-obsolete-face-alias 'custom-modified-face 'custom-modified "22.1") (defface custom-set '((((min-colors 88) (class color)) (:foreground "blue1" :background "white")) @@ -1854,8 +1841,7 @@ item in another window.\n\n")) (:slant italic))) "Face used when the customize item has been set." :group 'custom-magic-faces) -;; backward-compatibility alias -(put 'custom-set-face 'face-alias 'custom-set) +(define-obsolete-face-alias 'custom-set-face 'custom-set "22.1") (defface custom-changed '((((min-colors 88) (class color)) (:foreground "white" :background "blue1")) @@ -1865,8 +1851,7 @@ item in another window.\n\n")) (:slant italic))) "Face used when the customize item has been changed." :group 'custom-magic-faces) -;; backward-compatibility alias -(put 'custom-changed-face 'face-alias 'custom-changed) +(define-obsolete-face-alias 'custom-changed-face 'custom-changed "22.1") (defface custom-themed '((((min-colors 88) (class color)) (:foreground "white" :background "blue1")) @@ -1880,8 +1865,7 @@ item in another window.\n\n")) (defface custom-saved '((t (:underline t))) "Face used when the customize item has been saved." :group 'custom-magic-faces) -;; backward-compatibility alias -(put 'custom-saved-face 'face-alias 'custom-saved) +(define-obsolete-face-alias 'custom-saved-face 'custom-saved "22.1") (defconst custom-magic-alist '((nil "#" underline "\ @@ -2070,7 +2054,7 @@ and `face'." ;;; The `custom' Widget. (defface custom-button - '((((type x w32 mac) (class color)) ; Like default modeline + '((((type x w32 ns) (class color)) ; Like default modeline (:box (:line-width 2 :style released-button) :background "lightgrey" :foreground "black")) (t @@ -2078,15 +2062,17 @@ and `face'." "Face for custom buffer buttons if `custom-raised-buttons' is non-nil." :version "21.1" :group 'custom-faces) -;; backward-compatibility alias -(put 'custom-button-face 'face-alias 'custom-button) +(define-obsolete-face-alias 'custom-button-face 'custom-button "22.1") (defface custom-button-mouse - '((((type x w32 mac) (class color)) + '((((type x w32 ns) (class color)) (:box (:line-width 2 :style released-button) :background "grey90" :foreground "black")) (t - nil)) + ;; This is for text terminals that support mouse, like GPM mouse + ;; or the MS-DOS terminal: inverse-video makes the button stand + ;; out on mouse-over. + (:inverse-video t))) "Mouse face for custom buffer buttons if `custom-raised-buttons' is non-nil." :version "22.1" :group 'custom-faces) @@ -2104,7 +2090,7 @@ and `face'." (if custom-raised-buttons 'custom-button-mouse 'highlight)) (defface custom-button-pressed - '((((type x w32 mac) (class color)) + '((((type x w32 ns) (class color)) (:box (:line-width 2 :style pressed-button) :background "lightgrey" :foreground "black")) (t @@ -2112,8 +2098,8 @@ and `face'." "Face for pressed custom buttons if `custom-raised-buttons' is non-nil." :version "21.1" :group 'custom-faces) -;; backward-compatibility alias -(put 'custom-button-pressed-face 'face-alias 'custom-button-pressed) +(define-obsolete-face-alias 'custom-button-pressed-face + 'custom-button-pressed "22.1") (defface custom-button-pressed-unraised '((default :inherit custom-button-unraised) @@ -2131,8 +2117,8 @@ and `face'." (defface custom-documentation '((t nil)) "Face used for documentation strings in customization buffers." :group 'custom-faces) -;; backward-compatibility alias -(put 'custom-documentation-face 'face-alias 'custom-documentation) +(define-obsolete-face-alias 'custom-documentation-face + 'custom-documentation "22.1") (defface custom-state '((((class color) (background dark)) @@ -2143,8 +2129,7 @@ and `face'." (t nil)) "Face used for State descriptions in the customize buffer." :group 'custom-faces) -;; backward-compatibility alias -(put 'custom-state-face 'face-alias 'custom-state) +(define-obsolete-face-alias 'custom-state-face 'custom-state "22.1") (defface custom-link '((t :inherit link)) @@ -2199,9 +2184,10 @@ and `face'." (when (and (>= pos from) (<= pos to)) (condition-case nil (progn - (if (> column 0) - (goto-line line) - (goto-line (1+ line))) + (goto-char (point-min)) + (forward-line (if (> column 0) + (1- line) + line)) (move-to-column column)) (error nil))))) @@ -2257,8 +2243,8 @@ and `face'." "Toggle visibility of WIDGET." (custom-load-widget widget) (let ((state (widget-get widget :custom-state))) - (cond ((memq state '(invalid modified)) - (error "There are unset changes")) + (cond ((memq state '(invalid modified set)) + (error "There are unsaved changes")) ((eq state 'hidden) (widget-put widget :custom-state 'unknown)) (t @@ -2373,11 +2359,10 @@ If INITIAL-STRING is non-nil, use that rather than \"Parent groups:\"." :background "dim gray") (t :slant italic)) - "Face used for comments on variables or faces" + "Face used for comments on variables or faces." :version "21.1" :group 'custom-faces) -;; backward-compatibility alias -(put 'custom-comment-face 'face-alias 'custom-comment) +(define-obsolete-face-alias 'custom-comment-face 'custom-comment "22.1") ;; like font-lock-comment-face (defface custom-comment-tag @@ -2388,17 +2373,16 @@ If INITIAL-STRING is non-nil, use that rather than \"Parent groups:\"." (((class grayscale) (background dark)) (:foreground "LightGray" :weight bold :slant italic)) (t (:weight bold))) - "Face used for variables or faces comment tags" + "Face used for the comment tag on variables or faces." :group 'custom-faces) -;; backward-compatibility alias -(put 'custom-comment-tag-face 'face-alias 'custom-comment-tag) +(define-obsolete-face-alias 'custom-comment-tag-face 'custom-comment-tag "22.1") (define-widget 'custom-comment 'string "User comment." :tag "Comment" :help-echo "Edit a comment here." - :sample-face 'custom-comment-tag-face - :value-face 'custom-comment-face + :sample-face 'custom-comment-tag + :value-face 'custom-comment :shown nil :create 'custom-comment-create) @@ -2444,14 +2428,14 @@ If INITIAL-STRING is non-nil, use that rather than \"Parent groups:\"." (t (:weight bold))) "Face used for unpushable variable tags." :group 'custom-faces) -;; backward-compatibility alias -(put 'custom-variable-tag-face 'face-alias 'custom-variable-tag) +(define-obsolete-face-alias 'custom-variable-tag-face + 'custom-variable-tag "22.1") (defface custom-variable-button '((t (:underline t :weight bold))) "Face used for pushable variable tags." :group 'custom-faces) -;; backward-compatibility alias -(put 'custom-variable-button-face 'face-alias 'custom-variable-button) +(define-obsolete-face-alias 'custom-variable-button-face + 'custom-variable-button "22.1") (defcustom custom-variable-default-form 'edit "Default form of displaying variable values." @@ -2554,7 +2538,7 @@ try matching its doc string against `custom-guess-doc-alist'." (push (widget-create-child-and-convert widget 'item :format "%{%t%}: " - :sample-face 'custom-variable-tag-face + :sample-face 'custom-variable-tag :tag tag :parent widget) buttons) @@ -2607,8 +2591,8 @@ try matching its doc string against `custom-guess-doc-alist'." :action 'custom-tag-action :help-echo "Change value of this option." :mouse-down-action 'custom-tag-mouse-down-action - :button-face 'custom-variable-button-face - :sample-face 'custom-variable-tag-face + :button-face 'custom-variable-button + :sample-face 'custom-variable-tag tag) buttons) (insert " ") @@ -3125,7 +3109,7 @@ Also change :reverse-video to :inverse-video." (defun custom-face-edit-attribute-tag (widget) - "Returns the first :tag property in WIDGET or one of its children." + "Return the first :tag property in WIDGET or one of its children." (let ((tag (widget-get widget :tag))) (or (and (not (equal tag "")) tag) (let ((children (widget-get widget :children))) @@ -3163,10 +3147,10 @@ OS/2 Presentation Manager.") :sibling-args (:help-echo "\ Windows NT/9X.") w32) - (const :format "MAC " + (const :format "NS " :sibling-args (:help-echo "\ -Macintosh OS.") - mac) +GNUstep or Macintosh OS Cocoa interface.") + ns) (const :format "DOS " :sibling-args (:help-echo "\ Plain MS-DOS.") @@ -3220,11 +3204,10 @@ Only match frames that support the specified face attributes.") ;;; The `custom-face' Widget. (defface custom-face-tag - `((t (:weight bold :height 1.2 :inherit variable-pitch))) + `((t :inherit custom-variable-tag)) "Face used for face tags." :group 'custom-faces) -;; backward-compatibility alias -(put 'custom-face-tag-face 'face-alias 'custom-face-tag) +(define-obsolete-face-alias 'custom-face-tag-face 'custom-face-tag "22.1") (defcustom custom-face-default-form 'selected "Default form of displaying face definition." @@ -3236,7 +3219,7 @@ Only match frames that support the specified face attributes.") (define-widget 'custom-face 'custom "Customize face." - :sample-face 'custom-face-tag-face + :sample-face 'custom-face-tag :help-echo "Set or reset this face." :documentation-property #'face-doc-string :value-create 'custom-face-value-create @@ -3808,8 +3791,7 @@ and so forth. The remaining group tags are shown with `custom-group-tag'." (t (:weight bold))) "Face used for group tags." :group 'custom-faces) -;; backward-compatibility alias -(put 'custom-group-tag-face-1 'face-alias 'custom-group-tag-1) +(define-obsolete-face-alias 'custom-group-tag-face-1 'custom-group-tag-1 "22.1") (defface custom-group-tag `((((class color) @@ -3824,8 +3806,7 @@ and so forth. The remaining group tags are shown with `custom-group-tag'." (t (:weight bold))) "Face used for low level group tags." :group 'custom-faces) -;; backward-compatibility alias -(put 'custom-group-tag-face 'face-alias 'custom-group-tag) +(define-obsolete-face-alias 'custom-group-tag-face 'custom-group-tag "22.1") (define-widget 'custom-group 'custom "Customize group." @@ -3884,7 +3865,8 @@ If GROUPS-ONLY non-nil, return only those members that are groups." (symbol (widget-value widget)) (members (custom-group-members symbol (and (eq custom-buffer-style 'tree) - custom-browse-only-groups)))) + custom-browse-only-groups))) + (doc (widget-docstring widget))) (cond ((and (eq custom-buffer-style 'tree) (eq state 'hidden) (or members (custom-unloaded-widget-p widget))) @@ -4012,7 +3994,11 @@ If GROUPS-ONLY non-nil, return only those members that are groups." (let ((start (point))) (insert tag " group: ") (widget-specify-sample widget start (point))) - (insert (widget-docstring widget)) + (cond + ((not doc) + (insert " Group definition missing. ")) + ((< (length doc) 50) + (insert doc))) ;; Create visibility indicator. (unless (eq custom-buffer-style 'links) (insert "--------") @@ -4039,8 +4025,9 @@ If GROUPS-ONLY non-nil, return only those members that are groups." ;; Update buttons. (widget-put widget :buttons buttons) ;; Insert documentation. - (widget-add-documentation-string-button - widget :visibility-widget 'custom-visibility) + (when (and doc (>= (length doc) 50)) + (widget-add-documentation-string-button + widget :visibility-widget 'custom-visibility)) ;; Parent groups. (if nil ;;; This should test that the buffer @@ -4240,7 +4227,7 @@ and hence will not set `custom-file' to that file either." :doc "Please read entire docstring below before setting \ this through Custom. -Click om \"More\" \(or position point there and press RETURN) +Click on \"More\" \(or position point there and press RETURN) if only the first line of the docstring is shown.")) :group 'customize) @@ -4278,9 +4265,18 @@ if only the first line of the docstring is shown.")) (recentf-expand-file-name (custom-file))) "\\'") recentf-exclude))) - (old-buffer (find-buffer-visiting filename))) + (old-buffer (find-buffer-visiting filename)) + old-buffer-name) + (with-current-buffer (let ((find-file-visit-truename t)) (or old-buffer (find-file-noselect filename))) + ;; We'll save using file-precious-flag, so avoid destroying + ;; symlinks. (If we're not already visiting the buffer, this is + ;; handled by find-file-visit-truename, above.) + (when old-buffer + (setq old-buffer-name (buffer-file-name)) + (set-visited-file-name (file-chase-links filename))) + (unless (eq major-mode 'emacs-lisp-mode) (emacs-lisp-mode)) (let ((inhibit-read-only t)) @@ -4288,7 +4284,10 @@ if only the first line of the docstring is shown.")) (custom-save-faces)) (let ((file-precious-flag t)) (save-buffer)) - (unless old-buffer + (if old-buffer + (progn + (set-visited-file-name old-buffer-name) + (set-buffer-modified-p nil)) (kill-buffer (current-buffer)))))) ;;;###autoload @@ -4636,7 +4635,7 @@ The following commands are available: \\\ Move to next button, link or editable field. \\[widget-forward] -Move to previous button, link or editable field. \\[advertised-widget-backward] +Move to previous button, link or editable field. \\[widget-backward] \\\ Complete content of editable text field. \\[widget-complete] \\\ @@ -4653,17 +4652,16 @@ Entry to this mode calls the value of `Custom-mode-hook' if that value is non-nil." (use-local-map custom-mode-map) (easy-menu-add Custom-mode-menu) - (when (display-graphic-p) - (set (make-local-variable 'tool-bar-map) - (or custom-tool-bar-map - ;; Set up `custom-tool-bar-map'. - (let ((map (make-sparse-keymap))) - (mapc - (lambda (arg) - (tool-bar-local-item-from-menu - (nth 1 arg) (nth 4 arg) map custom-mode-map)) - custom-commands) - (setq custom-tool-bar-map map))))) + (set (make-local-variable 'tool-bar-map) + (or custom-tool-bar-map + ;; Set up `custom-tool-bar-map'. + (let ((map (make-sparse-keymap))) + (mapc + (lambda (arg) + (tool-bar-local-item-from-menu + (nth 1 arg) (nth 4 arg) map custom-mode-map)) + custom-commands) + (setq custom-tool-bar-map map)))) (make-local-variable 'custom-options) (make-local-variable 'custom-local-buffer) (make-local-variable 'widget-documentation-face)