;; Copyright (C) 1987,88,89,90,93,94,95,96,97,98 Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
-;; Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+;; Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Keywords: news, mail
;; This file is part of GNU Emacs.
:group 'news
:group 'mail)
+(defgroup gnus-cache nil
+ "Cache interface."
+ :group 'gnus)
+
(defgroup gnus-start nil
"Starting your favorite newsreader."
:group 'gnus)
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "0.28"
+(defconst gnus-version-number "5.6.26"
"Version number for this version of Gnus.")
-(defconst gnus-version (format "Quassia 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
- "*If non-nil, the startup message will not be displayed.
+ "If non-nil, the startup message will not be displayed.
This variable is used before `.gnus.el' is loaded, so it should
be set in `.emacs' instead."
:group 'gnus-start
:type 'boolean)
(defcustom gnus-play-startup-jingle nil
- "*If non-nil, play the Gnus jingle at startup."
+ "If non-nil, play the Gnus jingle at startup."
:group 'gnus-start
:type 'boolean)
(require 'nnheader)
(defcustom gnus-home-directory "~/"
- "*Directory variable that specifies the \"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")
(nnheader-concat gnus-home-directory "News/"))
- "*Directory variable from which all other Gnus file variables are derived."
+ "*Directory variable from which all other Gnus file variables are derived.
+
+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)
(setq gnus-select-method '(nntp \"my.nntp.server\" (nntp-port-number 899)))")
(defcustom gnus-nntpserver-file "/etc/nntpserver"
- "*A file with only the name of the nntp server in it."
+ "A file with only the name of the nntp server in it."
:group 'gnus-files
:group 'gnus-server
:type 'file)
\"nnml+private:mail.misc\", for instance."
:group 'gnus-message
:type '(choice (const :tag "none" nil)
+ sexp
string))
(defcustom gnus-secondary-servers nil
- "*List of NNTP servers that the user can choose between interactively.
+ "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-server
string))
(defcustom gnus-secondary-select-methods nil
- "*A list of secondary methods that will be used for reading news.
+ "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
`gnus-select-method').
Should be set in paths.el, and shouldn't be touched by the user.")
(defcustom gnus-local-domain nil
- "*Local domain name without a host name.
+ "Local domain name without a host name.
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."
;; Customization variables
(defcustom gnus-refer-article-method nil
- "*Preferred method for fetching an article by Message-ID.
+ "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.
:type 'boolean)
(defcustom gnus-use-demon nil
- "*If non-nil, Gnus might use some demons."
+ "If non-nil, Gnus might use some demons."
:group 'gnus-meta
:type 'boolean)
:type 'boolean)
(defcustom gnus-shell-command-separator ";"
- "*String used to separate to shell commands."
+ "String used to separate to shell commands."
:group 'gnus-files
:type 'string)
("nnsoup" post-mail address)
("nndraft" post-mail)
("nnfolder" mail respool address)
- ("nngateway" none address prompt-address physical-address)
+ ("nngateway" post-mail address prompt-address physical-address)
("nnweb" none)
+ ("nnlistserv" none)
("nnagent" post-mail))
"*An alist of valid select methods.
The first element of each list lists should be a string with the name
(sexp :tag "Value")))))
(defcustom gnus-updated-mode-lines '(group article summary tree)
- "*List of buffers that should update their mode lines.
+ "List of buffers that should update their mode lines.
The list may contain the symbols `group', `article', `tree' and
`summary'. If the corresponding symbol is present, Gnus will keep
that mode line updated with information that may be pertinent.
regexp))
(defcustom gnus-group-uncollapsed-levels 1
- "*Number of group name elements to leave alone when making a short group name."
+ "Number of group name elements to leave alone when making a short group name."
:group 'gnus-group-visual
:type 'integer)
;; Hooks.
(defcustom gnus-load-hook nil
- "*A hook run while Gnus is loaded."
+ "A hook run while Gnus is loaded."
:group 'gnus-start
:type 'hook)
(defcustom gnus-apply-kill-hook '(gnus-apply-kill-file)
- "*A hook called to apply kill files to a group.
+ "A hook called to apply kill files to a group.
This hook is intended to apply a kill file to the selected newsgroup.
The function `gnus-apply-kill-file' is called by default.
:type 'hook)
(defcustom gnus-group-change-level-function nil
- "*Function run when a group level is changed.
+ "Function run when a group level is changed.
It is called with three parameters -- GROUP, LEVEL and OLDLEVEL."
:group 'gnus-group-level
:type 'function)
;; Variable holding the user answers to all method prompts.
(defvar gnus-method-history nil)
-(defvar gnus-group-history nil)
;; Variable holding the user answers to all mail method prompts.
(defvar gnus-mail-method-history nil)
(defvar gnus-server-alist nil
"List of available servers.")
+(defcustom gnus-cache-directory
+ (nnheader-concat gnus-directory "cache/")
+ "*The directory where cached articles will be stored."
+ :group 'gnus-cache
+ :type 'directory)
+
(defvar gnus-predefined-server-alist
`(("cache"
(nnspool "cache"
- (nnspool-spool-directory "~/News/cache/")
- (nnspool-nov-directory "~/News/cache/")
- (nnspool-active-file "~/News/cache/active"))))
+ (nnspool-spool-directory gnus-cache-directory)
+ (nnspool-nov-directory gnus-cache-directory)
+ (nnspool-active-file
+ (nnheader-concat gnus-cache-directory "active")))))
"List of predefined (convenience) servers.")
(defvar gnus-topic-indentation "") ;; Obsolete variable.
gnus-uu-decode-binhex gnus-uu-decode-uu-view
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" gnus-uu-delete-work-dir gnus-quote-arg-for-sh-or-csh)
+ gnus-uu-decode-binhex-view gnus-uu-unmark-thread)
+ ("gnus-uu" gnus-uu-delete-work-dir gnus-quote-arg-for-sh-or-csh
+ gnus-uu-unmark-thread)
("gnus-msg" (gnus-summary-send-map keymap)
gnus-article-mail gnus-copy-article-buffer gnus-extended-version)
("gnus-msg" :interactive t
("gnus-sum" gnus-summary-insert-line gnus-summary-read-group
gnus-list-of-unread-articles gnus-list-of-read-articles
gnus-offer-save-summaries gnus-make-thread-indent-array
- gnus-summary-exit gnus-update-read-articles)
+ gnus-summary-exit gnus-update-read-articles gnus-summary-last-subject
+ gnus-summary-skip-intangible gnus-summary-article-number
+ gnus-data-header gnus-data-find)
("gnus-group" gnus-group-insert-group-line gnus-group-quit
gnus-group-list-groups gnus-group-first-unread-group
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-group-make-help-group gnus-group-update-group
+ gnus-clear-inboxes-moved 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-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-get-undownloaded-list gnus-agent-fetch-session)
+ gnus-agent-get-undownloaded-list gnus-agent-fetch-session
+ gnus-summary-set-agent-mark gnus-agent-save-group-info)
("gnus-agent" :interactive t
gnus-unplugged gnus-agentize gnus-agent-batch)
("gnus-vm" :interactive t gnus-summary-save-in-vm
;;; gnus-sum.el thingies
-(defcustom gnus-summary-line-format "%U\%R\%z\%I\%(%[%4L: %-20,20n%]%) %s\n"
+(defcustom gnus-summary-line-format "%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n"
"*The format specification of the lines in the summary buffer.
It works along the same lines as a normal formatting string,
"Set GROUP's active info."
`(gnus-sethash ,group ,active gnus-active-hashtb))
-(defun gnus-alive-p ()
- "Say whether Gnus is running or not."
- (and gnus-group-buffer
- (get-buffer gnus-group-buffer)
- (save-excursion
- (set-buffer gnus-group-buffer)
- (eq major-mode 'gnus-group-mode))))
-
;; Info access macros.
(defmacro gnus-info-group (info)
((= c ?g)
(gnus-group-group-name))
((= c ?A)
- (gnus-summary-article-number))
+ (gnus-summary-skip-intangible)
+ (or (get-text-property (point) 'gnus-number)
+ (gnus-summary-last-subject)))
((= c ?H)
- (gnus-summary-article-header))
+ (gnus-data-header (gnus-data-find (gnus-summary-article-number))))
(t
- (error "Not implemented spec")))
+ (error "Non-implemented spec")))
out)
(cond
((= c ?r)
"Return non-nil if GROUP (and ARTICLE) come from a news server."
(or (gnus-member-of-valid 'post group) ; Ordinary news group.
(and (gnus-member-of-valid 'post-mail group) ; Combined group.
- (eq (gnus-request-type group article) 'news))))
+ (if (or (null article)
+ (not (< article 0)))
+ (eq (gnus-request-type group article) 'news)
+ (if (not (vectorp article))
+ nil
+ ;; It's a real article.
+ (eq (gnus-request-type group (mail-header-id article))
+ 'news))))))
;; Returns a list of writable groups.
(defun gnus-writable-groups ()
(defun gnus-ephemeral-group-p (group)
"Say whether GROUP is ephemeral or not."
- (gnus-group-get-parameter group 'quit-config))
+ (gnus-group-get-parameter group 'quit-config t))
(defun gnus-group-quit-config (group)
"Return the quit-config of GROUP."
- (gnus-group-get-parameter group 'quit-config))
+ (gnus-group-get-parameter group 'quit-config t))
(defun gnus-kill-ephemeral-group (group)
"Remove ephemeral GROUP from relevant structures."
"Say whether the group is secondary or not."
(gnus-secondary-method-p (gnus-find-method-for-group group)))
-(defun gnus-group-find-parameter (group &optional symbol)
+(defun gnus-group-find-parameter (group &optional symbol allow-list)
"Return the group parameters for GROUP.
If SYMBOL, return the value of that symbol in the group parameters."
(save-excursion
(set-buffer gnus-group-buffer)
(let ((parameters (funcall gnus-group-get-parameter-function group)))
(if symbol
- (gnus-group-parameter-value parameters symbol)
+ (gnus-group-parameter-value parameters symbol allow-list)
parameters))))
-(defun gnus-group-get-parameter (group &optional symbol)
+(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.
Most functions should use `gnus-group-find-parameter', which
also examines the topic parameters."
(let ((params (gnus-info-params (gnus-get-info group))))
(if symbol
- (gnus-group-parameter-value params symbol)
+ (gnus-group-parameter-value params symbol allow-list)
params)))
-(defun gnus-group-parameter-value (params symbol)
+(defun gnus-group-parameter-value (params symbol &optional allow-list)
"Return the value of SYMBOL in group PARAMS."
- (or (car (memq symbol params)) ; It's either a simple symbol
- (cdr (assq symbol params)))) ; or a cons.
+ ;; 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 (car (memq symbol params))
+ ;; Handle alist.
+ (let (elem)
+ (catch 'found
+ (while (setq elem (pop params))
+ (when (and (consp elem)
+ (eq (car elem) symbol)
+ (or allow-list
+ (atom (cdr elem))))
+ (throw 'found (cdr elem))))))))
(defun gnus-group-add-parameter (group param)
"Add parameter PARAM to GROUP."
(when params
(setq params (delq name params))
(while (assq name params)
- (setq params (delq (assq name params) params)))
+ (gnus-pull name params))
(gnus-info-set-params info params))))))
(defun gnus-group-add-score (group &optional score)
"Collapse GROUP name LEVELS.
Select methods are stripped and any remote host name is stripped down to
just the host name."
- (let* ((name "") (foreign "") (depth -1) (skip 1)
+ (let* ((name "")
+ (foreign "")
+ (depth 0)
+ (skip 1)
(levels (or levels
(progn
(while (string-match "\\." group skip)
(kill-buffer (current-buffer))))))
(defcustom gnus-kill-file-name "KILL"
- "*Suffix of the kill files."
+ "Suffix of the kill files."
:group 'gnus-score-kill
:group 'gnus-score-files
:type 'string)
;;;###autoload
(defun gnus-slave-no-server (&optional arg)
- "Read network news as a slave, without connecting to local server"
+ "Read network news as a slave, without connecting to local server."
(interactive "P")
(gnus-no-server arg t))