;;; gnus.el --- a newsreader for GNU Emacs
-;; Copyright (C) 1987-1990, 1993-1998, 2000-2011
+;; Copyright (C) 1987-1990, 1993-1998, 2000-2012
;; Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
(require 'wid-edit)
(require 'mm-util)
(require 'nnheader)
+(require 'gnus-compat)
;; These are defined afterwards with gnus-define-group-parameter
(defvar gnus-ham-process-destinations)
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "0.18"
+(defconst gnus-version-number "0.4"
"Version number for this version of Gnus.")
-(defconst gnus-version (format "No Gnus v%s" gnus-version-number)
+(defconst gnus-version (format "Ma Gnus v%s" gnus-version-number)
"Version string for this version of Gnus.")
(defcustom gnus-inhibit-startup-message nil
(defface gnus-summary-cancelled
'((((class color))
(:foreground "yellow" :background "black")))
- "Face used for cancelled articles."
+ "Face used for canceled articles."
:group 'gnus-summary)
;; backward-compatibility alias
(put 'gnus-summary-cancelled-face 'face-alias 'gnus-summary-cancelled)
(purp "#9999cc" "#666699")
(no "#ff0000" "#ffff00")
(neutral "#b4b4b4" "#878787")
+ (ma "#2020e0" "#8080ff")
(september "#bf9900" "#ffcc00"))
"Color alist used for the Gnus logo.")
-(defcustom gnus-logo-color-style 'no
+(defcustom gnus-logo-color-style 'ma
"*Color styles used for the Gnus logo."
:type `(choice ,@(mapcar (lambda (elem) (list 'const (car elem)))
gnus-logo-color-alist))
(defcustom gnus-home-directory "~/"
"Directory variable that specifies the \"home\" directory.
-All other Gnus file and directory variables are initialized from this variable."
+All other Gnus file and directory variables are initialized from this variable.
+
+Note that Gnus is mostly loaded when the `.gnus.el' file is read.
+This means that other directory variables that are initialized
+from this variable won't be set properly if you set this variable
+in `.gnus.el'. Set this variable in `.emacs' instead."
:group 'gnus-files
:type 'directory)
:type '(repeat string))
(make-obsolete-variable 'gnus-secondary-servers 'gnus-select-method "24.1")
-(defcustom gnus-nntp-server nil
- "The name of the host running the NNTP server."
- :group 'gnus-server
- :type '(choice (const :tag "disable" nil)
- string))
-(make-obsolete-variable 'gnus-nntp-server 'gnus-select-method "24.1")
-
(defcustom gnus-secondary-select-methods nil
"A list of secondary methods that will be used for reading news.
This is a list where each element is a complete select method (see
(defcustom gnus-refer-article-method 'current
"Preferred method for fetching an article by Message-ID.
-If you are reading news from the local spool (with nnspool), fetching
-articles by Message-ID is painfully slow. By setting this method to an
-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'.
(const current)
(const :tag "Google" (nnweb "refer" (nnweb-type google)))
gnus-select-method
+ sexp
(repeat :menu-tag "Try multiple"
:tag "Multiple"
:value (current (nnweb "refer" (nnweb-type google)))
:type 'boolean)
(defcustom gnus-interactive-exit t
- "*If non-nil, require your confirmation when exiting Gnus."
+ "*If non-nil, require your confirmation when exiting Gnus.
+If `quiet', update any active summary buffers automatically
+first before exiting."
:group 'gnus-exit
- :type 'boolean)
+ :type '(choice boolean
+ (const quiet)))
(defcustom gnus-extract-address-components 'gnus-extract-address-components
"*Function for extracting address components from a From header.
("nnagent" post-mail)
("nnimap" post-mail address prompt-address physical-address respool
server-marks)
- ("nnmaildir" mail respool address)
+ ("nnmaildir" mail respool address server-marks)
("nnnil" none))
"*An alist of valid select methods.
The first element of each list lists should be a string with the name
:variable-default (mapcar
(lambda (g) (list g t))
'("delayed$" "drafts$" "queue$" "INBOX$"
- "^nnmairix:" "archive"))
+ "^nnmairix:" "^nnir:" "archive"))
:variable-document
"*Groups in which the registry should be turned off."
:variable-group gnus-registry
(scored . score) (saved . save)
(cached . cache) (downloadable . download)
(unsendable . unsend) (forwarded . forward)
- (recent . recent) (seen . seen)))
+ (seen . seen) (unexist . unexist)))
(defconst gnus-article-special-mark-lists
'((seen range)
+ (unexist range)
(killed range)
(bookmark tuple)
(uid tuple)
;; `score' is not a proper mark
;; `bookmark': don't propagated it, or fix the bug in update-mark.
(defconst gnus-article-unpropagated-mark-lists
- '(seen cache download unsend score bookmark)
+ '(seen cache download unsend score bookmark unexist)
"Marks that shouldn't be propagated to back ends.
Typical marks are those that make no sense in a standalone back end,
such as a mark that says whether an article is stored in the cache
(defvar gnus-have-read-active-file nil)
(defconst gnus-maintainer
- "bugs@gnus.org (The Gnus Bugfixing Girls + Boys)"
+ "submit@debbugs.gnu.org (The Gnus Bugfixing Girls + Boys)"
"The mail address of the Gnus maintainers.")
+(defconst gnus-bug-package
+ "gnus"
+ "The package to use in the bug submission.")
+
(defvar gnus-info-nodes
'((gnus-group-mode "(gnus)Group Buffer")
(gnus-summary-mode "(gnus)Summary Buffer")
gnus-newsrc-last-checked-date
gnus-newsrc-alist gnus-server-alist
gnus-killed-list gnus-zombie-list
- gnus-topic-topology gnus-topic-alist
- gnus-format-specs)
+ gnus-topic-topology gnus-topic-alist)
"Gnus variables saved in the quick startup file.")
(defvar gnus-newsrc-alist nil
on level one
%R \"A\" if this article has been replied to, \" \"
otherwise (character)
-%U Status of this article (character, \"R\", \"K\",
- \"-\" or \" \")
+%U \"Read\" status of this article.
+ See Info node `(gnus)Marking Articles'
%[ Opening bracket (character, \"[\" or \"<\")
%] Closing bracket (character, \"]\" or \">\")
%> Spaces of length thread-level (string)
(equal (nth 1 m1) (nth 1 m2)))))))
(defsubst gnus-sloppily-equal-method-parameters (m1 m2)
- ;; Check parameters for sloppy equalness.
+ ;; Check parameters for sloppy equality.
(let ((p1 (copy-sequence (cddr m1)))
(p2 (copy-sequence (cddr m2)))
e1 e2)
;; If p2 now is empty, they were equal.
(null p2))))
+(defun gnus-method-ephemeral-p (method)
+ (let ((equal nil))
+ (dolist (ephemeral gnus-ephemeral-servers)
+ (when (gnus-sloppily-equal-method-parameters method ephemeral)
+ (setq equal t)))
+ equal))
+
(defun gnus-methods-sloppily-equal (m1 m2)
;; Same method.
(or
;; The car is regexp matching for matching the group name.
(when (string-match (car head) group)
;; The cdr is the parameters.
- (setq result (gnus-group-parameter-value (cdr head)
- symbol allow-list))
- (when result
- ;; Expand if necessary.
- (if (and (stringp result) (string-match "\\\\[0-9&]" result))
- (setq result (gnus-expand-group-parameter (car head)
- result group))))))
+ (let ((this-result
+ (gnus-group-parameter-value (cdr head) symbol allow-list t)))
+ (when this-result
+ (setq result (car this-result))
+ ;; Expand if necessary.
+ (if (and (stringp result) (string-match "\\\\[0-9&]" result))
+ (setq result (gnus-expand-group-parameter
+ (car head) result group)))))))
;; Done.
result))))
If you call this function inside a loop, consider using the faster
`gnus-group-fast-parameter' instead."
- (with-current-buffer gnus-group-buffer
+ (with-current-buffer (if (buffer-live-p (get-buffer gnus-group-buffer))
+ gnus-group-buffer
+ (current-buffer))
(if symbol
(gnus-group-fast-parameter group symbol allow-list)
(nconc
(if (or (not (inline (gnus-similar-server-opened method)))
(not (cddr method)))
method
- (setq method
- `(,(car method) ,(concat (cadr method) "+" group)
- (,(intern (format "%s-address" (car method))) ,(cadr method))
- ,@(cddr method)))
- (push method gnus-extended-servers)
- method))
+ (let ((address-slot
+ (intern (format "%s-address" (car method)))))
+ (setq method
+ (if (assq address-slot (cddr method))
+ `(,(car method) ,(concat (cadr method) "+" group)
+ ,@(cddr method))
+ `(,(car method) ,(concat (cadr method) "+" group)
+ (,address-slot ,(cadr method))
+ ,@(cddr method))))
+ (push method gnus-extended-servers)
+ method)))
(defun gnus-server-status (method)
"Return the status of METHOD."
(switch-to-buffer gnus-group-buffer)
(funcall gnus-other-frame-function arg)
(add-hook 'gnus-exit-gnus-hook
- '(lambda nil
- (when (and (frame-live-p gnus-other-frame-object)
- (cdr (frame-list)))
- (delete-frame gnus-other-frame-object))
- (setq gnus-other-frame-object nil)))))))
+ (lambda nil
+ (when (and (frame-live-p gnus-other-frame-object)
+ (cdr (frame-list)))
+ (delete-frame gnus-other-frame-object))
+ (setq gnus-other-frame-object nil)))))))
;;;###autoload
(defun gnus (&optional arg dont-connect slave)
(gnus-1 arg dont-connect slave)
(gnus-final-warning)))
+(autoload 'debbugs-gnu "debbugs-gnu")
+(defun gnus-list-debbugs ()
+ "List all open Gnus bug reports."
+ (interactive)
+ (debbugs-gnu nil "gnus"))
+
;; Allow redefinition of Gnus functions.
(gnus-ems-redefine)