*** empty log message ***
[gnus] / lisp / gnus.el
index 4f1fd6e..cb0f435 100644 (file)
@@ -3,7 +3,7 @@
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-;; Keywords: news
+;; Keywords: news, mail
 
 ;; This file is part of GNU Emacs.
 
 
 (require 'custom)
 (require 'gnus-load)
+(require 'message)
 
 (defgroup gnus nil
   "The coffee-brewing, all singing, all dancing, kitchen sink newsreader."
-  :group 'emacs)
+  :group 'news
+  :group 'mail)
 
 (defgroup gnus-start nil
   "Starting your favorite newsreader."
   :group 'gnus)
 
+(defgroup gnus-start-server nil
+  "Server options at startup."
+  :group 'gnus-start)
+
+;; These belong to gnus-group.el.
+(defgroup gnus-group nil
+  "Group buffers."
+  :link '(custom-manual "(gnus)The Group Buffer")
+  :group 'gnus)
+
+(defgroup gnus-group-foreign nil
+  "Foreign groups."
+  :link '(custom-manual "(gnus)Foreign Groups")
+  :group 'gnus-group)
+
+(defgroup gnus-group-new nil
+  "Automatic subscription of new groups."
+  :group 'gnus-group)
+
+(defgroup gnus-group-levels nil
+  "Group levels."
+  :link '(custom-manual "(gnus)Group Levels")
+  :group 'gnus-group)
+
+(defgroup gnus-group-select nil
+  "Selecting a Group."
+  :link '(custom-manual "(gnus)Selecting a Group")
+  :group 'gnus-group)
+
+(defgroup gnus-group-listing nil
+  "Showing slices of the group list."
+  :link '(custom-manual "(gnus)Listing Groups")
+  :group 'gnus-group)
+
+(defgroup gnus-group-visual nil
+  "Sorting the group buffer."
+  :link '(custom-manual "(gnus)Group Buffer Format")
+  :group 'gnus-group
+  :group 'gnus-visual)
+
+(defgroup gnus-group-various nil
+  "Various group options."
+  :link '(custom-manual "(gnus)Scanning New Messages")
+  :group 'gnus-group)
+
+;; These belong to gnus-sum.el.
+(defgroup gnus-summary nil
+  "Summary buffers."
+  :link '(custom-manual "(gnus)The Summary Buffer")
+  :group 'gnus)
+
+(defgroup gnus-summary-exit nil
+  "Leaving summary buffers."
+  :link '(custom-manual "(gnus)Exiting the Summary Buffer")
+  :group 'gnus-summary)
+
+(defgroup gnus-summary-marks nil
+  "Marks used in summary buffers."
+  :link '(custom-manual "(gnus)Marking Articles")
+  :group 'gnus-summary)
+
+(defgroup gnus-thread nil
+  "Ordering articles according to replies."
+  :link '(custom-manual "(gnus)Threading")
+  :group 'gnus-summary)
+
+(defgroup gnus-summary-format nil
+  "Formatting of the summary buffer."
+  :link '(custom-manual "(gnus)Summary Buffer Format")
+  :group 'gnus-summary)
+
+(defgroup gnus-summary-choose nil
+  "Choosing Articles."
+  :link '(custom-manual "(gnus)Choosing Articles")
+  :group 'gnus-summary)
+
+(defgroup gnus-summary-maneuvering nil
+  "Summary movement commands."
+  :link '(custom-manual "(gnus)Summary Maneuvering")
+  :group 'gnus-summary)
+
+(defgroup gnus-summary-mail nil
+  "Mail group commands."
+  :link '(custom-manual "(gnus)Mail Group Commands")
+  :group 'gnus-summary)
+
+(defgroup gnus-summary-sort nil
+  "Sorting the summary buffer."
+  :link '(custom-manual "(gnus)Sorting")
+  :group 'gnus-summary)
+
+(defgroup gnus-summary-visual nil
+  "Highlighting and menus in the summary buffer."
+  :link '(custom-manual "(gnus)Summary Highlighting")
+  :group 'gnus-visual
+  :group 'gnus-summary)
+
+(defgroup gnus-summary-various nil
+  "Various summary buffer options."
+  :link '(custom-manual "(gnus)Various Summary Stuff")
+  :group 'gnus-summary)
+
+;; Belongs to gnus-uu.el
+(defgroup gnus-extract-view nil
+  "Viewing extracted files."
+  :link '(custom-manual "(gnus)Viewing Files")
+  :group 'gnus-extract)
+
+;; Belongs to gnus-score.el
 (defgroup gnus-score nil
   "Score and kill file handling."
-  :group 'gnus )
+  :group 'gnus)
+
+(defgroup gnus-score-kill nil
+  "Kill files."
+  :group 'gnus-score)
+
+(defgroup gnus-score-adapt nil
+  "Adaptive score files."
+  :group 'gnus-score)
+
+(defgroup gnus-score-default nil
+  "Default values for score files."
+  :group 'gnus-score)
+
+(defgroup gnus-score-expire nil
+  "Expiring score rules."
+  :group 'gnus-score)
 
-(defconst gnus-version-number "0.82"
+(defgroup gnus-score-decay nil
+  "Decaying score rules."
+  :group 'gnus-score)
+
+(defgroup gnus-score-files nil
+  "Score and kill file names."
+  :group 'gnus-score
+  :group 'gnus-files)
+
+(defgroup gnus-score-various nil
+  "Various scoring and killing options."
+  :group 'gnus-score)
+
+;; Other
+(defgroup gnus-visual nil
+  "Options controling the visual fluff."
+  :group 'gnus
+  :group 'faces)
+
+(defgroup gnus-files nil
+  "Files used by Gnus."
+  :group 'gnus)
+
+(defgroup gnus-dribble-file nil
+  "Auto save file."
+  :link '(custom-manual "(gnus)Auto Save")
+  :group 'gnus-files)
+
+(defgroup gnus-newsrc nil
+  "Storing Gnus state."
+  :group 'gnus-files)
+
+(defgroup gnus-server nil
+  "Options related to newsservers and other servers used by Gnus."
+  :group 'gnus)
+
+(defgroup gnus-message '((message custom-group))
+  "Composing replies and followups in Gnus."
+  :group 'gnus)
+
+(defgroup gnus-meta nil
+  "Meta variables controling major portions of Gnus.
+In general, modifying these variables does not take affect until Gnus
+is restarted, and sometimes reloaded."
+  :group 'gnus)
+
+(defgroup gnus-various nil
+  "Other Gnus options."
+  :link '(custom-manual "(gnus)Various Various")
+  :group 'gnus)
+
+(defgroup gnus-exit nil
+  "Exiting gnus."
+  :link '(custom-manual "(gnus)Exiting Gnus")
+  :group 'gnus)
+
+(defconst gnus-version-number "5.4.47"
   "Version number for this version of Gnus.")
 
-(defconst gnus-version (format "Red Gnus v%s" gnus-version-number)
+(defconst gnus-version (format "Gnus v%s" gnus-version-number)
   "Version string for this version of Gnus.")
 
 (defcustom gnus-inhibit-startup-message nil
@@ -75,8 +258,6 @@ be set in `.emacs' instead."
   (defalias 'gnus-topic-remove-excess-properties 'ignore)
   (defalias 'gnus-appt-select-lowest-window 'appt-select-lowest-window)
   (defalias 'gnus-mail-strip-quoted-names 'mail-strip-quoted-names)
-  (defalias 'gnus-make-local-hook 'make-local-hook)
-  (defalias 'gnus-add-hook 'add-hook)
   (defalias 'gnus-character-to-event 'identity)
   (defalias 'gnus-add-text-properties 'add-text-properties)
   (defalias 'gnus-put-text-property 'put-text-property)
@@ -126,7 +307,7 @@ be set in `.emacs' instead."
 ;; We define these group faces here to avoid the display
 ;; update forced when creating new faces.
 
-(defface gnus-group-news-1-face 
+(defface gnus-group-news-1-face
   '((((class color)
       (background dark))
      (:foreground "PaleTurquoise" :bold t))
@@ -148,7 +329,7 @@ be set in `.emacs' instead."
      ()))
   "Level 1 empty newsgroup face.")
 
-(defface gnus-group-news-2-face 
+(defface gnus-group-news-2-face
   '((((class color)
       (background dark))
      (:foreground "turquoise" :bold t))
@@ -170,7 +351,7 @@ be set in `.emacs' instead."
      ()))
   "Level 2 empty newsgroup face.")
 
-(defface gnus-group-news-3-face 
+(defface gnus-group-news-3-face
   '((((class color)
       (background dark))
      (:bold t))
@@ -192,7 +373,7 @@ be set in `.emacs' instead."
      ()))
   "Level 3 empty newsgroup face.")
 
-(defface gnus-group-news-low-face 
+(defface gnus-group-news-low-face
   '((((class color)
       (background dark))
      (:foreground "DarkTurquoise" :bold t))
@@ -214,7 +395,7 @@ be set in `.emacs' instead."
      ()))
   "Low level empty newsgroup face.")
 
-(defface gnus-group-mail-1-face 
+(defface gnus-group-mail-1-face
   '((((class color)
       (background dark))
      (:foreground "aquamarine1" :bold t))
@@ -236,7 +417,7 @@ be set in `.emacs' instead."
      (:italic t :bold t)))
   "Level 1 empty mailgroup face.")
 
-(defface gnus-group-mail-2-face 
+(defface gnus-group-mail-2-face
   '((((class color)
       (background dark))
      (:foreground "aquamarine2" :bold t))
@@ -258,7 +439,7 @@ be set in `.emacs' instead."
      (:bold t)))
   "Level 2 empty mailgroup face.")
 
-(defface gnus-group-mail-3-face 
+(defface gnus-group-mail-3-face
   '((((class color)
       (background dark))
      (:foreground "aquamarine3" :bold t))
@@ -280,7 +461,7 @@ be set in `.emacs' instead."
      ()))
   "Level 3 empty mailgroup face.")
 
-(defface gnus-group-mail-low-face 
+(defface gnus-group-mail-low-face
   '((((class color)
       (background dark))
      (:foreground "aquamarine4" :bold t))
@@ -304,11 +485,11 @@ be set in `.emacs' instead."
 
 ;; Summary mode faces.
 
-(defface gnus-summary-selected-face '((t 
+(defface gnus-summary-selected-face '((t
                                       (:underline t)))
   "Face used for selected articles.")
 
-(defface gnus-summary-cancelled-face 
+(defface gnus-summary-cancelled-face
   '((((class color))
      (:foreground "yellow" :background "black")))
   "Face used for cancelled articles.")
@@ -320,7 +501,7 @@ be set in `.emacs' instead."
     (((class color)
       (background light))
      (:foreground "firebrick" :bold t))
-    (t 
+    (t
      (:bold t)))
   "Face used for high interest ticked articles.")
 
@@ -331,7 +512,7 @@ be set in `.emacs' instead."
     (((class color)
       (background light))
      (:foreground "firebrick" :italic t))
-    (t 
+    (t
      (:italic t)))
   "Face used for low interest ticked articles.")
 
@@ -342,10 +523,10 @@ be set in `.emacs' instead."
     (((class color)
       (background light))
      (:foreground "firebrick"))
-    (t 
+    (t
      ()))
   "Face used for normal interest ticked articles.")
-  
+
 (defface gnus-summary-high-ancient-face
   '((((class color)
       (background dark))
@@ -353,7 +534,7 @@ be set in `.emacs' instead."
     (((class color)
       (background light))
      (:foreground "RoyalBlue" :bold t))
-    (t 
+    (t
      (:bold t)))
   "Face used for high interest ancient articles.")
 
@@ -364,7 +545,7 @@ be set in `.emacs' instead."
     (((class color)
       (background light))
      (:foreground "RoyalBlue" :italic t))
-    (t 
+    (t
      (:italic t)))
   "Face used for low interest ancient articles.")
 
@@ -375,25 +556,25 @@ be set in `.emacs' instead."
     (((class color)
       (background light))
      (:foreground "RoyalBlue"))
-    (t 
+    (t
      ()))
   "Face used for normal interest ancient articles.")
-  
+
 (defface gnus-summary-high-unread-face
-  '((t 
+  '((t
      (:bold t)))
   "Face used for high interest unread articles.")
 
 (defface gnus-summary-low-unread-face
-  '((t 
+  '((t
      (:italic t)))
   "Face used for low interest unread articles.")
 
 (defface gnus-summary-normal-unread-face
-  '((t 
+  '((t
      ()))
   "Face used for normal interest unread articles.")
-  
+
 (defface gnus-summary-high-read-face
   '((((class color)
       (background dark))
@@ -403,7 +584,7 @@ be set in `.emacs' instead."
       (background light))
      (:foreground "DarkGreen"
                  :bold t))
-    (t 
+    (t
      (:bold t)))
   "Face used for high interest read articles.")
 
@@ -416,7 +597,7 @@ be set in `.emacs' instead."
       (background light))
      (:foreground "DarkGreen"
                  :italic t))
-    (t 
+    (t
      (:italic t)))
   "Face used for low interest read articles.")
 
@@ -427,7 +608,7 @@ be set in `.emacs' instead."
     (((class color)
       (background light))
      (:foreground "DarkGreen"))
-    (t 
+    (t
      ()))
   "Face used for normal interest read articles.")
 
@@ -439,7 +620,7 @@ be set in `.emacs' instead."
 (eval-and-compile
   (autoload 'gnus-play-jingle "gnus-audio"))
 
-(defface gnus-splash-face 
+(defface gnus-splash-face
   '((((class color)
       (background dark))
      (:foreground "red"))
@@ -513,7 +694,7 @@ be set in `.emacs' instead."
   ;; Fontify some.
   (put-text-property (point-min) (point-max) 'face 'gnus-splash-face)
   (goto-char (point-min))
-  (setq mode-line-buffer-identification gnus-version)
+  (setq mode-line-buffer-identification (concat " " gnus-version))
   (setq gnus-simple-splash t)
   (set-buffer-modified-p t))
 
@@ -529,20 +710,21 @@ be set in `.emacs' instead."
 (require 'gnus-util)
 (require 'nnheader)
 
-(defgroup gnus-meta nil
-  "Meta variables controling major portions of Gnus.
-In general, modifying these variables does not take affect until Gnus
-is restarted, and sometimes reloaded."
-  :group 'gnus)
+(defcustom gnus-home-directory "~/"
+  "Directory variable that specifies the \"home\" directory.
+All other Gnus path variables are initialized from this variable."
+  :group 'gnus-files
+  :type 'directory)
 
-(defcustom gnus-directory (or (getenv "SAVEDIR") "~/News/")
+(defcustom gnus-directory (or (getenv "SAVEDIR")
+                             (nnheader-concat gnus-home-directory "News/"))
   "Directory variable from which all other Gnus file variables are derived."
-  :group 'gnus-meta
+  :group 'gnus-files
   :type 'directory)
 
 (defcustom gnus-default-directory nil
   "*Default directory for all Gnus buffers."
-  :group 'gnus-start
+  :group 'gnus-files
   :type '(choice (const :tag "current" nil)
                 directory))
 
@@ -567,7 +749,8 @@ used to 899, you would say something along these lines:
 
 (defcustom gnus-nntpserver-file "/etc/nntpserver"
   "A file with only the name of the nntp server in it."
-  :group 'gnus-start
+  :group 'gnus-files
+  :group 'gnus-server
   :type 'file)
 
 ;; This function is used to check both the environment variable
@@ -617,14 +800,14 @@ If you use this variable, you must set `gnus-nntp-server' to nil.
 
 There is a lot more to know about select methods and virtual servers -
 see the manual for details."
-  :group 'gnus-start
+  :group 'gnus-server
   :type 'gnus-select-method)
 
-(defcustom gnus-message-archive-method 
+(defcustom gnus-message-archive-method
   `(nnfolder
     "archive"
     (nnfolder-directory ,(nnheader-concat message-directory "archive"))
-    (nnfolder-active-file 
+    (nnfolder-active-file
      ,(nnheader-concat message-directory "archive/active"))
     (nnfolder-get-new-mail nil)
     (nnfolder-inhibit-expiry t))
@@ -634,16 +817,13 @@ This should be a mail method.
 It's probably not a very effective to change this variable once you've
 run Gnus once.  After doing that, you must edit this server from the
 server buffer."
-  :group 'gnus-start
+  :group 'gnus-server
+  :group 'gnus-message
   :type 'gnus-select-method)
 
-(defgroup gnus-message '((message custom-group))
-  "Interface from gnus to message mode."
-  :group 'gnus)
-
 (defcustom gnus-message-archive-group nil
   "*Name of the group in which to save the messages you've written.
-This can either be a string, a list of strings; or an alist
+This can either be a string; a list of strings; or an alist
 of regexps/functions/forms to be evaluated to return a string (or a list
 of strings).  The functions are called with the name of the current
 group (or nil) as a parameter.
@@ -651,9 +831,9 @@ group (or nil) as a parameter.
 If you want to save your mail in one group and the news articles you
 write in another group, you could say something like:
 
- \(setq gnus-message-archive-group 
+ \(setq gnus-message-archive-group
         '((if (message-news-p)
-              \"misc-news\" 
+              \"misc-news\"
             \"misc-mail\")))
 
 Normally the group names returned by this variable should be
@@ -669,14 +849,14 @@ that case, just return a fully prefixed name of the group --
   "List of NNTP servers that the user can choose between interactively.
 To make Gnus query you for a server, you have to give `gnus' a
 non-numeric prefix - `C-u M-x gnus', in short."
-  :group 'gnus-start
+  :group 'gnus-server
   :type '(repeat string))
 
 (defcustom gnus-nntp-server nil
   "*The name of the host running the NNTP server.
 This variable is semi-obsolete.         Use the `gnus-select-method'
 variable instead."
-  :group 'gnus-start
+  :group 'gnus-server
   :type '(choice (const :tag "disable" nil)
                 string))
 
@@ -689,7 +869,7 @@ If, for instance, you want to read your mail with the nnml backend,
 you could set this variable:
 
 \(setq gnus-secondary-select-methods '((nnml \"\")))"
-:group 'gnus-start
+:group 'gnus-server
 :type '(repeat gnus-select-method))
 
 (defvar gnus-backup-default-subscribed-newsgroups
@@ -702,23 +882,13 @@ Should be set in paths.el, and shouldn't be touched by the user.")
 The DOMAINNAME environment variable is used instead if it is defined.
 If the `system-name' function returns the full Internet name, there is
 no need to set this variable."
-  :group 'gnus-start
+  :group 'gnus-message
   :type '(choice (const :tag "default" nil)
                 string))
 
-(defcustom gnus-local-organization nil
+(defvar gnus-local-organization nil
   "String with a description of what organization (if any) the user belongs to.
-The ORGANIZATION environment variable is used instead if it is defined.
-If this variable contains a function, this function will be called
-with the current newsgroup name as the argument.  The function should
-return a string.
-
-In any case, if the string (either in the variable, in the environment
-variable, or returned by the function) is a file name, the contents of
-this file will be used as the organization."
-  :group 'gnus-start
-  :type '(choice (const :tag "default" nil)
-                string))
+Obsolete variable; use `message-user-organization' instead.")
 
 ;; Customization variables
 
@@ -730,7 +900,7 @@ nntp method, you might get acceptable results.
 
 The value of this variable must be a valid select method as discussed
 in the documentation of `gnus-select-method'."
-  :group 'gnus-start
+  :group 'gnus-server
   :type '(choice (const :tag "default" nil)
                 gnus-select-method))
 
@@ -770,7 +940,7 @@ If the default site is too slow, try one of these:
    Asia:         nctuccca.edu.tw                /USENET/FAQ
                  hwarang.postech.ac.kr          /pub/usenet
                  ftp.hk.super.net               /mirror/faqs"
-  :group 'gnus-group
+  :group 'gnus-group-various
   :type '(choice directory
                 (repeat directory)))
 
@@ -779,7 +949,7 @@ If the default site is too slow, try one of these:
 If nil, ignore cross references.  If t, mark articles as read in
 subscribed newsgroups. If neither t nor nil, mark as read in all
 newsgroups."
-  :group 'gnus-start
+  :group 'gnus-server
   :type '(choice (const :tag "off" nil)
                 (const :tag "subscribed" t)
                 (sexp :format "all"
@@ -787,19 +957,20 @@ newsgroups."
 
 (defcustom gnus-process-mark ?#
   "*Process mark."
-  :group 'gnus-start
+  :group 'gnus-group-visual
+  :group 'gnus-summary-marks
   :type 'character)
 
 (defcustom gnus-asynchronous nil
   "*If non-nil, Gnus will supply backends with data needed for async article fetching."
-  :group 'gnus-start
+  :group 'gnus-asynchronous
   :type 'boolean)
 
 (defcustom gnus-large-newsgroup 200
   "*The number of articles which indicates a large newsgroup.
 If the number of articles in a newsgroup is greater than this value,
 confirmation is required for selecting the newsgroup."
-  :group 'gnus-group
+  :group 'gnus-group-select
   :type 'integer)
 
 (defcustom gnus-use-long-file-name (not (memq system-type '(usg-unix-v xenix)))
@@ -820,12 +991,13 @@ to nil while on all other systems it defaults to t."
 
 (defcustom gnus-kill-files-directory gnus-directory
   "*Name of the directory where kill files will be stored (default \"~/News\")."
-  :group 'gnus-score
+  :group 'gnus-score-files
+  :group 'gnus-score-kill
   :type 'directory)
 
 (defcustom gnus-save-score nil
   "*If non-nil, save group scoring info."
-  :group 'gnus-score
+  :group 'gnus-score-various
   :group 'gnus-start
   :type 'boolean)
 
@@ -840,6 +1012,7 @@ If a list, then the values `word' and `line' are meaningful.  The
 former will perform adaption on individual words in the subject
 header while `line' will perform adaption on several headers."
   :group 'gnus-meta
+  :group 'gnus-score-adapt
   :type '(set (const word) (const line)))
 
 (defcustom gnus-use-cache 'passive
@@ -871,7 +1044,7 @@ articles.  This is not a good idea."
   :group 'gnus-meta
   :type '(choice (const :tag "off" nil)
                 integer
-                (sexp :format "all" 
+                (sexp :format "all"
                       :value t)))
 
 (defcustom gnus-use-nocem nil
@@ -899,11 +1072,11 @@ articles.  This is not a good idea."
   :group 'gnus-meta
   :type 'boolean)
 
-(defcustom gnus-summary-prepare-exit-hook 
+(defcustom gnus-summary-prepare-exit-hook
   '(gnus-summary-expire-articles)
   "A hook called when preparing to exit from the summary buffer.
 It calls `gnus-summary-expire-articles' by default."
-  :group 'gnus-summary
+  :group 'gnus-summary-exit
   :type 'hook)
 
 (defcustom gnus-novice-user t
@@ -921,12 +1094,12 @@ And that means *anything*."
 
 (defcustom gnus-interactive-catchup t
   "*If non-nil, require your confirmation when catching up a group."
-  :group 'gnus-group
+  :group 'gnus-group-select
   :type 'boolean)
 
 (defcustom gnus-interactive-exit t
   "*If non-nil, require your confirmation when exiting Gnus."
-  :group 'gnus-group
+  :group 'gnus-exit
   :type 'boolean)
 
 (defcustom gnus-extract-address-components 'gnus-extract-address-components
@@ -935,7 +1108,7 @@ Two pre-defined function exist: `gnus-extract-address-components',
 which is the default, quite fast, and too simplistic solution, and
 `mail-extract-address-components', which works much better, but is
 slower."
-  :group 'gnus-start
+  :group 'gnus-summary-format
   :type '(radio (function-item gnus-extract-address-components)
                (function-item mail-extract-address-components)
                (function :tag "Other")))
@@ -947,7 +1120,7 @@ slower."