;;; gnus.el --- a newsreader for GNU Emacs
-;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996, 1997,
-;; 1998, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996, 1997, 1998,
+;; 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
;; Lars Magne Ingebrigtsen <larsi@gnus.org>
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
(require 'mm-util)
(require 'nnheader)
+;; These are defined afterwards with gnus-define-group-parameter
+(defvar gnus-ham-process-destinations)
+(defvar gnus-parameter-ham-marks-alist)
+(defvar gnus-parameter-spam-marks-alist)
+(defvar gnus-spam-autodetect)
+(defvar gnus-spam-autodetect-methods)
+(defvar gnus-spam-newsgroup-contents)
+(defvar gnus-spam-process-destinations)
+(defvar gnus-spam-process-newsgroups)
+
+
(defgroup gnus nil
"The coffee-brewing, all singing, all dancing, kitchen sink newsreader."
:group 'news
;; These belong to gnus-group.el.
(defgroup gnus-group nil
"Group buffers."
- :link '(custom-manual "(gnus)The Group Buffer")
+ :link '(custom-manual "(gnus)Group Buffer")
:group 'gnus)
(defgroup gnus-group-foreign nil
;; These belong to gnus-sum.el.
(defgroup gnus-summary nil
"Summary buffers."
- :link '(custom-manual "(gnus)The Summary Buffer")
+ :link '(custom-manual "(gnus)Summary Buffer")
:group 'gnus)
(defgroup gnus-summary-exit nil
(defgroup gnus-summary-sort nil
"Sorting the summary buffer."
- :link '(custom-manual "(gnus)Sorting")
+ :link '(custom-manual "(gnus)Sorting the Summary Buffer")
:group 'gnus-summary)
(defgroup gnus-summary-visual nil
:group 'gnus)
(defgroup gnus-exit nil
- "Exiting gnus."
+ "Exiting Gnus."
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "0.0"
+(defconst gnus-version-number "0.6"
"Version number for this version of Gnus.")
(defconst gnus-version (format "No Gnus v%s" gnus-version-number)
(unless (fboundp 'gnus-group-remove-excess-properties)
(defalias 'gnus-group-remove-excess-properties 'ignore))
-(unless (fboundp 'gnus-set-text-properties)
- (defalias 'gnus-set-text-properties 'set-text-properties))
-
(unless (featurep 'gnus-xmas)
(defalias 'gnus-make-overlay 'make-overlay)
(defalias 'gnus-delete-overlay 'delete-overlay)
(defalias 'gnus-overlay-end 'overlay-end)
(defalias 'gnus-extent-detached-p 'ignore)
(defalias 'gnus-extent-start-open 'ignore)
- (defalias 'gnus-appt-select-lowest-window 'appt-select-lowest-window)
(defalias 'gnus-mail-strip-quoted-names 'mail-strip-quoted-names)
(defalias 'gnus-character-to-event 'identity)
(defalias 'gnus-assq-delete-all 'assq-delete-all)
(defvar gnus-mode-line-image-cache t)
(if (fboundp 'find-image)
(defun gnus-mode-line-buffer-identification (line)
- (let ((str (car-safe line)))
+ (let ((str (car-safe line))
+ (load-path (mm-image-load-path)))
(if (and (stringp str)
(string-match "^Gnus:" str))
(progn (add-text-properties
;; 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
'((((class color)
(background dark))
(:foreground "PaleTurquoise" :bold t))
(:foreground "ForestGreen" :bold t))
(t
()))
- "Level 1 newsgroup face.")
+ "Level 1 newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-1-face 'face-alias 'gnus-group-news-1)
-(defface gnus-group-news-1-empty-face
+(defface gnus-group-news-1-empty
'((((class color)
(background dark))
(:foreground "PaleTurquoise"))
(:foreground "ForestGreen"))
(t
()))
- "Level 1 empty newsgroup face.")
+ "Level 1 empty newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-1-empty-face 'face-alias 'gnus-group-news-1-empty)
-(defface gnus-group-news-2-face
+(defface gnus-group-news-2
'((((class color)
(background dark))
(:foreground "turquoise" :bold t))
(:foreground "CadetBlue4" :bold t))
(t
()))
- "Level 2 newsgroup face.")
+ "Level 2 newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-2-face 'face-alias 'gnus-group-news-2)
-(defface gnus-group-news-2-empty-face
+(defface gnus-group-news-2-empty
'((((class color)
(background dark))
(:foreground "turquoise"))
(:foreground "CadetBlue4"))
(t
()))
- "Level 2 empty newsgroup face.")
+ "Level 2 empty newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-2-empty-face 'face-alias 'gnus-group-news-2-empty)
-(defface gnus-group-news-3-face
+(defface gnus-group-news-3
'((((class color)
(background dark))
(:bold t))
(:bold t))
(t
()))
- "Level 3 newsgroup face.")
+ "Level 3 newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-3-face 'face-alias 'gnus-group-news-3)
-(defface gnus-group-news-3-empty-face
+(defface gnus-group-news-3-empty
'((((class color)
(background dark))
())
())
(t
()))
- "Level 3 empty newsgroup face.")
+ "Level 3 empty newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-3-empty-face 'face-alias 'gnus-group-news-3-empty)
-(defface gnus-group-news-4-face
+(defface gnus-group-news-4
'((((class color)
(background dark))
(:bold t))
(:bold t))
(t
()))
- "Level 4 newsgroup face.")
+ "Level 4 newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-4-face 'face-alias 'gnus-group-news-4)
-(defface gnus-group-news-4-empty-face
+(defface gnus-group-news-4-empty
'((((class color)
(background dark))
())
())
(t
()))
- "Level 4 empty newsgroup face.")
+ "Level 4 empty newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-4-empty-face 'face-alias 'gnus-group-news-4-empty)
-(defface gnus-group-news-5-face
+(defface gnus-group-news-5
'((((class color)
(background dark))
(:bold t))
(:bold t))
(t
()))
- "Level 5 newsgroup face.")
+ "Level 5 newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-5-face 'face-alias 'gnus-group-news-5)
-(defface gnus-group-news-5-empty-face
+(defface gnus-group-news-5-empty
'((((class color)
(background dark))
())
())
(t
()))
- "Level 5 empty newsgroup face.")
+ "Level 5 empty newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-5-empty-face 'face-alias 'gnus-group-news-5-empty)
-(defface gnus-group-news-6-face
+(defface gnus-group-news-6
'((((class color)
(background dark))
(:bold t))
(:bold t))
(t
()))
- "Level 6 newsgroup face.")
+ "Level 6 newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-6-face 'face-alias 'gnus-group-news-6)
-(defface gnus-group-news-6-empty-face
+(defface gnus-group-news-6-empty
'((((class color)
(background dark))
())
())
(t
()))
- "Level 6 empty newsgroup face.")
+ "Level 6 empty newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-6-empty-face 'face-alias 'gnus-group-news-6-empty)
-(defface gnus-group-news-low-face
+(defface gnus-group-news-low
'((((class color)
(background dark))
(:foreground "DarkTurquoise" :bold t))
(:foreground "DarkGreen" :bold t))
(t
()))
- "Low level newsgroup face.")
+ "Low level newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-low-face 'face-alias 'gnus-group-news-low)
-(defface gnus-group-news-low-empty-face
+(defface gnus-group-news-low-empty
'((((class color)
(background dark))
(:foreground "DarkTurquoise"))
(:foreground "DarkGreen"))
(t
()))
- "Low level empty newsgroup face.")
+ "Low level empty newsgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-news-low-empty-face 'face-alias 'gnus-group-news-low-empty)
-(defface gnus-group-mail-1-face
+(defface gnus-group-mail-1
'((((class color)
(background dark))
(:foreground "aquamarine1" :bold t))
(:foreground "DeepPink3" :bold t))
(t
(:bold t)))
- "Level 1 mailgroup face.")
+ "Level 1 mailgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-mail-1-face 'face-alias 'gnus-group-mail-1)
-(defface gnus-group-mail-1-empty-face
+(defface gnus-group-mail-1-empty
'((((class color)
(background dark))
(:foreground "aquamarine1"))
(:foreground "DeepPink3"))
(t
(:italic t :bold t)))
- "Level 1 empty mailgroup face.")
+ "Level 1 empty mailgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-mail-1-empty-face 'face-alias 'gnus-group-mail-1-empty)
-(defface gnus-group-mail-2-face
+(defface gnus-group-mail-2
'((((class color)
(background dark))
(:foreground "aquamarine2" :bold t))
(:foreground "HotPink3" :bold t))
(t
(:bold t)))
- "Level 2 mailgroup face.")
+ "Level 2 mailgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-mail-2-face 'face-alias 'gnus-group-mail-2)
-(defface gnus-group-mail-2-empty-face
+(defface gnus-group-mail-2-empty
'((((class color)
(background dark))
(:foreground "aquamarine2"))
(:foreground "HotPink3"))
(t
(:bold t)))
- "Level 2 empty mailgroup face.")
+ "Level 2 empty mailgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-mail-2-empty-face 'face-alias 'gnus-group-mail-2-empty)
-(defface gnus-group-mail-3-face
+(defface gnus-group-mail-3
'((((class color)
(background dark))
(:foreground "aquamarine3" :bold t))
(:foreground "magenta4" :bold t))
(t
(:bold t)))
- "Level 3 mailgroup face.")
+ "Level 3 mailgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-mail-3-face 'face-alias 'gnus-group-mail-3)
-(defface gnus-group-mail-3-empty-face
+(defface gnus-group-mail-3-empty
'((((class color)
(background dark))
(:foreground "aquamarine3"))
(:foreground "magenta4"))
(t
()))
- "Level 3 empty mailgroup face.")
+ "Level 3 empty mailgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-mail-3-empty-face 'face-alias 'gnus-group-mail-3-empty)
-(defface gnus-group-mail-low-face
+(defface gnus-group-mail-low
'((((class color)
(background dark))
(:foreground "aquamarine4" :bold t))
(:foreground "DeepPink4" :bold t))
(t
(:bold t)))
- "Low level mailgroup face.")
+ "Low level mailgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-mail-low-face 'face-alias 'gnus-group-mail-low)
-(defface gnus-group-mail-low-empty-face
+(defface gnus-group-mail-low-empty
'((((class color)
(background dark))
(:foreground "aquamarine4"))
(:foreground "DeepPink4"))
(t
(:bold t)))
- "Low level empty mailgroup face.")
+ "Low level empty mailgroup face."
+ :group 'gnus-group)
+;; backward-compatibility alias
+(put 'gnus-group-mail-low-empty-face 'face-alias 'gnus-group-mail-low-empty)
;; Summary mode faces.
-(defface gnus-summary-selected-face '((t
- (:underline t)))
- "Face used for selected articles.")
+(defface gnus-summary-selected '((t (:underline t)))
+ "Face used for selected articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-selected-face 'face-alias 'gnus-summary-selected)
-(defface gnus-summary-cancelled-face
+(defface gnus-summary-cancelled
'((((class color))
(:foreground "yellow" :background "black")))
- "Face used for cancelled articles.")
+ "Face used for cancelled articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-cancelled-face 'face-alias 'gnus-summary-cancelled)
-(defface gnus-summary-high-ticked-face
+(defface gnus-summary-high-ticked
'((((class color)
(background dark))
(:foreground "pink" :bold t))
(:foreground "firebrick" :bold t))
(t
(:bold t)))
- "Face used for high interest ticked articles.")
+ "Face used for high interest ticked articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-high-ticked-face 'face-alias 'gnus-summary-high-ticked)
-(defface gnus-summary-low-ticked-face
+(defface gnus-summary-low-ticked
'((((class color)
(background dark))
(:foreground "pink" :italic t))
(:foreground "firebrick" :italic t))
(t
(:italic t)))
- "Face used for low interest ticked articles.")
+ "Face used for low interest ticked articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-low-ticked-face 'face-alias 'gnus-summary-low-ticked)
-(defface gnus-summary-normal-ticked-face
+(defface gnus-summary-normal-ticked
'((((class color)
(background dark))
(:foreground "pink"))
(:foreground "firebrick"))
(t
()))
- "Face used for normal interest ticked articles.")
+ "Face used for normal interest ticked articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-normal-ticked-face 'face-alias 'gnus-summary-normal-ticked)
-(defface gnus-summary-high-ancient-face
+(defface gnus-summary-high-ancient
'((((class color)
(background dark))
(:foreground "SkyBlue" :bold t))
(:foreground "RoyalBlue" :bold t))
(t
(:bold t)))
- "Face used for high interest ancient articles.")
+ "Face used for high interest ancient articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-high-ancient-face 'face-alias 'gnus-summary-high-ancient)
-(defface gnus-summary-low-ancient-face
+(defface gnus-summary-low-ancient
'((((class color)
(background dark))
(:foreground "SkyBlue" :italic t))
(:foreground "RoyalBlue" :italic t))
(t
(:italic t)))
- "Face used for low interest ancient articles.")
+ "Face used for low interest ancient articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-low-ancient-face 'face-alias 'gnus-summary-low-ancient)
-(defface gnus-summary-normal-ancient-face
+(defface gnus-summary-normal-ancient
'((((class color)
(background dark))
(:foreground "SkyBlue"))
(:foreground "RoyalBlue"))
(t
()))
- "Face used for normal interest ancient articles.")
+ "Face used for normal interest ancient articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-normal-ancient-face 'face-alias 'gnus-summary-normal-ancient)
-(defface gnus-summary-high-undownloaded-face
+(defface gnus-summary-high-undownloaded
'((((class color)
(background light))
(:bold t :foreground "cyan4"))
(((class color) (background dark))
(:bold t :foreground "LightGray"))
(t (:inverse-video t :bold t)))
- "Face used for high interest uncached articles.")
+ "Face used for high interest uncached articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-high-undownloaded-face 'face-alias 'gnus-summary-high-undownloaded)
-(defface gnus-summary-low-undownloaded-face
+(defface gnus-summary-low-undownloaded
'((((class color)
(background light))
(:italic t :foreground "cyan4" :bold nil))
(((class color) (background dark))
(:italic t :foreground "LightGray" :bold nil))
(t (:inverse-video t :italic t)))
- "Face used for low interest uncached articles.")
+ "Face used for low interest uncached articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-low-undownloaded-face 'face-alias 'gnus-summary-low-undownloaded)
-(defface gnus-summary-normal-undownloaded-face
+(defface gnus-summary-normal-undownloaded
'((((class color)
(background light))
(:foreground "cyan4" :bold nil))
(((class color) (background dark))
(:foreground "LightGray" :bold nil))
(t (:inverse-video t)))
- "Face used for normal interest uncached articles.")
+ "Face used for normal interest uncached articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-normal-undownloaded-face 'face-alias 'gnus-summary-normal-undownloaded)
-(defface gnus-summary-high-unread-face
+(defface gnus-summary-high-unread
'((t
(:bold t)))
- "Face used for high interest unread articles.")
+ "Face used for high interest unread articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-high-unread-face 'face-alias 'gnus-summary-high-unread)
-(defface gnus-summary-low-unread-face
+(defface gnus-summary-low-unread
'((t
(:italic t)))
- "Face used for low interest unread articles.")
+ "Face used for low interest unread articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-low-unread-face 'face-alias 'gnus-summary-low-unread)
-(defface gnus-summary-normal-unread-face
+(defface gnus-summary-normal-unread
'((t
()))
- "Face used for normal interest unread articles.")
+ "Face used for normal interest unread articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-normal-unread-face 'face-alias 'gnus-summary-normal-unread)
-(defface gnus-summary-high-read-face
+(defface gnus-summary-high-read
'((((class color)
(background dark))
(:foreground "PaleGreen"
:bold t))
(t
(:bold t)))
- "Face used for high interest read articles.")
+ "Face used for high interest read articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-high-read-face 'face-alias 'gnus-summary-high-read)
-(defface gnus-summary-low-read-face
+(defface gnus-summary-low-read
'((((class color)
(background dark))
(:foreground "PaleGreen"
:italic t))
(t
(:italic t)))
- "Face used for low interest read articles.")
+ "Face used for low interest read articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-low-read-face 'face-alias 'gnus-summary-low-read)
-(defface gnus-summary-normal-read-face
+(defface gnus-summary-normal-read
'((((class color)
(background dark))
(:foreground "PaleGreen"))
(:foreground "DarkGreen"))
(t
()))
- "Face used for normal interest read articles.")
+ "Face used for normal interest read articles."
+ :group 'gnus-summary)
+;; backward-compatibility alias
+(put 'gnus-summary-normal-read-face 'face-alias 'gnus-summary-normal-read)
;;;
(eval-and-compile
(autoload 'gnus-play-jingle "gnus-audio"))
-(defface gnus-splash-face
+(defface gnus-splash
'((((class color)
(background dark))
(:foreground "#888888"))
(:foreground "#888888"))
(t
()))
- "Face for the splash screen.")
+ "Face for the splash screen."
+ :group 'gnus-start)
+;; backward-compatibility alias
+(put 'gnus-splash-face 'face-alias 'gnus-splash)
(defun gnus-splash ()
(save-excursion
(storm "#666699" "#99ccff")
(pdino "#9999cc" "#99ccff")
(purp "#9999cc" "#666699")
- (no "#000000" "#ff0000")
+ (no "#ff0000" "#ffff00")
(neutral "#b4b4b4" "#878787")
(september "#bf9900" "#ffcc00"))
"Color alist used for the Gnus logo.")
-(defcustom gnus-logo-color-style 'oort
+(defcustom gnus-logo-color-style 'no
"*Color styles used for the Gnus logo."
:type `(choice ,@(mapcar (lambda (elem) (list 'const (car elem)))
gnus-logo-color-alist))
((and
(fboundp 'find-image)
(display-graphic-p)
- (let* ((data-directory (nnheader-find-etc-directory "gnus"))
+ (let* ((data-directory (nnheader-find-etc-directory "images/gnus"))
+ (image-load-path (cond (data-directory
+ (list data-directory))
+ ((boundp 'image-load-path)
+ (symbol-value 'image-load-path))
+ (t load-path)))
(image (find-image
`((:type xpm :file "gnus.xpm"
:color-symbols
("background" . ,(face-background 'default))))
(:type pbm :file "gnus.pbm"
;; Account for the pbm's blackground.
- :background ,(face-foreground 'gnus-splash-face)
+ :background ,(face-foreground 'gnus-splash)
:foreground ,(face-background 'default))
(:type xbm :file "gnus.xbm"
;; Account for the xbm's blackground.
- :background ,(face-foreground 'gnus-splash-face)
+ :background ,(face-foreground 'gnus-splash)
:foreground ,(face-background 'default))))))
(when image
(let ((size (image-size image)))
(rest (- wheight pheight)))
(insert (make-string (max 0 (* 2 (/ rest 3))) ?\n)))
;; Fontify some.
- (put-text-property (point-min) (point-max) 'face 'gnus-splash-face)
+ (put-text-property (point-min) (point-max) 'face 'gnus-splash)
(setq gnus-simple-splash t)))
(goto-char (point-min))
(setq mode-line-buffer-identification (concat " " gnus-version))
(eval-when (load)
(let ((command (format "%s" this-command)))
- (if (and (string-match "gnus" command)
- (not (string-match "gnus-other-frame" command)))
- (gnus-splash)
- (gnus-get-buffer-create gnus-group-buffer))))
+ (when (string-match "gnus" command)
+ (if (string-match "gnus-other-frame" command)
+ (gnus-get-buffer-create gnus-group-buffer)
+ (gnus-splash)))))
;;; Do the rest.
(\"mail\\\\.me\" (gnus-use-scoring t))
(\"list\\\\..*\" (total-expire . t)
(broken-reply-to . t)))"
+ :version "22.1"
:group 'gnus-group-various
:type '(repeat (cons regexp
(repeat sexp))))
+(defcustom gnus-parameters-case-fold-search 'default
+ "If it is t, ignore case of group names specified in `gnus-parameters'.
+If it is nil, don't ignore case. If it is `default', which is for the
+backward compatibility, use the value of `case-fold-search'."
+ :version "22.1"
+ :group 'gnus-group-various
+ :type '(choice :format "%{%t%}:\n %[Value Menu%] %v"
+ (const :tag "Use `case-fold-search'" default)
+ (const nil)
+ (const t)))
+
(defvar gnus-group-parameters-more nil)
(defmacro gnus-define-group-parameter (param &rest rest)
(and (file-readable-p gnus-nntpserver-file)
(with-temp-buffer
(insert-file-contents gnus-nntpserver-file)
- (let ((name (buffer-string)))
- (unless (string-match "\\`[ \t\n]*$" name)
- name))))))
+ (when (re-search-forward "[^ \t\n\r]+" nil t)
+ (match-string 0))))))
(defcustom gnus-select-method
(condition-case nil
(gnus-replace-in-string name "\\." "-") "-charter.html")))
"*An alist of (HIERARCHY . FORM) pairs used to construct the URL of a charter.
When FORM is evaluated `name' is bound to the name of the group."
+ :version "22.1"
:group 'gnus-group-various
:type '(repeat (cons (string :tag "Hierarchy") (sexp :tag "Form"))))
"*Non-nil means that control messages are displayed using `browse-url'.
Otherwise they are fetched with ange-ftp and displayed in an ephemeral
group."
+ :version "22.1"
:group 'gnus-group-various
:type 'boolean)
:group 'gnus-meta
:type 'boolean)
-(defcustom gnus-use-grouplens nil
- "*If non-nil, use GroupLens ratings."
- :group 'gnus-meta
- :type 'boolean)
-
(defcustom gnus-keep-backlog 20
"*If non-nil, Gnus will keep read articles for later re-retrieval.
If it is a number N, then Gnus will only keep the last N articles
:value t)))
(defcustom gnus-use-nocem nil
- "*If non-nil, Gnus will read NoCeM cancel messages."
+ "*If non-nil, Gnus will read NoCeM cancel messages.
+You can also set this variable to a positive number as a group level.
+In that case, Gnus scans NoCeM messages when checking new news if this
+value is not exceeding a group level that you specify as the prefix
+argument to some commands, e.g. `gnus', `gnus-group-get-new-news', etc.
+Otherwise, Gnus does not scan NoCeM messages if you specify a group
+level to those commands."
:group 'gnus-meta
- :type 'boolean)
+ :type '(choice
+ (const :tag "off" nil)
+ (const :tag "on" t)
+ (list :convert-widget
+ (lambda (widget)
+ (list 'integer :tag "group level"
+ :value (if (boundp 'gnus-level-default-subscribed)
+ gnus-level-default-subscribed
+ 3))))))
(defcustom gnus-suppress-duplicates nil
"*If non-nil, Gnus will mark duplicate copies of the same article as read."
"Return GROUP's to-address."
:variable-document
"*Alist of group regexps and correspondent to-addresses."
+ :variable-group gnus-group-parameter
:parameter-type '(gnus-email-address :tag "To Address")
:parameter-document "\
This will be used when doing followups and posts.
"Return GROUP's to-list."
:variable-document
"*Alist of group regexps and correspondent to-lists."
+ :variable-group gnus-group-parameter
:parameter-type '(gnus-email-address :tag "To List")
:parameter-document "\
This address will be used when doing a `a' in the group.
"Return GROUP's subscription status."
:variable-document
"*Groups which are automatically considered subscribed."
+ :variable-group gnus-group-parameter
:parameter-type '(const :tag "Subscribed" t)
:parameter-document "\
Gnus assumed that you are subscribed to the To/List address.
"Return GROUP's initial input of the number of articles."
:variable-document
"*Alist of group regexps and its initial input of the number of articles."
+ :variable-group gnus-group-parameter
:parameter-type '(choice :tag "Initial Input for Large Newsgroup"
(const :tag "All" nil)
(integer))
(list
(regexp :tag "Group Name Regular Expression")
(boolean :tag "Ignored")))
-
+
:parameter-type '(boolean :tag "Group Ignored by the Registry")
:parameter-document
"Whether the Gnus Registry should ignore this group.")
(defcustom gnus-install-group-spam-parameters t
"*Disable the group parameters for spam detection.
Enable if `G c' in XEmacs is giving you trouble, and make sure to submit a bug report."
+ :version "22.1"
:type 'boolean
:group 'gnus-start)
:variable gnus-spam-newsgroup-contents
:variable-default nil
:variable-document
- "*Groups in which to automatically mark new articles as spam on
-summary entry. If non-nil, this should be a list of group name
-regexps that should match all groups in which to do automatic spam
-tagging, associated with a classification (spam, ham, or neither).
-This only makes sense for mail groups."
+ "*Group classification (spam, ham, or neither). Only
+meaningful when spam.el is loaded. If non-nil, this should be a
+list of group name regexps associated with a classification for
+each one. In spam groups, new articles are marked as spam on
+summary entry. There is other behavior associated with ham and
+no classification when spam.el is loaded - see the manual."
:variable-group spam
:variable-type '(repeat
(list :tag "Group contents spam/ham classification"
(const :tag "Unclassified" nil)))
:parameter-document
"The spam classification (spam, ham, or neither) of this group.
-When a spam group is entered, all unread articles are marked as spam.")
+When a spam group is entered, all unread articles are marked as
+spam. There is other behavior associated with ham and no
+classification when spam.el is loaded - see the manual.")
+
+ (gnus-define-group-parameter
+ spam-resend-to
+ :type list
+ :function-document
+ "The address to get spam resent (through spam-report-resend)."
+ :variable gnus-spam-resend-to
+ :variable-default nil
+ :variable-document
+ "The address to get spam resent (through spam-report-resend)."
+ :variable-group spam
+ :variable-type '(repeat
+ (list :tag "Group address for resending spam"
+ (regexp :tag "Group")
+ (string :tag "E-mail address for resending spam (requires the spam-use-resend exit processor)")))
+ :parameter-type 'string :tag "E-mail address for resending spam (requires the spam-use-resend exit processor)"
+ :parameter-document
+ "The address to get spam resent (through spam-report-resend).")
+
+ (gnus-define-group-parameter
+ ham-resend-to
+ :type list
+ :function-document
+ "The address to get ham resent (through spam-report-resend)."
+ :variable gnus-ham-resend-to
+ :variable-default nil
+ :variable-document
+ "The address to get ham resent (through spam-report-resend)."
+ :variable-group spam
+ :variable-type '(repeat
+ (list :tag "Group address for resending ham"
+ (regexp :tag "Group")
+ (string :tag "E-mail address for resending ham (requires the spam-use-resend exit processor)")))
+ :parameter-type 'string :tag "E-mail address for resending ham (requires the spam-use-resend exit processor)"
+ :parameter-document
+ "The address to get ham resent (through spam-report-resend).")
(defvar gnus-group-spam-exit-processor-ifile "ifile"
"OBSOLETE: The ifile summary exit spam processor.")
(gnus-define-group-parameter
spam-process
:type list
- :parameter-type
- '(choice
+ :parameter-type
+ '(choice
:tag "Spam Summary Exit Processor"
:value nil
(list :tag "Spam Summary Exit Processor Choices"
(set
+ (const :tag "Spam: Bogofilter" (spam spam-use-bogofilter))
+ (const :tag "Spam: Blacklist" (spam spam-use-blacklist))
+ (const :tag "Spam: Bsfilter" (spam spam-use-bsfilter))
+ (const :tag "Spam: Gmane Report" (spam spam-use-gmane))
+ (const :tag "Spam: Resend Message"(spam spam-use-resend))
+ (const :tag "Spam: ifile" (spam spam-use-ifile))
+ (const :tag "Spam: Spam Oracle" (spam spam-use-spamoracle))
+ (const :tag "Spam: Spam-stat" (spam spam-use-stat))
+ (const :tag "Spam: SpamAssassin" (spam spam-use-spamassassin))
+ (const :tag "Spam: CRM114" (spam spam-use-crm114))
+ (const :tag "Ham: BBDB" (ham spam-use-BBDB))
+ (const :tag "Ham: Bogofilter" (ham spam-use-bogofilter))
+ (const :tag "Ham: Bsfilter" (ham spam-use-bsfilter))
+ (const :tag "Ham: Copy" (ham spam-use-ham-copy))
+ (const :tag "Ham: Resend Message" (ham spam-use-resend))
+ (const :tag "Ham: ifile" (ham spam-use-ifile))
+ (const :tag "Ham: Spam Oracle" (ham spam-use-spamoracle))
+ (const :tag "Ham: Spam-stat" (ham spam-use-stat))
+ (const :tag "Ham: SpamAssassin" (ham spam-use-spamassassin))
+ (const :tag "Ham: CRM114" (ham spam-use-crm114))
+ (const :tag "Ham: Whitelist" (ham spam-use-whitelist))
(variable-item gnus-group-spam-exit-processor-ifile)
(variable-item gnus-group-spam-exit-processor-stat)
(variable-item gnus-group-spam-exit-processor-bogofilter)
(variable-item gnus-group-ham-exit-processor-whitelist)
(variable-item gnus-group-ham-exit-processor-BBDB)
(variable-item gnus-group-ham-exit-processor-spamoracle)
- (variable-item gnus-group-ham-exit-processor-copy)
- (const :tag "Spam: Gmane Report" (spam spam-use-gmane))
- (const :tag "Spam: Bogofilter" (spam spam-use-bogofilter))
- (const :tag "Spam: Blacklist" (spam spam-use-blacklist))
- (const :tag "Spam: ifile" (spam spam-use-ifile))
- (const :tag "Spam: Spam-stat" (spam spam-use-stat))
- (const :tag "Spam: Spam Oracle" (spam spam-use-spamoracle))
- (const :tag "Ham: ifile" (ham spam-use-ifile))
- (const :tag "Ham: Bogofilter" (ham spam-use-bogofilter))
- (const :tag "Ham: Spam-stat" (ham spam-use-stat))
- (const :tag "Ham: Whitelist" (ham spam-use-whitelist))
- (const :tag "Ham: BBDB" (ham spam-use-BBDB))
- (const :tag "Ham: Copy" (ham spam-use-ham-copy))
- (const :tag "Ham: Spam Oracle" (ham spam-use-spamoracle)))))
+ (variable-item gnus-group-ham-exit-processor-copy))))
:function-document
"Which spam or ham processors will be applied when the summary is exited."
:variable gnus-spam-process-newsgroups
name regexps that should match all groups in which to do automatic
spam processing, associated with the appropriate processor."
:variable-group spam
- :variable-type
+ :variable-type
'(repeat :tag "Spam/Ham Processors"
(list :tag "Spam Summary Exit Processor Choices"
(regexp :tag "Group Regexp")
- (set
+ (set
:tag "Spam/Ham Summary Exit Processor"
+ (const :tag "Spam: Bogofilter" (spam spam-use-bogofilter))
+ (const :tag "Spam: Blacklist" (spam spam-use-blacklist))
+ (const :tag "Spam: Bsfilter" (spam spam-use-bsfilter))
+ (const :tag "Spam: Gmane Report" (spam spam-use-gmane))
+ (const :tag "Spam: Resend Message"(spam spam-use-resend))
+ (const :tag "Spam: ifile" (spam spam-use-ifile))
+ (const :tag "Spam: Spam-stat" (spam spam-use-stat))
+ (const :tag "Spam: Spam Oracle" (spam spam-use-spamoracle))
+ (const :tag "Spam: SpamAssassin" (spam spam-use-spamassassin))
+ (const :tag "Spam: CRM114" (spam spam-use-crm114))
+ (const :tag "Ham: BBDB" (ham spam-use-BBDB))
+ (const :tag "Ham: Bogofilter" (ham spam-use-bogofilter))
+ (const :tag "Ham: Bsfilter" (ham spam-use-bsfilter))
+ (const :tag "Ham: Copy" (ham spam-use-ham-copy))
+ (const :tag "Ham: Resend Message" (ham spam-use-resend))
+ (const :tag "Ham: ifile" (ham spam-use-ifile))
+ (const :tag "Ham: Spam-stat" (ham spam-use-stat))
+ (const :tag "Ham: Spam Oracle" (ham spam-use-spamoracle))
+ (const :tag "Ham: SpamAssassin" (ham spam-use-spamassassin))
+ (const :tag "Ham: CRM114" (ham spam-use-crm114))
+ (const :tag "Ham: Whitelist" (ham spam-use-whitelist))
(variable-item gnus-group-spam-exit-processor-ifile)
(variable-item gnus-group-spam-exit-processor-stat)
(variable-item gnus-group-spam-exit-processor-bogofilter)
(variable-item gnus-group-ham-exit-processor-whitelist)
(variable-item gnus-group-ham-exit-processor-BBDB)
(variable-item gnus-group-ham-exit-processor-spamoracle)
- (variable-item gnus-group-ham-exit-processor-copy)
- (const :tag "Spam: Gmane Report" (spam spam-use-gmane))
- (const :tag "Spam: Bogofilter" (spam spam-use-bogofilter))
- (const :tag "Spam: Blacklist" (spam spam-use-blacklist))
- (const :tag "Spam: ifile" (spam spam-use-ifile))
- (const :tag "Spam: Spam-stat" (spam spam-use-stat))
- (const :tag "Spam: Spam Oracle" (spam spam-use-spamoracle))
- (const :tag "Ham: ifile" (ham spam-use-ifile))
- (const :tag "Ham: Bogofilter" (ham spam-use-bogofilter))
- (const :tag "Ham: Spam-stat" (ham spam-use-stat))
- (const :tag "Ham: Whitelist" (ham spam-use-whitelist))
- (const :tag "Ham: BBDB" (ham spam-use-BBDB))
- (const :tag "Ham: Copy" (ham spam-use-ham-copy))
- (const :tag "Ham: Spam Oracle" (ham spam-use-spamoracle)))))
+ (variable-item gnus-group-ham-exit-processor-copy))))
:parameter-document
"Which spam or ham processors will be applied when the summary is exited.")
(gnus-define-group-parameter
spam-autodetect
:type list
- :parameter-type
+ :parameter-type
'(boolean :tag "Spam autodetection")
:function-document
"Should spam be autodetected (with spam-split) in this group?"
Only unseen articles will be examined, unless
spam-autodetect-recheck-messages is set."
:variable-group spam
- :variable-type
+ :variable-type
'(repeat
:tag "Autodetection setting"
(list
(gnus-define-group-parameter
spam-autodetect-methods
:type list
- :parameter-type
+ :parameter-type
'(choice :tag "Spam autodetection-specific methods"
(const none)
(const default)
(set :tag "Use specific methods"
(variable-item spam-use-blacklist)
+ (variable-item spam-use-gmane-xref)
(variable-item spam-use-regex-headers)
(variable-item spam-use-regex-body)
(variable-item spam-use-whitelist)
(variable-item spam-use-BBDB)
(variable-item spam-use-ifile)
(variable-item spam-use-spamoracle)
+ (variable-item spam-use-crm114)
+ (variable-item spam-use-spamassassin)
+ (variable-item spam-use-spamassassin-headers)
+ (variable-item spam-use-bsfilter)
+ (variable-item spam-use-bsfilter-headers)
(variable-item spam-use-stat)
(variable-item spam-use-blackholes)
(variable-item spam-use-hashcash)
will be examined, unless spam-autodetect-recheck-messages is
set."
:variable-group spam
- :variable-type
+ :variable-type
'(repeat
:tag "Autodetection methods"
(list
(const default)
(set :tag "Use specific methods"
(variable-item spam-use-blacklist)
+ (variable-item spam-use-gmane-xref)
(variable-item spam-use-regex-headers)
(variable-item spam-use-regex-body)
(variable-item spam-use-whitelist)
(variable-item spam-use-BBDB)
(variable-item spam-use-ifile)
(variable-item spam-use-spamoracle)
+ (variable-item spam-use-crm114)
(variable-item spam-use-stat)
(variable-item spam-use-blackholes)
(variable-item spam-use-hashcash)
+ (variable-item spam-use-spamassassin)
+ (variable-item spam-use-spamassassin-headers)
+ (variable-item spam-use-bsfilter)
+ (variable-item spam-use-bsfilter-headers)
(variable-item spam-use-bogofilter-headers)
(variable-item spam-use-bogofilter)))))
:parameter-document
- "Spam autodetection methods.
+ "Spam autodetection methods.
Requires the spam-autodetect parameter. Only unseen articles
will be examined, unless spam-autodetect-recheck-messages is
set.")
(gnus-define-group-parameter
spam-process-destination
:type list
- :parameter-type
+ :parameter-type
'(choice :tag "Destination for spam-processed articles at summary exit"
(string :tag "Move to a group")
(repeat :tag "Move to multiple groups"
group or nil for explicit expiration. This only makes sense for
mail groups."
:variable-group spam
- :variable-type
+ :variable-type
'(repeat
:tag "Spam-processed articles destination"
(list
(const :tag "Expire" nil))))
:parameter-document
"Where spam-processed articles will go at summary exit.")
-
+
(gnus-define-group-parameter
ham-process-destination
:type list
- :parameter-type
+ :parameter-type
'(choice
:tag "Destination for ham articles at summary exit from a spam group"
(string :tag "Move to a group")
group or nil for explicit ignoring. This only makes sense for
mail groups, and only works in spam groups."
:variable-group spam
- :variable-type
+ :variable-type
'(repeat
:tag "Ham articles destination"
(list
"Function run when a group level is changed.
It is called with three parameters -- GROUP, LEVEL and OLDLEVEL."
:group 'gnus-group-levels
- :type 'function)
+ :type '(choice (const nil)
+ function))
;;; Face thingies.
summary-menu group-menu article-menu
tree-highlight menu highlight
browse-menu server-menu
- page-marker tree-menu binary-menu pick-menu
- grouplens-menu)
+ page-marker tree-menu binary-menu pick-menu)
"*Enable visual features.
If `visual' is disabled, there will be no menus and few faces. Most of
the visual customization options below will be ignored. Gnus will use
Valid elements include `summary-highlight', `group-highlight',
`article-highlight', `mouse-face', `summary-menu', `group-menu',
`article-menu', `tree-highlight', `menu', `highlight', `browse-menu',
-`server-menu', `page-marker', `tree-menu', `binary-menu', `pick-menu',
-and `grouplens-menu'."
+`server-menu', `page-marker', `tree-menu', `binary-menu', and`pick-menu'."
:group 'gnus-meta
:group 'gnus-visual
:type '(set (const summary-highlight)
(const page-marker)
(const tree-menu)
(const binary-menu)
- (const pick-menu)
- (const grouplens-menu)))
+ (const pick-menu)))
;; Byte-compiler warning.
(defvar gnus-visual)
When set, Gnus will prefer using the locally stored content rather
than re-fetching it from the server. You also need to enable
`gnus-agent' for this to have any affect."
- :version "21.3"
+ :version "22.1"
:group 'gnus-agent
:type 'boolean)
You may customize gnus-agent to disable its use. However, some
back ends have started to use the agent as a client-side cache.
Disabling the agent may result in noticeable loss of performance."
- :version "21.3"
+ :version "22.1"
:group 'gnus-agent
:type 'boolean)
(symbol :tag "Parameter")
(sexp :tag "Value")))))
-(defcustom gnus-user-agent 'emacs-gnus-type
+(defcustom gnus-user-agent '(emacs gnus type)
"Which information should be exposed in the User-Agent header.
-It can be one of the symbols `gnus' \(show only Gnus version\), `emacs-gnus'
-\(show only Emacs and Gnus versions\), `emacs-gnus-config' \(same as
-`emacs-gnus' plus system configuration\), `emacs-gnus-type' \(same as
-`emacs-gnus' plus system type\) or a custom string. If you set it to a
-string, be sure to use a valid format, see RFC 2616."
+Can be a list of symbols or a string. Valid symbols are `gnus'
+\(show Gnus version\) and `emacs' \(show Emacs version\). In
+addition to the Emacs version, you can add `codename' \(show
+\(S\)XEmacs codename\) or either `config' \(show system
+configuration\) or `type' \(show system type\). If you set it to
+a string, be sure to use a valid format, see RFC 2616."
+
+ :version "22.1"
:group 'gnus-message
- :type '(choice
- (item :tag "Show Gnus and Emacs versions and system type"
- emacs-gnus-type)
- (item :tag "Show Gnus and Emacs versions and system configuration"
- emacs-gnus-config)
- (item :tag "Show Gnus and Emacs versions" emacs-gnus)
- (item :tag "Show only Gnus version" gnus)
- (string :tag "Other")))
+ :type '(choice (list (set :inline t
+ (const gnus :tag "Gnus version")
+ (const emacs :tag "Emacs version")
+ (choice :tag "system"
+ (const type :tag "system type")
+ (const config :tag "system configuration"))
+ (const codename :tag "Emacs codename")))
+ (string)))
+
+;; Convert old (< 2005-01-10) symbol type values:
+(when (symbolp gnus-user-agent)
+ (setq gnus-user-agent
+ (cond ((eq gnus-user-agent 'emacs-gnus-config)
+ '(emacs gnus config))
+ ((eq gnus-user-agent 'emacs-gnus-type)
+ '(emacs gnus type))
+ ((eq gnus-user-agent 'emacs-gnus)
+ '(emacs gnus))
+ ((eq gnus-user-agent 'gnus)
+ '(gnus))
+ (t gnus-user-agent)))
+ (gnus-message 1 "Converted `gnus-user-agent' to `%s'." gnus-user-agent)
+ (sit-for 1)
+ (if (get 'gnus-user-agent 'saved-value)
+ (customize-save-variable 'gnus-user-agent gnus-user-agent)
+ (gnus-message 1 "Edit your init file to make this change permanent.")
+ (sit-for 2)))
\f
;;; Internal variables
(defvar gnus-headers-retrieved-by nil)
(defvar gnus-article-reply nil)
(defvar gnus-override-method nil)
-(defvar gnus-article-check-size nil)
(defvar gnus-opened-servers nil)
(defvar gnus-current-kill-article nil)
gnus-uu-decode-uu-and-save-view gnus-uu-decode-unshar-view
gnus-uu-decode-unshar-and-save-view gnus-uu-decode-save-view
gnus-uu-decode-binhex-view gnus-uu-unmark-thread
- gnus-uu-mark-over gnus-uu-post-news)
+ gnus-uu-mark-over gnus-uu-post-news gnus-uu-invert-processable)
("gnus-uu" gnus-uu-delete-work-dir gnus-uu-unmark-thread)
("gnus-msg" (gnus-summary-send-map keymap)
gnus-article-mail gnus-copy-article-buffer gnus-extended-version)
gnus-summary-post-forward gnus-summary-wide-reply-with-original
gnus-summary-post-forward)
("gnus-picon" :interactive t gnus-treat-from-picon)
- ("gnus-gl" bbb-login bbb-logout bbb-grouplens-group-p
- gnus-grouplens-mode)
("smiley" :interactive t smiley-region)
("gnus-win" gnus-configure-windows gnus-add-configuration)
("gnus-sum" gnus-summary-insert-line gnus-summary-read-group
gnus-mime-view-all-parts)
("gnus-int" gnus-request-type)
("gnus-start" gnus-newsrc-parse-options gnus-1 gnus-no-server-1
- gnus-dribble-enter gnus-read-init-file gnus-dribble-touch)
+ gnus-dribble-enter gnus-read-init-file gnus-dribble-touch
+ gnus-check-reasonable-setup)
("gnus-dup" gnus-dup-suppress-articles gnus-dup-unsuppress-article
gnus-dup-enter-articles)
("gnus-range" gnus-copy-sequence)
gnus-async-prefetch-article gnus-async-prefetch-remove-group
gnus-async-halt-prefetch)
("gnus-agent" gnus-open-agent gnus-agent-get-function
- gnus-agent-save-groups gnus-agent-save-active gnus-agent-method-p
+ gnus-agent-save-active gnus-agent-method-p
gnus-agent-get-undownloaded-list gnus-agent-fetch-session
gnus-summary-set-agent-mark gnus-agent-save-group-info
gnus-agent-request-article gnus-agent-retrieve-headers)
%z Article zcore (character)
%t Number of articles under the current thread (number).
%e Whether the thread is empty or not (character).
-%l GroupLens score (string).
%V Total thread score (number).
%P The line number (number).
%O Download mark (character).
(defun gnus-shutdown (symbol)
"Shut down everything that waits for SYMBOL."
- (let ((alist gnus-shutdown-alist)
- entry)
- (while (setq entry (pop alist))
- (when (memq symbol (cdr entry))
- (funcall (car entry))))))
+ (dolist (entry gnus-shutdown-alist)
+ (when (memq symbol (cdr entry))
+ (funcall (car entry)))))
\f
;;;
(defun gnus-generate-new-group-name (leaf)
(let ((name leaf)
(num 0))
- (while (gnus-gethash name gnus-newsrc-hashtb)
+ (while (gnus-group-entry name)
(setq name (concat leaf "<" (int-to-string (setq num (1+ num))) ">")))
name))
(nth 1 method))))
method)))
+(defsubst gnus-method-to-server (method)
+ (catch 'server-name
+ (setq method (or method gnus-select-method))
+
+ ;; Perhaps it is already in the cache.
+ (mapc (lambda (name-method)
+ (if (equal (cdr name-method) method)
+ (throw 'server-name (car name-method))))
+ gnus-server-method-cache)
+
+ (mapc
+ (lambda (server-alist)
+ (mapc (lambda (name-method)
+ (when (gnus-methods-equal-p (cdr name-method) method)
+ (unless (member name-method gnus-server-method-cache)
+ (push name-method gnus-server-method-cache))
+ (throw 'server-name (car name-method))))
+ server-alist))
+ (list gnus-server-alist
+ gnus-predefined-server-alist))
+
+ (let* ((name (if (member (cadr method) '(nil ""))
+ (format "%s" (car method))
+ (format "%s:%s" (car method) (cadr method))))
+ (name-method (cons name method)))
+ (unless (member name-method gnus-server-method-cache)
+ (push name-method gnus-server-method-cache))
+ name)))
+
(defsubst gnus-server-to-method (server)
"Map virtual server names to select methods."
(or (and server (listp server) server)
;; gnus-server-method-cache so this only happens once,
;; if at all.
(let (match)
- (mapcar
+ (mapcar
(lambda (info)
(let ((info-method (gnus-info-method info)))
(unless (stringp info-method)
(push (cons server result) gnus-server-method-cache))
result)))
-(defsubst gnus-method-to-server (method)
- (catch 'server-name
- (setq method (or method gnus-select-method))
-
- ;; Perhaps it is already in the cache.
- (mapc (lambda (name-method)
- (if (equal (cdr name-method) method)
- (throw 'server-name (car name-method))))
- gnus-server-method-cache)
-
- (mapc
- (lambda (server-alist)
- (mapc (lambda (name-method)
- (when (gnus-methods-equal-p (cdr name-method) method)
- (unless (member name-method gnus-server-method-cache)
- (push name-method gnus-server-method-cache))
- (throw 'server-name (car name-method))))
- server-alist))
- (let ((alists (list gnus-server-alist
- gnus-predefined-server-alist)))
- (if gnus-select-method
- (push (list (cons "native" gnus-select-method)) alists))
- alists))
-
- (let* ((name (if (member (cadr method) '(nil ""))
- (format "%s" (car method))
- (format "%s:%s" (car method) (cadr method))))
- (name-method (cons name method)))
- (unless (member name-method gnus-server-method-cache)
- (push name-method gnus-server-method-cache))
- name)))
-
(defsubst gnus-server-get-method (group method)
;; Input either a server name, and extended server name, or a
;; select method, and return a select method.
(defun gnus-parameters-get-parameter (group)
"Return the group parameters for GROUP from `gnus-parameters'."
- (let (params-list)
+ (let ((case-fold-search (if (eq gnus-parameters-case-fold-search 'default)
+ case-fold-search
+ gnus-parameters-case-fold-search))
+ params-list)
(dolist (elem gnus-parameters)
(when (string-match (car elem) group)
(setq params-list
(defun gnus-group-get-parameter (group &optional symbol allow-list)
"Return the group parameters for GROUP.
If SYMBOL, return the value of that symbol in the group parameters.
+If ALLOW-LIST, also allow list as a result.
Most functions should use `gnus-group-find-parameter', which
also examines the topic parameters."
(let ((params (gnus-info-params (gnus-get-info group))))
(defun gnus-group-parameter-value (params symbol &optional
allow-list present-p)
- "Return the value of SYMBOL in group PARAMS."
+ "Return the value of SYMBOL in group PARAMS.
+If ALLOW-LIST, also allow list as a result."
;; We only wish to return group parameters (dotted lists) and
;; not local variables, which may have the same names.
;; But first we handle single elements...
(or gnus-override-method
(and (not group)
gnus-select-method)
- (and (not (gnus-group-entry group)) ;; a new group
- (gnus-group-name-to-method group))
+ (and (not (gnus-group-entry group))
+ ;; Killed or otherwise unknown group.
+ (or
+ ;; If we know a virtual server by that name, return its method.
+ (gnus-server-to-method (gnus-group-server group))
+ ;; Guess a new method as last resort.
+ (gnus-group-name-to-method group)))
(let ((info (or info (gnus-get-info group)))
method)
(if (or (not info)
(setq valids (cdr valids)))
outs))
+(eval-and-compile
+ (autoload 'message-y-or-n-p "message" nil nil 'macro))
+
(defun gnus-read-group (prompt &optional default)
"Prompt the user for a group name.
Disallow invalid group names."
(defun gnus-agent-method-p (method)
"Say whether METHOD is covered by the agent."
(or (eq (car gnus-agent-method-p-cache) method)
- (setq gnus-agent-method-p-cache
+ (setq gnus-agent-method-p-cache
(cons method
- (member (if (stringp method)
- method
+ (member (if (stringp method)
+ method
(gnus-method-to-server method)) gnus-agent-covered-methods))))
(cdr gnus-agent-method-p-cache))
(delete-frame gnus-other-frame-object))
(setq gnus-other-frame-object nil)))))))
-;;(setq thing ? ; this is a comment
-;; more 'yes)
-
;;;###autoload
(defun gnus (&optional arg dont-connect slave)
"Read network news.
(provide 'gnus)
+;;; arch-tag: acebeeab-f331-4f8f-a7ea-89c58c84f636
;;; gnus.el ends here