aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChong Yidong2012-04-22 21:58:00 +0800
committerChong Yidong2012-04-22 21:58:00 +0800
commitcf20dee0248049a925275f54381cf63bb2017e35 (patch)
tree0a7922c4ea3258733023c58cf50d8fe1a60e7b43
parent583e23bd57621892cce187359afd952f7850e7bc (diff)
downloademacs-cf20dee0248049a925275f54381cf63bb2017e35.tar.gz
emacs-cf20dee0248049a925275f54381cf63bb2017e35.zip
Tweaks to Customize interface. Set custom-reset-button-menu to t.
* cus-edit.el (custom-commands, custom-reset-menu) (Custom-reset-standard): Tweak labels. (custom-reset-button-menu): Change default to t. (custom-buffer-create-internal): For the custom-reset-button-menu case, put the revert button first. (custom-group-subtitle): New face. (custom-group-value-create): Align docstring to a specific column. * wid-edit.el (widget-documentation-link-add): Don't handle indentation in this function. (widget-documentation-string-indent-to): New function. (widget-documentation-string-value-create): Use it. * autorevert.el (auto-revert): * epg-config.el (epg): * ibuffer.el (ibuffer): * mpc.el (mpc): * ses.el (ses): * eshell/eshell.el (eshell): * net/ange-ftp.el (ange-ftp): * progmodes/ebnf2ps.el (postscript): * progmodes/flymake.el (flymake): * progmodes/prolog.el (prolog): * progmodes/verilog-mode.el (verilog-mode): * progmodes/which-func.el (which-func): * textmodes/picture.el (picture): * textmodes/tildify.el (tildify): * vc/ediff.el (ediff): Tweak defgroups to improve presentation in customization buffers.
-rw-r--r--etc/NEWS6
-rw-r--r--lisp/ChangeLog33
-rw-r--r--lisp/autorevert.el5
-rw-r--r--lisp/calc/calc.el2
-rw-r--r--lisp/cus-edit.el137
-rw-r--r--lisp/epg-config.el6
-rw-r--r--lisp/eshell/eshell.el3
-rw-r--r--lisp/ibuffer.el9
-rw-r--r--lisp/mpc.el2
-rw-r--r--lisp/net/ange-ftp.el3
-rw-r--r--lisp/net/tramp.el2
-rw-r--r--lisp/progmodes/ebnf2ps.el4
-rw-r--r--lisp/progmodes/flymake.el2
-rw-r--r--lisp/progmodes/gud.el5
-rw-r--r--lisp/progmodes/prolog.el2
-rw-r--r--lisp/progmodes/verilog-mode.el2
-rw-r--r--lisp/progmodes/which-func.el2
-rw-r--r--lisp/ses.el1
-rw-r--r--lisp/term/xterm.el2
-rw-r--r--lisp/textmodes/picture.el2
-rw-r--r--lisp/textmodes/tildify.el2
-rw-r--r--lisp/vc/ediff.el2
-rw-r--r--lisp/vc/vc.el2
-rw-r--r--lisp/wid-edit.el40
24 files changed, 165 insertions, 111 deletions
diff --git a/etc/NEWS b/etc/NEWS
index b2c487ba15b..298a87c1f08 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -74,7 +74,9 @@ character when doing minibuffer filename prompts.
74 74
75* Changes in Specialized Modes and Packages in Emacs 24.2 75* Changes in Specialized Modes and Packages in Emacs 24.2
76 76
77** which-function-mode now applies to all applicable major modes by default. 77** Customize
78
79*** `custom-reset-button-menu' now defaults to t.
78 80
79** erc will look up server/channel names via auth-source and use the 81** erc will look up server/channel names via auth-source and use the
80channel keys found, if any. 82channel keys found, if any.
@@ -87,6 +89,8 @@ closing brackets to be aligned with the line of the opening bracket.
87 89
88** FIXME something happened to ses.el, 2012-04-17. 90** FIXME something happened to ses.el, 2012-04-17.
89 91
92** which-function-mode now applies to all applicable major modes by default.
93
90** Obsolete packages: 94** Obsolete packages:
91 95
92*** mailpost.el 96*** mailpost.el
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index d5576370727..14a83de342a 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,36 @@
12012-04-22 Chong Yidong <cyd@gnu.org>
2
3 * cus-edit.el (custom-commands, custom-reset-menu)
4 (Custom-reset-standard): Tweak labels.
5 (custom-reset-button-menu): Change default to t.
6 (custom-buffer-create-internal): For the custom-reset-button-menu
7 case, put the revert button first.
8 (custom-group-subtitle): New face.
9 (custom-group-value-create): Align docstring to a specific column.
10
11 * wid-edit.el (widget-documentation-link-add): Don't handle
12 indentation in this function.
13 (widget-documentation-string-indent-to): New function.
14 (widget-documentation-string-value-create): Use it.
15
16 * autorevert.el (auto-revert):
17 * epg-config.el (epg):
18 * ibuffer.el (ibuffer):
19 * mpc.el (mpc):
20 * ses.el (ses):
21 * eshell/eshell.el (eshell):
22 * net/ange-ftp.el (ange-ftp):
23 * progmodes/ebnf2ps.el (postscript):
24 * progmodes/flymake.el (flymake):
25 * progmodes/prolog.el (prolog):
26 * progmodes/verilog-mode.el (verilog-mode):
27 * progmodes/which-func.el (which-func):
28 * term/xterm.el (xterm):
29 * textmodes/picture.el (picture):
30 * textmodes/tildify.el (tildify):
31 * vc/ediff.el (ediff): Tweak defgroups to improve presentation in
32 customization buffers.
33
12012-04-22 Alan Mackenzie <acm@muc.de> 342012-04-22 Alan Mackenzie <acm@muc.de>
2 35
3 * progmodes/cc-engine.el (c-append-lower-brace-pair-to-state-cache): 36 * progmodes/cc-engine.el (c-append-lower-brace-pair-to-state-cache):
diff --git a/lisp/autorevert.el b/lisp/autorevert.el
index e0bde7c6dc5..11005f49f44 100644
--- a/lisp/autorevert.el
+++ b/lisp/autorevert.el
@@ -104,9 +104,8 @@
104 104
105(defgroup auto-revert nil 105(defgroup auto-revert nil
106 "Revert individual buffers when files on disk change. 106 "Revert individual buffers when files on disk change.
107 107Auto-Revert mode enables auto-revert in individual buffers.
108Auto-Revert Mode can be activated for individual buffer. 108Global Auto-Revert mode does so in all buffers."
109Global Auto-Revert Mode applies to all buffers."
110 :group 'files 109 :group 'files
111 :group 'convenience) 110 :group 'convenience)
112 111
diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el
index 5224d1aa4f8..c7cea5f0aef 100644
--- a/lisp/calc/calc.el
+++ b/lisp/calc/calc.el
@@ -222,7 +222,7 @@
222 222
223 223
224(defgroup calc nil 224(defgroup calc nil
225 "GNU Calc." 225 "Advanced desk calculator and mathematical tool."
226 :prefix "calc-" 226 :prefix "calc-"
227 :tag "Calc" 227 :tag "Calc"
228 :group 'applications) 228 :group 'applications)
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index 4ed72be06fb..d20403ad341 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -223,7 +223,7 @@
223 :group 'emacs) 223 :group 'emacs)
224 224
225(defgroup languages nil 225(defgroup languages nil
226 "Specialized modes for editing programming languages." 226 "Modes for editing programming languages."
227 :group 'programming) 227 :group 'programming)
228 228
229(defgroup lisp nil 229(defgroup lisp nil
@@ -255,7 +255,7 @@
255 :group 'applications) 255 :group 'applications)
256 256
257(defgroup news nil 257(defgroup news nil
258 "Support for netnews reading and posting." 258 "Reading and posting to newsgroups."
259 :link '(custom-manual "(gnus)") 259 :link '(custom-manual "(gnus)")
260 :group 'applications) 260 :group 'applications)
261 261
@@ -297,7 +297,7 @@
297 :group 'environment) 297 :group 'environment)
298 298
299(defgroup unix nil 299(defgroup unix nil
300 "Front-ends/assistants for, or emulators of, UNIX features." 300 "Interfaces, assistants, and emulators for UNIX features."
301 :group 'environment) 301 :group 'environment)
302 302
303(defgroup i18n nil 303(defgroup i18n nil
@@ -544,12 +544,6 @@ WIDGET is the widget to apply the filter entries of MENU on."
544 (erase-buffer) 544 (erase-buffer)
545 (princ symbol (current-buffer)) 545 (princ symbol (current-buffer))
546 (goto-char (point-min)) 546 (goto-char (point-min))
547 ;; FIXME: Boolean variables are not predicates, so they shouldn't
548 ;; end with `-p'. -stef
549 ;; (when (and (eq (get symbol 'custom-type) 'boolean)
550 ;; (re-search-forward "-p\\'" nil t))
551 ;; (replace-match "" t t)
552 ;; (goto-char (point-min)))
553 (if custom-unlispify-remove-prefixes 547 (if custom-unlispify-remove-prefixes
554 (let ((prefixes custom-prefix-list) 548 (let ((prefixes custom-prefix-list)
555 prefix) 549 prefix)
@@ -732,26 +726,26 @@ groups after non-groups, if nil do not order groups at all."
732;; `custom-buffer-create-internal' if `custom-buffer-verbose-help' is non-nil. 726;; `custom-buffer-create-internal' if `custom-buffer-verbose-help' is non-nil.
733 727
734(defvar custom-commands 728(defvar custom-commands
735 '((" Set for current session " Custom-set t 729 '((" Apply " Custom-set t
736 "Apply all settings in this buffer to the current session" 730 "Apply settings (for the current session only)"
737 "index" 731 "index"
738 "Apply") 732 "Apply")
739 (" Save for future sessions " Custom-save 733 (" Apply and Save " Custom-save
740 (or custom-file user-init-file) 734 (or custom-file user-init-file)
741 "Apply all settings in this buffer and save them for future Emacs sessions." 735 "Apply settings and save for future sessions."
742 "save" 736 "save"
743 "Save") 737 "Save")
744 (" Undo edits " Custom-reset-current t 738 (" Undo Edits " Custom-reset-current t
745 "Restore all settings in this buffer to reflect their current values." 739 "Restore customization buffer to reflect existing settings."
746 "refresh" 740 "refresh"
747 "Undo") 741 "Undo")
748 (" Reset to saved " Custom-reset-saved t 742 (" Reset Customizations " Custom-reset-saved t
749 "Restore all settings in this buffer to their saved values (if any)." 743 "Undo any settings applied only for the current session."
750 "undo" 744 "undo"
751 "Reset") 745 "Reset")
752 (" Erase customizations " Custom-reset-standard 746 (" Erase Customizations " Custom-reset-standard
753 (or custom-file user-init-file) 747 (or custom-file user-init-file)
754 "Un-customize all settings in this buffer and save them with standard values." 748 "Un-customize settings in this and future sessions."
755 "delete" 749 "delete"
756 "Uncustomize") 750 "Uncustomize")
757 (" Help for Customize " Custom-help t 751 (" Help for Customize " Custom-help t
@@ -766,9 +760,9 @@ groups after non-groups, if nil do not order groups at all."
766 (info "(emacs)Easy Customization")) 760 (info "(emacs)Easy Customization"))
767 761
768(defvar custom-reset-menu 762(defvar custom-reset-menu
769 '(("Undo Edits" . Custom-reset-current) 763 '(("Undo Edits in Customization Buffer" . Custom-reset-current)
770 ("Reset to Saved" . Custom-reset-saved) 764 ("Revert This Session's Customizations" . Custom-reset-saved)
771 ("Erase Customizations (use standard values)" . Custom-reset-standard)) 765 ("Erase Customizations" . Custom-reset-standard))
772 "Alist of actions for the `Reset' button. 766 "Alist of actions for the `Reset' button.
773The key is a string containing the name of the action, the value is a 767The key is a string containing the name of the action, the value is a
774Lisp function taking the widget as an element which will be called 768Lisp function taking the widget as an element which will be called
@@ -901,7 +895,8 @@ making them as if they had never been customized at all."
901 (memq (widget-get widget :custom-state) 895 (memq (widget-get widget :custom-state)
902 '(modified set changed saved rogue)) 896 '(modified set changed saved rogue))
903 (widget-apply widget :custom-mark-to-reset-standard))) 897 (widget-apply widget :custom-mark-to-reset-standard)))
904 "Erase all customizations for settings in this buffer? " t) 898 "The settings will revert to their default values, in this
899and future sessions. Really erase customizations? " t)
905 (custom-reset-standard-save-and-update))) 900 (custom-reset-standard-save-and-update)))
906 901
907;;; The Customize Commands 902;;; The Customize Commands
@@ -1552,11 +1547,12 @@ that option."
1552 (switch-to-buffer-other-window (custom-get-fresh-buffer name)) 1547 (switch-to-buffer-other-window (custom-get-fresh-buffer name))
1553 (custom-buffer-create-internal options description)) 1548 (custom-buffer-create-internal options description))
1554 1549
1555(defcustom custom-reset-button-menu nil 1550(defcustom custom-reset-button-menu t
1556 "If non-nil, only show a single reset button in customize buffers. 1551 "If non-nil, only show a single reset button in customize buffers.
1557This button will have a menu with all three reset operations." 1552This button will have a menu with all three reset operations."
1558 :type 'boolean 1553 :type 'boolean
1559 :group 'custom-buffer) 1554 :group 'custom-buffer
1555 :version "24.2")
1560 1556
1561(defcustom custom-buffer-verbose-help t 1557(defcustom custom-buffer-verbose-help t
1562 "If non-nil, include explanatory text in the customization buffer." 1558 "If non-nil, include explanatory text in the customization buffer."
@@ -1651,29 +1647,30 @@ or a regular expression.")
1651 ;; So now the buttons are always inserted in the buffer. (Bug#1326) 1647 ;; So now the buttons are always inserted in the buffer. (Bug#1326)
1652 (if custom-buffer-verbose-help 1648 (if custom-buffer-verbose-help
1653 (widget-insert " 1649 (widget-insert "
1654 Operate on all settings in this buffer:\n")) 1650Operate on all settings in this buffer:\n"))
1655 (let ((button (lambda (tag action active help _icon _label) 1651 (let ((button (lambda (tag action active help _icon _label)
1656 (widget-insert " ") 1652 (widget-insert " ")
1657 (if (eval active) 1653 (if (eval active)
1658 (widget-create 'push-button :tag tag 1654 (widget-create 'push-button :tag tag
1659 :help-echo help :action action)))) 1655 :help-echo help :action action))))
1660 (commands custom-commands)) 1656 (commands custom-commands))
1661 (apply button (pop commands)) ; Set for current session
1662 (apply button (pop commands)) ; Save for future sessions
1663 (if custom-reset-button-menu 1657 (if custom-reset-button-menu
1664 (progn 1658 (progn
1665 (widget-insert " ")
1666 (widget-create 'push-button 1659 (widget-create 'push-button
1667 :tag "Reset buffer" 1660 :tag " Revert... "
1668 :help-echo "Show a menu with reset operations." 1661 :help-echo "Show a menu with reset operations."
1669 :mouse-down-action 'ignore 1662 :mouse-down-action 'ignore
1670 :action 'custom-reset)) 1663 :action 'custom-reset)
1664 (apply button (pop commands)) ; Apply
1665 (apply button (pop commands))) ; Apply and Save
1666 (apply button (pop commands)) ; Apply
1667 (apply button (pop commands)) ; Apply and Save
1671 (widget-insert "\n") 1668 (widget-insert "\n")
1672 (apply button (pop commands)) ; Undo edits 1669 (apply button (pop commands)) ; Undo
1673 (apply button (pop commands)) ; Reset to saved 1670 (apply button (pop commands)) ; Reset
1674 (apply button (pop commands)) ; Erase customization 1671 (apply button (pop commands)) ; Erase
1675 (widget-insert " ") 1672 (widget-insert " ")
1676 (pop commands) ; Help (omitted) 1673 (pop commands) ; Help (omitted)
1677 (apply button (pop commands)))) ; Exit 1674 (apply button (pop commands)))) ; Exit
1678 (widget-insert "\n\n")) 1675 (widget-insert "\n\n"))
1679 1676
@@ -2824,7 +2821,7 @@ If STATE is nil, the value is computed by `custom-variable-state'."
2824 (lambda (widget) 2821 (lambda (widget)
2825 (and (default-boundp (widget-value widget)) 2822 (and (default-boundp (widget-value widget))
2826 (memq (widget-get widget :custom-state) '(modified changed))))) 2823 (memq (widget-get widget :custom-state) '(modified changed)))))
2827 ("Reset to Saved" custom-variable-reset-saved 2824 ("Revert This Session's Customization" custom-variable-reset-saved
2828 (lambda (widget) 2825 (lambda (widget)
2829 (and (or (get (widget-value widget) 'saved-value) 2826 (and (or (get (widget-value widget) 'saved-value)
2830 (get (widget-value widget) 'saved-variable-comment)) 2827 (get (widget-value widget) 'saved-variable-comment))
@@ -3620,7 +3617,7 @@ the present value is saved to its :shown-value property instead."
3620 ("Undo Edits" custom-redraw 3617 ("Undo Edits" custom-redraw
3621 (lambda (widget) 3618 (lambda (widget)
3622 (memq (widget-get widget :custom-state) '(modified changed)))) 3619 (memq (widget-get widget :custom-state) '(modified changed))))
3623 ("Reset to Saved" custom-face-reset-saved 3620 ("Revert This Session's Customization" custom-face-reset-saved
3624 (lambda (widget) 3621 (lambda (widget)
3625 (or (get (widget-value widget) 'saved-face) 3622 (or (get (widget-value widget) 'saved-face)
3626 (get (widget-value widget) 'saved-face-comment)))) 3623 (get (widget-value widget) 'saved-face-comment))))
@@ -3940,8 +3937,6 @@ restoring it to the state of a face that has never been customized."
3940;;; The `custom-group' Widget. 3937;;; The `custom-group' Widget.
3941 3938
3942(defcustom custom-group-tag-faces nil 3939(defcustom custom-group-tag-faces nil
3943 ;; In XEmacs, this ought to play games with font size.
3944 ;; Fixme: make it do so in Emacs.
3945 "Face used for group tags. 3940 "Face used for group tags.
3946The first member is used for level 1 groups, the second for level 2, 3941The first member is used for level 1 groups, the second for level 2,
3947and so forth. The remaining group tags are shown with `custom-group-tag'." 3942and so forth. The remaining group tags are shown with `custom-group-tag'."
@@ -3978,6 +3973,13 @@ and so forth. The remaining group tags are shown with `custom-group-tag'."
3978 :group 'custom-faces) 3973 :group 'custom-faces)
3979(define-obsolete-face-alias 'custom-group-tag-face 'custom-group-tag "22.1") 3974(define-obsolete-face-alias 'custom-group-tag-face 'custom-group-tag "22.1")
3980 3975
3976(defface custom-group-subtitle
3977 `((t (:weight bold)))
3978 "Face for the \"Subgroups:\" subtitle in Custom buffers."
3979 :group 'custom-faces)
3980
3981(defvar custom-group-doc-align-col 20)
3982
3981(define-widget 'custom-group 'custom 3983(define-widget 'custom-group 'custom
3982 "Customize group." 3984 "Customize group."
3983 :format "%v" 3985 :format "%v"
@@ -4043,11 +4045,9 @@ If GROUPS-ONLY non-nil, return only those members that are groups."
4043 (custom-browse-insert-prefix prefix) 4045 (custom-browse-insert-prefix prefix)
4044 (push (widget-create-child-and-convert 4046 (push (widget-create-child-and-convert
4045 widget 'custom-browse-visibility 4047 widget 'custom-browse-visibility
4046 ;; :tag-glyph "plus"
4047 :tag "+") 4048 :tag "+")
4048 buttons) 4049 buttons)
4049 (insert "-- ") 4050 (insert "-- ")
4050 ;; (widget-glyph-insert nil "-- " "horizontal")
4051 (push (widget-create-child-and-convert 4051 (push (widget-create-child-and-convert
4052 widget 'custom-browse-group-tag) 4052 widget 'custom-browse-group-tag)
4053 buttons) 4053 buttons)
@@ -4057,8 +4057,6 @@ If GROUPS-ONLY non-nil, return only those members that are groups."
4057 (zerop (length members))) 4057 (zerop (length members)))
4058 (custom-browse-insert-prefix prefix) 4058 (custom-browse-insert-prefix prefix)
4059 (insert "[ ]-- ") 4059 (insert "[ ]-- ")
4060 ;; (widget-glyph-insert nil "[ ]" "empty")
4061 ;; (widget-glyph-insert nil "-- " "horizontal")
4062 (push (widget-create-child-and-convert 4060 (push (widget-create-child-and-convert
4063 widget 'custom-browse-group-tag) 4061 widget 'custom-browse-group-tag)
4064 buttons) 4062 buttons)
@@ -4136,7 +4134,8 @@ If GROUPS-ONLY non-nil, return only those members that are groups."
4136 :action 'custom-toggle-parent 4134 :action 'custom-toggle-parent
4137 (not (eq state 'hidden))) 4135 (not (eq state 'hidden)))
4138 buttons)) 4136 buttons))
4139 (insert " : ") 4137 (if (>= (current-column) custom-group-doc-align-col)
4138 (insert " "))
4140 ;; Create magic button. 4139 ;; Create magic button.
4141 (let ((magic (widget-create-child-and-convert 4140 (let ((magic (widget-create-child-and-convert
4142 widget 'custom-magic nil))) 4141 widget 'custom-magic nil)))
@@ -4146,7 +4145,8 @@ If GROUPS-ONLY non-nil, return only those members that are groups."
4146 (widget-put widget :buttons buttons) 4145 (widget-put widget :buttons buttons)
4147 ;; Insert documentation. 4146 ;; Insert documentation.
4148 (if (and (eq custom-buffer-style 'links) (> level 1)) 4147 (if (and (eq custom-buffer-style 'links) (> level 1))
4149 (widget-put widget :documentation-indent 0)) 4148 (widget-put widget :documentation-indent
4149 custom-group-doc-align-col))
4150 (widget-add-documentation-string-button 4150 (widget-add-documentation-string-button
4151 widget :visibility-widget 'custom-visibility)) 4151 widget :visibility-widget 'custom-visibility))
4152 4152
@@ -4224,25 +4224,34 @@ If GROUPS-ONLY non-nil, return only those members that are groups."
4224 (count 0) 4224 (count 0)
4225 (reporter (make-progress-reporter 4225 (reporter (make-progress-reporter
4226 "Creating group entries..." 0 len)) 4226 "Creating group entries..." 0 len))
4227 (have-subtitle (and (not (eq symbol 'emacs))
4228 (eq custom-buffer-order-groups 'last)))
4229 prev-type
4227 children) 4230 children)
4228 (setq children 4231
4229 (mapcar 4232 (dolist (entry members)
4230 (lambda (entry) 4233 (unless (eq prev-type 'custom-group)
4231 (widget-insert "\n") 4234 (widget-insert "\n"))
4232 (progress-reporter-update reporter (setq count (1+ count))) 4235 (progress-reporter-update reporter (setq count (1+ count)))
4233 (let ((sym (nth 0 entry)) 4236 (let ((sym (nth 0 entry))
4234 (type (nth 1 entry))) 4237 (type (nth 1 entry)))
4235 (prog1 4238 (when (and have-subtitle (eq type 'custom-group))
4236 (widget-create-child-and-convert 4239 (setq have-subtitle nil)
4237 widget type 4240 (widget-insert
4238 :group widget 4241 (propertize "Subgroups:\n" 'face 'custom-group-subtitle)))
4239 :tag (custom-unlispify-tag-name sym) 4242 (setq prev-type type)
4240 :custom-prefixes custom-prefix-list 4243 (push (widget-create-child-and-convert
4241 :custom-level (1+ level) 4244 widget type
4242 :value sym) 4245 :group widget
4243 (unless (eq (preceding-char) ?\n) 4246 :tag (custom-unlispify-tag-name sym)
4244 (widget-insert "\n"))))) 4247 :custom-prefixes custom-prefix-list
4245 members)) 4248 :custom-level (1+ level)
4249 :value sym)
4250 children)
4251 (unless (eq (preceding-char) ?\n)
4252 (widget-insert "\n"))))
4253
4254 (setq children (nreverse children))
4246 (mapc 'custom-magic-reset children) 4255 (mapc 'custom-magic-reset children)
4247 (widget-put widget :children children) 4256 (widget-put widget :children children)
4248 (custom-group-state-update widget) 4257 (custom-group-state-update widget)
@@ -4267,7 +4276,7 @@ If GROUPS-ONLY non-nil, return only those members that are groups."
4267 ("Undo Edits" custom-group-reset-current 4276 ("Undo Edits" custom-group-reset-current
4268 (lambda (widget) 4277 (lambda (widget)
4269 (memq (widget-get widget :custom-state) '(modified)))) 4278 (memq (widget-get widget :custom-state) '(modified))))
4270 ("Reset to Saved" custom-group-reset-saved 4279 ("Revert This Session's Customizations" custom-group-reset-saved
4271 (lambda (widget) 4280 (lambda (widget)
4272 (memq (widget-get widget :custom-state) '(modified set)))) 4281 (memq (widget-get widget :custom-state) '(modified set))))
4273 ,@(when (or custom-file init-file-user) 4282 ,@(when (or custom-file init-file-user)
diff --git a/lisp/epg-config.el b/lisp/epg-config.el
index fd2468f9a4b..aa052206bec 100644
--- a/lisp/epg-config.el
+++ b/lisp/epg-config.el
@@ -33,9 +33,11 @@
33 "Report bugs to this address.") 33 "Report bugs to this address.")
34 34
35(defgroup epg () 35(defgroup epg ()
36 "The EasyPG library." 36 "Interface to the GNU Privacy Guard (GnuPG)."
37 :tag "EasyPG"
37 :version "23.1" 38 :version "23.1"
38 :group 'data) 39 :group 'data
40 :group 'external)
39 41
40(defcustom epg-gpg-program (or (executable-find "gpg") 42(defcustom epg-gpg-program (or (executable-find "gpg")
41 (executable-find "gpg2") 43 (executable-find "gpg2")
diff --git a/lisp/eshell/eshell.el b/lisp/eshell/eshell.el
index 224451eacba..f8c9788b24d 100644
--- a/lisp/eshell/eshell.el
+++ b/lisp/eshell/eshell.el
@@ -228,11 +228,10 @@
228(require 'esh-mode) 228(require 'esh-mode)
229 229
230(defgroup eshell nil 230(defgroup eshell nil
231 "A command shell implemented entirely in Emacs Lisp. 231 "Command shell implemented entirely in Emacs Lisp.
232It invokes no external processes beyond those requested by the 232It invokes no external processes beyond those requested by the
233user, and is intended to be a functional replacement for command 233user, and is intended to be a functional replacement for command
234shells such as bash, zsh, rc, 4dos." 234shells such as bash, zsh, rc, 4dos."
235 :tag "The Emacs shell"
236 :link '(info-link "(eshell)Top") 235 :link '(info-link "(eshell)Top")
237 :version "21.1" 236 :version "21.1"
238 :group 'applications) 237 :group 'applications)
diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el
index 536992f5bc8..464b35fc3a6 100644
--- a/lisp/ibuffer.el
+++ b/lisp/ibuffer.el
@@ -60,11 +60,10 @@
60(declare-function ibuffer-format-filter-group-data "ibuf-ext" (filter)) 60(declare-function ibuffer-format-filter-group-data "ibuf-ext" (filter))
61 61
62(defgroup ibuffer nil 62(defgroup ibuffer nil
63 "An advanced replacement for `buffer-menu'. 63 "Advanced replacement for `buffer-menu'.
64 64Ibuffer lets you operate on buffers in a Dired-like way,
65Ibuffer allows you to operate on buffers in a manner much like Dired. 65with the ability to sort, mark by regular expression,
66Operations include sorting, marking by regular expression, and 66and filter displayed buffers by various criteria."
67the ability to filter the displayed buffers by various criteria."
68 :version "22.1" 67 :version "22.1"
69 :group 'convenience) 68 :group 'convenience)
70 69
diff --git a/lisp/mpc.el b/lisp/mpc.el
index d2203a4deab..ea7f6793309 100644
--- a/lisp/mpc.el
+++ b/lisp/mpc.el
@@ -95,7 +95,7 @@
95(eval-when-compile (require 'cl)) 95(eval-when-compile (require 'cl))
96 96
97(defgroup mpc () 97(defgroup mpc ()
98 "A Client for the Music Player Daemon." 98 "Client for the Music Player Daemon (mpd)."
99 :prefix "mpc-" 99 :prefix "mpc-"
100 :group 'multimedia 100 :group 'multimedia
101 :group 'applications) 101 :group 'applications)
diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el
index 455836fdae1..447549f58cd 100644
--- a/lisp/net/ange-ftp.el
+++ b/lisp/net/ange-ftp.el
@@ -671,8 +671,7 @@
671;;;; ------------------------------------------------------------ 671;;;; ------------------------------------------------------------
672 672
673(defgroup ange-ftp nil 673(defgroup ange-ftp nil
674 "Accessing remote files and directories using FTP 674 "Accessing remote files and directories using FTP."
675 made as simple and transparent as possible."
676 :group 'files 675 :group 'files
677 :group 'comm 676 :group 'comm
678 :prefix "ange-ftp-") 677 :prefix "ange-ftp-")
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 95848ac34ea..beb97c6eb32 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -62,7 +62,7 @@
62;;; User Customizable Internal Variables: 62;;; User Customizable Internal Variables:
63 63
64(defgroup tramp nil 64(defgroup tramp nil
65 "Edit remote files with a combination of rsh and rcp or similar programs." 65 "Edit remote files with a combination of ssh, scp, etc."
66 :group 'files 66 :group 'files
67 :group 'comm 67 :group 'comm
68 :version "22.1") 68 :version "22.1")
diff --git a/lisp/progmodes/ebnf2ps.el b/lisp/progmodes/ebnf2ps.el
index 05c9e160ceb..b7cbdcc7018 100644
--- a/lisp/progmodes/ebnf2ps.el
+++ b/lisp/progmodes/ebnf2ps.el
@@ -1181,10 +1181,10 @@ Elements of ALIST that are not conses are ignored."
1181;;; Interface to the command system 1181;;; Interface to the command system
1182 1182
1183(defgroup postscript nil 1183(defgroup postscript nil
1184 "PostScript Group." 1184 "Printing with PostScript"
1185 :tag "PostScript" 1185 :tag "PostScript"
1186 :version "20" 1186 :version "20"
1187 :group 'emacs) 1187 :group 'environment)
1188 1188
1189 1189
1190(defgroup ebnf2ps nil 1190(defgroup ebnf2ps nil
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index ed8eb81932e..96d4105f65b 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -253,7 +253,7 @@ are the string substitutions (see `format')."
253(make-variable-buffer-local 'flymake-output-residual) 253(make-variable-buffer-local 'flymake-output-residual)
254 254
255(defgroup flymake nil 255(defgroup flymake nil
256 "A universal on-the-fly syntax checker." 256 "Universal on-the-fly syntax checker."
257 :version "23.1" 257 :version "23.1"
258 :group 'tools) 258 :group 'tools)
259 259
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 1f60c351252..7123a8dd7fc 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -58,8 +58,9 @@
58;; GUD commands must be visible in C buffers visited by GUD 58;; GUD commands must be visible in C buffers visited by GUD
59 59
60(defgroup gud nil 60(defgroup gud nil
61 "Grand Unified Debugger mode for gdb and other debuggers under Emacs. 61 "The \"Grand Unified Debugger\" interface.
62Supported debuggers include gdb, sdb, dbx, xdb, perldb, pdb (Python) and jdb." 62Supported debuggers include gdb, sdb, dbx, xdb, perldb,
63pdb (Python), and jdb."
63 :group 'processes 64 :group 'processes
64 :group 'tools) 65 :group 'tools)
65 66
diff --git a/lisp/progmodes/prolog.el b/lisp/progmodes/prolog.el
index 74c8c31b425..4ef6c31442d 100644
--- a/lisp/progmodes/prolog.el
+++ b/lisp/progmodes/prolog.el
@@ -295,7 +295,7 @@
295 295
296 296
297(defgroup prolog nil 297(defgroup prolog nil
298 "Major modes for editing and running Prolog and Mercury files." 298 "Editing and running Prolog and Mercury files."
299 :group 'languages) 299 :group 'languages)
300 300
301(defgroup prolog-faces nil 301(defgroup prolog-faces nil
diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el
index 0139795dd38..ad1dae9acf9 100644
--- a/lisp/progmodes/verilog-mode.el
+++ b/lisp/progmodes/verilog-mode.el
@@ -393,7 +393,7 @@ Set `verilog-in-hooks' during this time, to assist AUTO caches."
393 (parse-partial-sexp (point-min) (or pos (point))))) 393 (parse-partial-sexp (point-min) (or pos (point)))))
394 394
395(defgroup verilog-mode nil 395(defgroup verilog-mode nil
396 "Facilitates easy editing of Verilog source text." 396 "Major mode for Verilog source code."
397 :version "22.2" 397 :version "22.2"
398 :group 'languages) 398 :group 'languages)
399 399
diff --git a/lisp/progmodes/which-func.el b/lisp/progmodes/which-func.el
index c8435c14ea2..cdaeadde906 100644
--- a/lisp/progmodes/which-func.el
+++ b/lisp/progmodes/which-func.el
@@ -68,7 +68,7 @@
68 "String to display in the mode line when current function is unknown.") 68 "String to display in the mode line when current function is unknown.")
69 69
70(defgroup which-func nil 70(defgroup which-func nil
71 "Mode to display the current function name in the modeline." 71 "Display the current function name in the modeline."
72 :group 'tools 72 :group 'tools
73 :version "20.3") 73 :version "20.3")
74 74
diff --git a/lisp/ses.el b/lisp/ses.el
index da18046c953..876537413ca 100644
--- a/lisp/ses.el
+++ b/lisp/ses.el
@@ -65,6 +65,7 @@
65 65
66(defgroup ses nil 66(defgroup ses nil
67 "Simple Emacs Spreadsheet." 67 "Simple Emacs Spreadsheet."
68 :tag "SES"
68 :group 'applications 69 :group 'applications
69 :prefix "ses-" 70 :prefix "ses-"
70 :version "21.1") 71 :version "21.1")
diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el
index 7e56cd9fa1d..51e5aa5796d 100644
--- a/lisp/term/xterm.el
+++ b/lisp/term/xterm.el
@@ -27,7 +27,7 @@
27(defgroup xterm nil 27(defgroup xterm nil
28 "XTerm support." 28 "XTerm support."
29 :version "24.1" 29 :version "24.1"
30 :group 'emacs) 30 :group 'environment)
31 31
32(defcustom xterm-extra-capabilities 'check 32(defcustom xterm-extra-capabilities 'check
33 "Whether Xterm supports some additional, more modern, features. 33 "Whether Xterm supports some additional, more modern, features.
diff --git a/lisp/textmodes/picture.el b/lisp/textmodes/picture.el
index 191e9f3672b..24a4ac1b033 100644
--- a/lisp/textmodes/picture.el
+++ b/lisp/textmodes/picture.el
@@ -31,7 +31,7 @@
31;;; Code: 31;;; Code:
32 32
33(defgroup picture nil 33(defgroup picture nil
34 "Picture mode --- editing using quarter-plane screen model." 34 "Editing text-based pictures (\"ASCII art\")."
35 :prefix "picture-" 35 :prefix "picture-"
36 :group 'wp) 36 :group 'wp)
37 37
diff --git a/lisp/textmodes/tildify.el b/lisp/textmodes/tildify.el
index 5552eff7186..583e4a4d35d 100644
--- a/lisp/textmodes/tildify.el
+++ b/lisp/textmodes/tildify.el
@@ -51,7 +51,7 @@
51 51
52 52
53(defgroup tildify nil 53(defgroup tildify nil
54 "Adding missing hard spaces or other text fragments into texts." 54 "Add hard spaces or other text fragments to text buffers."
55 :version "21.1" 55 :version "21.1"
56 :group 'wp) 56 :group 'wp)
57 57
diff --git a/lisp/vc/ediff.el b/lisp/vc/ediff.el
index 4d6afa96d64..a1d778beebc 100644
--- a/lisp/vc/ediff.el
+++ b/lisp/vc/ediff.el
@@ -127,7 +127,7 @@
127(require 'ediff-mult) ; required because of the registry stuff 127(require 'ediff-mult) ; required because of the registry stuff
128 128
129(defgroup ediff nil 129(defgroup ediff nil
130 "A comprehensive visual interface to diff & patch." 130 "Comprehensive visual interface to `diff' and `patch'."
131 :tag "Ediff" 131 :tag "Ediff"
132 :group 'tools) 132 :group 'tools)
133 133
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index ab7e587eb79..9ca9e00b8af 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -667,7 +667,7 @@
667;; General customization 667;; General customization
668 668
669(defgroup vc nil 669(defgroup vc nil
670 "Version-control system in Emacs." 670 "Emacs interface to version control systems."
671 :group 'tools) 671 :group 'tools)
672 672
673(defcustom vc-initial-comment nil 673(defcustom vc-initial-comment nil
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index b6feecebde5..9c5c6462bcc 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -2907,15 +2907,7 @@ link for that string."
2907 (push (widget-convert-button widget-documentation-link-type 2907 (push (widget-convert-button widget-documentation-link-type
2908 begin end :value name) 2908 begin end :value name)
2909 buttons))))) 2909 buttons)))))
2910 (widget-put widget :buttons buttons))) 2910 (widget-put widget :buttons buttons))))
2911 (let ((indent (widget-get widget :indent)))
2912 (when (and indent (not (zerop indent)))
2913 (save-excursion
2914 (save-restriction
2915 (narrow-to-region from to)
2916 (goto-char (point-min))
2917 (while (search-forward "\n" nil t)
2918 (insert-char ?\s indent)))))))
2919 2911
2920;;; The `documentation-string' Widget. 2912;;; The `documentation-string' Widget.
2921 2913
@@ -2934,10 +2926,9 @@ link for that string."
2934 (start (point))) 2926 (start (point)))
2935 (if (string-match "\n" doc) 2927 (if (string-match "\n" doc)
2936 (let ((before (substring doc 0 (match-beginning 0))) 2928 (let ((before (substring doc 0 (match-beginning 0)))
2937 (after (substring doc (match-beginning 0))) 2929 (after (substring doc (match-end 0)))
2938 button) 2930 button end)
2939 (when (and indent (not (zerop indent))) 2931 (widget-documentation-string-indent-to indent)
2940 (insert-char ?\s indent))
2941 (insert before ?\s) 2932 (insert before ?\s)
2942 (widget-documentation-link-add widget start (point)) 2933 (widget-documentation-link-add widget start (point))
2943 (setq button 2934 (setq button
@@ -2950,18 +2941,35 @@ link for that string."
2950 :action 'widget-parent-action 2941 :action 'widget-parent-action
2951 shown)) 2942 shown))
2952 (when shown 2943 (when shown
2944 (insert ?\n)
2953 (setq start (point)) 2945 (setq start (point))
2954 (when (and indent (not (zerop indent))) 2946 (when (and indent (not (zerop indent)))
2955 (insert-char ?\s indent)) 2947 (insert-char ?\s indent))
2956 (insert after) 2948 (insert after)
2957 (widget-documentation-link-add widget start (point))) 2949 (setq end (point))
2950 (widget-documentation-link-add widget start end)
2951 ;; Indent the subsequent lines.
2952 (when (and indent (> indent 0))
2953 (save-excursion
2954 (save-restriction
2955 (narrow-to-region start end)
2956 (goto-char (point-min))
2957 (while (search-forward "\n" nil t)
2958 (widget-documentation-string-indent-to indent))))))
2958 (widget-put widget :buttons (list button))) 2959 (widget-put widget :buttons (list button)))
2959 (when (and indent (not (zerop indent))) 2960 (widget-documentation-string-indent-to indent)
2960 (insert-char ?\s indent))
2961 (insert doc) 2961 (insert doc)
2962 (widget-documentation-link-add widget start (point)))) 2962 (widget-documentation-link-add widget start (point))))
2963 (insert ?\n)) 2963 (insert ?\n))
2964 2964
2965(defun widget-documentation-string-indent-to (col)
2966 (when (and (numberp col)
2967 (> col 0))
2968 (let ((opoint (point)))
2969 (indent-to col)
2970 (put-text-property opoint (point)
2971 'display `(space :align-to ,col)))))
2972
2965(defun widget-documentation-string-action (widget &rest _ignore) 2973(defun widget-documentation-string-action (widget &rest _ignore)
2966 ;; Toggle documentation. 2974 ;; Toggle documentation.
2967 (let ((parent (widget-get widget :parent))) 2975 (let ((parent (widget-get widget :parent)))