* Mail Group Commands:: Some commands can only be used in mail groups.
* Various Summary Stuff:: What didn't fit anywhere else.
* Exiting the Summary Buffer:: Returning to the Group buffer,
- or reselecting the current group.
+ or reselecting the current group.
* Crosspost Handling:: How crossposted articles are dealt with.
* Duplicate Suppression:: An alternative when crosspost handling fails.
* Security:: Decrypt and Verify.
* X-Face:: Display a funky, teensy black-and-white image.
* Face:: Display a funkier, teensier colored image.
* Smileys:: Show all those happy faces the way they were
- meant to be shown.
+ meant to be shown.
* Picons:: How to display pictures of what you're reading.
* XVarious:: Other XEmacsy Gnusey variables.
(cond (window-system
(setq custom-background-mode 'light)
(defface my-group-face-1
- '((t (:foreground "Red" :bold t))) "First group face")
+ '((t (:foreground "Red" :bold t))) "First group face")
(defface my-group-face-2
- '((t (:foreground "DarkSeaGreen4" :bold t)))
- "Second group face")
+ '((t (:foreground "DarkSeaGreen4" :bold t)))
+ "Second group face")
(defface my-group-face-3
- '((t (:foreground "Green4" :bold t))) "Third group face")
+ '((t (:foreground "Green4" :bold t))) "Third group face")
(defface my-group-face-4
- '((t (:foreground "SteelBlue" :bold t))) "Fourth group face")
+ '((t (:foreground "SteelBlue" :bold t))) "Fourth group face")
(defface my-group-face-5
- '((t (:foreground "Blue" :bold t))) "Fifth group face")))
+ '((t (:foreground "Blue" :bold t))) "Fifth group face")))
(setq gnus-group-highlight
'(((> unread 200) . my-group-face-1)
- ((and (< level 3) (zerop unread)) . my-group-face-2)
- ((< level 3) . my-group-face-3)
- ((zerop unread) . my-group-face-4)
- (t . my-group-face-5)))
+ ((and (< level 3) (zerop unread)) . my-group-face-2)
+ ((< level 3) . my-group-face-3)
+ ((zerop unread) . my-group-face-4)
+ (t . my-group-face-5)))
@end lisp
Also @pxref{Faces and Fonts}.
(signature "Funky Signature"))
@end example
+If you're using topics to organize your group buffer
+(@pxref{Group Topics}), note that posting styles can also be set in
+the topics parameters. Posting styles in topic parameters apply to all
+groups in this topic. More precisely, the posting-style settings for a
+group result from the hierarchical merging of all posting-style
+entries in the parameters of this group and all the topics it belongs
+to.
+
+
@item post-method
@cindex post-method
If it is set, the value is used as the method for posting message
@example
if address "sender" "sieve-admin@@extundo.com" @{
- fileinto "INBOX.list.sieve";
+ fileinto "INBOX.list.sieve";
@}
@end example
@example
if address "sender" ["name@@one.org", "else@@two.org"] @{
- fileinto "INBOX.list.sieve";
+ fileinto "INBOX.list.sieve";
@}
@end example
@lisp
(setq gnus-parameters
'(("mail\\..*"
- (gnus-show-threads nil)
- (gnus-use-scoring nil)
- (gnus-summary-line-format
- "%U%R%z%I%(%[%d:%ub%-23,23f%]%) %s\n")
- (gcc-self . t)
- (display . all))
+ (gnus-show-threads nil)
+ (gnus-use-scoring nil)
+ (gnus-summary-line-format
+ "%U%R%z%I%(%[%d:%ub%-23,23f%]%) %s\n")
+ (gcc-self . t)
+ (display . all))
- ("^nnimap:\\(foo.bar\\)$"
- (to-group . "\\1"))
+ ("^nnimap:\\(foo.bar\\)$"
+ (to-group . "\\1"))
- ("mail\\.me"
- (gnus-use-scoring t))
+ ("mail\\.me"
+ (gnus-use-scoring t))
- ("list\\..*"
- (total-expire . t)
- (broken-reply-to . t))))
+ ("list\\..*"
+ (total-expire . t)
+ (broken-reply-to . t))))
@end lisp
String value of parameters will be subjected to regexp substitution, as
@example
* 0: mail.ding 19961002T012943
- 0: custom 19961002T012713
+ 0: custom 19961002T012713
@end example
As you can see, the date is displayed in compact ISO 8601 format. This
(defun gnus-user-format-function-d (headers)
(let ((time (gnus-group-timestamp gnus-tmp-group)))
(if time
- (format-time-string "%b %d %H:%M" time)
+ (format-time-string "%b %d %H:%M" time)
"")))
@end lisp
@example
if address "sender" "owner-ding@@hpc.uh.edu" @{
- fileinto "INBOX.ding";
- stop;
+ fileinto "INBOX.ding";
+ stop;
@}
@end example
* Mail Group Commands:: Some commands can only be used in mail groups.
* Various Summary Stuff:: What didn't fit anywhere else.
* Exiting the Summary Buffer:: Returning to the Group buffer,
- or reselecting the current group.
+ or reselecting the current group.
* Crosspost Handling:: How crossposted articles are dealt with.
* Duplicate Suppression:: An alternative when crosspost handling fails.
* Security:: Decrypt and Verify.
@lisp
(setq gnus-summary-show-article-charset-alist
'((1 . cn-gb-2312)
- (2 . big5)))
+ (2 . big5)))
@end lisp
then you can say @kbd{C-u 1 g} to get the same effect.
(concat
"\\`\\[?\\("
(mapconcat
- 'identity
- '("looking"
- "wanted" "followup" "summary\\( of\\)?"
- "help" "query" "problem" "question"
- "answer" "reference" "announce"
- "How can I" "How to" "Comparison of"
- ;; ...
- )
- "\\|")
+ 'identity
+ '("looking"
+ "wanted" "followup" "summary\\( of\\)?"
+ "help" "query" "problem" "question"
+ "answer" "reference" "announce"
+ "How can I" "How to" "Comparison of"
+ ;; ...
+ )
+ "\\|")
"\\)\\s *\\("
(mapconcat 'identity
- '("for" "for reference" "with" "about")
- "\\|")
+ '("for" "for reference" "with" "about")
+ "\\|")
"\\)?\\]?:?[ \t]*"))
@end lisp
@lisp
(setq gnus-thread-hide-subtree
'(or gnus-article-unread-p
- gnus-article-unseen-p))
+ gnus-article-unseen-p))
@end lisp
(It's a pretty nonsensical example, since all unseen articles are also
(defun my-alter-message-id (header)
(let ((id (mail-header-id header)))
(when (string-match
- "\\(<[^<>@@]*\\)\\.?cygnus\\..*@@\\([^<>@@]*>\\)" id)
+ "\\(<[^<>@@]*\\)\\.?cygnus\\..*@@\\([^<>@@]*>\\)" id)
(mail-header-set-id
(concat (match-string 1 id) "@@" (match-string 2 id))
header))))
@lisp
(setq gnus-thread-sort-functions
'(gnus-thread-sort-by-number
- gnus-thread-sort-by-subject
- (not gnus-thread-sort-by-total-score)))
+ gnus-thread-sort-by-subject
+ (not gnus-thread-sort-by-total-score)))
@end lisp
The threads that have highest score will be displayed first in the
@lisp
(setq gnus-thread-sort-functions
'((not gnus-thread-sort-by-number)
- gnus-thread-sort-by-score))
+ gnus-thread-sort-by-score))
@end lisp
@vindex gnus-thread-score-function
@lisp
(setq gnus-article-sort-functions
'(gnus-article-sort-by-number
- gnus-article-sort-by-subject))
+ gnus-article-sort-by-subject))
@end lisp
You can define group specific sorting via @code{gnus-parameters},
"Return non-nil for short, unread articles."
(and (gnus-data-unread-p data)
(< (mail-header-lines (gnus-data-header data))
- 100)))
+ 100)))
(setq gnus-async-prefetch-article-p 'my-async-short-unread-p)
@end lisp
(setq gnus-split-methods
'((gnus-article-archive-name)
- (my-save-name)))
+ (my-save-name)))
@end lisp
@lisp
(list '(regexp1 command2)
- '(regexp2 command2)
- ...)
+ '(regexp2 command2)
+ ...)
@end lisp
@table @code
@lisp
(setq gnus-emphasis-alist
'(("_\\(\\w+\\)_" 0 1 gnus-emphasis-underline)
- ("\\*\\(\\w+\\)\\*" 0 1 gnus-emphasis-bold)))
+ ("\\*\\(\\w+\\)\\*" 0 1 gnus-emphasis-bold)))
@end lisp
@cindex slash
;; @r{increase @code{gnus-button-*-level} in some groups:}
(setq gnus-parameters
'(("\\<\\(emacs\\|gnus\\)\\>" (gnus-button-emacs-level 10))
- ("\\<unix\\>" (gnus-button-man-level 10))
- ("\\<tex\\>" (gnus-button-tex-level 10))))
+ ("\\<unix\\>" (gnus-button-man-level 10))
+ ("\\<tex\\>" (gnus-button-tex-level 10))))
@end lisp
@table @code
@lisp
(setq gnus-signature-separator
'("^-- $" ; @r{The standard}
- "^-- *$" ; @r{A common mangling}
- "^-------*$" ; @r{Many people just use a looong}
- ; @r{line of dashes. Shame!}
- "^ *--------*$" ; @r{Double-shame!}
- "^________*$" ; @r{Underscores are also popular}
- "^========*$")) ; @r{Pervert!}
+ "^-- *$" ; @r{A common mangling}
+ "^-------*$" ; @r{Many people just use a looong}
+ ; @r{line of dashes. Shame!}
+ "^ *--------*$" ; @r{Double-shame!}
+ "^________*$" ; @r{Underscores are also popular}
+ "^========*$")) ; @r{Pervert!}
@end lisp
The more permissive you are, the more likely it is that you'll get false
(with-temp-buffer
(insert (mm-get-part handle))
(write-region (point-min) (point-max)
- (read-file-name "Save jpeg to: ")))))
+ (read-file-name "Save jpeg to: ")))))
(setq gnus-article-mime-part-function
'my-save-all-jpeg-parts)
@end lisp
@lisp
(setq mm-file-name-rewrite-functions
'(mm-file-name-trim-whitespace
- mm-file-name-collapse-whitespace
- mm-file-name-replace-whitespace))
+ mm-file-name-collapse-whitespace
+ mm-file-name-replace-whitespace))
@end lisp
@noindent
@lisp
(put-charset-property 'cyrillic-iso8859-5
- 'preferred-coding-system 'koi8-r)
+ 'preferred-coding-system 'koi8-r)
@end lisp
This means that Russian will be encoded using @code{koi8-r} instead of
@lisp
(setq gnus-refer-article-method
'(current
- (nnweb "google" (nnweb-type google))))
+ (nnweb "google" (nnweb-type google))))
@end lisp
Most of the mail back ends support fetching by @code{Message-ID}, but
@lisp
(add-hook 'gnus-configure-windows-hook
- 'gnus-tree-perhaps-minimize)
+ 'gnus-tree-perhaps-minimize)
@end lisp
@item gnus-generate-tree-function
[odd] [Jan] [odd] (***) [Jor]
| | |--\
[Gun] [Eri] [Eri] [odd]
- |
- [Paa]
+ |
+ [Paa]
@end group
@end example
(gnus-add-configuration
'(article
(vertical 1.0
- (horizontal 0.25
- (summary 0.75 point)
- (tree 1.0))
- (article 1.0))))
+ (horizontal 0.25
+ (summary 0.75 point)
+ (tree 1.0))
+ (article 1.0))))
@end lisp
@xref{Window Layout}.
@lisp
(setq gnus-move-split-methods
'(("^From:.*Lars Magne" "nnml:junk")
- ("^Subject:.*gnus" "nnfolder:important")
- (".*" "nnml:misc")))
+ ("^Subject:.*gnus" "nnfolder:important")
+ (".*" "nnml:misc")))
@end lisp
@lisp
(setq gnus-newsgroup-variables
'(message-use-followup-to
- (gnus-visible-headers .
+ (gnus-visible-headers .
"^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^To:")))
@end lisp
@lisp
(setq mail-source-primary-source
'(pop :server "pop3.mail.server"
- :password "secret"))
+ :password "secret"))
@end lisp
@noindent
@lisp
(add-hook 'message-send-mail-hook
- (lambda ()
- (let ((mail-source-primary-source
- '(pop :server "pop3.mail.server"
- :password "secret")))
- (mail-source-touch-pop))))
+ (lambda ()
+ (let ((mail-source-primary-source
+ '(pop :server "pop3.mail.server"
+ :password "secret")))
+ (mail-source-touch-pop))))
@end lisp
@node Mail and Post
@lisp
(add-hook 'gnus-select-group-hook
- (lambda ()
- (cond
- ((string-match
- "^de\\." (gnus-group-real-name gnus-newsgroup-name))
- (ispell-change-dictionary "deutsch"))
- (t
- (ispell-change-dictionary "english")))))
+ (lambda ()
+ (cond
+ ((string-match
+ "^de\\." (gnus-group-real-name gnus-newsgroup-name))
+ (ispell-change-dictionary "deutsch"))
+ (t
+ (ispell-change-dictionary "english")))))
@end lisp
Modify to suit your needs.
@lisp
(nnfolder "archive"
- (nnfolder-directory "~/Mail/archive")
- (nnfolder-active-file "~/Mail/archive/active")
- (nnfolder-get-new-mail nil)
- (nnfolder-inhibit-expiry t))
+ (nnfolder-directory "~/Mail/archive")
+ (nnfolder-active-file "~/Mail/archive/active")
+ (nnfolder-get-new-mail nil)
+ (nnfolder-inhibit-expiry t))
@end lisp
You can, however, use any mail select method (@code{nnml},
@lisp
(setq gnus-message-archive-method
'(nnfolder "archive"
- (nnfolder-inhibit-expiry t)
- (nnfolder-active-file "~/News/sent-mail/active")
- (nnfolder-directory "~/News/sent-mail/")))
+ (nnfolder-inhibit-expiry t)
+ (nnfolder-active-file "~/News/sent-mail/active")
+ (nnfolder-directory "~/News/sent-mail/")))
@end lisp
@vindex gnus-message-archive-group
@lisp
(setq gnus-message-archive-group
'(("^alt" "sent-to-alt")
- ("mail" "sent-to-mail")
- (".*" "sent-to-misc")))
+ ("mail" "sent-to-mail")
+ (".*" "sent-to-misc")))
@end lisp
More complex stuff:
@lisp
(setq gnus-message-archive-group
'((if (message-news-p)
- "misc-news"
- "misc-mail")))
+ "misc-news"
+ "misc-mail")))
@end lisp
How about storing all news messages in one file, but storing all mail
@lisp
(setq gnus-message-archive-group
'((if (message-news-p)
- "misc-news"
- (concat "mail." (format-time-string "%Y-%m")))))
+ "misc-news"
+ (concat "mail." (format-time-string "%Y-%m")))))
@end lisp
@c (XEmacs 19.13 doesn't have @code{format-time-string}, so you'll have to
@lisp
(setq gnus-posting-styles
'((".*"
- (signature-file "~/.signature")
- (name "User Name")
- (x-face-file "~/.xface")
- (x-url (getenv "WWW_HOME"))
- (organization "People's Front Against MWM"))
- ("^rec.humor"
- (signature my-funny-signature-randomizer))
- ((equal (system-name) "gnarly") ;; @r{A form}
- (signature my-quote-randomizer))
- (message-news-p ;; @r{A function symbol}
- (signature my-news-signature))
- (window-system ;; @r{A value symbol}
- ("X-Window-System" (format "%s" window-system)))
- ;; @r{If I'm replying to Larsi, set the Organization header.}
- ((header "from" "larsi.*org")
- (Organization "Somewhere, Inc."))
- ((posting-from-work-p) ;; @r{A user defined function}
- (signature-file "~/.work-signature")
- (address "user@@bar.foo")
- (body "You are fired.\n\nSincerely, your boss.")
- (organization "Important Work, Inc"))
- ("nnml:.*"
- (From (save-excursion
- (set-buffer gnus-article-buffer)
- (message-fetch-field "to"))))
- ("^nn.+:"
- (signature-file "~/.mail-signature"))))
+ (signature-file "~/.signature")
+ (name "User Name")
+ (x-face-file "~/.xface")
+ (x-url (getenv "WWW_HOME"))
+ (organization "People's Front Against MWM"))
+ ("^rec.humor"
+ (signature my-funny-signature-randomizer))
+ ((equal (system-name) "gnarly") ;; @r{A form}
+ (signature my-quote-randomizer))
+ (message-news-p ;; @r{A function symbol}
+ (signature my-news-signature))
+ (window-system ;; @r{A value symbol}
+ ("X-Window-System" (format "%s" window-system)))
+ ;; @r{If I'm replying to Larsi, set the Organization header.}
+ ((header "from" "larsi.*org")
+ (Organization "Somewhere, Inc."))
+ ((posting-from-work-p) ;; @r{A user defined function}
+ (signature-file "~/.work-signature")
+ (address "user@@bar.foo")
+ (body "You are fired.\n\nSincerely, your boss.")
+ (organization "Important Work, Inc"))
+ ("nnml:.*"
+ (From (save-excursion
+ (set-buffer gnus-article-buffer)
+ (message-fetch-field "to"))))
+ ("^nn.+:"
+ (signature-file "~/.mail-signature"))))
@end lisp
The @samp{nnml:.*} rule means that you use the @code{To} address as the
(setq gnus-select-method
'(nntp "indirect"
(nntp-address "news.server.example")
- (nntp-via-user-name "intermediate_user_name")
- (nntp-via-address "intermediate.host.example")
- (nntp-via-rlogin-command "ssh")
- (nntp-end-of-line "\n")
- (nntp-via-rlogin-command-switches ("-C" "-t" "-e" "none"))
- (nntp-open-connection-function nntp-open-via-rlogin-and-telnet)))
+ (nntp-via-user-name "intermediate_user_name")
+ (nntp-via-address "intermediate.host.example")
+ (nntp-via-rlogin-command "ssh")
+ (nntp-end-of-line "\n")
+ (nntp-via-rlogin-command-switches ("-C" "-t" "-e" "none"))
+ (nntp-open-connection-function nntp-open-via-rlogin-and-telnet)))
@end lisp
If you're behind a firewall, but have direct access to the outside world
@lisp
(nnml "cache"
- (nnml-directory "~/News/cache/")
- (nnml-active-file "~/News/cache/active"))
+ (nnml-directory "~/News/cache/")
+ (nnml-active-file "~/News/cache/active"))
@end lisp
Type @kbd{C-c C-c} to return to the server buffer. If you now press
@lisp
'(("nntpd 1\\.5\\.11t"
(remove-hook 'nntp-server-opened-hook
- 'nntp-send-mode-reader)))
+ 'nntp-send-mode-reader)))
@end lisp
This ensures that Gnus doesn't send the @code{MODE READER} command to
@lisp
(setq nnmail-split-methods
'(("junk" "^From:.*Lars Ingebrigtsen")
- ("crazy" "^Subject:.*die\\|^Organization:.*flabby")
- ("other" "")))
+ ("crazy" "^Subject:.*die\\|^Organization:.*flabby")
+ ("other" "")))
@end lisp
This will result in three new @code{nnml} mail groups being created:
@lisp
(directory :path "/home/user-name/procmail-dir/"
- :suffix ".prcml")
+ :suffix ".prcml")
@end lisp
@item pop
@lisp
(maildir :path "/home/user-name/Maildir/"
- :subdirs ("cur" "new"))
+ :subdirs ("cur" "new"))
@end lisp
@lisp
(maildir :path "/user@@remotehost.org:~/Maildir/"
- :subdirs ("new"))
+ :subdirs ("new"))
@end lisp
@item imap
@lisp
(webmail :subtype 'hotmail
- :user "user-name"
- :password "secret")
+ :user "user-name"
+ :password "secret")
@end lisp
@end table
@lisp
(setq mail-sources
'((directory :path "/home/pavel/.Spool/"
- :suffix ""
- :plugged t)))
+ :suffix ""
+ :plugged t)))
@end lisp
Gnus will then fetch your mail even when you are unplugged. This is
@lisp
(setq mail-sources '((pop :user "jrl"
- :server "pophost" :function fetchfunc)))
+ :server "pophost" :function fetchfunc)))
@end lisp
While the function @code{fetchfunc} is executing, the symbol @code{user}
@lisp
(setq mail-sources
'((file)
- (pop :server "pop3.mail.server"
- :password "secret")))
+ (pop :server "pop3.mail.server"
+ :password "secret")))
@end lisp
Or, if you don't want to use any of the keyword defaults:
@lisp
(setq mail-sources
'((file :path "/var/spool/mail/user-name")
- (pop :server "pop3.mail.server"
- :user "user-name"
- :port "pop3"
- :password "secret")))
+ (pop :server "pop3.mail.server"
+ :user "user-name"
+ :port "pop3"
+ :password "secret")))
@end lisp
@lisp
(add-hook 'nnmail-pre-get-new-mail-hook
- (lambda () (set-default-file-modes 511)))
+ (lambda () (set-default-file-modes 511)))
(add-hook 'nnmail-post-get-new-mail-hook
- (lambda () (set-default-file-modes 551)))
+ (lambda () (set-default-file-modes 551)))
@end lisp
@item nnmail-use-long-file-names
;; @r{the ordinary groups. Warnings are put in a separate group}
;; @r{from real errors.}
(| ("from" mail (| ("subject" "warn.*" "mail.warning")
- "mail.misc"))
+ "mail.misc"))
;; @r{Non-error messages are crossposted to all relevant}
;; @r{groups, but we don't crosspost between the group for the}
;; @r{(ding) list and the group for other (ding) related mail.}
(& (| (any "ding@@ifi\\.uio\\.no" "ding.list")
- ("subject" "ding" "ding.misc"))
+ ("subject" "ding" "ding.misc"))
;; @r{Other mailing lists@dots{}}
(any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list")
(any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list")
(widen)
(goto-char (point-min))
(when (re-search-forward "Some.*string" nil t)
- "string.group"))))
+ "string.group"))))
@end lisp
The buffer is narrowed to the message in question when @var{function}
nnmail-cache-accepted-message-ids t
nnmail-split-fancy
'(| (: nnmail-split-fancy-with-parent)
- ;; @r{other splits go here}
- ))
+ ;; @r{other splits go here}
+ ))
@end lisp
This feature works as follows: when @code{nnmail-treat-duplicates} is
@lisp
(| (& (any "\\(bar@@femail\\.com\\|.*@@femail\\.com\\)" "mail.bar")
(any "\\(foo@@nowhere\\.gov\\|foo@@localhost\\|foo-redist@@home\\)"
- - "bugs-foo" - "rambling-foo" "mail.foo"))
+ - "bugs-foo" - "rambling-foo" "mail.foo"))
"mail.others")
@end lisp
@vindex gnus-mark-article-hook
@lisp
(remove-hook 'gnus-mark-article-hook
- 'gnus-summary-mark-read-and-unread-as-read)
+ 'gnus-summary-mark-read-and-unread-as-read)
(add-hook 'gnus-mark-article-hook 'gnus-summary-mark-unread-as-read)
@end lisp
(setq nnmail-expiry-wait-function
(lambda (group)
(cond ((string= group "mail.private")
- 31)
- ((string= group "mail.junk")
- 1)
- ((string= group "important")
- 'never)
- (t
- 6))))
+ 31)
+ ((string= group "mail.junk")
+ 1)
+ ((string= group "important")
+ 'never)
+ (t
+ 6))))
@end lisp
The group names this function is fed are ``unadorned'' group
(setq nnmail-expiry-target 'nnmail-fancy-expiry-target
nnmail-fancy-expiry-targets
'((to-from "boss" "nnfolder:Work")
- ("subject" "IMPORTANT" "nnfolder:IMPORTANT.%Y.%b")
- ("from" ".*" "nnfolder:Archive-%Y")))
+ ("subject" "IMPORTANT" "nnfolder:IMPORTANT.%Y.%b")
+ ("from" ".*" "nnfolder:Archive-%Y")))
@end lisp
With this setup, any mail that has @code{IMPORTANT} in its Subject
@lisp
(setq nnmail-split-fancy
'(| ;; @r{Messages duplicates go to a separate group.}
- ("gnus-warning" "duplicat\\(e\\|ion\\) of message" "duplicate")
- ;; @r{Message from daemons, postmaster, and the like to another.}
- (any mail "mail.misc")
- ;; @r{Other rules.}
- [...] ))
+ ("gnus-warning" "duplicat\\(e\\|ion\\) of message" "duplicate")
+ ;; @r{Message from daemons, postmaster, and the like to another.}
+ (any mail "mail.misc")
+ ;; @r{Other rules.}
+ [...] ))
@end lisp
@noindent
Or something like:
@lisp
(setq nnmail-split-methods
'(("duplicates" "^Gnus-Warning:.*duplicate")
- ;; @r{Other rules.}
- [...]))
+ ;; @r{Other rules.}
+ [...]))
@end lisp
Here's a neat feature: If you know that the recipient reads her mail
(defun gnus-user-format-function-X (header)
(let ((descr
- (assq nnrss-description-field (mail-header-extra header))))
+ (assq nnrss-description-field (mail-header-extra header))))
(if descr (concat "\n\t" (cdr descr)) "")))
@end lisp
(defun browse-nnrss-url( arg )
(interactive "p")
(let ((url (assq nnrss-url-field
- (mail-header-extra
- (gnus-data-header
- (assq (gnus-summary-article-number)
- gnus-newsgroup-data))))))
+ (mail-header-extra
+ (gnus-data-header
+ (assq (gnus-summary-article-number)
+ gnus-newsgroup-data))))))
(if url
- (progn
- (browse-url (cdr url))
- (gnus-summary-mark-as-read-forward 1))
+ (progn
+ (browse-url (cdr url))
+ (gnus-summary-mark-as-read-forward 1))
(gnus-summary-scroll-up arg))))
(eval-after-load "gnus"
(defun w3-fetch (&optional url target)
(interactive (list (w3-read-url-with-default)))
(if (eq major-mode 'gnus-article-mode)
- (browse-url url)
- (w3-fetch-orig url target)))))
+ (browse-url url)
+ (w3-fetch-orig url target)))))
@end lisp
Put that in your @file{.emacs} file, and hitting links in W3-rendered
@lisp
(setq gnus-secondary-select-methods
'((nnimap "simpleserver") ; @r{no special configuration}
- ; @r{perhaps a ssh port forwarded server:}
- (nnimap "dolk"
- (nnimap-address "localhost")
- (nnimap-server-port 1430))
- ; @r{a UW server running on localhost}
- (nnimap "barbar"
- (nnimap-server-port 143)
- (nnimap-address "localhost")
- (nnimap-list-pattern ("INBOX" "mail/*")))
- ; @r{anonymous public cyrus server:}
- (nnimap "cyrus.andrew.cmu.edu"
- (nnimap-authenticator anonymous)
- (nnimap-list-pattern "archive.*")
- (nnimap-stream network))
- ; @r{a ssl server on a non-standard port:}
- (nnimap "vic20"
- (nnimap-address "vic20.somewhere.com")
- (nnimap-server-port 9930)
- (nnimap-stream ssl))))
+ ; @r{perhaps a ssh port forwarded server:}
+ (nnimap "dolk"
+ (nnimap-address "localhost")
+ (nnimap-server-port 1430))
+ ; @r{a UW server running on localhost}
+ (nnimap "barbar"
+ (nnimap-server-port 143)
+ (nnimap-address "localhost")
+ (nnimap-list-pattern ("INBOX" "mail/*")))
+ ; @r{anonymous public cyrus server:}
+ (nnimap "cyrus.andrew.cmu.edu"
+ (nnimap-authenticator anonymous)
+ (nnimap-list-pattern "archive.*")
+ (nnimap-stream network))
+ ; @r{a ssl server on a non-standard port:}
+ (nnimap "vic20"
+ (nnimap-address "vic20.somewhere.com")
+ (nnimap-server-port 9930)
+ (nnimap-stream ssl))))
@end lisp
After defining the new server, you can subscribe to groups on the
@lisp
(nnimap "mail.server.com"
- (nnimap-server-port 4711))
+ (nnimap-server-port 4711))
@end lisp
@item nnimap-list-pattern
@lisp
(nnimap "mail.server.com"
- (nnimap-list-pattern ("INBOX" "Mail/*" "alt.sex.*"
- ("~friend/Mail/" . "list/*"))))
+ (nnimap-list-pattern ("INBOX" "Mail/*" "alt.sex.*"
+ ("~friend/Mail/" . "list/*"))))
@end lisp
@item nnimap-stream
@lisp
(nnimap "mail.server.com"
- (nnimap-stream ssl))
+ (nnimap-stream ssl))
@end lisp
Please note that the value of @code{nnimap-stream} is a symbol!
@lisp
(nnimap "mail.server.com"
- (nnimap-authenticator anonymous))
+ (nnimap-authenticator anonymous))
@end lisp
Please note that the value of @code{nnimap-authenticator} is a symbol!
@lisp
(setcdr (assq 'dormant nnimap-mark-to-flag-alist)
- (format "gnus-dormant-%s" (user-login-name)))
+ (format "gnus-dormant-%s" (user-login-name)))
(setcdr (assq 'dormant nnimap-mark-to-predicate-alist)
- (format "KEYWORD gnus-dormant-%s" (user-login-name)))
+ (format "KEYWORD gnus-dormant-%s" (user-login-name)))
@end lisp
In this case, you would not want the per-user dormant flag showing up
messages instead of the internal article date. See section 6.4.4 of
RFC 2060 for more information on valid strings.
-However, if @code{nnimap-search-uids-not-since-is-evil}
+However, if @code{nnimap-search-uids-not-since-is-evil}
is true, this variable has no effect since the search logic
is reversed, as described below.
@lisp
(setq nnimap-split-rule
'(("INBOX.nnimap"
- "^Sender: owner-nnimap@@vic20.globalcom.se")
- ("INBOX.junk" "^Subject:.*MAKE MONEY")
- ("INBOX.private" "")))
+ "^Sender: owner-nnimap@@vic20.globalcom.se")
+ ("INBOX.junk" "^Subject:.*MAKE MONEY")
+ ("INBOX.private" "")))
@end lisp
This will put all articles from the nnimap mailing list into mailbox
@lisp
(setq nnimap-split-rule
'(("my1server" (".*" (("ding" "ding@@gnus.org")
- ("junk" "From:.*Simon"))))
- ("my2server" ("INBOX" nnimap-split-fancy))
- ("my[34]server" (".*" (("private" "To:.*Simon")
- ("junk" my-junk-func))))))
+ ("junk" "From:.*Simon"))))
+ ("my2server" ("INBOX" nnimap-split-fancy))
+ ("my[34]server" (".*" (("private" "To:.*Simon")
+ ("junk" my-junk-func))))))
@end lisp
The virtual server name is in fact a regexp, so that the same rules
@lisp
(setq gnus-post-method
'(nngateway
- "mail2news@@replay.com"
- (nngateway-header-transformation
- nngateway-mail2news-header-transformation)))
+ "mail2news@@replay.com"
+ (nngateway-header-transformation
+ nngateway-mail2news-header-transformation)))
@end lisp
So, to use this, simply say something like:
(require 'gnus-agent)
(setq gnus-category-predicate-alist
(append gnus-category-predicate-alist
- '((old . my-article-old-p))))
+ '((old . my-article-old-p))))
@end lisp
and simply specify your predicate as:
@lisp
(agent-score ("from"
- ("Lars Ingebrigtsen" 1000000 nil s))
- ("lines"
- (500 -100 nil <)))
+ ("Lars Ingebrigtsen" 1000000 nil s))
+ ("lines"
+ (500 -100 nil <)))
@end lisp
Again, note the omission of the outermost parenthesis here.
(files "/hom/larsi/News/gnu.SCORE")
(exclude-files "all.SCORE")
(local (gnus-newsgroup-auto-expire t)
- (gnus-summary-make-false-root empty))
+ (gnus-summary-make-false-root empty))
(eval (ding)))
@end lisp
You can do this with the following two score file entries:
@example
- (orphan -500)
- (mark-and-expunge -100)
+ (orphan -500)
+ (mark-and-expunge -100)
@end example
When you enter the group the first time, you will only see the new
@lisp
(setq gnus-default-adaptive-word-score-alist
`((,gnus-read-mark . 30)
- (,gnus-catchup-mark . -10)
- (,gnus-killed-mark . -20)
- (,gnus-del-mark . -15)))
+ (,gnus-catchup-mark . -10)
+ (,gnus-killed-mark . -20)
+ (,gnus-del-mark . -15)))
@end lisp
This is the default value. If you have adaption on words enabled, every
(setq gnus-home-score-file
;; @r{All groups that match the regexp @code{"\\.emacs"}}
'(("\\.emacs" "emacs.SCORE")
- ;; @r{All the comp groups in one score file}
- ("^comp" "comp.SCORE")))
+ ;; @r{All the comp groups in one score file}
+ ("^comp" "comp.SCORE")))
@end lisp
@vindex gnus-home-adapt-file
@lisp
(setq gnus-global-score-files
'("/ftp@@ftp.gnus.org:/pub/larsi/ding/score/soc.motss.SCORE"
- "/ftp@@ftp.some-where:/pub/score/"))
+ "/ftp@@ftp.some-where:/pub/score/"))
@end lisp
@findex gnus-score-search-global-directories
"Decay SCORE according to `gnus-score-decay-constant'
and `gnus-score-decay-scale'."
(let ((n (- score
- (* (if (< score 0) -1 1)
- (min (abs score)
- (max gnus-score-decay-constant
- (* (abs score)
- gnus-score-decay-scale)))))))
+ (* (if (< score 0) -1 1)
+ (min (abs score)
+ (max gnus-score-decay-constant
+ (* (abs score)
+ gnus-score-decay-scale)))))))
(if (and (featurep 'xemacs)
- ;; XEmacs' floor can handle only the floating point
- ;; number below the half of the maximum integer.
- (> (abs n) (lsh -1 -2)))
- (string-to-number
- (car (split-string (number-to-string n) "\\.")))
+ ;; XEmacs' floor can handle only the floating point
+ ;; number below the half of the maximum integer.
+ (> (abs n) (lsh -1 -2)))
+ (string-to-number
+ (car (split-string (number-to-string n) "\\.")))
(floor n))))
@end lisp
@lisp
((group (vertical 1.0 (group 1.0 point)
- (if gnus-carpal (group-carpal 4))))
+ (if gnus-carpal (group-carpal 4))))
(article (vertical 1.0 (summary 0.25 point)
- (article 1.0))))
+ (article 1.0))))
@end lisp
This is an alist. The @dfn{key} is a symbol that names some action or
@lisp
(article (vertical 1.0 (summary 0.25 point)
- (article 1.0)))
+ (article 1.0)))
@end lisp
This @dfn{split} says that the summary buffer should occupy 25% of upper
@lisp
(article (vertical 1.0 (group 4)
- (summary 0.25 point)
- (if gnus-carpal (summary-carpal 4))
- (article 1.0)))
+ (summary 0.25 point)
+ (if gnus-carpal (summary-carpal 4))
+ (article 1.0)))
@end lisp
If the size spec is an integer instead of a floating point number,
@lisp
(article (horizontal 1.0
- (vertical 0.5
- (group 1.0)
- (gnus-carpal 4))
- (vertical 1.0
- (summary 0.25 point)
- (summary-carpal 4)
- (article 1.0))))
+ (vertical 0.5
+ (group 1.0)
+ (gnus-carpal 4))
+ (vertical 1.0
+ (summary 0.25 point)
+ (summary-carpal 4)
+ (article 1.0))))
@end lisp
Whoops. Two buffers with the mystery 100% tag. And what's that
(vertical 1.0
(article 1.0)
(horizontal 4
- (group 1.0)
- (article 10)))))
+ (group 1.0)
+ (article 10)))))
@end lisp
You might want to have several frames as well. No prob---just use the
@lisp
(gnus-configure-frame
'(frame 1.0
- (vertical 1.0
- (summary 0.25 point frame-focus)
- (article 1.0))
- (vertical ((height . 5) (width . 15)
- (user-position . t)
- (left . -1) (top . 1))
- (picon 1.0))))
+ (vertical 1.0
+ (summary 0.25 point frame-focus)
+ (article 1.0))
+ (vertical ((height . 5) (width . 15)
+ (user-position . t)
+ (left . -1) (top . 1))
+ (picon 1.0))))
@end lisp
@lisp
(message (horizontal 1.0
- (vertical 1.0 (message 1.0 point))
- (vertical 0.24
- (if (buffer-live-p gnus-summary-buffer)
- '(summary 0.5))
- (group 1.0))))
+ (vertical 1.0 (message 1.0 point))
+ (vertical 0.24
+ (if (buffer-live-p gnus-summary-buffer)
+ '(summary 0.5))
+ (group 1.0))))
@end lisp
One common desire for a multiple frame split is to have a separate frame
@lisp
(message
(frame 1.0
- (if (not (buffer-live-p gnus-summary-buffer))
- (car (cdr (assoc 'group gnus-buffer-configuration)))
- (car (cdr (assoc 'summary gnus-buffer-configuration))))
- (vertical ((user-position . t) (top . 1) (left . 1)
- (name . "Message"))
- (message 1.0 point))))
+ (if (not (buffer-live-p gnus-summary-buffer))
+ (car (cdr (assoc 'group gnus-buffer-configuration)))
+ (car (cdr (assoc 'summary gnus-buffer-configuration))))
+ (vertical ((user-position . t) (top . 1) (left . 1)
+ (name . "Message"))
+ (message 1.0 point))))
@end lisp
@findex gnus-add-configuration
@lisp
(gnus-add-configuration
'(article (vertical 1.0
- (group 4)
- (summary .25 point)
- (article 1.0))))
+ (group 4)
+ (summary .25 point)
+ (article 1.0))))
@end lisp
You'd typically stick these @code{gnus-add-configuration} calls in your
(gnus-add-configuration
'(article
(horizontal 1.0
- (vertical 25 (group 1.0))
- (vertical 1.0
- (summary 0.16 point)
- (article 1.0)))))
+ (vertical 25 (group 1.0))
+ (vertical 1.0
+ (summary 0.16 point)
+ (article 1.0)))))
(gnus-add-configuration
'(summary
(horizontal 1.0
- (vertical 25 (group 1.0))
- (vertical 1.0 (summary 1.0 point)))))
+ (vertical 25 (group 1.0))
+ (vertical 1.0 (summary 1.0 point)))))
@end lisp
@end itemize
@c Hook written by Francesco Potorti` <pot@cnuce.cnr.it>
@lisp
(add-hook 'display-time-hook
- (lambda () (setq gnus-mode-non-string-length
- (+ 21
- (if line-number-mode 5 0)
- (if column-number-mode 4 0)
- (length display-time-string)))))
+ (lambda () (setq gnus-mode-non-string-length
+ (+ 21
+ (if line-number-mode 5 0)
+ (if column-number-mode 4 0)
+ (length display-time-string)))))
@end lisp
If this variable is @code{nil} (which is the default), the mode line
;; Specify the altitude of Face and X-Face images in the From header.
(setq gnus-face-properties-alist
'((pbm . (:face gnus-x-face :ascent 80))
- (png . (:ascent 80))))
+ (png . (:ascent 80))))
;; Show Face and X-Face images as pressed buttons.
(setq gnus-face-properties-alist
'((pbm . (:face gnus-x-face :relief -2))
- (png . (:relief -2))))
+ (png . (:relief -2))))
@end lisp
@pxref{Image Descriptors, ,Image Descriptors, elisp, The Emacs Lisp
@lisp
(setq message-required-news-headers
(nconc message-required-news-headers
- (list '(X-Face . gnus-random-x-face))))
+ (list '(X-Face . gnus-random-x-face))))
@end lisp
Using the last function would be something like this:
@lisp
(setq message-required-news-headers
(nconc message-required-news-headers
- (list '(X-Face . (lambda ()
- (gnus-x-face-from-file
- "~/My-face.gif"))))))
+ (list '(X-Face . (lambda ()
+ (gnus-x-face-from-file
+ "~/My-face.gif"))))))
@end lisp
@lisp
(setq message-required-news-headers
(nconc message-required-news-headers
- (list '(Face . (lambda ()
- (gnus-face-from-file "~/face.jpg"))))))
+ (list '(Face . (lambda ()
+ (gnus-face-from-file "~/face.jpg"))))))
@end lisp
(...
(to "larsi@@trym.ifi.uio.no"
(| ("subject" "re:.*" "misc")
- ("references" ".*@@.*" "misc")
- "spam"))
+ ("references" ".*@@.*" "misc")
+ "spam"))
...)
@end lisp
@lisp
(setq mail-sources
'((file :prescript "formail -bs spamassassin < /var/mail/%u")
- (pop :user "jrl"
- :server "pophost"
- :postscript
- "mv %t /tmp/foo; formail -bs spamc < /tmp/foo > %t")))
+ (pop :user "jrl"
+ :server "pophost"
+ :postscript
+ "mv %t /tmp/foo; formail -bs spamc < /tmp/foo > %t")))
@end lisp
Once you manage to process your incoming spool somehow, thus making
@lisp
(setq nnmail-split-methods '(("spam" "^X-Spam-Flag: YES")
- ...))
+ ...))
@end lisp
Or using fancy split methods (@pxref{Fancy Mail Splitting}):
@lisp
(setq nnmail-split-methods 'nnmail-split-fancy
nnmail-split-fancy '(| ("X-Spam-Flag" "YES" "spam")
- ...))
+ ...))
@end lisp
Some people might not like the idea of piping the mail through various
@lisp
(setq nnmail-split-fancy '(| (: kevin-spamassassin)
- ...))
+ ...))
(defun kevin-spamassassin ()
(save-excursion
(save-restriction
(widen)
(if (eq 1 (call-process-region (point-min) (point-max)
- "spamc" nil nil nil "-c"))
- "spam"))))
+ "spamc" nil nil nil "-c"))
+ "spam"))))
@end lisp
Note that with the nnimap back end, message bodies will not be
@example
nnimap-split-fancy '(|
- (any "ding" "ding")
- (: spam-split)
- ;; @r{default mailbox}
- "mail")
+ (any "ding" "ding")
+ (: spam-split)
+ ;; @r{default mailbox}
+ "mail")
@end example
@noindent
@example
nnimap-split-fancy
'(|
- ;; @r{spam detected by @code{spam-use-regex-headers} goes to @samp{regex-spam}}
- (: spam-split "regex-spam" 'spam-use-regex-headers)
- (any "ding" "ding")
- ;; @r{all other spam detected by spam-split goes to @code{spam-split-group}}
- (: spam-split)
- ;; @r{default mailbox}
- "mail")
+ ;; @r{spam detected by @code{spam-use-regex-headers} goes to @samp{regex-spam}}
+ (: spam-split "regex-spam" 'spam-use-regex-headers)
+ (any "ding" "ding")
+ ;; @r{all other spam detected by spam-split goes to @code{spam-split-group}}
+ (: spam-split)
+ ;; @r{default mailbox}
+ "mail")
@end example
@noindent
nnimap-split-rule 'nnimap-split-fancy
;; @r{understand what this does before you copy it to your own setup!}
nnimap-split-fancy '(|
- ;; @r{trace references to parents and put in their group}
- (: gnus-registry-split-fancy-with-parent)
- ;; @r{this will catch server-side SpamAssassin tags}
- (: spam-split 'spam-use-regex-headers)
- (any "ding" "ding")
- ;; @r{note that spam by default will go to @samp{spam}}
- (: spam-split)
- ;; @r{default mailbox}
- "mail"))
+ ;; @r{trace references to parents and put in their group}
+ (: gnus-registry-split-fancy-with-parent)
+ ;; @r{this will catch server-side SpamAssassin tags}
+ (: spam-split 'spam-use-regex-headers)
+ (any "ding" "ding")
+ ;; @r{note that spam by default will go to @samp{spam}}
+ (: spam-split)
+ ;; @r{default mailbox}
+ "mail"))
;; @r{my parameters, set with @kbd{G p}}
;; @r{also to my @samp{nnimap+mail.lifelogs.com:trainham} folder for training}
(ham-process-destination "nnimap+mail.lifelogs.com:mail"
- "nnimap+mail.lifelogs.com:trainham")
+ "nnimap+mail.lifelogs.com:trainham")
;; @r{in this group, only @samp{!} marks are ham}
(ham-marks
(gnus-ticked-mark))
@example
((spam-contents gnus-group-spam-classification-ham)
(spam-process ((ham spam-use-spamoracle)
- (spam spam-use-spamoracle))))
+ (spam spam-use-spamoracle))))
@end example
For this group the @code{spam-use-spamoracle} is installed for both
ham and spam processing. If the group contains spam message
@lisp
(setq nnmail-split-fancy
`(| (: spam-stat-split-fancy)
- "mail.misc"))
+ "mail.misc"))
@end lisp
@defvar spam-stat-split-fancy-spam-group
@lisp
(setq nnmail-split-fancy
`(| ("Subject" "\\bspam-stat\\b" "mail.emacs")
- (: spam-stat-split-fancy)
- "mail.misc"))
+ (: spam-stat-split-fancy)
+ "mail.misc"))
@end lisp
If you want to filter for spam first, then you must be careful when
@lisp
(setq nnmail-split-fancy
`(| (: spam-stat-split-fancy)
- ("Subject" "\\bspam-stat\\b" "mail.emacs")
- "mail.misc"))
+ ("Subject" "\\bspam-stat\\b" "mail.emacs")
+ "mail.misc"))
@end lisp
You can combine this with traditional filtering. Here, we move all
@lisp
(setq nnmail-split-fancy
`(| ("Content-Type" "text/html" "mail.spam.filtered")
- (: spam-stat-split-fancy)
- ("Subject" "\\bspam-stat\\b" "mail.emacs")
- "mail.misc"))
+ (: spam-stat-split-fancy)
+ ("Subject" "\\bspam-stat\\b" "mail.emacs")
+ "mail.misc"))
@end lisp
@lisp
(setq mail-sources
'((directory :path "~/mail/incoming/"
- :suffix ".in")))
+ :suffix ".in")))
@end lisp
@xref{Mail Source Specifiers}.
@lisp
(setq gnus-parameters
'(("mail\\..*"
- (gnus-show-threads nil)
- (gnus-use-scoring nil))
- ("^nnimap:\\(foo.bar\\)$"
- (to-group . "\\1"))))
+ (gnus-show-threads nil)
+ (gnus-use-scoring nil))
+ ("^nnimap:\\(foo.bar\\)$"
+ (to-group . "\\1"))))
@end lisp
@item
The old format like the lines below is obsolete, but still accepted.
@lisp
(header "to" "larsi.*org"
- (Organization "Somewhere, Inc."))
+ (Organization "Somewhere, Inc."))
@end lisp
@item
(deffoo nndir-open-server (server &optional defs)
(setq nndir-directory
- (or (cadr (assq 'nndir-directory defs))
- server))
+ (or (cadr (assq 'nndir-directory defs))
+ server))
(unless (assq 'nndir-directory defs)
(push `(nndir-directory ,server) defs))
(push `(nndir-current-group
- ,(file-name-nondirectory
- (directory-file-name nndir-directory)))
- defs)
+ ,(file-name-nondirectory
+ (directory-file-name nndir-directory)))
+ defs)
(push `(nndir-top-directory
- ,(file-name-directory (directory-file-name nndir-directory)))
- defs)
+ ,(file-name-directory (directory-file-name nndir-directory)))
+ defs)
(nnoo-change-server 'nndir server defs))
(nnoo-map-functions nndir
date-rule = "(" quote date-header quote space *date-match ")"
quote = <ascii 34>
string-header = "subject" / "from" / "references" / "message-id" /
- "xref" / "body" / "head" / "all" / "followup"
+ "xref" / "body" / "head" / "all" / "followup"
number-header = "lines" / "chars"
date-header = "date"
string-match = "(" quote <string> quote [ "" / [ space score [ "" /
- space date [ "" / [ space string-match-t ] ] ] ] ] ")"
+ space date [ "" / [ space string-match-t ] ] ] ] ] ")"
score = "nil" / <integer>
date = "nil" / <natural number>
string-match-t = "nil" / "s" / "substring" / "S" / "Substring" /
- "r" / "regex" / "R" / "Regex" /
- "e" / "exact" / "E" / "Exact" /
- "f" / "fuzzy" / "F" / "Fuzzy"
+ "r" / "regex" / "R" / "Regex" /
+ "e" / "exact" / "E" / "Exact" /
+ "f" / "fuzzy" / "F" / "Fuzzy"
number-match = "(" <integer> [ "" / [ space score [ "" /
- space date [ "" / [ space number-match-t ] ] ] ] ] ")"
+ space date [ "" / [ space number-match-t ] ] ] ] ] ")"
number-match-t = "nil" / "=" / "<" / ">" / ">=" / "<="
date-match = "(" quote <string> quote [ "" / [ space score [ "" /
- space date [ "" / [ space date-match-t ] ] ] ] ")"
+ space date [ "" / [ space date-match-t ] ] ] ] ")"
date-match-t = "nil" / "at" / "before" / "after"
atom = "(" [ required-atom / optional-atom ] ")"
required-atom = mark / expunge / mark-and-expunge / files /
- exclude-files / read-only / touched
+ exclude-files / read-only / touched
optional-atom = adapt / local / eval
mark = "mark" space nil-or-number
nil-or-number = "nil" / <integer>
simple-range = "(" number " . " number ")"
normal-range = "(" start-contents ")"
contents = "" / simple-range *[ " " contents ] /
- number *[ " " contents ]
+ number *[ " " contents ]
@end example
Gnus currently uses ranges to keep track of read articles and article
("no.group" 5 ((1 . 54324)))
("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55))
- ((tick (15 . 19)) (replied 3 6 (19 . 3)))
- (nnml "")
- ((auto-expire . t) (to-address . "ding@@gnus.org")))
+ ((tick (15 . 19)) (replied 3 6 (19 . 3)))
+ (nnml "")
+ ((auto-expire . t) (to-address . "ding@@gnus.org")))
@end example
The first element is the @dfn{group name}---as Gnus knows the group,
@example
info = "(" group space ralevel space read
- [ "" / [ space marks-list [ "" / [ space method [ "" /
- space parameters ] ] ] ] ] ")"
+ [ "" / [ space marks-list [ "" / [ space method [ "" /
+ space parameters ] ] ] ] ] ")"
group = quote <string> quote
ralevel = rank / level
level = <integer in the range of 1 to inf>