(eval '(run-hooks 'gnus-load-hook))
(eval-when-compile (require 'cl))
+(require 'mm-util)
(require 'custom)
(eval-and-compile
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "0.73"
+(defconst gnus-version-number "0.99"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Pterodactyl Gnus v%s" gnus-version-number)
(insert-file-contents gnus-nntpserver-file)
(let ((name (buffer-string)))
(prog1
- (if (string-match "^[ \t\n]*$" name)
+ (if (string-match "\\'[ \t\n]*$" name)
nil
name)
(kill-buffer (current-buffer))))))))
(defcustom gnus-select-method
- (condition-case nil
+ (ignore-errors
(nconc
- (list 'nntp (or (condition-case nil
- (gnus-getenv-nntpserver)
- (error nil))
+ (list 'nntp (or (ignore-errors
+ (gnus-getenv-nntpserver))
(when (and gnus-default-nntp-server
(not (string= gnus-default-nntp-server "")))
gnus-default-nntp-server)
(if (or (null gnus-nntp-service)
(equal gnus-nntp-service "nntp"))
nil
- (list gnus-nntp-service)))
- (error nil))
+ (list gnus-nntp-service))))
"*Default method for selecting a newsgroup.
This variable should be a list, where the first element is how the
news is to be fetched, the second is the address.
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'."
+in the documentation of `gnus-select-method'.
+
+It can also be a list of select methods, as well as the special symbol
+`current', which means to use the current select method. If it is a
+list, Gnus will try all the methods in the list until it finds a match."
:group 'gnus-server
:type '(choice (const :tag "default" nil)
- gnus-select-method))
+ (const :tag "DejaNews" (nnweb "refer" (nnweb-type dejanews)))
+ gnus-select-method
+ (repeat :menu-tag "Try multiple"
+ :tag "Multiple"
+ :value (current (nnweb "refer" (nnweb-type dejanews)))
+ (choice :tag "Method"
+ (const current)
+ (const :tag "DejaNews"
+ (nnweb "refer" (nnweb-type dejanews)))
+ gnus-select-method))))
(defcustom gnus-group-faq-directory
'("/ftp@mirrors.aol.com:/pub/rtfm/usenet/"
:type 'boolean)
(defcustom gnus-use-picons nil
- "*If non-nil, display picons."
+ "*If non-nil, display picons in a frame of their own."
:group 'gnus-meta
:type 'boolean)
("nnfolder" mail respool address)
("nngateway" post-mail address prompt-address physical-address)
("nnweb" none)
+ ("nnslashdot" post)
+ ("nnultimate" none)
+ ("nnwarchive" none)
("nnlistserv" none)
- ("nnagent" post-mail))
+ ("nnagent" post-mail)
+ ("nnimap" post-mail address prompt-address physical-address))
"*An alist of valid select methods.
The first element of each list lists should be a string with the name
of the select method. The other elements may be the category of
(define-widget 'gnus-select-method 'list
"Widget for entering a select method."
+ :value '(nntp "")
+ :tag "Select Method"
:args `((choice :tag "Method"
,@(mapcar (lambda (entry)
(list 'const :format "%v\n"
(defcustom gnus-group-change-level-function nil
"Function run when a group level is changed.
It is called with three parameters -- GROUP, LEVEL and OLDLEVEL."
- :group 'gnus-group-level
+ :group 'gnus-group-levels
:type 'function)
;;; Face thingies.
("browse-url" browse-url)
("message" :interactive t
message-send-and-exit message-yank-original)
+ ("babel" babel-as-string)
("nnmail" nnmail-split-fancy nnmail-article-group)
("nnvirtual" nnvirtual-catchup-group nnvirtual-convert-headers)
("rmailout" rmail-output rmail-output-to-rmail-file)
gnus-score-find-trace gnus-score-file-name)
("gnus-cus" :interactive t gnus-group-customize gnus-score-customize)
("gnus-topic" :interactive t gnus-topic-mode)
- ("gnus-topic" gnus-topic-remove-group gnus-topic-set-parameters)
+ ("gnus-topic" gnus-topic-remove-group gnus-topic-set-parameters
+ gnus-subscribe-topics)
("gnus-salt" :interactive t gnus-pick-mode gnus-binary-mode)
("gnus-uu" (gnus-uu-extract-map keymap) (gnus-uu-mark-map keymap))
("gnus-uu" :interactive t
gnus-group-set-mode-line gnus-group-set-info gnus-group-save-newsrc
gnus-group-setup-buffer gnus-group-get-new-news
gnus-group-make-help-group gnus-group-update-group
- gnus-clear-inboxes-moved gnus-group-iterate
- gnus-group-group-name)
+ gnus-group-iterate gnus-group-group-name)
("gnus-bcklg" gnus-backlog-request-article gnus-backlog-enter-article
gnus-backlog-remove-article)
("gnus-art" gnus-article-read-summary-keys gnus-article-save
gnus-article-delete-invisible-text gnus-treat-article)
("gnus-art" :interactive t
gnus-article-hide-headers gnus-article-hide-boring-headers
- gnus-article-treat-overstrike gnus-article-word-wrap
+ gnus-article-treat-overstrike
gnus-article-remove-cr gnus-article-remove-trailing-blank-lines
gnus-article-display-x-face gnus-article-de-quoted-unreadable
gnus-article-hide-pgp
gnus-unplugged gnus-agentize gnus-agent-batch)
("gnus-vm" :interactive t gnus-summary-save-in-vm
gnus-summary-save-article-vm)
- ("gnus-draft" :interactive t gnus-draft-mode gnus-group-send-drafts))))
+ ("gnus-draft" :interactive t gnus-draft-mode gnus-group-send-drafts)
+ ("gnus-mlspl" gnus-group-split gnus-group-split-fancy)
+ ("gnus-mlspl" :interactive t gnus-group-split-setup
+ gnus-group-split-update))))
;;; gnus-sum.el thingies
(setq s1 (cdr s1)))
(null s1))))))
+(defun gnus-methods-equal-p (m1 m2)
+ (let ((m1 (or m1 gnus-select-method))
+ (m2 (or m2 gnus-select-method)))
+ (or (equal m1 m2)
+ (and (eq (car m1) (car m2))
+ (or (not (memq 'address (assoc (symbol-name (car m1))
+ gnus-valid-select-methods)))
+ (equal (nth 1 m1) (nth 1 m2)))))))
+
(defun gnus-server-equal (m1 m2)
"Say whether two methods are equal."
(let ((m1 (cond ((null m1) gnus-select-method)
(defun gnus-method-simplify (method)
"Return the shortest uniquely identifying string or method for METHOD."
- (cond ((gnus-native-method-p method)
- nil)
- ((gnus-secondary-method-p method)
- (format "%s:%s" (nth 0 method) (nth 1 method)))
- (t
- method)))
+ (cond ((stringp method)
+ method)
+ ((gnus-native-method-p method)
+ nil)
+ ((gnus-secondary-method-p method)
+ (format "%s:%s" (nth 0 method) (nth 1 method)))
+ (t
+ method)))
(defun gnus-groups-from-server (server)
"Return a list of all groups that are fetched from SERVER."
(when info
(gnus-info-set-score info (+ (gnus-info-score info) (or score 1))))))
-;; Function written by Stainless Steel Rat <ratinox@peorth.gweep.net>
(defun gnus-short-group-name (group &optional levels)
"Collapse GROUP name LEVELS.
Select methods are stripped and any remote host name is stripped down to
(depth 0)
(skip 1)
(levels (or levels
+ gnus-group-uncollapsed-levels
(progn
(while (string-match "\\." group skip)
(setq skip (match-end 0)
depth (+ depth 1)))
depth))))
- ;; separate foreign select method from group name and collapse.
- ;; if method contains a server, collapse to non-domain server name,
- ;; otherwise collapse to select method
- (let* ((colon (string-match ":" group))
+ ;; Separate foreign select method from group name and collapse.
+ ;; If method contains a server, collapse to non-domain server name,
+ ;; otherwise collapse to select method.
+ (let* ((colon (string-match ":" group))
(server (and colon (substring group 0 colon)))
- (plus (and server (string-match "+" server))))
+ (plus (and server (string-match "+" server))))
(when server
- (cond (plus
- (setq foreign (substring server (+ 1 plus)
- (string-match "\\." server))
- group (substring group (+ 1 colon))))
- (t
- (setq foreign server
- group (substring group (+ 1 colon)))))
- (setq foreign (concat foreign ":"))))
- ;; collapse group name leaving LEVELS uncollapsed elements
- (while group
- (if (and (string-match "\\." group) (> levels 0))
- (setq name (concat name (substring group 0 1))
- group (substring group (match-end 0))
- levels (- levels 1)
- name (concat name "."))
- (setq name (concat foreign name group)
- group nil)))
- name))
+ (if plus
+ (setq foreign (substring server (+ 1 plus)
+ (string-match "\\." server))
+ group (substring group (+ 1 colon)))
+ (setq foreign server
+ group (substring group (+ 1 colon))))
+ (setq foreign (concat foreign ":")))
+ ;; Collapse group name leaving LEVELS uncollapsed elements
+ (let* ((glist (split-string group "\\."))
+ (glen (length glist))
+ res)
+ (setq levels (- glen levels))
+ (dolist (g glist)
+ (push (if (>= (decf levels) 0)
+ (if (zerop (length g))
+ ""
+ (substring g 0 1))
+ g)
+ res))
+ (concat foreign (mapconcat 'identity (nreverse res) "."))))))
(defun gnus-narrow-to-body ()
"Narrow to the body of an article."
Allow completion over sensible values."
(let* ((servers
(append gnus-valid-select-methods
+ (mapcar (lambda (i) (list (format "%s:%s" (caar i)
+ (cadar i))))
+ gnus-opened-servers)
gnus-predefined-server-alist
gnus-server-alist))
(method
((equal method "")
(setq method gnus-select-method))
((assoc method gnus-valid-select-methods)
- (list (intern method)
- (if (memq 'prompt-address
- (assoc method gnus-valid-select-methods))
- (read-string "Address: ")
- "")))
+ (let ((address (if (memq 'prompt-address
+ (assoc method gnus-valid-select-methods))
+ (read-string "Address: ")
+ "")))
+ (or (let ((opened gnus-opened-servers))
+ (while (and opened
+ (not (equal (format "%s:%s" method address)
+ (format "%s:%s" (caaar opened)
+ (cadaar opened)))))
+ (pop opened))
+ (caar opened))
+ (list (intern method) address))))
((assoc method servers)
method)
(t
(let ((window (get-buffer-window gnus-group-buffer)))
(cond (window
(select-frame (window-frame window)))
- ((= (length (frame-list)) 1)
- (select-frame (make-frame)))
(t
(other-frame 1))))
(gnus arg))