Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

*** empty log message ***

  • Loading branch information...
commit 678fba408e193656d533efeecdb1203fce8ed4be 1 parent 8ea2483
Lars Ingebrigtsen authored March 05, 1997
90  lisp/ChangeLog
... ...
@@ -1,3 +1,93 @@
  1
+Fri Dec 13 04:49:21 1996  Andre Deparade  <deparade@i3.informatik.rwth-aachen.de>
  2
+
  3
+	* gnus-cite.el (gnus-cited-text-button-line-format-alist): Make %b
  4
+	and %e usable.
  5
+
  6
+Fri Dec 13 01:06:09 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
  7
+
  8
+	* article.el (article-decode-rfc1522): Would collate subsequent
  9
+	encodings. 
  10
+
  11
+	* gnus-start.el (gnus-check-bogus-newsgroups): Use
  12
+	`map-y-or-n-p'. 
  13
+
  14
+	* gnus-topic.el (gnus-topic-kill-group): Save topic contents.
  15
+	(gnus-topic-yank-group): Insert topic contents.
  16
+
  17
+	* gnus-sum.el (gnus-simplify-subject-fuzzy-regexp): Changed
  18
+	default to "".
  19
+
  20
+	* gnus-score.el (gnus-score-find-favourite-words): Put point at bob.
  21
+
  22
+	* gnus-sum.el (gnus-summary-limit-to-age): Dox fix & interactive
  23
+	spec. 
  24
+
  25
+Fri Dec 13 01:01:46 1996  David Moore  <dmoore@ucsd.edu>
  26
+
  27
+	* gnus-sum.el (gnus-summary-limit-to-age): New function and
  28
+	keystroke. 
  29
+
  30
+Tue Dec 10 23:42:00 1996  David Moore  <dmoore@ucsd.edu>
  31
+
  32
+	* gnus-nocem.el (gnus-nocem-groups): news.lists.filters is to
  33
+	replace alt.nocem.misc
  34
+
  35
+Wed Dec 11 01:15:31 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
  36
+
  37
+	* nnfolder.el (nnfolder-request-expire-articles): Better message.
  38
+	(nnfolder-delete-mail): Actually delete.
  39
+
  40
+	* gnus-sum.el (gnus-summary-update-info): Don't run
  41
+	`gnus-exit-group-hook'. 
  42
+	(gnus-summary-expire-articles): Do it.
  43
+	(gnus-summary-exit): Ditto.
  44
+	(gnus-summary-save-newsrc): New command and keystroke.
  45
+
  46
+Wed Dec 11 00:38:12 1996  Stainless Steel Rat  <ratinox@peorth.gweep.net>
  47
+
  48
+	* gnus-sum.el (gnus-simplify-buffer-fuzzy): New version.
  49
+
  50
+Mon Dec  9 21:00:09 1996  David Moore  <dmoore@ucsd.edu>
  51
+
  52
+	* gnus-sum.el (gnus-summary-catchup): Out dated catchup code
  53
+	removed.
  54
+
  55
+	* nnvirtual.el (nnvirtual-update-read-and-marked): Work around a
  56
+	cache of active count in gnus-update-read-articles.
  57
+
  58
+Mon Dec  9 22:55:56 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
  59
+
  60
+	* article.el (article-emphasize): Use it.
  61
+
  62
+	* gnus-util.el (gnus-put-text-property-excluding-newlines): New
  63
+	function. 
  64
+
  65
+Mon Dec  9 08:38:08 1996  Per Abrahamsen  <abraham@dina.kvl.dk>
  66
+
  67
+	* gnus-sum.el: Split customize groups and added links to the manual.
  68
+
  69
+1996-12-08  Dave Love  <d.love@dl.ac.uk>
  70
+
  71
+	* gnus-vis.el (gnus-button-alist): Allow whitespace in `<URL:...'
  72
+  	markup (rfc1738), done last, after possible partial matches.
  73
+	(gnus-button-url): Zap any whitespace from a <URL:...> match.
  74
+
  75
+Mon Dec  9 02:18:35 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
  76
+
  77
+	* gnus-art.el (gnus-button-embedded-url): New function.
  78
+	(gnus-button-alist): Use it.
  79
+
  80
+	* gnus-util.el (gnus-strip-whitespace): New function.
  81
+
  82
+Mon Dec  9 00:04:24 1996  Richard Stallman  <rms@gnu.ai.mit.edu>
  83
+
  84
+	* gnus-start.el (gnus-read-init-file): Don't read init file when
  85
+	started with "emacs -q".
  86
+
  87
+Sun Dec  8 18:25:34 1996  Lars Magne Ingebrigtsen  <menja.larsi@ifi.uio.no>
  88
+
  89
+	* gnus.el: Red Gnus v0.74 is released.
  90
+
1 91
 Fri Dec  6 12:47:24 1996  Wes Hardaker  <Wesley.Hardaker@sphys.unil.ch>
2 92
 
3 93
 	* gnus-picon.el (gnus-picons-insert-face-if-exists): Don't reverse
4  lisp/article.el
@@ -533,8 +533,6 @@ always hide."
533 533
 	   (goto-char (point-min)) (point-max))
534 534
 	  (subst-char-in-region (point-min) (point-max) ?_ ? )
535 535
 	  (goto-char (point-max)))
536  
-	(when (looking-at "\\([ \t\n]+\\)=\\?")
537  
-	  (replace-match "" t t nil 1))
538 536
 	(goto-char (point-min))))))
539 537
 
540 538
 (defun article-de-quoted-unreadable (&optional force)
@@ -957,7 +955,7 @@ function and want to see what the date was before converting."
957 955
  	       (match-beginning invisible) (match-end invisible) props)
958 956
  	      (article-unhide-text-type
959 957
  	       (match-beginning visible) (match-end visible) 'emphasis)
960  
- 	      (put-text-property 
  958
+ 	      (gnus-put-text-property-excluding-newlines
961 959
  	       (match-beginning visible) (match-end visible) 'face face)
962 960
  	      (goto-char (match-end invisible)))))))))
963 961
 
217  lisp/custom-edit.el
@@ -4,7 +4,7 @@
4 4
 ;;
5 5
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
6 6
 ;; Keywords: help, faces
7  
-;; Version: 1.04
  7
+;; Version: 1.12
8 8
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
9 9
 
10 10
 ;;; Commentary:
@@ -17,7 +17,7 @@
17 17
 (require 'widget-edit)
18 18
 (require 'easymenu)
19 19
 
20  
-(define-widget-keywords :custom-show :custom-magic
  20
+(define-widget-keywords :custom-menu :custom-show :custom-magic
21 21
   :custom-state :custom-level :custom-form
22 22
   :custom-apply :custom-set-default :custom-reset)
23 23
 
@@ -50,6 +50,44 @@ IF REGEXP is not a string, return it unchanged."
50 50
 	(nreverse (cons (substring regexp start) all)))
51 51
     regexp))
52 52
 
  53
+(defvar custom-prefix-list nil
  54
+  "List of prefixes that should be ignored by `custom-unlispify'")
  55
+
  56
+(defcustom custom-unlispify-menu-entries t
  57
+  "Display menu entries as words instead of symbols if non nil."
  58
+  :group 'customize
  59
+  :type 'boolean)
  60
+
  61
+(defun custom-unlispify-menu-entry (symbol &optional no-suffix)
  62
+  "Convert symbol into a menu entry."
  63
+  (cond ((not custom-unlispify-menu-entries)
  64
+	 (symbol-name symbol))
  65
+	((get symbol 'custom-tag)
  66
+	 (if no-suffix
  67
+	     (get symbol 'custom-tag)
  68
+	   (concat (get symbol 'custom-tag) "...")))
  69
+	(t
  70
+	 (save-excursion
  71
+	   (set-buffer (get-buffer-create " *Custom-Work*"))
  72
+	   (erase-buffer)
  73
+	   (princ symbol (current-buffer))
  74
+	   (goto-char (point-min))
  75
+	   (let ((prefixes custom-prefix-list)
  76
+		 prefix)
  77
+	     (while prefixes
  78
+	       (setq prefix (car prefixes))
  79
+	       (if (search-forward prefix (+ (point) (length prefix)) t)
  80
+		   (progn 
  81
+		     (setq prefixes nil)
  82
+		     (delete-region (point-min) (point)))
  83
+		 (setq prefixes (cdr prefixes)))))
  84
+	   (subst-char-in-region (point-min) (point-max) ?- ?\  t)
  85
+	   (capitalize-region (point-min) (point-max))
  86
+	   (unless no-suffix 
  87
+	     (goto-char (point-max))
  88
+	     (insert "..."))
  89
+	   (buffer-string)))))
  90
+
53 91
 ;;; The Custom Mode.
54 92
 
55 93
 (defvar custom-options nil
@@ -71,6 +109,11 @@ IF REGEXP is not a string, return it unchanged."
71 109
       ["Reset" custom-reset t]
72 110
       ["Save" custom-save t]))
73 111
 
  112
+(defcustom custom-mode-hook nil
  113
+  "Hook called when entering custom-mode."
  114
+  :type 'hook
  115
+  :group 'customize)
  116
+
74 117
 (defun custom-mode ()
75 118
   "Major mode for editing customization buffers.
76 119
 
@@ -528,6 +571,23 @@ The list should be sorted most significant first."
528 571
 	  (t
529 572
 	   (funcall show widget value)))))
530 573
 
  574
+(defun custom-load-symbol (symbol)
  575
+  "Load all dependencies for SYMBOL."
  576
+  (let ((loads (get symbol 'custom-loads))
  577
+	load)
  578
+    (while loads
  579
+      (setq load (car loads)
  580
+	    loads (cdr loads))
  581
+      (cond ((symbolp load)
  582
+	     (require load))
  583
+	    ((member load load-history))
  584
+	    (t
  585
+	     (load-library load))))))
  586
+
  587
+(defun custom-load-widget (widget)
  588
+  "Load all dependencies for WIDGET."
  589
+  (custom-load-symbol (widget-value widget)))
  590
+
531 591
 ;;; The `custom-variable' Widget.
532 592
 
533 593
 (define-widget 'custom-variable 'custom
@@ -536,6 +596,7 @@ The list should be sorted most significant first."
536 596
   :help-echo "Push me to set or reset this variable."
537 597
   :documentation-property 'variable-documentation
538 598
   :custom-state nil
  599
+  :custom-menu 'custom-variable-menu-create
539 600
   :custom-form 'edit
540 601
   :value-create 'custom-variable-value-create
541 602
   :action 'custom-variable-action
@@ -545,6 +606,7 @@ The list should be sorted most significant first."
545 606
 
546 607
 (defun custom-variable-value-create (widget)
547 608
   "Here is where you edit the variables value."
  609
+  (custom-load-widget widget)
548 610
   (let* ((buttons (widget-get widget :buttons))
549 611
 	 (children (widget-get widget :children))
550 612
 	 (form (widget-get widget :custom-form))
@@ -570,7 +632,8 @@ The list should be sorted most significant first."
570 632
 	   (setq state 'hidden)))
571 633
     ;; If we don't know the state, see if we need to edit it in lisp form.
572 634
     (when (eq state 'unknown)
573  
-      (unless (widget-apply (widget-convert type) :match value)
  635
+      (unless (widget-apply conv :match value)
  636
+	;; (widget-apply (widget-convert type) :match value)
574 637
 	(setq form 'lisp)))
575 638
     ;; Now we can create the child widget.
576 639
     (cond ((eq state 'hidden)
@@ -597,6 +660,7 @@ The list should be sorted most significant first."
597 660
 		   children)))
598 661
 	  (t
599 662
 	   ;; Edit mode.
  663
+
600 664
 	   (push (widget-create-child-and-convert widget type 
601 665
 						  :tag (symbol-name symbol)
602 666
 						  :value value)
@@ -614,7 +678,9 @@ The list should be sorted most significant first."
614 678
 (defun custom-variable-state-set (widget)
615 679
   "Set the state of WIDGET."
616 680
   (let* ((symbol (widget-value widget))
617  
-	 (value (default-value symbol))
  681
+	 (value (if (default-boundp symbol)
  682
+		    (default-value symbol)
  683
+		  (widget-get widget :value)))
618 684
 	 (state (if (get symbol 'saved-value)
619 685
 		    (if (condition-case nil
620 686
 			    (equal value
@@ -800,7 +866,8 @@ Optional EVENT is the location for the menu."
800 866
   :action 'custom-face-action
801 867
   :custom-apply 'custom-face-apply
802 868
   :custom-set-default 'custom-face-set-default
803  
-  :custom-reset 'custom-redraw)
  869
+  :custom-reset 'custom-redraw
  870
+  :custom-menu 'custom-face-menu-create)
804 871
 
805 872
 (defun custom-face-format-handler (widget escape)
806 873
   ;; We recognize extra escape sequences.
@@ -808,6 +875,10 @@ Optional EVENT is the location for the menu."
808 875
 	(state (widget-get widget :custom-state))
809 876
 	(symbol (widget-get widget :value)))
810 877
     (cond ((eq escape ?s)
  878
+	   (and (string-match "XEmacs" emacs-version)
  879
+		;; XEmacs cannot display initialized faces.
  880
+		(not (custom-facep symbol))
  881
+		(copy-face 'custom-face-empty symbol))
811 882
 	   (setq child (widget-create-child-and-convert 
812 883
 			widget 'custom-level
813 884
 			:format "(%[%t%])\n"
@@ -824,6 +895,7 @@ Optional EVENT is the location for the menu."
824 895
   (unless (eq (preceding-char) ?\n)
825 896
     (insert "\n"))
826 897
   (when (not (eq (widget-get widget :custom-state) 'hidden))
  898
+    (custom-load-widget widget)
827 899
     (let* ((symbol (widget-value widget))
828 900
 	   (edit (widget-create-child-and-convert
829 901
 		  widget 'editable-list
@@ -970,7 +1042,9 @@ Optional EVENT is the location for the menu."
970 1042
 (defun custom-hook-convert-widget (widget)
971 1043
   ;; Handle `:custom-options'.
972 1044
   (let* ((options (widget-get widget :options))
973  
-	 (other `(editable-list :inline t (function :format "%v")))
  1045
+	 (other `(editable-list :inline t 
  1046
+				:entry-format "%i %d%v"
  1047
+				(function :format " %v")))
974 1048
 	 (args (if options
975 1049
 		   (list `(checklist :inline t
976 1050
 				     ,@(mapcar (lambda (entry)
@@ -992,15 +1066,17 @@ Optional EVENT is the location for the menu."
992 1066
   :action 'custom-group-action
993 1067
   :custom-apply 'custom-group-apply
994 1068
   :custom-set-default 'custom-group-set-default
995  
-  :custom-reset 'custom-group-reset)
  1069
+  :custom-reset 'custom-group-reset
  1070
+  :custom-menu 'custom-group-menu-create)
996 1071
 
997 1072
 (defun custom-group-value-create (widget)
998  
-  (let* ((state (widget-get widget :custom-state))
999  
-	 (level (widget-get widget :custom-level))
1000  
-	 (symbol (widget-value widget))
1001  
-	 (members (get symbol 'custom-group)))
  1073
+  (let ((state (widget-get widget :custom-state)))
1002 1074
     (unless (eq state 'hidden)
1003  
-      (let* ((children (mapcar (lambda (entry)
  1075
+      (custom-load-widget widget)
  1076
+      (let* ((level (widget-get widget :custom-level))
  1077
+	     (symbol (widget-value widget))
  1078
+	     (members (get symbol 'custom-group))
  1079
+	     (children (mapcar (lambda (entry)
1004 1080
 				 (widget-insert "\n")
1005 1081
 				 (prog1
1006 1082
 				     (widget-create-child-and-convert
@@ -1162,6 +1238,123 @@ Leave point at the location of the call, or after the last expression."
1162 1238
     (set-buffer (find-file-noselect custom-file))
1163 1239
     (save-buffer)))
1164 1240
 
  1241
+;;; The Customize Menu.
  1242
+
  1243
+(defcustom custom-menu-nesting 2
  1244
+  "Maximum nesting in custom menus."
  1245
+  :type 'integer
  1246
+  :group 'customize)
  1247
+
  1248
+(defun custom-face-menu-create (widget symbol)
  1249
+  "Ignoring WIDGET, create a menu entry for customization face SYMBOL."
  1250
+  (vector (custom-unlispify-menu-entry symbol)
  1251
+	  `(custom-buffer-create '((,symbol custom-face)))
  1252
+	  t))
  1253
+
  1254
+(defun custom-variable-menu-create (widget symbol)
  1255
+  "Ignoring WIDGET, create a menu entry for customization variable SYMBOL."
  1256
+  (let ((type (get symbol 'custom-type)))
  1257
+    (unless (listp type)
  1258
+      (setq type (list type)))
  1259
+    (if (and type (widget-get type :custom-menu))
  1260
+	(widget-apply type :custom-menu symbol)
  1261
+      (vector (custom-unlispify-menu-entry symbol)
  1262
+	      `(custom-buffer-create '((,symbol custom-variable)))
  1263
+	      t))))
  1264
+
  1265
+(widget-put (get 'boolean 'widget-type)
  1266
+	    :custom-menu (lambda (widget symbol)
  1267
+			   (vector (custom-unlispify-menu-entry symbol)
  1268
+				   `(custom-buffer-create
  1269
+				     '((,symbol custom-variable)))
  1270
+				   ':style 'toggle
  1271
+				   ':selected symbol)))
  1272
+
  1273
+(defun custom-group-menu-create (widget symbol)
  1274
+  "Ignoring WIDGET, create a menu entry for customization group SYMBOL."
  1275
+  (custom-menu-create symbol))
  1276
+
  1277
+(defun custom-menu-create (symbol &optional name)
  1278
+  "Create menu for customization group SYMBOL.
  1279
+If optional NAME is given, use that as the name of the menu. 
  1280
+Otherwise make up a name from SYMBOL.
  1281
+The menu is in a format applicable to `easy-menu-define'."
  1282
+  (unless name
  1283
+    (setq name (custom-unlispify-menu-entry symbol)))
  1284
+  (let ((item (vector name
  1285
+		      `(custom-buffer-create '((,symbol custom-group)))
  1286
+		      t)))
  1287
+    (if (> custom-menu-nesting 0)
  1288
+	(let ((custom-menu-nesting (1- custom-menu-nesting))
  1289
+	      (custom-prefix-list (cons (or (get symbol 'custom-prefix)
  1290
+					    (concat (symbol-name symbol) "-"))
  1291
+					custom-prefix-list)))
  1292
+	  (custom-load-symbol symbol)
  1293
+	  `(,(custom-unlispify-menu-entry symbol t)
  1294
+	    ,item
  1295
+	    "--"
  1296
+	    ,@(mapcar (lambda (entry)
  1297
+			(widget-apply (if (listp (nth 1 entry))
  1298
+					  (nth 1 entry)
  1299
+					(list (nth 1 entry)))
  1300
+				      :custom-menu (nth 0 entry)))
  1301
+		      (get symbol 'custom-group))))
  1302
+      item)))
  1303
+
  1304
+;;;###autoload
  1305
+(defun custom-menu-update ()
  1306
+  "Update customize menu."
  1307
+  (interactive)
  1308
+  (add-hook 'custom-define-hook 'custom-menu-reset)
  1309
+  (let ((menu `(,(car custom-help-menu)
  1310
+		,(widget-apply '(custom-group) :custom-menu 'emacs)
  1311
+		,@(cdr (cdr custom-help-menu)))))
  1312
+    (if (fboundp 'add-submenu)
  1313
+	(add-submenu '("Help") menu)
  1314
+      (define-key global-map [menu-bar help-menu customize-menu]
  1315
+	(cons (car menu) (easy-menu-create-keymaps (car menu) (cdr menu)))))))
  1316
+
  1317
+;;; Dependencies.
  1318
+
  1319
+;;;###autoload
  1320
+(defun custom-make-dependencies ()
  1321
+  "Batch function to extract custom dependencies from .el files.
  1322
+Usage: emacs -batch *.el -f custom-make-dependencies > deps.el"
  1323
+  (let ((buffers (buffer-list)))
  1324
+    (while buffers
  1325
+      (set-buffer (car buffers))
  1326
+      (setq buffers (cdr buffers))
  1327
+      (let ((file (buffer-file-name)))
  1328
+	(when (and file (string-match "\\`\\(.*\\)\\.el\\'" file))
  1329
+	  (goto-char (point-min))
  1330
+	  (condition-case nil
  1331
+	      (let ((name (file-name-nondirectory (match-string 1 file))))
  1332
+		(while t
  1333
+		  (let ((expr (read (current-buffer))))
  1334
+		    (when (and (listp expr)
  1335
+			       (memq (car expr) '(defcustom defface defgroup)))
  1336
+		      (eval expr)
  1337
+		      (put (nth 1 expr) 'custom-where name)))))
  1338
+	    (error nil))))))
  1339
+  (mapatoms (lambda (symbol)
  1340
+	      (let ((members (get symbol 'custom-group))
  1341
+		    item where found)
  1342
+		(when members
  1343
+		  (princ "(put '")
  1344
+		  (princ symbol)
  1345
+		  (princ " 'custom-loads '(")
  1346
+		  (while members
  1347
+		    (setq item (car (car members))
  1348
+			  members (cdr members)
  1349
+			  where (get item 'custom-where))
  1350
+		    (unless (or (null where)
  1351
+				(member where found))
  1352
+		      (when found
  1353
+			(princ " "))
  1354
+		      (prin1 where)
  1355
+		      (push where found)))
  1356
+		  (princ "))\n"))))))
  1357
+
1165 1358
 ;;; The End.
1166 1359
 
1167 1360
 (provide 'custom-edit)
45  lisp/custom-opt.el
... ...
@@ -0,0 +1,45 @@
  1
+;;; custom-opt.el --- An option group.
  2
+;;
  3
+;; Copyright (C) 1996 Free Software Foundation, Inc.
  4
+;;
  5
+;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
  6
+;; Keywords: help, faces
  7
+;; Version: 1.12
  8
+;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
  9
+
  10
+;;; Code:
  11
+
  12
+(require 'custom)
  13
+
  14
+(defgroup options nil
  15
+  "This group contains often used customization options."
  16
+  :group 'emacs)
  17
+
  18
+(defvar custom-options 
  19
+  '((line-number-mode boolean)
  20
+    (column-number-mode boolean)
  21
+    (debug-on-error boolean)
  22
+    (debug-on-quit boolean)
  23
+    (case-fold-search boolean)
  24
+    (case-replace boolean)
  25
+    (transient-mark-mode boolean))
  26
+  "Alist of customization options.
  27
+The first element of each entry should be a variable name, the second
  28
+a widget type.")
  29
+
  30
+(let ((options custom-options)
  31
+      option name type)
  32
+  (while options
  33
+    (setq option (car options)
  34
+	  options (cdr options)
  35
+	  name (nth 0 option)
  36
+	  type (nth 1 option))
  37
+    (put name 'custom-type type)
  38
+    (custom-add-to-group 'options name 'custom-variable))
  39
+  (run-hooks 'custom-define-hook))
  40
+
  41
+;;; The End.
  42
+
  43
+(provide 'custom-opt)
  44
+
  45
+;; custom-edit.el ends here
119  lisp/custom.el
@@ -4,7 +4,7 @@
4 4
 ;;
5 5
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
6 6
 ;; Keywords: help, faces
7  
-;; Version: 1.04
  7
+;; Version: 1.12
8 8
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
9 9
 
10 10
 ;;; Commentary:
@@ -19,7 +19,7 @@
19 19
 
20 20
 (require 'widget)
21 21
 
22  
-(define-widget-keywords :link :options :type :group)
  22
+(define-widget-keywords :prefix :tag :load :link :options :type :group)
23 23
 
24 24
 ;; These autoloads should be deleted when the file is added to Emacs
25 25
 (autoload 'customize "custom-edit" nil t)
@@ -28,6 +28,8 @@
28 28
 (autoload 'customize-apropos "custom-edit" nil t)
29 29
 (autoload 'customize-customized "custom-edit" nil t)
30 30
 (autoload 'custom-buffer-create "custom-edit")
  31
+(autoload 'custom-menu-update "custom-edit")
  32
+(autoload 'custom-make-dependencies "custom-edit")
31 33
 
32 34
 ;;; Compatibility.
33 35
 
@@ -74,7 +76,8 @@ If FRAME is omitted or nil, use the selected frame."
74 76
 			     (list (cons 'background-mode mode)))
75 77
     mode))
76 78
 
77  
-;; XEmacs and Emacs have two different definitions of `facep'.
  79
+;; XEmacs and Emacs have different definitions of `facep'.  
  80
+;; The Emacs definition is the useful one, so emulate that. 
78 81
 (cond ((not (fboundp 'facep))
79 82
        (defun custom-facep (face) 
80 83
 	 "No faces"
@@ -120,12 +123,9 @@ If FRAME is omitted or nil, use the selected frame."
120 123
 			   value)
121 124
 		 ;; Fast code for the common case.
122 125
 		 (put symbol 'custom-options (copy-list value))))
123  
-	      ((eq keyword :group)
124  
-	       (custom-add-to-group value symbol 'custom-variable))
125  
-	      ((eq keyword :link)
126  
-	       (custom-add-link symbol value))
127 126
 	      (t
128  
-	       (error "Unknown keyword %s" keyword))))))
  127
+	       (custom-handle-keyword symbol keyword value
  128
+				      'custom-variable))))))
129 129
   (run-hooks 'custom-define-hook)
130 130
   symbol)
131 131
 
@@ -166,22 +166,7 @@ information."
166 166
 	(custom-face-display-set face value))))
167 167
   (when doc
168 168
     (put face 'face-documentation doc))
169  
-  (while args 
170  
-    (let ((arg (car args)))
171  
-      (setq args (cdr args))
172  
-      (unless (symbolp arg)
173  
-	(error "Junk in args %S" args))
174  
-      (let ((keyword arg)
175  
-	    (value (car args)))
176  
-	(unless args
177  
-	  (error "Keyword %s is missing an argument" :type))
178  
-	(setq args (cdr args))
179  
-	(cond ((eq keyword :group)
180  
-	       (custom-add-to-group value face 'custom-face))
181  
-	      ((eq keyword :link)
182  
-	       (custom-add-link face value))
183  
-	      (t
184  
-	       (error "Unknown keyword %s" face))))))
  169
+  (custom-handle-all-keywords face args 'custom-face)
185 170
   (run-hooks 'custom-define-hook)
186 171
   face)
187 172
 
@@ -249,14 +234,13 @@ information."
249 234
       (let ((keyword arg)
250 235
 	    (value (car args)))
251 236
 	(unless args
252  
-	  (error "Keyword %s is missing an argument" :type))
  237
+	  (error "Keyword %s is missing an argument" keyword))
253 238
 	(setq args (cdr args))
254  
-	(cond ((eq keyword :group)
255  
-	       (custom-add-to-group value symbol 'custom-group))
256  
-	      ((eq keyword :link)
257  
-	       (custom-add-link symbol value))
  239
+	(cond ((eq keyword :prefix)
  240
+	       (put symbol 'custom-prefix value))
258 241
 	      (t
259  
-	       (error "Unknown keyword %s" symbol))))))
  242
+	       (custom-handle-keyword symbol keyword value
  243
+				      'custom-group))))))
260 244
   (run-hooks 'custom-define-hook)
261 245
   symbol)
262 246
 
@@ -297,6 +281,35 @@ If there already is an entry for that option, overwrite it."
297 281
 
298 282
 ;;; Properties.
299 283
 
  284
+(defun custom-handle-all-keywords (symbol args type)
  285
+  "For customization option SYMBOL, handle keyword arguments ARGS.
  286
+Third argument TYPE is the custom option type."
  287
+  (while args 
  288
+    (let ((arg (car args)))
  289
+      (setq args (cdr args))
  290
+      (unless (symbolp arg)
  291
+	(error "Junk in args %S" args))
  292
+      (let ((keyword arg)
  293
+	    (value (car args)))
  294
+	(unless args
  295
+	  (error "Keyword %s is missing an argument" keyword))
  296
+	(setq args (cdr args))
  297
+	(custom-handle-keyword symbol keyword value type)))))  
  298
+
  299
+(defun custom-handle-keyword (symbol keyword value type)
  300
+  "For customization option SYMBOL, handle KEYWORD with VALUE.
  301
+Fourth argument TYPE is the custom option type."
  302
+  (cond ((eq keyword :group)
  303
+	 (custom-add-to-group value symbol type))
  304
+	((eq keyword :link)
  305
+	 (custom-add-link symbol value))
  306
+	((eq keyword :load)
  307
+	 (custom-add-load symbol value))
  308
+	((eq keyword :tag)
  309
+	 (put symbol 'custom-tag value))
  310
+	(t
  311
+	 (error "Unknown keyword %s" symbol))))  
  312
+
300 313
 (defun custom-add-option (symbol option)
301 314
   "To the variable SYMBOL add OPTION.
302 315
 
@@ -312,6 +325,13 @@ For other types variables, the effect is undefined."
312 325
     (unless (member widget links)
313 326
       (put symbol 'custom-links (cons widget links)))))
314 327
 
  328
+(defun custom-add-load (symbol load)
  329
+  "To the custom option SYMBOL add the dependency LOAD.
  330
+LOAD should be either a library file name, or a feature name."
  331
+  (let ((loads (get symbol 'custom-loads)))
  332
+    (unless (member load loads)
  333
+      (put symbol 'custom-loads (cons load loads)))))
  334
+
315 335
 ;;; Face Utilities.
316 336
 
317 337
 (and (fboundp 'make-face)
@@ -526,6 +546,7 @@ See `defface' for the format of SPEC."
526 546
   :link '(custom-manual "(custom)Top")
527 547
   :link '(url-link :tag "Development Page" 
528 548
 		   "http://www.dina.kvl.dk/~abraham/custom/")
  549
+  :prefix "custom-"
529 550
   :group 'emacs)
530 551
 
531 552
 (defcustom custom-define-hook nil
@@ -535,32 +556,6 @@ See `defface' for the format of SPEC."
535 556
 
536 557
 ;;; Menu support
537 558
 
538  
-(defcustom custom-menu-nesting 2
539  
-  "Maximum nesting in custom menus."
540  
-  :type 'integer
541  
-  :group 'customize)
542  
-
543  
-(defun custom-menu-create-entry (entry)
544  
-  "Create a easy menu entry for customization option ENTRY.
545  
-
546  
-ENTRY should be list whose first element is a symbol, and second
547  
-element is a widget type used to customize the symbol.  The widget
548  
-type `custom-group' is recognized, and will return a submenu
549  
-specification containing the group members.
550  
-
551  
-The maximum nesting in the submenu is specified by `custom-menu-nesting'."
552  
-  (let ((item (vector (symbol-name (nth 0 entry))
553  
-		      `(custom-buffer-create (list (quote ,entry)))
554  
-		      t)))
555  
-    (if (and (> custom-menu-nesting 0)
556  
-	     (eq (nth 1 entry) 'custom-group))
557  
-	(let ((custom-menu-nesting (1- custom-menu-nesting))
558  
-	      (symbol (nth 0 entry)))
559  
-	  `(,(symbol-name symbol)
560  
-	    ,item
561  
-	    ,@(mapcar 'custom-menu-create-entry (get symbol 'custom-group))))
562  
-      item)))
563  
-
564 559
 (defconst custom-help-menu '("Customize"
565 560
 			     ["Update menu..." custom-menu-update t]
566 561
 			     ["Group..." customize t]
@@ -580,18 +575,6 @@ The maximum nesting in the submenu is specified by `custom-menu-nesting'."
580 575
 	    (easy-menu-create-keymaps (car custom-help-menu)
581 576
 				      (cdr custom-help-menu))))))
582 577
 
583  
-(defun custom-menu-update ()
584  
-  "Update customize menu."
585  
-  (interactive)
586  
-  (add-hook 'custom-define-hook 'custom-menu-reset)
587  
-  (let ((menu `(,(car custom-help-menu)
588  
-		,(custom-menu-create-entry '(emacs custom-group))
589  
-		,@(cdr (cdr custom-help-menu)))))
590  
-    (if (fboundp 'add-submenu)
591  
-	(add-submenu '("Help") menu)
592  
-      (define-key global-map [menu-bar help-menu customize-menu]
593  
-	(cons (car menu) (easy-menu-create-keymaps (car menu) (cdr menu)))))))
594  
-
595 578
 (custom-menu-reset)
596 579
 
597 580
 ;;; The End.
13  lisp/gnus-art.el
@@ -1504,9 +1504,8 @@ groups."
1504 1504
      gnus-button-message-id 3)
1505 1505
     ("\\(<URL: *\\)?mailto: *\\([^> \n\t]+\\)>?" 0 t gnus-url-mailto 2)
1506 1506
     ;; This is how URLs _should_ be embedded in text...
1507  
-    ("<URL: *\\([^\n\r>]*\\)>" 0 t gnus-button-url 1)
1508  
-    ;; Next regexp stolen from highlight-headers.el.
1509  
-    ;; Modified by Vladimir Alexiev.
  1507
+    ("<URL: *\\([^>]*\\)>" 0 t gnus-button-embedded-url 1)
  1508
+    ;; Raw URLs.
1510 1509
     (,gnus-button-url-regexp 0 t gnus-button-url 0))
1511 1510
   "Alist of regexps matching buttons in article bodies.
1512 1511
 
@@ -1828,9 +1827,7 @@ specified by `gnus-button-alist'."
1828 1827
 	   (inhibit-point-motion-hooks t)
1829 1828
 	   (fun (nth 3 entry))
1830 1829
 	   (args (mapcar (lambda (group)
1831  
-			   (let ((string (buffer-substring
1832  
-					  (match-beginning group)
1833  
-					  (match-end group))))
  1830
+			   (let ((string (match-string group)))
1834 1831
 			     (gnus-set-text-properties
1835 1832
 			      0 (length string) nil string)
1836 1833
 			     string))
@@ -1958,6 +1955,10 @@ forbidden in URL encoding."
1958 1955
   "Browse ADDRESS."
1959 1956
   (funcall browse-url-browser-function address))
1960 1957
 
  1958
+(defun gnus-button-embedded-url (address)
  1959
+  "Browse ADDRESS."
  1960
+  (funcall browse-url-browser-function (gnus-strip-whitespace address)))
  1961
+
1961 1962
 ;;; Next/prev buttons in the article buffer.
1962 1963
 
1963 1964
 (defvar gnus-next-page-line-format "%{%(Next page...%)%}\n")
2  lisp/gnus-cache.el
@@ -90,7 +90,7 @@ variable to \"^nnml\"."
90 90
 		 (not (eq gnus-use-cache 'passive))))
91 91
     (gnus-cache-read-active)))
92 92
 
93  
-;; Complexities of byte-compiling makes this kludge necessary.  Eeek.
  93
+;; Complexities of byte-compiling make this kludge necessary.  Eeek.
94 94
 (ignore-errors
95 95
   (gnus-add-shutdown 'gnus-cache-close 'gnus))
96 96
 
4  lisp/gnus-cite.el
@@ -264,8 +264,8 @@ This should make it easier to see who wrote what."
264 264
 ;; TAG: Is a Supercite tag, if any.
265 265
 
266 266
 (defvar gnus-cited-text-button-line-format-alist 
267  
-  `((?b beg ?d)
268  
-    (?e end ?d)
  267
+  `((?b (marker-position beg) ?d)
  268
+    (?e (marker-position end) ?d)
269 269
     (?l (- end beg) ?d)))
270 270
 (defvar gnus-cited-text-button-line-format-spec nil)
271 271
 
2  lisp/gnus-nocem.el
@@ -36,7 +36,7 @@
36 36
   :group 'gnus-score)
37 37
 
38 38
 (defcustom gnus-nocem-groups 
39  
-  '("alt.nocem.misc" "news.admin.net-abuse.announce")
  39
+  '("news.lists.filters" "alt.nocem.misc" "news.admin.net-abuse.announce")
40 40
   "List of groups that will be searched for NoCeM messages."
41 41
   :group 'gnus-nocem
42 42
   :type '(repeat (string :tag "Group")))
4  lisp/gnus-score.el
@@ -2230,8 +2230,8 @@ SCORE is the score to add."
2230 2230
 	(insert (format "%-5d: %s\n" (caar rules) (cdar rules)))
2231 2231
 	(pop rules))
2232 2232
       (gnus-add-current-to-buffer-list)
2233  
-      (gnus-configure-windows 'score-words)
2234  
-      (goto-char (point-min)))))
  2233
+      (goto-char (point-min))
  2234
+      (gnus-configure-windows 'score-words))))
2235 2235
 
2236 2236
 (defun gnus-summary-rescore ()
2237 2237
   "Redo the entire scoring process in the current summary."
62  lisp/gnus-start.el
@@ -389,22 +389,24 @@ Can be used to turn version control on or off."
389 389
 ;; Suggested by Brian Edmonds <edmonds@cs.ubc.ca>.
390 390
 (defvar gnus-init-inhibit nil)
391 391
 (defun gnus-read-init-file (&optional inhibit-next)
392  
-  (if gnus-init-inhibit
393  
-      (setq gnus-init-inhibit nil)
394  
-    (setq gnus-init-inhibit inhibit-next)
395  
-    (let ((files (list gnus-site-init-file gnus-init-file))
396  
-	  file)
397  
-      (while files
398  
-	(and (setq file (pop files))
399  
-	     (or (and (file-exists-p file)
400  
-		      ;; Don't try to load a directory.
401  
-		      (not (file-directory-p file)))
402  
-		 (file-exists-p (concat file ".el"))
403  
-		 (file-exists-p (concat file ".elc")))
404  
-	     (condition-case var
405  
-		 (load file nil t)
406  
-	       (error
407  
-		(error "Error in %s: %s" file var))))))))
  392
+  ;; Don't load .gnus if -q option was used.
  393
+  (when init-file-user
  394
+    (if gnus-init-inhibit
  395
+	(setq gnus-init-inhibit nil)
  396
+      (setq gnus-init-inhibit inhibit-next)
  397
+      (let ((files (list gnus-site-init-file gnus-init-file))
  398
+	    file)
  399
+	(while files
  400
+	  (and (setq file (pop files))
  401
+	       (or (and (file-exists-p file)
  402
+			;; Don't try to load a directory.
  403
+			(not (file-directory-p file)))
  404
+		   (file-exists-p (concat file ".el"))
  405
+		   (file-exists-p (concat file ".elc")))
  406
+	       (condition-case var
  407
+		   (load file nil t)
  408
+		 (error
  409
+		  (error "Error in %s: %s" file var)))))))))
408 410
 
409 411
 ;; For subscribing new newsgroup
410 412
 
@@ -1220,19 +1222,25 @@ newsgroup."
1220 1222
 	(setq info (pop newsrc)
1221 1223
 	      group (gnus-info-group info))
1222 1224
 	(unless (or (gnus-active group)	; Active
1223  
-		    (gnus-info-method info) ; Foreign
1224  
-		    (and confirm
1225  
-			 (not (gnus-y-or-n-p
1226  
-			       (format "Remove bogus newsgroup: %s " group)))))
  1225
+		    (gnus-info-method info)) ; Foreign
1227 1226
 	  ;; Found a bogus newsgroup.
1228 1227
 	  (push group bogus)))
1229  
-      ;; Remove all bogus subscribed groups by first killing them, and
1230  
-      ;; then removing them from the list of killed groups.
1231  
-      (while bogus
1232  
-	(when (setq entry (gnus-gethash (setq group (pop bogus))
1233  
-					gnus-newsrc-hashtb))
1234  
-	  (gnus-group-change-level entry gnus-level-killed)
1235  
-	  (setq gnus-killed-list (delete group gnus-killed-list))))
  1228
+      (if confirm
  1229
+	  (map-y-or-n-p
  1230
+	   "Remove bogus group %s? "
  1231
+	   (lambda (group)
  1232
+	     ;; Remove all bogus subscribed groups by first killing them, and
  1233
+	     ;; then removing them from the list of killed groups.
  1234
+	     (when (setq entry (gnus-gethash group gnus-newsrc-hashtb))
  1235
+	       (gnus-group-change-level entry gnus-level-killed)
  1236
+	       (setq gnus-killed-list (delete group gnus-killed-list))))
  1237
+	   bogus)
  1238
+	(while (setq group (pop bogus))
  1239
+	  ;; Remove all bogus subscribed groups by first killing them, and
  1240
+	  ;; then removing them from the list of killed groups.
  1241
+	  (when (setq entry (gnus-gethash group gnus-newsrc-hashtb))
  1242
+	    (gnus-group-change-level entry gnus-level-killed)
  1243
+	    (setq gnus-killed-list (delete group gnus-killed-list)))))
1236 1244
       ;; Then we remove all bogus groups from the list of killed and
1237 1245
       ;; zombie groups.  They are removed without confirmation.
1238 1246
       (let ((dead-lists '(gnus-killed-list gnus-zombie-list))
274  lisp/gnus-sum.el
@@ -32,15 +32,102 @@
32 32
 (require 'gnus-int)
33 33
 (require 'gnus-undo)
34 34
 
  35
+;; Belongs to to gnus.el
  36
+(defgroup gnus-various nil
  37
+  "Other Gnus options."
  38
+  :link '(custom-manual "(gnus)Various Various")
  39
+  :group 'gnus)
  40
+
  41
+;; Belongs to to gnus-group.el
  42
+(defgroup gnus-group-select nil
  43
+  "Selecting a Group."
  44
+  :link '(custom-manual "(gnus)Selecting a Group")
  45
+  :group 'gnus-group)
  46
+
  47
+;; Belongs to to gnus-uu.el
  48
+(defgroup gnus-extract-view nil
  49
+  "Viewing extracted files."
  50
+  :link '(custom-manual "(gnus)Viewing Files")
  51
+  :group 'gnus-extract)
  52
+
  53
+;; Belongs to article.el
  54
+(defgroup article-hiding-headers nil
  55
+  "Hiding headers in the article buffer."
  56
+  :link '(custom-manual "(gnus)Hiding Headers")
  57
+  :group 'article)
  58
+
  59
+(defgroup article-various nil
  60
+  "Miscellaneous article options."
  61
+  :link '(custom-manual "(gnus)Misc Article")
  62
+  :group 'article)
  63
+
  64
+(defgroup article-mime nil
  65
+  "Encoding articles and including attachments."
  66
+  :link '(custom-manual "(gnus)Using MIME")
  67
+  :group 'article)
  68
+
  69
+;; These belong here.
35 70
 (defgroup gnus-summary nil
36 71
   "Summary buffers."
  72
+  :link '(custom-manual "(gnus)The Summary Buffer")
37 73
   :group 'gnus)
38 74
 
  75
+(defgroup gnus-summary-exit nil
  76
+  "Leaving summary buffers."
  77
+  :link '(custom-manual "(gnus)Exiting the Summary Buffer")
  78
+  :group 'gnus-summary)
  79
+
  80
+(defgroup gnus-summary-marks nil
  81
+  "Marks used in summary buffers."
  82
+  :link '(custom-manual "(gnus)Marking Articles")
  83
+  :group 'gnus-summary)
  84
+
  85
+(defgroup gnus-thread nil
  86
+  "Ordering articles according to replies."
  87
+  :link '(custom-manual "(gnus)Threading")
  88
+  :group 'gnus-summary)
  89
+
  90
+(defgroup gnus-summary-format nil
  91
+  "Formatting of the summary buffer."
  92
+  :link '(custom-manual "(gnus)Summary Buffer Format")
  93
+  :group 'gnus-summary)
  94
+
  95
+(defgroup gnus-summary-choose nil
  96
+  "Choosing Articles."
  97
+  :link '(custom-manual "(gnus)Choosing Articles")
  98
+  :group 'gnus-summary)
  99
+
  100
+(defgroup gnus-summary-maneuvering nil
  101
+  "Summary movement commands."
  102
+  :link '(custom-manual "(gnus)Summary Maneuvering")
  103
+  :group 'gnus-summary)
  104
+
  105
+(defgroup gnus-summary-mail nil
  106
+  "Mail group commands."
  107
+  :link '(custom-manual "(gnus)Mail Group Commands")
  108
+  :group 'gnus-summary)
  109
+
  110
+(defgroup gnus-summary-sort nil
  111
+  "Sorting the summary buffer."
  112
+  :link '(custom-manual "(gnus)Sorting")
  113
+  :group 'gnus-summary)
  114
+
  115
+(defgroup gnus-summary-visual nil
  116
+  "Highlighting and menus in the summary buffer."
  117
+  :link '(custom-manual "(gnus)Summary Highlighting")
  118
+  :group 'gnus-visual
  119
+  :group 'gnus-summary)
  120
+
  121
+(defgroup gnus-summary-various nil
  122
+  "Various summary buffer options."
  123
+  :link '(custom-manual "(gnus)Various Summary Stuff")
  124
+  :group 'gnus-summary)
  125
+
39 126
 (defcustom gnus-kill-summary-on-exit t
40 127
   "*If non-nil, kill the summary buffer when you exit from it.
41 128
 If nil, the summary will become a \"*Dead Summary*\" buffer, and
42 129
 it will be killed sometime later."
43  
-  :group 'gnus-summary
  130
+  :group 'gnus-summary-exit
44 131
   :type 'boolean)
45 132
 
46 133
 (defcustom gnus-fetch-old-headers nil
@@ -55,7 +142,7 @@ This variable can also be a number.  In that case, no more than that
55 142
 number of old headers will be fetched.
56 143
 
57 144
 The server has to support NOV for any of this to work."
58  
-  :group 'gnus-summary
  145
+  :group 'gnus-thread
59 146
   :type '(choice (const :tag "off" nil)
60 147
 		 (const some)
61 148
 		 number
@@ -83,7 +170,7 @@ the parent and mark all the step-children as such.
83 170
 If this variable is `empty', the \"children\" are printed with empty
84 171
 subject fields.	 (Or rather, they will be printed with a string
85 172
 given by the `gnus-summary-same-subject' variable.)"
86  
-  :group 'gnus-summary
  173
+  :group 'gnus-thread
87 174
   :type '(choice (const :tag "off" nil)
88 175
 		 (const none)
89 176
 		 (const dummy)
@@ -95,7 +182,7 @@ given by the `gnus-summary-same-subject' variable.)"
95 182
 As loose thread gathering is done on subjects only, that means that
96 183
 there can be many false gatherings performed.  By rooting out certain
97 184
 common subjects, gathering might become saner."
98  
-  :group 'gnus-summary
  185
+  :group 'gnus-thread
99 186
   :type 'regexp)
100 187
 
101 188
 (defcustom gnus-summary-gather-subject-limit nil
@@ -108,14 +195,14 @@ same few characters will be incorrectly gathered.
108 195
 
109 196
 If this variable is `fuzzy', Gnus will use a fuzzy algorithm when
110 197
 comparing subjects."
111  
-  :group 'gnus-summary
  198
+  :group 'gnus-thread
112 199
   :type '(choice (const :tag "off" nil)
113 200
 		 (const fuzzy)
114 201
 		 (sexp :menu-tag "on" t)))
115 202
 
116 203
 (defcustom gnus-simplify-ignored-prefixes nil
117 204
   "*Regexp, matches for which are removed from subject lines when simplifying fuzzily."
118  
-  :group 'gnus-summary
  205
+  :group 'gnus-thread
119 206
   :type '(choice (const :tag "off" nil)
120 207
 		 regexp))
121 208
 
@@ -124,7 +211,7 @@ comparing subjects."
124 211
 If `some', only fill in the gaps that are needed to tie loose threads
125 212
 together.  If `more', fill in all leaf nodes that Gnus can find.  If
126 213
 non-nil and non-`some', fill in all gaps that Gnus manages to guess."
127  
-  :group 'gnus-summary
  214
+  :group 'gnus-thread
128 215
   :type '(choice (const :tag "off" nil)
129 216
 		 (const some)
130 217
 		 (const more)
@@ -136,7 +223,7 @@ There are two pre-defined functions: `gnus-gather-threads-by-subject',
136 223
 which only takes Subjects into consideration; and
137 224
 `gnus-gather-threads-by-references', which compared the References
138 225
 headers of the articles to find matches."
139  
-  :group 'gnus-summary
  226
+  :group 'gnus-thread
140 227
   :type '(set (function-item gnus-gather-threads-by-subject)
141 228
 	      (function-item gnus-gather-threads-by-references)
142 229
 	      (function :tag "other")))
@@ -146,7 +233,7 @@ headers of the articles to find matches."
146 233
   "*String indicating that the current article has the same subject as the previous.
147 234
 This variable will only be used if the value of
148 235
 `gnus-summary-make-false-root' is `empty'."
149  
-  :group 'gnus-summary
  236
+  :group 'gnus-summary-format
150 237
   :type 'string)
151 238
 
152 239
 (defcustom gnus-summary-goto-unread t
@@ -154,7 +241,8 @@ This variable will only be used if the value of
154 241
 If `never', commands that usually go to the next unread article, will
155 242
 go to the next article, whether it is read or not.
156 243
 If nil, only the marking commands will go to the next (un)read article."
157  
-  :group 'gnus-summary
  244
+  :group 'gnus-summary-marks
  245
+  :link '(custom-manual "(gnus)Setting Marks")
158 246
   :type '(choice (const :tag "off" nil)
159 247
 		 (const never)
160 248
 		 (sexp :menu-tag "on" t)))
@@ -162,7 +250,7 @@ If nil, only the marking commands will go to the next (un)read article."
162 250
 (defcustom gnus-summary-default-score 0
163 251
   "*Default article score level.
164 252
 If this variable is nil, scoring will be disabled."
165  
-  :group 'gnus-summary
  253
+  :group 'gnus-score
166 254
   :type '(choice (const :tag "disable")
167 255
 		 integer))
168 256
 
@@ -170,20 +258,20 @@ If this variable is nil, scoring will be disabled."
170 258
   "*Fuzziness factor for the zcore in the summary buffer.
171 259
 Articles with scores closer than this to `gnus-summary-default-score'
172 260
 will not be marked."
173  
-  :group 'gnus-summary
  261
+  :group 'gnus-summary-format
174 262
   :type 'integer)
175 263
 
176  
-(defcustom gnus-simplify-subject-fuzzy-regexp nil
  264
+(defcustom gnus-simplify-subject-fuzzy-regexp ""
177 265
   "*Strings to be removed when doing fuzzy matches.
178 266
 This can either be a regular expression or list of regular expressions
179 267
 that will be removed from subject strings if fuzzy subject
180 268
 simplification is selected."
181  
-  :group 'gnus-summary
  269
+  :group 'gnus-thread
182 270
   :type '(repeat regexp))
183 271
 
184 272
 (defcustom gnus-show-threads t
185 273
   "*If non-nil, display threads in summary mode."
186  
-  :group 'gnus-summary
  274
+  :group 'gnus-thread
187 275
   :type 'boolean)
188 276
 
189 277
 (defcustom gnus-thread-hide-subtree nil
@@ -191,19 +279,19 @@ simplification is selected."
191 279
 If threads are hidden, you have to run the command
192 280
 `gnus-summary-show-thread' by hand or use `gnus-select-article-hook'
193 281
 to expose hidden threads."
194  
-  :group 'gnus-summary
  282
+  :group 'gnus-thread
195 283
   :type 'boolean)
196 284
 
197 285
 (defcustom gnus-thread-hide-killed t
198 286
   "*If non-nil, hide killed threads automatically."
199  
-  :group 'gnus-summary
  287
+  :group 'gnus-thread
200 288
   :type 'boolean)
201 289
 
202 290
 (defcustom gnus-thread-ignore-subject nil
203 291
   "*If non-nil, ignore subjects and do all threading based on the Reference header.
204 292
 If nil, which is the default, articles that have different subjects
205 293
 from their parents will start separate threads."
206  
-  :group 'gnus-summary
  294
+  :group 'gnus-thread
207 295
   :type 'boolean)
208 296
 
209 297
 (defcustom gnus-thread-operation-ignore-subject t
@@ -215,19 +303,19 @@ If this variable is nil, articles in the same thread with different
215 303
 subjects will not be included in the operation in question.  If this
216 304
 variable is `fuzzy', only articles that have subjects that are fuzzily
217 305
 equal will be included."
218  
-  :group 'gnus-summary
  306
+  :group 'gnus-thread
219 307
   :type '(choice (const :tag "off" nil)
220 308
 		 (const fuzzy)
221 309
 		 (sexp :tag "on" t)))
222 310
 
223 311
 (defcustom gnus-thread-indent-level 4
224 312
   "*Number that says how much each sub-thread should be indented."
225  
-  :group 'gnus-summary
  313
+  :group 'gnus-thread
226 314
   :type 'integer)
227 315
 
228 316
 (defcustom gnus-auto-extend-newsgroup t
229 317
   "*If non-nil, extend newsgroup forward and backward when requested."
230  
-  :group 'gnus-summary
  318
+  :group 'gnus-summary-choose
231 319
   :type 'boolean)
232 320
 
233 321
 (defcustom gnus-auto-select-first t
@@ -239,7 +327,7 @@ article.
239 327
 If you want to prevent automatic selection of the first unread article
240 328
 in some newsgroups, set the variable to nil in
241 329
 `gnus-select-group-hook'."
242  
-  :group 'gnus-summary
  330
+  :group 'gnus-group-select
243 331
   :type '(choice (const :tag "none" nil)
244 332
 		 (const best)
245 333
 		 (sexp :menu-tag "first" t)))
@@ -255,7 +343,7 @@ newsgroup will be selected without any confirmation, and if it is
255 343
 confirmation if you are located on the last article in the group.
256 344
 Finally, if this variable is `slightly-quietly', the `Z n' command
257 345
 will go to the next group without confirmation."
258  
-  :group 'gnus-summary
  346
+  :group 'gnus-summary-maneuvering
259 347
   :type '(choice (const :tag "off" nil)
260 348
 		 (const quietly)
261 349
 		 (const almost-quietly)
@@ -264,54 +352,54 @@ will go to the next group without confirmation."
264 352
 
265 353
 (defcustom gnus-auto-select-same nil
266 354
   "*If non-nil, select the next article with the same subject."
267  
-  :group 'gnus-summary
  355
+  :group 'gnus-summary-maneuvering
268 356
   :type 'boolean)
269 357
 
270 358
 (defcustom gnus-summary-check-current nil
271 359
   "*If non-nil, consider the current article when moving.
272 360
 The \"unread\" movement commands will stay on the same line if the
273 361
 current article is unread."
274  
-  :group 'gnus-summary
  362
+  :group 'gnus-summary-maneuvering
275 363
   :type 'boolean)
276 364
 
277 365
 (defcustom gnus-auto-center-summary t
278 366
   "*If non-nil, always center the current summary buffer.
279 367
 In particular, if `vertical' do only vertical recentering.  If non-nil
280 368
 and non-`vertical', do both horizontal and vertical recentering."
281  
-  :group 'gnus-summary
  369
+  :group 'gnus-summary-maneuvering
282 370
   :type '(choice (const :tag "none" nil)
283 371
 		 (const vertical)
284 372
 		 (sexp :menu-tag "both" t)))
285 373
 
286 374
 (defcustom gnus-show-all-headers nil
287 375
   "*If non-nil, don't hide any headers."