-lispdir = @lispdir@
srcdir = @srcdir@
@SET_MAKE@
-EMACS = @EMACS@
+EMACS = emacs
XEMACS = xemacs
all: lick info
lick:
- cd lisp && $(MAKE) EMACS=$(EMACS) lispdir=$(lispdir) all
+ cd lisp && $(MAKE) EMACS=$(EMACS) all
install:
- cd lisp && $(MAKE) EMACS=$(EMACS) lispdir=$(lispdir) install
+ cd lisp && $(MAKE) EMACS=$(EMACS) install
cd texi && $(MAKE) EMACS=$(EMACS) install
# Rule for Lars and nobody else.
-Wed Jun 3 04:03:37 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
-
- * gnus.el: Gnus v5.6.11 is released.
-
-Wed Jun 3 03:33:50 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus.el: Checked doc string syntax throughout.
-
- * message.el (message-subject-re-regexp): Renamed.
-
-Wed Jun 3 03:33:05 1998 Simon Josefsson <jas@pdc.kth.se>
-
- * message.el (message-ignored-subject-re): New variable.
-
-Wed Jun 3 03:25:13 1998 Sam Steingold <sds@usa.net>
-
- * gnus-msg.el (gnus-bug-create-help-buffer): New variable.
- (gnus-bug): Use it.
-
-1998-05-07 Hrvoje Niksic <hniksic@srce.hr>
-
- * nnmail.el: (nnmail-get-split-group): Use `regexp-quote'
- when file name is a part of pattern.
-
- * nnmail.el (nnmail-crosspost-link-function): Ditto.
-
- * gnus-ems.el: Use `symbol-name' instead of `(format "%s" ...)'.
-
- * gnus-score.el (gnus-score-load-file): Use `regexp-quote'
- when file name is a part of pattern.
-
-1998-05-06 Hrvoje Niksic <hniksic@srce.hr>
-
- * gnus-cache.el (gnus-cache-generate-active): Use `regexp-quote'
- when file name is a part of pattern.
-
-Wed Jun 3 03:13:34 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * nnfolder.el (nnfolder-delete-mail): Changed parameters.
- (nnfolder-request-replace-article): Rename X-From-Line.
-
-Wed Jun 3 03:10:04 1998 Dan Christensen <jdc@chow.mat.jhu.edu>
-
- * nnfolder.el (nnfolder-adjust-min-active): Work.
-
-Mon Jun 1 05:27:28 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-sum.el (gnus-summary-limit-to-age): Reversed time and
- almost collapsed space!
-
- * nnmail.el (nnmail-days-to-time): Computed wrong time.
-
-Mon Jun 1 05:19:46 1998 Kim-Minh Kaplan <KimMinh.Kaplan@utopia.eunet.fr>
-
- * gnus-sum.el (gnus-dependencies-add-header): Break loops.
-
-Mon Jun 1 05:13:34 1998 Fabrice POPINEAU <popineau@esemetz.ese-metz.fr>
-
- * gnus-cache.el (gnus-cache-generate-active): Regexp-quote.
-
-Mon Jun 1 04:31:23 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
-
- * gnus.el: Gnus v5.6.10 is released.
-
-Mon Jun 1 03:25:33 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-art.el (gnus-button-alist): Recognize bare mailto buttons
- for Gnus.
-
- * nntp.el: Replaced all `message' calls.
-
-Mon Jun 1 03:13:46 1998 Wolfgang Rupprecht <wolfgang@dailyplanet.wsrcc.com>
-
- * nntp.el (nntp-encode-text): Removed spurious forward-line.
-
-Sat May 23 19:44:43 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-agent.el (gnus-agent-fetch-session): Would infloop if
- opening failed.
-
-Tue May 19 04:11:33 1998 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
-
- * nnheader.el (nnheader-translate-file-chars): Don't change
- string.
-
-Tue May 19 03:07:45 1998 P. E. Jareth Hein <jareth@camelot-soft.com>
-
- * gnus-util.el (gnus-dd-mmm): New version.
-
-Tue May 19 03:00:39 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus.el: Changed address.
-
-Tue May 12 06:12:42 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-agent.el (gnus-agent-expire): Delete more.
-
-Sun May 10 19:08:28 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-group.el (gnus-group-read-ephemeral-group): Don't add
- `address'.
-
-Sun May 3 18:01:01 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * nnmail.el (nnmail-within-headers-p): Renamed.
-
- * message.el (message-cancel-news): If a Sender header doesn't
- exist, compare From against `message-make-from'.
-
-Sun May 3 15:07:25 1998 Lars Balker Rasmussen <lbr@image.dk>
-
- * gnus-agent.el (gnus-agent-save-group-info): Fix
- re-search-forward params.
-
-Sun May 3 15:04:02 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-agent.el (gnus-agent-expire): Check for the size.
-
-Sat May 2 01:50:20 1998 Dan Christensen <jdc@chow.mat.jhu.edu>
-
- * nnfolder.el (nnfolder-goto-article): New version.
- (nnfolder-read-folder): Fix.
-
- * nnmail.el (nnmail-within-headers): New function.
-
-Sat May 2 01:36:37 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * nnfolder.el (nnfolder-goto-article): Thinkotypo search arguments.
-
- * nnheader.el (nnheader-find-file-noselect): Also bind
- `find-file-hooks' to nil.
-
- * nnmail.el (nnmail-process-unix-mail-format): Don't use
- `find-file-noselect'.
-
- * gnus-group.el (gnus-group-make-menu-bar): Typo.
-
-Fri May 1 21:59:35 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
-
- * gnus.el: Gnus v5.6.9 is released.
-
-Fri May 1 21:54:30 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * nnfolder.el (nnfolder-goto-article): Would infloop.
-
-Fri May 1 19:45:50 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
-
- * gnus.el: Gnus v5.6.8 is released.
-
-Fri May 1 18:51:21 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * nntp.el (nntp-request-newgroups): Use format-time-string.
-
- * message.el (message-fetch-field): Inhibit point-motion hooks.
-
-Fri May 1 18:33:06 1998 Wes Hardaker <wjhardaker@ucdavis.edu>
-
- * gnus-score.el (gnus-adaptive-word-no-group-words): New variable.
-
-Fri May 1 16:56:32 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-agent.el (gnus-agent-expire): Put point at the start of the
- buffer.
-
- * gnus-soup.el (gnus-soup-parse-areas): Check whether the file
- exists.
-
- * gnus-draft.el (gnus-draft-send): Use meta-information.
-
- * nnagent.el (nnagent-request-post): Store meta-information.
-
- * gnus-agent.el (gnus-agent-meta-information-header): New variable.
- (gnus-agent-insert-meta-information): New function.
-
-Fri May 1 16:43:35 1998 Paul Franklin <paul@cs.washington.edu>
-
- * message.el (message-generate-headers): Insert Sender when
- required.
-
-Fri May 1 15:28:55 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-util.el (gnus-dd-mmm): Accept "" dates.
-
- * gnus-cite.el (gnus-article-hide-citation): Don't remove button
- when hiding.
-
- * gnus-msg.el (gnus-post-method): Allow ARG to override
- `current'.
-
- * gnus-sum.el (gnus-remove-thread): Remove the dummy root
- properly.
-
- * nnfolder.el (nnfolder-goto-article): New function.
- (nnfolder-retrieve-headers): Use it.
- (nnfolder-request-article): Ditto.
-
-Wed Apr 29 22:48:33 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
-
- * gnus.el: Gnus v5.6.7 is released.
-
-Wed Apr 29 20:54:35 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-sum.el (gnus-summary-update-info): Bind
- gnuis-newsgroup-scored later.
- (gnus-summary-prepare-threads): Check some more before inserting
- dummy roots.
-
- * gnus-cache.el (gnus-cache-enter-article): Update marks
- properly.
-
- * gnus-xmas.el (gnus-xmas-draft-menu-add): New function.
-
- * nntp.el (nntp-connection-timeout): Removed.
-
- * gnus-move.el (gnus-move-group-to-server): Delete nils.
-
- * nntp.el (nntp-close-server): Close more connections.
-
- * gnus-art.el (gnus-button-alist): Accept white space after colons
- in <URL:news:> things.
-
-Wed Apr 29 20:18:45 1998 Kurt Swanson <kurt@dna.lth.se>
-
- * gnus-art.el (article-update-date-lapsed): Bind
- `deactivate-mark'.
-
- * gnus-salt.el (gnus-pick-mode-map): Moved keys around to avoid
- shadowing.
-
- * gnus-art.el (gnus-article-read-summary-keys): New version.
-
- * gnus-sum.el (gnus-summary-make-menu-bar): New for article mode.
-
- * gnus-msg.el (gnus-post-method): `current' custom.
-
-Wed Apr 29 19:04:27 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-sum.el (gnus-summary-set-local-parameters): Ignore
- quit-config.
- (gnus-select-newsgroup): Use the value of gnus-fetch-old-headers.
-
- * message.el (message-post-method): Doc fix.
-
- * gnus.el (gnus-directory): dox fix.
-
-Tue Apr 28 03:32:17 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-group.el (gnus-group-timestamp): Really get timestamp.
-
- * gnus.el (gnus-group-parameter-value): Use explicit iteration.
-
-Tue Apr 28 03:15:50 1998 Hallvard B. Furuseth <h.b.furuseth@usit.uio.no>
-
- * gnus-util.el (gnus-alive-p): Check for binding.
-
-Tue Apr 28 03:00:16 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-sum.el (gnus-parent-headers): Don't infloop on nil
- References.
-
- * gnus-art.el (gnus-article-mode): Don't kill local vars.
-
- * score-mode.el (score-mode-syntax-table): Change syntax.
-
-Mon Apr 27 00:26:01 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
-
- * gnus.el: Gnus v5.6.6 is released.
-
-Mon Apr 27 00:07:11 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-art.el (gnus-request-article-this-buffer): Viewing pseudos
- in nneething groups bugged.
-
- * gnus-sum.el (gnus-summary-prepare-threads): Dummy roots and
- dormants and stuff.
-
-Sun Apr 26 23:34:40 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-cache.el (gnus-cache-file-name): Use FULL.
-
- * nnheader.el (nnheader-translate-file-chars): Allow FULL
- parameter.
-
- * gnus-cache.el (gnus-cache-file-name): Translate all colons.
-
-Sun Apr 26 19:27:56 1998 Justin Sheehy <justin@linus.mitre.org>
-
- * nntp.el (nntp-rlogin-parameters): Doc fix.
-
-Sun Apr 26 19:21:12 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-art.el (gnus-summary-save-in-mail): Not a command.
-
-Sun Apr 26 19:16:03 1998 James Troup <J.J.Troup@scm.brad.ac.uk>
-
- * gnus-sum.el (gnus-summary-expire-articles-now): Work.
-
-Sun Apr 26 14:34:06 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-sum.el (gnus-build-sparse-threads): Break loops.
- (gnus-summary-print-article): Save excursion to try to preserve
- local/bound variable messup.
-
- * gnus-salt.el (gnus-tree-read-summary-keys): Put point in article
- buffer.
-
- * gnus-undo.el (gnus-undo): New group.
- (gnus-undo-limit): New variable.
- (gnus-undo-register-1): Use it.
-
- * gnus-sum.el (gnus-summary-update-info): Don't nix out scores.
-
- * gnus-start.el (gnus-active-to-gnus-format): Removed "." from
- quoting.
-
- * gnus.el (gnus-cache-directory): Moved here.
- (gnus-predefined-server-alist): Use.
-
- * message.el (message-autosave-directory): Put back in.
- (message-set-auto-save-file-name): Use if Gnus isn't running.
-
- * gnus-util.el (gnus-alive-p): Moved here.
-
- * message.el (message-autosave-directory): Removed.
- (message-set-auto-save-file-name): Don't use it.
-
- * gnus.el: Use gnus-buffer-exists-p throughout.
-
- * gnus-uu.el (gnus-uu-save-article): Use gnus-kill-buffer.
-
- * message.el (message-make-in-reply-to): Check more for strange
- From lines.
-
- * gnus-art.el (gnus-article-mode): Don't nix out vars.
-
-Sun Apr 26 14:05:40 1998 Frank Bennett <bennett@rumple.soas.ac.uk>
-
- * nnmail.el (nnmail-move-inbox): Push error'ed mailboxes onto the
- list.
-
-Sun Apr 26 13:01:53 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-score.el (gnus-score-save): Use it.
-
- * score-mode.el (score-mode-syntax-table): New table.
-
- * nnmbox.el: Commentary fix.
-
-Sun Apr 26 12:59:00 1998 Richard Stallman <rms@santafe.edu>
-
- * message.el (message-mode): New adaptive fill defaults.
-
-Sun Apr 26 12:50:38 1998 Jim Radford <radford@robby.caltech.edu>
-
- * gnus-start.el (gnus-active-to-gnus-format): Groups that start
- with dots.
-
-1998-04-11 Richard Stallman <rms@sucrose.gnu.org>
-
- * gnus/gnus-art.el (gnus-emphasis-alist): Use nth, not caddr.
-
-Sat Apr 25 15:33:57 1998 Kim-Minh Kaplan <KimMinh.Kaplan@utopia.eunet.fr>
-
- * gnus-sum.el (gnus-build-sparse-threads): Handle loops.
-
-Sat Apr 25 15:09:54 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus.el (gnus-valid-select-methods): nngateway is post-mail.
-
-Fri Apr 24 21:32:14 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
-
- * gnus.el: Gnus v5.6.5 is released.
-
-Fri Apr 24 21:19:21 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-msg.el (gnus-post-method): Doc fix.
- (gnus-post-method): Reversed semantics.
-
-1998-04-01 Jan Vroonhof <vroonhof@math.ethz.ch>
-
- * gnus-msg.el (gnus-post-method): Customized. Added 'native
- option. In the function, added support for new value.
-
-Fri Apr 24 20:04:15 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * nnmbox.el (nnmbox-request-create-group): New function.
-
-Sun Apr 12 07:55:16 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus-agent.el (gnus-agent-save-group-info): Only do those that
- are covered.
-
-Tue Apr 7 11:26:31 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * nntp.el (nntp-authinfo-file): Doc fix.
-
-1998-03-31 Ken Raeburn <raeburn@cygnus.com>
-
- * nnml.el (nnml-request-expire-articles): Sort active-articles,
- then only expire the intersection of that set with the requested
- articles.
-
-Wed Apr 1 16:01:44 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * message.el (message-supersede): Check Sender.
- (message-cancel-news): Fix Sender check.
-
-Sun Mar 29 11:54:33 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * nnkiboze.el (nnkiboze-generate-group): Would mess up newsrs
- hashtb.
- (nnkiboze-enter-nov): Created bogus Xrefs headers.
-
- * gnus-agent.el (gnus-agent-save-group-info): New function.
-
- * gnus-start.el (gnus-get-unread-articles): Use it.
-
- * message.el (message-expand-group): Allow completion from in the
- middle of strings.
- (message-font-lock-keywords): Work when mail-header-separator is
- "".
-
Sun Mar 29 09:56:00 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Gnus v5.6.4 is released.
;;; dgnushack.el --- a hack to set the load path for byte-compiling
;; Copyright (C) 1994,95,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Version: 4.19
;; Keywords: news, path
;;; gnus-agent.el --- unplugged support for Semi-gnus
;; Copyright (C) 1997,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; This file is part of GNU Emacs.
;; GNU Emacs is free software; you can redistribute it and/or modify
;;; Internal variables
-(defvar gnus-agent-meta-information-header "X-Gnus-Agent-Meta-Information")
-
(defvar gnus-agent-history-buffers nil)
(defvar gnus-agent-buffer-alist nil)
(defvar gnus-agent-article-alist nil)
(re-search-forward
(concat "^" (regexp-quote mail-header-separator) "\n"))
(replace-match "\n")
- (gnus-agent-insert-meta-information 'mail)
(gnus-request-accept-article "nndraft:queue")))
-(defun gnus-agent-insert-meta-information (type &optional method)
- "Insert meta-information into the message that says how it's to be posted.
-TYPE can be either `mail' or `news'. If the latter METHOD can
-be a select method."
- (save-excursion
- (message-remove-header gnus-agent-meta-information-header)
- (goto-char (point-min))
- (insert gnus-agent-meta-information-header ": "
- (symbol-name type) " " (format "%S" method)
- "\n")
- (forward-char -1)
- (while (search-backward "\n" nil t)
- (replace-match "\\n" t t))))
-
;;;
;;; Group mode commands
;;;
(defun gnus-agent-fetch-groups (n)
- "Put all new articles in the current groups into the Agent."
+ "Put all new articles in the current groups into the agent."
(interactive "P")
(gnus-group-iterate n 'gnus-agent-fetch-group))
(defun gnus-agent-fetch-group (group)
- "Put all new articles in GROUP into the Agent."
+ "Put all new articles in GROUP into the agent."
(interactive (list (gnus-group-group-name)))
(unless group
(error "No group on the current line"))
(error "Server already in the agent program"))
(push method gnus-agent-covered-methods)
(gnus-agent-write-servers)
- (message "Entered %s into the Agent" server)))
+ (message "Entered %s into the agent" server)))
(defun gnus-agent-remove-server (server)
"Remove SERVER from the agent program."
(when (file-exists-p (gnus-agent-lib-file "active"))
(delete-file (gnus-agent-lib-file "active"))))
-(defun gnus-agent-save-group-info (method group active)
- (when (gnus-agent-method-p method)
- (let* ((gnus-command-method method)
- (file (gnus-agent-lib-file "active")))
- (gnus-make-directory (file-name-directory file))
- (nnheader-temp-write file
- (insert-file-contents file)
- (goto-char (point-min))
- (when (re-search-forward (concat "^" (regexp-quote group) " ") nil t)
- (gnus-delete-line))
- (insert group " " (number-to-string (cdr active)) " "
- (number-to-string (car active)) "\n")))))
-
(defun gnus-agent-group-path (group)
"Translate GROUP into a path."
(if nnmail-use-long-file-names
;;;
(defun gnus-agent-fetch-articles (group articles)
- "Fetch ARTICLES from GROUP and put them into the Agent."
+ "Fetch ARTICLES from GROUP and put them into the agent."
(when articles
;; Prune off articles that we have already fetched.
(while (and articles
(insert-buffer-substring nntp-server-buffer)))
(copy-to-buffer nntp-server-buffer (point-min) (point-max))
(setq pos (nreverse pos)))))
- ;; Then save these articles into the Agent.
+ ;; Then save these articles into the agent.
(save-excursion
(set-buffer nntp-server-buffer)
(while pos
(setq gnus-command-method (car methods))
(when (or (gnus-server-opened gnus-command-method)
(gnus-open-server gnus-command-method))
- (setq groups (gnus-groups-from-server (car methods)))
+ (setq groups (gnus-groups-from-server (pop methods)))
(gnus-agent-with-fetch
(while (setq group (pop groups))
(when (<= (gnus-group-level group) gnus-agent-handle-level)
- (gnus-agent-fetch-group-1 group gnus-command-method)))))
- (pop methods))
+ (gnus-agent-fetch-group-1 group gnus-command-method))))))
(gnus-message 6 "Finished fetching articles into the Gnus agent"))))
(defun gnus-agent-fetch-group-1 (group method)
gnus-use-cache articles score arts
category predicate info marks score-param)
;; Fetch headers.
- (when (and (or (gnus-active group) (gnus-activate-group group))
- (setq articles (gnus-list-of-unread-articles group))
+ (when (and (setq articles (gnus-list-of-unread-articles group))
(gnus-agent-fetch-headers group articles))
;; Parse them and see which articles we want to fetch.
(setq gnus-newsgroup-dependencies
(set-buffer
(setq gnus-agent-current-history
(setq history (gnus-agent-history-buffer))))
- (goto-char (point-min))
- (when (> (buffer-size) 1)
+ (unless (zerop (buffer-size))
(goto-char (point-min))
(while (not (eobp))
(skip-chars-forward "^\t")
(cdr (assq 'dormant
(gnus-info-marks info)))))
nov-file (gnus-agent-article-name ".overview" group))
- (gnus-agent-load-alist group)
(gnus-message 5 "Expiring articles in %s" group)
(set-buffer overview)
(erase-buffer)
(when (file-exists-p nov-file)
- (nnheader-insert-file-contents nov-file))
+ (insert-file-contents nov-file))
(goto-char (point-min))
- (setq article 0)
(while (setq elem (pop articles))
(setq article (car elem))
(when (or (null low)
(not (memq article marked))))
;; Find and nuke the NOV line.
(while (and (not (eobp))
- (or (not (numberp
- (setq art (read (current-buffer)))))
- (< art article)))
- (if (file-exists-p
- (gnus-agent-article-name
- (number-to-string article) group))
- (forward-line 1)
- ;; Remove old NOV lines that have no articles.
- (gnus-delete-line)))
+ (< (setq art (read (current-buffer))) article))
+ (forward-line 1))
(if (or (eobp)
(/= art article))
(beginning-of-line)
(delete-file file))
;; Schedule the history line for nuking.
(push (cdr elem) histories)))
- (write-region (point-min) (point-max) nov-file nil 'silent)
- ;; Delete the unwanted entries in the alist.
- (setq gnus-agent-article-alist
- (sort gnus-agent-article-alist 'car-less-than-car))
- (let* ((alist gnus-agent-article-alist)
- (prev (cons nil alist))
- (first prev))
- (while (and alist
- (<= (caar alist) article))
- (if (or (not (cdar alist))
- (not (file-exists-p
- (gnus-agent-article-name
- (number-to-string
- (caar alist))
- group))))
- (setcdr prev (setq alist (cdr alist)))
- (setq prev alist
- alist (cdr alist))))
- (setq gnus-agent-article-alist (cdr first)))
- (gnus-agent-save-alist group))
+ (write-region (point-min) (point-max) nov-file nil 'silent))
expiry-hashtb)
(set-buffer history)
(setq histories (nreverse (sort histories '<)))
;;; gnus-art.el --- article mode commands for Semi-gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
;; Keywords: mail, news, MIME
(lambda (spec)
(list
(format format (car spec) (cadr spec))
- 2 3 (intern (format "gnus-emphasis-%s" (nth 2 spec)))))
+ 2 3 (intern (format "gnus-emphasis-%s" (caddr spec)))))
types)))
"*Alist that says how to fontify certain phrases.
Each item looks like this:
(defun article-update-date-lapsed ()
"Function to be run from a timer to update the lapsed time line."
- (let (deactivate-mark)
- (save-excursion
- (ignore-errors
- (when (gnus-buffer-live-p gnus-article-buffer)
- (set-buffer gnus-article-buffer)
- (goto-char (point-min))
- (when (re-search-forward "^X-Sent:" nil t)
- (article-date-lapsed t)))))))
+ (save-excursion
+ (ignore-errors
+ (when (gnus-buffer-live-p gnus-article-buffer)
+ (set-buffer gnus-article-buffer)
+ (goto-char (point-min))
+ (when (re-search-forward "^X-Sent:" nil t)
+ (article-date-lapsed t))))))
(defun gnus-start-date-timer (&optional n)
"Start a timer to update the X-Sent header in the article buffers.
"Append this article to Rmail file.
Optional argument FILENAME specifies file name.
Directory to save to is default to `gnus-article-save-directory'."
+ (interactive)
(setq filename (gnus-read-save-file-name
"Save %s in rmail file:" filename
gnus-rmail-save-name gnus-newsgroup-name
"Append this article to Unix mail file.
Optional argument FILENAME specifies file name.
Directory to save to is default to `gnus-article-save-directory'."
+ (interactive)
(setq filename (gnus-read-save-file-name
"Save %s in Unix mail file:" filename
gnus-mail-save-name gnus-newsgroup-name
"Append this article to file.
Optional argument FILENAME specifies file name.
Directory to save to is default to `gnus-article-save-directory'."
+ (interactive)
(setq filename (gnus-read-save-file-name
"Save %s in file:" filename
gnus-file-save-name gnus-newsgroup-name
"Write this article to a file.
Optional argument FILENAME specifies file name.
The directory to save in defaults to `gnus-article-save-directory'."
+ (interactive)
(gnus-summary-save-in-file nil t))
(defun gnus-summary-save-body-in-file (&optional filename)
"Append this article body to a file.
Optional argument FILENAME specifies file name.
The directory to save in defaults to `gnus-article-save-directory'."
+ (interactive)
(setq filename (gnus-read-save-file-name
"Save %s body in file:" filename
gnus-file-save-name gnus-newsgroup-name
(defun gnus-summary-save-in-pipe (&optional command)
"Pipe this article to subprocess."
+ (interactive)
(setq command
(cond ((eq command 'default)
gnus-last-shell-command)
["Remove carriage return" gnus-article-remove-cr t]
))
- ;; Note "Commands" menu is defined in gnus-sum.el for consistency
+ (when nil
+ (when (boundp 'gnus-summary-article-menu)
+ (define-key gnus-article-mode-map [menu-bar commands]
+ (cons "Commands" gnus-summary-article-menu))))
(when (boundp 'gnus-summary-post-menu)
(define-key gnus-article-mode-map [menu-bar post]
(interactive)
(when (gnus-visual-p 'article-menu 'menu)
(gnus-article-make-menu-bar))
+ (kill-all-local-variables)
(gnus-simplify-mode-line)
(setq mode-name "Article")
(setq major-mode 'gnus-article-mode)
(use-local-map gnus-article-mode-map)
(gnus-update-format-specifications nil 'article-mode)
(set (make-local-variable 'page-delimiter) gnus-page-delimiter)
- (make-local-variable 'gnus-page-broken)
- (make-local-variable 'gnus-button-marker-list)
- (make-local-variable 'gnus-article-current-summary)
+ (set (make-local-variable 'gnus-page-broken) nil)
+ (set (make-local-variable 'gnus-button-marker-list) nil)
+ (set (make-local-variable 'gnus-article-current-summary) nil)
(gnus-set-default-directory)
(buffer-disable-undo (current-buffer))
(setq buffer-read-only t)
"Read a summary buffer key sequence and execute it from the article buffer."
(interactive "P")
(let ((nosaves
- '("q" "Q" "c" "r" "R" "\C-c\C-f" "m" "a" "f" "F"
- "Zc" "ZC" "ZE" "ZQ" "ZZ" "Zn" "ZR" "ZG" "ZN" "ZP"
- "=" "^" "\M-^" "|"))
- (nosave-but-article
- '("A\r"))
- (nosave-in-article
- '("\C-d"))
+ '("q" "Q" "c" "r" "R" "\C-c\C-f" "m" "a" "f" "F"
+ "Zc" "ZC" "ZE" "ZQ" "ZZ" "Zn" "ZR" "ZG" "ZN" "ZP"
+ "=" "^" "\M-^" "|"))
+ (nosave-but-article
+ '("A\r"))
+ (nosave-in-article
+ '("\C-d"))
(up-to-top
'("n" "Gn" "p" "Gp"))
- keys new-sum-point)
+ keys new-sum-point)
(save-excursion
(set-buffer gnus-article-current-summary)
(let (gnus-pick-mode)
- (push (or key last-command-event) unread-command-events)
- (setq keys (read-key-sequence nil))))
+ (push (or key last-command-event) unread-command-events)
+ (setq keys (read-key-sequence nil))))
(message "")
(if (or (member keys nosaves)
- (member keys nosave-but-article)
- (member keys nosave-in-article))
- (let (func)
- (save-window-excursion
- (pop-to-buffer gnus-article-current-summary 'norecord)
- ;; We disable the pick minor mode commands.
- (let (gnus-pick-mode)
- (setq func (lookup-key (current-local-map) keys))))
- (if (not func)
- (ding)
- (unless (member keys nosave-in-article)
- (set-buffer gnus-article-current-summary))
- (call-interactively func)
- (setq new-sum-point (point)))
- (when (member keys nosave-but-article)
- (pop-to-buffer gnus-article-buffer 'norecord)))
+ (member keys nosave-but-article)
+ (member keys nosave-in-article))
+ (let (func)
+ (save-window-excursion
+ (pop-to-buffer gnus-article-current-summary 'norecord)
+ ;; We disable the pick minor mode commands.
+ (let (gnus-pick-mode)
+ (setq func (lookup-key (current-local-map) keys))))
+ (if (not func)
+ (ding)
+ (unless (member keys nosave-in-article)
+ (set-buffer gnus-article-current-summary))
+ (call-interactively func)
+ (setq new-sum-point (point)))
+ (when (member keys nosave-but-article)
+ (pop-to-buffer gnus-article-buffer 'norecord)))
;; These commands should restore window configuration.
(let ((obuf (current-buffer))
- (owin (current-window-configuration))
- (opoint (point))
- (summary gnus-article-current-summary)
- func in-buffer selected)
- (if not-restore-window
- (pop-to-buffer summary 'norecord)
- (switch-to-buffer summary 'norecord))
- (setq in-buffer (current-buffer))
- ;; We disable the pick minor mode commands.
- (if (setq func (let (gnus-pick-mode)
- (lookup-key (current-local-map) keys)))
- (progn
- (call-interactively func)
- (setq new-sum-point (point)))
- (ding))
- (when (eq in-buffer (current-buffer))
- (setq selected (gnus-summary-select-article))
- (set-buffer obuf)
- (unless not-restore-window
- (set-window-configuration owin))
- (unless (or (not (eq selected 'old)) (member keys up-to-top))
+ (owin (current-window-configuration))
+ (opoint (point))
+ (summary gnus-article-current-summary)
+ func in-buffer)
+ (if not-restore-window
+ (pop-to-buffer summary 'norecord)
+ (switch-to-buffer summary 'norecord))
+ (setq in-buffer (current-buffer))
+ ;; We disable the pick minor mode commands.
+ (if (setq func (let (gnus-pick-mode)
+ (lookup-key (current-local-map) keys)))
+ (progn
+ (call-interactively func)
+ (setq new-sum-point (point)))
+ (ding))
+ (when (eq in-buffer (current-buffer))
+ (set-buffer obuf)
+ (unless not-restore-window
+ (set-window-configuration owin))
+ (unless (member keys up-to-top)
(set-window-point (get-buffer-window (current-buffer))
opoint))
- (let ((win (get-buffer-window gnus-article-current-summary)))
- (when win
- (set-window-point win new-sum-point))))))))
+ (let ((win (get-buffer-window gnus-article-current-summary)))
+ (when win
+ (set-window-point win new-sum-point))))))))
(defun gnus-article-hide (&optional arg force)
"Hide all the gruft in the current article.
(when (and (numberp article)
gnus-summary-buffer
(get-buffer gnus-summary-buffer)
- (gnus-buffer-exists-p gnus-summary-buffer))
+ (buffer-name (get-buffer gnus-summary-buffer)))
(save-excursion
(set-buffer gnus-summary-buffer)
(let ((header (gnus-summary-article-header article)))
(let ((method (gnus-find-method-for-group
gnus-newsgroup-name)))
- (when (and (eq (car method) 'nneething)
- (vectorp header))
+ (if (not (eq (car method) 'nneething))
+ ()
(let ((dir (concat (file-name-as-directory (nth 1 method))
(mail-header-subject header))))
(when (file-directory-p dir)
((and (numberp article)
gnus-summary-buffer
(get-buffer gnus-summary-buffer)
- (gnus-buffer-exists-p gnus-summary-buffer)
+ (buffer-name (get-buffer gnus-summary-buffer))
(eq (cdr (save-excursion
(set-buffer gnus-summary-buffer)
(assq article gnus-newsgroup-reads)))
(buffer-name (get-buffer gnus-article-buffer))))
(save-excursion
(if (get-buffer gnus-original-article-buffer)
- (set-buffer gnus-original-article-buffer)
+ (set-buffer (get-buffer gnus-original-article-buffer))
(set-buffer (get-buffer-create gnus-original-article-buffer))
(buffer-disable-undo (current-buffer))
(setq major-mode 'gnus-original-article-mode)
\\{gnus-article-edit-mode-map}"
(interactive)
+ (kill-all-local-variables)
(setq major-mode 'gnus-article-edit-mode)
(setq mode-name "Article Edit")
(use-local-map gnus-article-edit-mode-map)
:type 'regexp)
(defcustom gnus-button-alist
- `(("<\\(url:[>\n\t ]*?\\)?news:[>\n\t ]*\\([^>\n\t ]*@[^>\n\t ]*\\)>" 0 t
+ `(("<\\(url: ?\\)?news:\\([^>\n\t ]*@[^>\n\t ]*\\)>" 0 t
gnus-button-message-id 2)
("\\bnews:\\([^>\n\t ]*@[^>\n\t ]*\\)" 0 t gnus-button-message-id 1)
- ("\\(\\b<\\(url:[>\n\t ]*\\)?news:[>\n\t ]*\\(//\\)?\\([^>\n\t ]*\\)>\\)"
- 1 t
+ ("\\(\\b<\\(url: ?\\)?news:\\(//\\)?\\([^>\n\t ]*\\)>\\)" 1 t
gnus-button-fetch-group 4)
("\\bnews:\\(//\\)?\\([^'\">\n\t ]+\\)" 0 t gnus-button-fetch-group 2)
("\\bin\\( +article\\| +message\\)? +\\(<\\([^\n @<>]+@[^\n @<>]+\\)>\\)" 2
t gnus-button-message-id 3)
("\\(<URL: *\\)mailto: *\\([^> \n\t]+\\)>" 0 t gnus-url-mailto 2)
- ("mailto:\\([a-zA-Z.-@_+0-9%]+\\)" 0 t gnus-url-mailto 2)
("\\bmailto:\\([^ \n\t]+\\)" 0 t gnus-url-mailto 1)
;; This is how URLs _should_ be embedded in text...
("<URL: *\\([^>]*\\)>" 0 t gnus-button-embedded-url 1)
'gnus-original-article-mode
#'mime-preview-quitting-method-for-gnus)
-(defun gnus-following-method (buf)
- (set-buffer buf)
- (message-followup)
- (message-yank-original)
- (kill-buffer buf)
- (goto-char (point-min))
- )
-
-(set-alist 'mime-view-following-method-alist
- 'gnus-original-article-mode
- #'gnus-following-method)
-
;;; @ end
;;;
;;; gnus-async.el --- asynchronous support for Gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;;; gnus-bcklg.el --- backlog functions for Gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;;; gnus-cache.el --- cache interface for Gnus
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
(eval-when-compile
(require 'gnus-sum))
+(defgroup gnus-cache nil
+ "Cache interface."
+ :group 'gnus)
+
+(defcustom gnus-cache-directory
+ (nnheader-concat gnus-directory "cache/")
+ "*The directory where cached articles will be stored."
+ :group 'gnus-cache
+ :type 'directory)
+
(defcustom gnus-cache-active-file
(concat (file-name-as-directory gnus-cache-directory) "active")
"*The cache active file."
(let ((articles (gnus-summary-work-articles n))
article out)
(while (setq article (pop articles))
- (gnus-summary-remove-process-mark article)
(if (natnump article)
(when (gnus-cache-possibly-enter-article
gnus-newsgroup-name article
nil nil nil t)
(push article out))
(gnus-message 2 "Can't cache article %d" article))
+ (gnus-summary-remove-process-mark article)
(gnus-summary-update-secondary-mark article))
(gnus-summary-next-subject 1)
(gnus-summary-position-point)
article out)
(while articles
(setq article (pop articles))
- (gnus-summary-remove-process-mark article)
(when (gnus-cache-possibly-remove-article article nil nil nil t)
(push article out))
+ (gnus-summary-remove-process-mark article)
(gnus-summary-update-secondary-mark article))
(gnus-summary-next-subject 1)
(gnus-summary-position-point)
;; Translate the first colon into a slash.
(when (string-match ":" group)
(aset group (match-beginning 0) ?/))
- (nnheader-replace-chars-in-string group ?. ?/)))
- t))
+ (nnheader-replace-chars-in-string group ?. ?/)))))
(if (stringp article) article (int-to-string article))))
(defun gnus-cache-update-article (group article)
(if top
""
(string-match
- (concat "^" (regexp-quote
- (file-name-as-directory
- (expand-file-name gnus-cache-directory))))
+ (concat "^" (file-name-as-directory
+ (expand-file-name gnus-cache-directory)))
(directory-file-name directory))
(nnheader-replace-chars-in-string
(substring (directory-file-name directory) (match-end 0))
(setq beg nil)
(setq beg (point-marker))))
(when (and beg end)
- ;; We use markers for the end-points to facilitate later
- ;; wrapping and mangling of text.
- (setq beg (set-marker (make-marker) beg)
- end (set-marker (make-marker) end))
(gnus-add-text-properties beg end props)
(goto-char beg)
(unless (save-excursion (search-backward "\n\n" nil t))
(point)
(progn (eval gnus-cited-text-button-line-format-spec) (point))
`gnus-article-toggle-cited-text
- (cons beg end))
+ ;; We use markers for the end-points to facilitate later
+ ;; wrapping and mangling of text.
+ (cons (set-marker (make-marker) beg)
+ (set-marker (make-marker) end)))
(point))
'article-type 'annotation)
(set-marker beg (point)))))))))
;;; gnus-demon.el --- daemonic Gnus behaviour
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;;; gnus-draft.el --- draft message support for Semi-gnus
;; Copyright (C) 1997,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
;; Keywords: mail, news, MIME, offline
(require 'message)
(require 'gnus-msg)
(require 'nndraft)
-(require 'gnus-agent)
(eval-when-compile (require 'cl))
;;; Draft minor mode
(gnus-draft-setup article gnus-newsgroup-name)
(push
`((lambda ()
- (when (gnus-buffer-exists-p ,gnus-summary-buffer)
+ (when (buffer-name (get-buffer ,gnus-summary-buffer))
(save-excursion
- (set-buffer ,gnus-summary-buffer)
+ (set-buffer (get-buffer ,gnus-summary-buffer))
(gnus-cache-possibly-remove-article ,article nil nil nil t)))))
message-send-actions)))
"Send message ARTICLE."
(gnus-draft-setup article (or group "nndraft:queue"))
(let ((message-syntax-checks 'dont-check-for-anything-just-trust-me)
- message-send-hook type method)
- ;; We read the meta-information that says how and where
- ;; this message is to be sent.
- (save-restriction
- (message-narrow-to-head)
- (when (re-search-forward
- (concat "^" (regexp-quote gnus-agent-meta-information-header) ":")
- nil t)
- (setq type (ignore-errors (read (current-buffer)))
- method (ignore-errors (read (current-buffer))))
- (message-remove-header gnus-agent-meta-information-header)))
- ;; Then we send it. If we have no meta-information, we just send
- ;; it and let Message figure out how.
- (if type
- (let ((message-this-is-news (eq type 'news))
- (message-this-is-mail (eq type 'mail))
- (gnus-post-method method)
- (message-post-method method))
- (message-send-and-exit))
- (message-send-and-exit))))
+ message-send-hook)
+ (message-send-and-exit)))
(defun gnus-draft-send-all-messages ()
"Send all the sendable drafts."
;;; gnus-dup.el --- suppression of duplicate articles in Gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;;; gnus-eform.el --- a mode for editing forms for Gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;;; gnus-ems.el --- functions for making Semi-gnus work under different Emacsen
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Tatsuya Ichikawa <t-ichi@niagara.shiojiri.ne.jp>
;; Keywords: news
(eval-and-compile
(let ((case-fold-search t))
(cond
- ((string-match "windows-nt\\|os/2\\|emx" (symbol-name system-type))
+ ((string-match "windows-nt\\|os/2\\|emx" (format "%s" system-type))
(setq nnheader-file-name-translation-alist
(append nnheader-file-name-translation-alist
'((?: . ?_)
;;;; Login Functions
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun bbb-login ()
- "return the token number if login is successful, otherwise return nil."
+ "return the token number if login is successful, otherwise return nil"
(interactive)
(setq grouplens-bbb-token nil)
(if (not (equal grouplens-pseudonym ""))
(gnus-add-shutdown 'bbb-logout 'gnus)
(defun bbb-logout ()
- "logout of bbb session."
+ "logout of bbb session"
(when grouplens-bbb-token
(let ((bbb-process
(bbb-connect-to-bbbd grouplens-bbb-host grouplens-bbb-port)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun bbb-build-mid-scores-alist (groupname)
- "this function can be called as part of the function to return the list of score files to use.
-See the gnus variable gnus-score-find-score-files-function.
+ "this function can be called as part of the function to return the
+list of score files to use. See the gnus variable
+gnus-score-find-score-files-function.
*Note:* If you want to use grouplens scores along with calculated scores,
you should see the offset and scale variables. At this point, I don't
(gnus-summary-best-unread-article))
(defun grouplens-summary-catchup-and-exit (rating)
- "Mark all articles not marked as unread in this newsgroup as read, then exit.
-If prefix argument ALL is non-nil, all articles are marked as read."
+ "Mark all articles not marked as unread in this newsgroup as read,
+ then exit. If prefix argument ALL is non-nil, all articles are
+ marked as read."
(interactive "P")
(when rating
(bbb-summary-rate-article rating))
(defconst gnus-gl-version "gnus-gl.el 2.50")
(defconst gnus-gl-maintainer-address "grouplens-bug@cs.umn.edu")
(defun gnus-gl-submit-bug-report ()
- "Submit via mail a bug report on gnus-gl."
+ "Submit via mail a bug report on gnus-gl"
(interactive)
(require 'reporter)
(reporter-submit-bug-report gnus-gl-maintainer-address
'gnus-gl-get-trace))
(defun gnus-gl-get-trace ()
- "Insert the contents of the BBBD trace buffer."
+ "Insert the contents of the BBBD trace buffer"
(when grouplens-bbb-buffer
(insert-buffer grouplens-bbb-buffer)))
;;; gnus-group.el --- group mode commands for Gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
(fboundp 'gnus-soup-pack-packet)]
["Pack packet" gnus-soup-pack-packet (fboundp 'gnus-soup-pack-packet)]
["Save areas" gnus-soup-save-areas (fboundp 'gnus-soup-pack-packet)]
- ["Brew SOUP" gnus-group-brew-soup (fboundp 'gnus-soup-pack-packet)])
+ ["Brew SOUP" gnus-soup-brew-soup (fboundp 'gnus-soup-pack-packet)])
["Send a bug report" gnus-bug t]
["Send a mail" gnus-group-mail t]
["Post an article..." gnus-group-post-news t]
(defun gnus-group-group-name ()
"Get the name of the newsgroup on the current line."
(let ((group (get-text-property (gnus-point-at-bol) 'gnus-group)))
- (when group
- (symbol-name group))))
+ (and group (symbol-name group))))
(defun gnus-group-group-level ()
"Get the level of the newsgroup on the current line."
;; Transform the select method into a unique server.
(when (stringp method)
(setq method (gnus-server-to-method method)))
-;;; (let ((saddr (intern (format "%s-address" (car method)))))
-;;; (setq method (gnus-copy-sequence method))
-;;; (require (car method))
-;;; (when (boundp saddr)
-;;; (unless (assq saddr method)
-;;; (nconc method `((,saddr ,(cadr method))))
-;;; (setf (cadr method) (format "%s-%d" (cadr method)
-;;; (incf gnus-ephemeral-group-server))))))
+ (let ((saddr (intern (format "%s-address" (car method)))))
+ (setq method (gnus-copy-sequence method))
+ (require (car method))
+ (when (boundp saddr)
+ (unless (assq saddr method)
+ (nconc method `((,saddr ,(cadr method))))
+ (setf (cadr method) (format "%s-%d" (cadr method)
+ (incf gnus-ephemeral-group-server))))))
(let ((group (if (gnus-group-foreign-p group) group
(gnus-group-prefixed-name group method))))
(gnus-sethash
(if (< (length out) 2) (car out) (nreverse out))))
(defun gnus-group-yank-group (&optional arg)
- "Yank the last newsgroups killed with \\[gnus-group-kill-group], inserting it before the current newsgroup.
-The numeric ARG specifies how many newsgroups are to be yanked. The
-name of the newsgroup yanked is returned, or (if several groups are
-yanked) a list of yanked groups is returned."
+ "Yank the last newsgroups killed with \\[gnus-group-kill-group],
+inserting it before the current newsgroup. The numeric ARG specifies
+how many newsgroups are to be yanked. The name of the newsgroup yanked
+is returned, or (if several groups are yanked) a list of yanked groups
+is returned."
(interactive "p")
(setq arg (or arg 1))
(let (info group prev out)
(defsubst gnus-group-timestamp (group)
"Return the timestamp for GROUP."
- (gnus-group-get-parameter group 'timestamp t))
+ (gnus-group-get-parameter group 'timestamp))
(defun gnus-group-timestamp-delta (group)
"Return the offset in seconds from the timestamp for GROUP to the current time, as a floating point number."
;;; gnus-int.el --- backend interface functions for Gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
-;; Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;;; gnus-logic.el --- advanced scoring code for Gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;; Copyright (C) 1994,95,96,97,98 Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
-;; Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;;; gnus-move.el --- commands for moving Gnus from one server to another
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;; into the Gnus info format.
(setq to-reads
(gnus-range-add
- (gnus-compress-sequence
- (and (setq to-reads (delq nil to-reads))
- (sort to-reads '<))
- t)
+ (gnus-compress-sequence (and to-reads (sort to-reads '<)) t)
(cons 1 (1- (car to-active)))))
(gnus-info-set-read info to-reads)
;; Do the marks. I'm sure y'all understand what's
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
-;; Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
;; Keywords: mail, news, MIME
(require 'message)
(require 'gnus-art)
-(defcustom gnus-post-method nil
+;; Added by Sudish Joseph <joseph@cis.ohio-state.edu>.
+(defvar gnus-post-method nil
"*Preferred method for posting USENET news.
+If this variable is nil, Gnus will use the current method to decide
+which method to use when posting. If it is non-nil, it will override
+the current method. This method will not be used in mail groups and
+the like, only in \"real\" newsgroups.
-If this variable is `current', Gnus will use the \"current\" select
-method when posting. If it is nil (which is the default), Gnus will
-use the native posting method of the server.
-
-This method will not be used in mail groups and the like, only in
-\"real\" newsgroups.
-
-If not nil nor `native', the value must be a valid method as discussed
-in the documentation of `gnus-select-method'. It can also be a list of
-methods. If that is the case, the user will be queried for what select
-method to use when posting."
- :group 'gnus-group-foreign
- :type `(choice (const nil)
- (const current)
- (const native)
- (sexp :tag "Methods" ,gnus-select-method)))
+The value must be a valid method as discussed in the documentation of
+`gnus-select-method'. It can also be a list of methods. If that is
+the case, the user will be queried for what select method to use when
+posting.")
(defvar gnus-outgoing-message-group nil
"*All outgoing messages will be put in this group.
(defvar gnus-message-setup-hook nil
"Hook run after setting up a message buffer.")
-(defvar gnus-bug-create-help-buffer t
- "*Should we create the *Gnus Help Bug* buffer?")
-
;;; Internal variables.
(defvar gnus-message-buffer "*Mail Gnus*")
(message-add-action
`(set-window-configuration ,winconf) 'exit 'postpone 'kill)
(message-add-action
- `(when (gnus-buffer-exists-p ,buffer)
+ `(when (buffer-name (get-buffer ,buffer))
(save-excursion
- (set-buffer ,buffer)
+ (set-buffer (get-buffer ,buffer))
,(when article
`(gnus-summary-mark-article-as-replied ,article))))
'send))
(message-supersede)
(push
`((lambda ()
- (when (gnus-buffer-exists-p ,gnus-summary-buffer)
+ (when (buffer-name (get-buffer ,gnus-summary-buffer))
(save-excursion
- (set-buffer ,gnus-summary-buffer)
+ (set-buffer (get-buffer ,gnus-summary-buffer))
(gnus-cache-possibly-remove-article ,article nil nil nil t)
(gnus-summary-mark-as-read ,article gnus-canceled-mark)))))
message-send-actions))))
(let ((article-buffer (or article-buffer gnus-article-buffer))
end beg contents)
(if (not (and (get-buffer article-buffer)
- (gnus-buffer-exists-p article-buffer)))
+ (buffer-name (get-buffer article-buffer))))
(error "Can't find any article buffer")
(save-excursion
(set-buffer article-buffer)
;; If the group-method is nil (which shouldn't happen) we use
;; the default method.
((null group-method)
- (or (and (null (eq gnus-post-method 'active)) gnus-post-method)
- gnus-select-method message-post-method))
- ;; We want the inverse of the default
+ (or gnus-post-method gnus-select-method message-post-method))
+ ;; We want this group's method.
((and arg (not (eq arg 0)))
- (if (eq gnus-post-method 'active)
- gnus-select-method
- group-method))
+ group-method)
;; We query the user for a post method.
((or arg
(and gnus-post-method
- (not (eq gnus-post-method 'current))
(listp (car gnus-post-method))))
(let* ((methods
;; Collect all methods we know about.
(append
- (when (and gnus-post-method
- (not (eq gnus-post-method 'current)))
+ (when gnus-post-method
(if (listp (car gnus-post-method))
gnus-post-method
(list gnus-post-method)))
(cons (or gnus-last-posting-server "") 0))))
method-alist))))
;; Override normal method.
- ((and (eq gnus-post-method 'current)
- (not arg))
- group-method)
(gnus-post-method
gnus-post-method)
;; Use the normal select method.
;;; as well include the Emacs version as well.
;;; The following function works with later GNU Emacs, and XEmacs.
(defun gnus-extended-version ()
- "Stringified Gnus version and Emacs version."
+ "Stringified Gnus version"
(interactive)
- (concat
- gnus-version
- "/"
- (cond
- ((string-match "^\\([0-9]+\\.[0-9]+\\)\\.[.0-9]+$" emacs-version)
- (concat "Emacs " (substring emacs-version
- (match-beginning 1)
- (match-end 1))))
- ((string-match "\\([A-Z]*[Mm][Aa][Cc][Ss]\\)[^(]*\\(\\((beta.*)\\|'\\)\\)?"
- emacs-version)
- (concat (substring emacs-version
- (match-beginning 1)
- (match-end 1))
- (format " %d.%d" emacs-major-version emacs-minor-version)
- (if (match-beginning 3)
- (substring emacs-version
- (match-beginning 3)
- (match-end 3))
- "")
- (if (boundp 'xemacs-codename)
- (concat " - \"" xemacs-codename "\""))))
- (t emacs-version))))
-
-;; Written by "Mr. Per Persson" <pp@gnu.ai.mit.edu>.
-(defun gnus-inews-insert-mime-headers ()
- "Insert MIME headers.
-Assumes ISO-Latin-1 is used iff 8-bit characters are present."
- (goto-char (point-min))
- (let ((mail-header-separator
- (progn
- (goto-char (point-min))
- (if (and (search-forward (concat "\n" mail-header-separator "\n")
- nil t)
- (not (search-backward "\n\n" nil t)))
- mail-header-separator
- ""))))
- (or (mail-position-on-field "Mime-Version")
- (insert "1.0")
- (cond ((save-restriction
- (widen)
- (goto-char (point-min))
- (re-search-forward "[^\000-\177]" nil t))
- (or (mail-position-on-field "Content-Type")
- (insert "text/plain; charset=ISO-8859-1"))
- (or (mail-position-on-field "Content-Transfer-Encoding")
- (insert "8bit")))
- (t (or (mail-position-on-field "Content-Type")
- (insert "text/plain; charset=US-ASCII"))
- (or (mail-position-on-field "Content-Transfer-Encoding")
- (insert "7bit")))))))
-
-(custom-add-option 'message-header-hook 'gnus-inews-insert-mime-headers)
+ gnus-version)
\f
;;;
(interactive "P")
(gnus-setup-message 'forward
(gnus-summary-select-article)
- (let ((charset default-mime-charset))
- (set-buffer gnus-original-article-buffer)
- (make-local-variable 'default-mime-charset)
- (setq default-mime-charset charset)
- )
+ (set-buffer gnus-original-article-buffer)
(let ((message-included-forward-headers
(if full-headers "" message-included-forward-headers)))
(message-forward post))))
(error "Gnus has been shut down"))
(gnus-setup-message 'bug
(delete-other-windows)
- (when gnus-bug-create-help-buffer
- (switch-to-buffer "*Gnus Help Bug*")
- (erase-buffer)
- (insert gnus-bug-message)
- (goto-char (point-min)))
+ (switch-to-buffer (get-buffer-create "*Gnus Help Bug*"))
+ (erase-buffer)
+ (insert gnus-bug-message)
+ (goto-char (point-min))
(message-pop-to-buffer "*Gnus Bug*")
(message-setup `((To . ,gnus-maintainer) (Subject . "")))
- (when gnus-bug-create-help-buffer
- (push `(gnus-bug-kill-buffer) message-send-actions))
+ (push `(gnus-bug-kill-buffer) message-send-actions)
(goto-char (point-min))
(re-search-forward (concat "^" (regexp-quote mail-header-separator) "$"))
(forward-line 1)
- (insert (gnus-version) "\n"
- (emacs-version) "\n")
+ (insert (gnus-version) "\n")
+ (insert (emacs-version) "\n")
(when (and (boundp 'nntp-server-type)
(stringp nntp-server-type))
(insert nntp-server-type))
;;; gnus-nocem.el --- NoCeM pseudo-cancellation treatment
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
"Real-name mappings of subscribed groups.")
(defun gnus-fill-real-hashtb ()
- "Fill up a hash table with the real-name mappings from the user's active file."
+ "Fill up a hash table with the real-name mappings from the user's
+active file."
(setq gnus-nocem-real-group-hashtb (gnus-make-hashtable
(length gnus-newsrc-alist)))
(mapcar (lambda (group)
(defun gnus-get-buffer-name (variable)
"Returns the buffer name associated with the contents of a variable."
- (let ((buf (get-buffer (gnus-window-to-buffer-helper
+ (buffer-name (get-buffer (gnus-window-to-buffer-helper
(cdr (assq variable gnus-window-to-buffer))))))
- (and buf
- (buffer-name buf))))
(defun gnus-picons-buffer-name ()
(cond ((or (stringp gnus-picons-display-where)
'text nil nil nil rightp))))))
(defun gnus-picons-action-toggle (data)
- "Toggle annotation."
+ "Toggle annotation"
(interactive "e")
(let* ((annot (car data))
(glyph (annotation-glyph annot)))
(set-annotation-data annot (cons annot glyph))))
(defun gnus-picons-clear-cache ()
- "Clear the picons cache."
+ "Clear the picons cache"
(interactive)
(setq gnus-picons-glyph-alist nil
gnus-picons-url-alist nil))
(error "Unknown picon job tag %s" tag)))))))
(defun gnus-picons-next-job ()
- "Start processing the job queue if it is not in progress."
+ "Start processing the job queue if it is not in progress"
(unless gnus-picons-job-already-running
(gnus-picons-next-job-internal)))
;;; gnus-range.el --- range and sequence functions for Gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;;; gnus-salt.el --- alternate summary mode interfaces for Gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
(setq gnus-pick-mode-map (make-sparse-keymap))
(gnus-define-keys gnus-pick-mode-map
+ "t" gnus-uu-mark-thread
+ "T" gnus-uu-unmark-thread
" " gnus-pick-next-page
"u" gnus-summary-unmark-as-processable
+ "U" gnus-summary-unmark-all-processable
+ "v" gnus-uu-mark-over
+ "r" gnus-uu-mark-region
+ "R" gnus-uu-unmark-region
+ "e" gnus-uu-mark-by-regexp
+ "E" gnus-uu-mark-by-regexp
+ "b" gnus-uu-mark-buffer
+ "B" gnus-uu-unmark-buffer
"." gnus-pick-article
gnus-down-mouse-2 gnus-pick-mouse-pick-region
- "\r" gnus-pick-start-reading
- ;; "t" gnus-uu-mark-thread
- ;; "T" gnus-uu-unmark-thread
- ;; "U" gnus-summary-unmark-all-processable
- ;; "v" gnus-uu-mark-over
- ;; "r" gnus-uu-mark-region
- ;; "R" gnus-uu-unmark-region
- ;; "e" gnus-uu-mark-by-regexp
- ;; "E" gnus-uu-mark-by-regexp
- ;; "b" gnus-uu-mark-buffer
- ;; "B" gnus-uu-unmark-buffer
;;gnus-mouse-2 gnus-pick-mouse-pick
- ;; "X" gnus-pick-start-reading
- ))
+ "X" gnus-pick-start-reading
+ "\r" gnus-pick-start-reading))
(defun gnus-pick-make-menu-bar ()
(unless (boundp 'gnus-pick-menu)
["Article" gnus-summary-mark-as-processable t]
["Thread" gnus-uu-mark-thread t]
["Region" gnus-uu-mark-region t]
- ["Regexp" gnus-uu-mark-by-regexp t]
+ ["Regexp" gnus-uu-mark-regexp t]
["Buffer" gnus-uu-mark-buffer t])
("Unpick"
["Article" gnus-summary-unmark-as-processable t]
["Thread" gnus-uu-unmark-thread t]
["Region" gnus-uu-unmark-region t]
- ["Regexp" gnus-uu-unmark-by-regexp t]
- ["Buffer" gnus-summary-unmark-all-processable t])
+ ["Regexp" gnus-uu-unmark-regexp t]
+ ["Buffer" gnus-uu-unmark-buffer t])
["Start reading" gnus-pick-start-reading t]
["Switch pick mode off" gnus-pick-mode gnus-pick-mode]))))
(interactive "P")
(let ((buf (current-buffer))
win)
- (set-buffer gnus-article-buffer)
(gnus-article-read-summary-keys arg nil t)
(when (setq win (get-buffer-window buf))
(select-window win)
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
;; Author: Per Abrahamsen <amanda@iesd.auc.dk>
-;; Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
(require 'gnus-sum)
(require 'gnus-range)
(require 'message)
-(require 'score-mode)
(defcustom gnus-global-score-files nil
"List of global score files and directories.
:group 'gnus-score-adapt
:type '(choice (const nil) integer))
-(defcustom gnus-adaptive-word-no-group-words nil
- "If t, don't adaptively score words included in the group name."
- :group 'gnus-score-adapt
- :type 'boolean)
-
(defcustom gnus-score-mimic-keymap nil
"*Have the score entry functions pretend that they are a keymap."
:group 'gnus-score-default
;; Load score file FILE. Returns a list a retrieved score-alists.
(let* ((file (expand-file-name
(or (and (string-match
- (concat "^" (regexp-quote
- (expand-file-name
- gnus-kill-files-directory)))
+ (concat "^" (expand-file-name
+ gnus-kill-files-directory))
(expand-file-name file))
file)
(concat (file-name-as-directory gnus-kill-files-directory)
(gnus-prin1 score)
;; This is a normal score file, so we print it very
;; prettily.
- (let ((lisp-mode-syntax-table score-mode-syntax-table))
- (pp score (current-buffer)))))
+ (pp score (current-buffer))))
(gnus-make-directory (file-name-directory file))
;; If the score file is empty, we delete it.
(if (zerop (buffer-size))
(set-syntax-table syntab))
;; Make all the ignorable words ignored.
(let ((ignored (append gnus-ignored-adaptive-words
- (if gnus-adaptive-word-no-group-words
- (message-tokenize-header
- (gnus-group-real-name gnus-newsgroup-name)
- "."))
gnus-default-ignored-adaptive-words)))
(while ignored
(gnus-sethash (pop ignored) nil hashtb)))))
(set-syntax-table syntab))
;; Make all the ignorable words ignored.
(let ((ignored (append gnus-ignored-adaptive-words
- (if gnus-adaptive-word-no-group-words
- (message-tokenize-header
- (gnus-group-real-name
- gnus-newsgroup-name)
- "."))
gnus-default-ignored-adaptive-words)))
(while ignored
(gnus-sethash (pop ignored) nil hashtb)))
(interactive (list gnus-global-score-files))
(let (out)
(while files
- ;; #### /$ Unix-specific?
(if (string-match "/$" (car files))
(setq out (nconc (directory-files
(car files) t
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
;; Author: Per Abrahamsen <abraham@iesd.auc.dk>
-;; Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news, mail
;; This file is part of GNU Emacs.
[prefix name encoding description number]
though the two last may be nil if they are missing."
(let (areas)
- (when (file-exists-p file)
- (save-excursion
- (set-buffer (nnheader-find-file-noselect file 'force))
- (buffer-disable-undo (current-buffer))
- (goto-char (point-min))
- (while (not (eobp))
- (push (vector (gnus-soup-field)
- (gnus-soup-field)
- (gnus-soup-field)
- (and (eq (preceding-char) ?\t)
- (gnus-soup-field))
- (and (eq (preceding-char) ?\t)
- (string-to-int (gnus-soup-field))))
- areas)
- (when (eq (preceding-char) ?\t)
- (beginning-of-line 2)))
- (kill-buffer (current-buffer))))
+ (save-excursion
+ (set-buffer (nnheader-find-file-noselect file 'force))
+ (buffer-disable-undo (current-buffer))
+ (goto-char (point-min))
+ (while (not (eobp))
+ (push (vector (gnus-soup-field)
+ (gnus-soup-field)
+ (gnus-soup-field)
+ (and (eq (preceding-char) ?\t)
+ (gnus-soup-field))
+ (and (eq (preceding-char) ?\t)
+ (string-to-int (gnus-soup-field))))
+ areas)
+ (when (eq (preceding-char) ?\t)
+ (beginning-of-line 2)))
+ (kill-buffer (current-buffer)))
areas))
(defun gnus-soup-parse-replies (file)
t)
(t
(buffer-disable-undo msg-buf)
+ (buffer-disable-undo tmp-buf)
(set-buffer msg-buf)
(goto-char (point-min))
(while (not (eobp))
;;; gnus-spec.el --- format spec functions for Gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
val)
(when (and (boundp buffer)
(setq val (symbol-value buffer))
- (gnus-buffer-exists-p val))
- (set-buffer val))
+ (get-buffer val)
+ (buffer-name (get-buffer val)))
+ (set-buffer (get-buffer val)))
(setq new-format (symbol-value
(intern (format "gnus-%s-line-format" type)))))
(setq entry (cdr (assq type gnus-format-specs)))
;;; gnus-srvr.el --- virtual server support for Gnus
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;;; gnus-start.el --- startup functions for Gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
info (inline (gnus-find-method-for-group
(gnus-info-group info)))))
(gnus-activate-group (gnus-info-group info) nil t))
-
(let* ((range (gnus-info-read info))
(num 0))
;; If a cache is present, we may have to alter the active info.
;; These groups are foreign. Check the level.
(when (<= (gnus-info-level info) foreign-level)
(setq active (gnus-activate-group group 'scan))
- ;; Let the Gnus agent save the active file.
- (when (and gnus-agent gnus-plugged)
- (gnus-agent-save-group-info
- method (gnus-group-real-name group) active))
(unless (inline (gnus-virtual-group-p group))
(inline (gnus-close-group group)))
(when (fboundp (intern (concat (symbol-name (car method))
(defun gnus-ignored-newsgroups-has-to-p ()
- "Non-nil iff gnus-ignored-newsgroups includes \"^to\\\\.\" as an element."
+ "T only when gnus-ignored-newsgroups includes \"^to\\\\.\" as an element."
;; note this regexp is the same as:
;; (concat (regexp-quote "^to\\.") "\\($\\|" (regexp-quote "\\|") "\\)")
- (string-match "\\^to\\\\\\.\\($\\|\\\\|\\)" gnus-ignored-newsgroups))
+ (string-match "\\^to\\\\\\.\\($\\|\\\\|\\)"
+ gnus-ignored-newsgroups))
;; Read an active file and place the results in `gnus-active-hashtb'.
(defun gnus-active-to-gnus-format (&optional method hashtb ignore-errors
(if (or (file-exists-p real-file)
(file-exists-p (concat real-file ".el"))
(file-exists-p (concat real-file ".eld")))
- real-file
- file)))
+ real-file file)))
(defun gnus-newsrc-to-gnus-format ()
(setq gnus-newsrc-options "")
;;; gnus-sum.el --- summary mode commands for Semi-gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
;; Keywords: mail, news, MIME
(require 'std11)
(require 'mime-view)
+(or (get-unified-alist mime-acting-condition '((type . text)))
+ (error "Please install latest SEMI."))
+
(autoload 'gnus-summary-limit-include-cached "gnus-cache" nil t)
(autoload 'gnus-set-summary-default-charset "gnus-i18n" nil t)
["Increase score..." gnus-summary-increase-score t]
["Lower score..." gnus-summary-lower-score t]))))
- ;; Define both the Article menu in the summary buffer and the equivalent
- ;; Commands menu in the article buffer here for consistency.
- (let ((innards
- '(("Hide"
- ["All" gnus-article-hide t]
- ["Headers" gnus-article-hide-headers t]
- ["Signature" gnus-article-hide-signature t]
- ["Citation" gnus-article-hide-citation t]
- ["PGP" gnus-article-hide-pgp t]
- ["Boring headers" gnus-article-hide-boring-headers t])
- ("Highlight"
- ["All" gnus-article-highlight t]
- ["Headers" gnus-article-highlight-headers t]
- ["Signature" gnus-article-highlight-signature t]
- ["Citation" gnus-article-highlight-citation t])
- ("Date"
- ["Local" gnus-article-date-local t]
- ["ISO8601" gnus-article-date-iso8601 t]
- ["UT" gnus-article-date-ut t]
- ["Original" gnus-article-date-original t]
- ["Lapsed" gnus-article-date-lapsed t]
- ["User-defined" gnus-article-date-user t])
- ("Washing"
- ("Remove Blanks"
- ["Leading" gnus-article-strip-leading-blank-lines t]
- ["Multiple" gnus-article-strip-multiple-blank-lines t]
- ["Trailing" gnus-article-remove-trailing-blank-lines t]
- ["All of the above" gnus-article-strip-blank-lines t]
- ["All" gnus-article-strip-all-blank-lines t]
- ["Leading space" gnus-article-strip-leading-space t])
- ["Overstrike" gnus-article-treat-overstrike t]
- ["Dumb quotes" gnus-article-treat-dumbquotes t]
- ["Emphasis" gnus-article-emphasize t]
- ["Word wrap" gnus-article-fill-cited-article t]
- ["CR" gnus-article-remove-cr t]
- ["Show X-Face" gnus-article-display-x-face t]
- ["UnHTMLize" gnus-article-treat-html t]
- ["Rot 13" gnus-summary-caesar-message t]
- ["Unix pipe" gnus-summary-pipe-message t]
- ["Add buttons" gnus-article-add-buttons t]
- ["Add buttons to head" gnus-article-add-buttons-to-head t]
- ["Stop page breaking" gnus-summary-stop-page-breaking t]
- ["Toggle MIME" gnus-summary-toggle-mime t]
- ["Verbose header" gnus-summary-verbose-headers t]
- ["Toggle header" gnus-summary-toggle-header t])
- ("Output"
- ["Save in default format" gnus-summary-save-article t]
- ["Save in file" gnus-summary-save-article-file t]
- ["Save in Unix mail format" gnus-summary-save-article-mail t]
- ["Save in MH folder" gnus-summary-save-article-folder t]
- ["Save in VM folder" gnus-summary-save-article-vm t]
- ["Save in RMAIL mbox" gnus-summary-save-article-rmail t]
- ["Save body in file" gnus-summary-save-article-body-file t]
- ["Pipe through a filter" gnus-summary-pipe-output t]
- ["Add to SOUP packet" gnus-soup-add-article t]
- ["Print" gnus-summary-print-article t])
- ("Backend"
- ["Respool article..." gnus-summary-respool-article t]
- ["Move article..." gnus-summary-move-article
- (gnus-check-backend-function
- 'request-move-article gnus-newsgroup-name)]
- ["Copy article..." gnus-summary-copy-article t]
- ["Crosspost article..." gnus-summary-crosspost-article
- (gnus-check-backend-function
- 'request-replace-article gnus-newsgroup-name)]
- ["Import file..." gnus-summary-import-article t]
- ["Check if posted" gnus-summary-article-posted-p t]
- ["Edit article" gnus-summary-edit-article
- (not (gnus-group-read-only-p))]
- ["Delete article" gnus-summary-delete-article
- (gnus-check-backend-function
- 'request-expire-articles gnus-newsgroup-name)]
- ["Query respool" gnus-summary-respool-query t]
- ["Delete expirable articles" gnus-summary-expire-articles-now
- (gnus-check-backend-function
- 'request-expire-articles gnus-newsgroup-name)])
- ("Extract"
- ["Uudecode" gnus-uu-decode-uu t]
- ["Uudecode and save" gnus-uu-decode-uu-and-save t]
- ["Unshar" gnus-uu-decode-unshar t]
- ["Unshar and save" gnus-uu-decode-unshar-and-save t]
- ["Save" gnus-uu-decode-save t]
- ["Binhex" gnus-uu-decode-binhex t]
- ["Postscript" gnus-uu-decode-postscript t])
- ("Cache"
- ["Enter article" gnus-cache-enter-article t]
- ["Remove article" gnus-cache-remove-article t])
- ["Select article buffer" gnus-summary-select-article-buffer t]
- ["Enter digest buffer" gnus-summary-enter-digest-group t]
- ["Isearch article..." gnus-summary-isearch-article t]
- ["Beginning of the article" gnus-summary-beginning-of-article t]
- ["End of the article" gnus-summary-end-of-article t]
- ["Fetch parent of article" gnus-summary-refer-parent-article t]
- ["Fetch referenced articles" gnus-summary-refer-references t]
- ["Fetch current thread" gnus-summary-refer-thread t]
- ["Fetch article with id..." gnus-summary-refer-article t]
- ["Redisplay" gnus-summary-show-article t])))
- (easy-menu-define
- gnus-summary-article-menu gnus-summary-mode-map ""
- (cons "Article" innards))
-
- (easy-menu-define
- gnus-article-commands-menu gnus-article-mode-map ""
- (cons "Commands" innards)))
+ '(("Default header"
+ ["Ask" (gnus-score-set-default 'gnus-score-default-header nil)
+ :style radio
+ :selected (null gnus-score-default-header)]
+ ["From" (gnus-score-set-default 'gnus-score-default-header 'a)
+ :style radio
+ :selected (eq gnus-score-default-header 'a)]
+ ["Subject" (gnus-score-set-default 'gnus-score-default-header 's)
+ :style radio
+ :selected (eq gnus-score-default-header 's)]
+ ["Article body"
+ (gnus-score-set-default 'gnus-score-default-header 'b)
+ :style radio
+ :selected (eq gnus-score-default-header 'b )]
+ ["All headers"
+ (gnus-score-set-default 'gnus-score-default-header 'h)
+ :style radio
+ :selected (eq gnus-score-default-header 'h )]
+ ["Message-ID" (gnus-score-set-default 'gnus-score-default-header 'i)
+ :style radio
+ :selected (eq gnus-score-default-header 'i )]
+ ["Thread" (gnus-score-set-default 'gnus-score-default-header 't)
+ :style radio
+ :selected (eq gnus-score-default-header 't )]
+ ["Crossposting"
+ (gnus-score-set-default 'gnus-score-default-header 'x)
+ :style radio
+ :selected (eq gnus-score-default-header 'x )]
+ ["Lines" (gnus-score-set-default 'gnus-score-default-header 'l)
+ :style radio
+ :selected (eq gnus-score-default-header 'l )]
+ ["Date" (gnus-score-set-default 'gnus-score-default-header 'd)
+ :style radio
+ :selected (eq gnus-score-default-header 'd )]
+ ["Followups to author"
+ (gnus-score-set-default 'gnus-score-default-header 'f)
+ :style radio
+ :selected (eq gnus-score-default-header 'f )])
+ ("Default type"
+ ["Ask" (gnus-score-set-default 'gnus-score-default-type nil)
+ :style radio
+ :selected (null gnus-score-default-type)]
+ ;; The `:active' key is commented out in the following,
+ ;; because the GNU Emacs hack to support radio buttons use
+ ;; active to indicate which button is selected.
+ ["Substring" (gnus-score-set-default 'gnus-score-default-type 's)
+ :style radio
+ ;; :active (not (memq gnus-score-default-header '(l d)))
+ :selected (eq gnus-score-default-type 's)]
+ ["Regexp" (gnus-score-set-default 'gnus-score-default-type 'r)
+ :style radio
+ ;; :active (not (memq gnus-score-default-header '(l d)))
+ :selected (eq gnus-score-default-type 'r)]
+ ["Exact" (gnus-score-set-default 'gnus-score-default-type 'e)
+ :style radio
+ ;; :active (not (memq gnus-score-default-header '(l d)))
+ :selected (eq gnus-score-default-type 'e)]
+ ["Fuzzy" (gnus-score-set-default 'gnus-score-default-type 'f)
+ :style radio
+ ;; :active (not (memq gnus-score-default-header '(l d)))
+ :selected (eq gnus-score-default-type 'f)]
+ ["Before date" (gnus-score-set-default 'gnus-score-default-type 'b)
+ :style radio
+ ;; :active (eq (gnus-score-default-header 'd))
+ :selected (eq gnus-score-default-type 'b)]
+ ["At date" (gnus-score-set-default 'gnus-score-default-type 'n)
+ :style radio
+ ;; :active (eq (gnus-score-default-header 'd))
+ :selected (eq gnus-score-default-type 'n)]
+ ["After date" (gnus-score-set-default 'gnus-score-default-type 'a)
+ :style radio
+ ;; :active (eq (gnus-score-default-header 'd))
+ :selected (eq gnus-score-default-type 'a)]
+ ["Less than number"
+ (gnus-score-set-default 'gnus-score-default-type '<)
+ :style radio
+ ;; :active (eq (gnus-score-default-header 'l))
+ :selected (eq gnus-score-default-type '<)]
+ ["Equal to number"
+ (gnus-score-set-default 'gnus-score-default-type '=)
+ :style radio
+ ;; :active (eq (gnus-score-default-header 'l))
+ :selected (eq gnus-score-default-type '=)]
+ ["Greater than number"
+ (gnus-score-set-default 'gnus-score-default-type '>)
+ :style radio
+ ;; :active (eq (gnus-score-default-header 'l))
+ :selected (eq gnus-score-default-type '>)])
+ ["Default fold" gnus-score-default-fold-toggle
+ :style toggle
+ :selected gnus-score-default-fold]
+ ("Default duration"
+ ["Ask" (gnus-score-set-default 'gnus-score-default-duration nil)
+ :style radio
+ :selected (null gnus-score-default-duration)]
+ ["Permanent"
+ (gnus-score-set-default 'gnus-score-default-duration 'p)
+ :style radio
+ :selected (eq gnus-score-default-duration 'p)]
+ ["Temporary"
+ (gnus-score-set-default 'gnus-score-default-duration 't)
+ :style radio
+ :selected (eq gnus-score-default-duration 't)]
+ ["Immediate"
+ (gnus-score-set-default 'gnus-score-default-duration 'i)
+ :style radio
+ :selected (eq gnus-score-default-duration 'i)]))
+
+ (easy-menu-define
+ gnus-summary-article-menu gnus-summary-mode-map ""
+ '("Article"
+ ("Hide"
+ ["All" gnus-article-hide t]
+ ["Headers" gnus-article-hide-headers t]
+ ["Signature" gnus-article-hide-signature t]
+ ["Citation" gnus-article-hide-citation t]
+ ["PGP" gnus-article-hide-pgp t]
+ ["Boring headers" gnus-article-hide-boring-headers t])
+ ("Highlight"
+ ["All" gnus-article-highlight t]
+ ["Headers" gnus-article-highlight-headers t]
+ ["Signature" gnus-article-highlight-signature t]
+ ["Citation" gnus-article-highlight-citation t])
+ ("Date"
+ ["Local" gnus-article-date-local t]
+ ["ISO8601" gnus-article-date-iso8601 t]
+ ["UT" gnus-article-date-ut t]
+ ["Original" gnus-article-date-original t]
+ ["Lapsed" gnus-article-date-lapsed t]
+ ["User-defined" gnus-article-date-user t])
+ ("Washing"
+ ("Remove Blanks"
+ ["Leading" gnus-article-strip-leading-blank-lines t]
+ ["Multiple" gnus-article-strip-multiple-blank-lines t]
+ ["Trailing" gnus-article-remove-trailing-blank-lines t]
+ ["All of the above" gnus-article-strip-blank-lines t]
+ ["All" gnus-article-strip-all-blank-lines t]
+ ["Leading space" gnus-article-strip-leading-space t])
+ ["Overstrike" gnus-article-treat-overstrike t]
+ ["Dumb quotes" gnus-article-treat-dumbquotes t]
+ ["Emphasis" gnus-article-emphasize t]
+ ["Word wrap" gnus-article-fill-cited-article t]
+ ["CR" gnus-article-remove-cr t]
+ ["Show X-Face" gnus-article-display-x-face t]
+ ["UnHTMLize" gnus-article-treat-html t]
+ ["Rot 13" gnus-summary-caesar-message t]
+ ["Unix pipe" gnus-summary-pipe-message t]
+ ["Add buttons" gnus-article-add-buttons t]
+ ["Add buttons to head" gnus-article-add-buttons-to-head t]
+ ["Stop page breaking" gnus-summary-stop-page-breaking t]
+ ["Toggle MIME" gnus-summary-toggle-mime t]
+ ["Verbose header" gnus-summary-verbose-headers t]
+ ["Toggle header" gnus-summary-toggle-header t])
+ ("Output"
+ ["Save in default format" gnus-summary-save-article t]
+ ["Save in file" gnus-summary-save-article-file t]
+ ["Save in Unix mail format" gnus-summary-save-article-mail t]
+ ["Save in MH folder" gnus-summary-save-article-folder t]
+ ["Save in VM folder" gnus-summary-save-article-vm t]
+ ["Save in RMAIL mbox" gnus-summary-save-article-rmail t]
+ ["Save body in file" gnus-summary-save-article-body-file t]
+ ["Pipe through a filter" gnus-summary-pipe-output t]
+ ["Add to SOUP packet" gnus-soup-add-article t]
+ ["Print" gnus-summary-print-article t])
+ ("Backend"
+ ["Respool article..." gnus-summary-respool-article t]
+ ["Move article..." gnus-summary-move-article
+ (gnus-check-backend-function
+ 'request-move-article gnus-newsgroup-name)]
+ ["Copy article..." gnus-summary-copy-article t]
+ ["Crosspost article..." gnus-summary-crosspost-article
+ (gnus-check-backend-function
+ 'request-replace-article gnus-newsgroup-name)]
+ ["Import file..." gnus-summary-import-article t]
+ ["Check if posted" gnus-summary-article-posted-p t]
+ ["Edit article" gnus-summary-edit-article
+ (not (gnus-group-read-only-p))]
+ ["Delete article" gnus-summary-delete-article
+ (gnus-check-backend-function
+ 'request-expire-articles gnus-newsgroup-name)]
+ ["Query respool" gnus-summary-respool-query t]
+ ["Delete expirable articles" gnus-summary-expire-articles-now
+ (gnus-check-backend-function
+ 'request-expire-articles gnus-newsgroup-name)])
+ ("Extract"
+ ["Uudecode" gnus-uu-decode-uu t]
+ ["Uudecode and save" gnus-uu-decode-uu-and-save t]
+ ["Unshar" gnus-uu-decode-unshar t]
+ ["Unshar and save" gnus-uu-decode-unshar-and-save t]
+ ["Save" gnus-uu-decode-save t]
+ ["Binhex" gnus-uu-decode-binhex t]
+ ["Postscript" gnus-uu-decode-postscript t])
+ ("Cache"
+ ["Enter article" gnus-cache-enter-article t]
+ ["Remove article" gnus-cache-remove-article t])
+ ["Select article buffer" gnus-summary-select-article-buffer t]
+ ["Enter digest buffer" gnus-summary-enter-digest-group t]
+ ["Isearch article..." gnus-summary-isearch-article t]
+ ["Beginning of the article" gnus-summary-beginning-of-article t]
+ ["End of the article" gnus-summary-end-of-article t]
+ ["Fetch parent of article" gnus-summary-refer-parent-article t]
+ ["Fetch referenced articles" gnus-summary-refer-references t]
+ ["Fetch current thread" gnus-summary-refer-thread t]
+ ["Fetch article with id..." gnus-summary-refer-article t]
+ ["Redisplay" gnus-summary-show-article t]))
(easy-menu-define
gnus-summary-thread-menu gnus-summary-mode-map ""
["Mark above" gnus-uu-mark-over t]
["Mark series" gnus-uu-mark-series t]
["Mark region" gnus-uu-mark-region t]
- ["Unmark region" gnus-uu-unmark-region t]
["Mark by regexp..." gnus-uu-mark-by-regexp t]
- ["Unmark by regexp..." gnus-uu-unmark-by-regexp t]
["Mark all" gnus-uu-mark-all t]
["Mark buffer" gnus-uu-mark-buffer t]
["Mark sparse" gnus-uu-mark-sparse t]
(defun gnus-update-summary-mark-positions ()
"Compute where the summary marks are to go."
(save-excursion
- (when (gnus-buffer-exists-p gnus-summary-buffer)
+ (when (and gnus-summary-buffer
+ (get-buffer gnus-summary-buffer)
+ (buffer-name (get-buffer gnus-summary-buffer)))
(set-buffer gnus-summary-buffer))
(let ((gnus-replied-mark 129)
(gnus-score-below-mark 130)
(and (consp elem) ; Has to be a cons.
(consp (cdr elem)) ; The cdr has to be a list.
(symbolp (car elem)) ; Has to be a symbol in there.
- (not (memq (car elem) '(quit-config))) ; Ignore quit-config.
(ignore-errors ; So we set it.
(make-local-variable (car elem))
(set (car elem) (eval (nth 1 elem))))))))
gnus-newsgroup-dependencies)))
threads))
-;; Build the thread tree.
-(defun gnus-dependencies-add-header (header dependencies force-new)
- "Enter HEADER into the DEPENDENCIES table if it is not already there.
-
-If FORCE-NEW is not NIL, enter HEADER into the DEPENDENCIES table even
-if it was already present.
-
-If `gnus-summary-ignore-duplicates' is NIL then duplicate Message-IDs
-will not be entered in the DEPENDENCIES table. Otherwise duplicate
-Message-IDs will be renamed be renamed to a unique Message-ID before
-being entered.
-
-Returns HEADER if it was entered in the DEPENDENCIES. Returns NIL otherwise."
-
- (let* ((id (mail-header-id header))
- (id-dep (and id (intern id dependencies)))
- ref ref-dep ref-header)
- ;; Enter this `header' in the `dependencies' table
- (cond
- ((not id-dep)
- (setq header nil))
- ;; The first two cases do the normal part : enter a new `header'
- ;; in the `dependencies' table,
- ((not (boundp id-dep))
- (set id-dep (list header)))
- ((null (car (symbol-value id-dep)))
- (setcar (symbol-value id-dep) header))
-
- ;; From here the `header' was already present in the
- ;; `dependencies' table.
-
- (force-new
- ;; Overrides an existing entry,
- ;; Just set the header part of the entry.
- (setcar (symbol-value id-dep) header))
-
- ;; Renames the existing `header' to a unique Message-ID.
- ((not gnus-summary-ignore-duplicates)
- ;; An article with this Message-ID has already been seen.
- ;; We rename the Message-ID.
- (set (setq id-dep (intern (setq id (nnmail-message-id)) dependencies))
- (list header))
- (mail-header-set-id header id))
-
- ;; - The last case ignores an existing entry, except it adds
- ;; any additional Xrefs (in case the two articles came from
- ;; different servers.
- ;; Also sets `header' to `nil' meaning that the
- ;; `dependencies' table was *not* modified.
- (t
- (mail-header-set-xref
- (car (symbol-value id-dep))
- (concat (or (mail-header-xref (car (symbol-value id-dep)))
- "")
- (or (mail-header-xref header) "")))
- (setq header nil)))
-
- (when header
- ;; First check if that we are not creating a References loop.
- (setq ref (gnus-parent-id (mail-header-references header)))
- (while (and ref
- (setq ref-dep (intern-soft ref dependencies))
- (boundp ref-dep)
- (setq ref-header (car (symbol-value ref-dep))))
- (if (string= id ref)
- ;; Yuk ! This is a reference loop. Make the article be a
- ;; root article.
- (progn
- (mail-header-set-references (car (symbol-value id-dep)) "none")
- (setq ref nil))
- (setq ref (gnus-parent-id (mail-header-references ref-header)))))
- (setq ref (gnus-parent-id (mail-header-references header)))
- (setq ref-dep (intern (or ref "none") dependencies))
- (if (boundp ref-dep)
- (setcdr (symbol-value ref-dep)
- (nconc (cdr (symbol-value ref-dep))
- (list (symbol-value id-dep))))
- (set ref-dep (list nil (symbol-value id-dep)))))
- header))
-
(defun gnus-build-sparse-threads ()
(let ((headers gnus-newsgroup-headers)
+ (deps gnus-newsgroup-dependencies)
header references generation relations
cthread subject child end pthread relation new-child)
;; First we create an alist of generations/relations, where
(setq generation 0)
(while (search-backward ">" nil t)
(setq end (1+ (point)))
- (if (search-backward "<" nil t)
+ (when (search-backward "<" nil t)
+ (unless (string= (setq new-child (buffer-substring (point) end))
+ child)
(push (list (incf generation)
child (setq child new-child)
subject)
- relations)))
+ relations))))
(push (list (1+ generation) child nil subject) relations)
(erase-buffer)))
(kill-buffer (current-buffer)))
;; Sort over trustworthiness.
- (mapc #'(lambda (relation)
- (when (gnus-dependencies-add-header
- (make-full-mail-header gnus-reffed-article-number
- (cadddr relation)
- "" "" (cadr relation)
- (or (caddr relation) "") 0 0 "")
- gnus-newsgroup-dependencies nil)
- (push gnus-reffed-article-number gnus-newsgroup-limit)
- (push gnus-reffed-article-number gnus-newsgroup-sparse)
- (push (cons gnus-reffed-article-number gnus-sparse-mark)
- gnus-newsgroup-reads)
- (decf gnus-reffed-article-number)))
- (sort relations 'car-less-than-car))
+ (setq relations (sort relations 'car-less-than-car))
+ (while (setq relation (pop relations))
+ (when (if (boundp (setq cthread (intern (cadr relation) deps)))
+ (unless (car (symbol-value cthread))
+ ;; Make this article the parent of these threads.
+ (setcar (symbol-value cthread)
+ (vector gnus-reffed-article-number
+ (cadddr relation)
+ "" ""
+ (cadr relation)
+ (or (caddr relation) "") 0 0 "")))
+ (set cthread (list (vector gnus-reffed-article-number
+ (cadddr relation)
+ "" "" (cadr relation)
+ (or (caddr relation) "") 0 0 ""))))
+ (push gnus-reffed-article-number gnus-newsgroup-limit)
+ (push gnus-reffed-article-number gnus-newsgroup-sparse)
+ (push (cons gnus-reffed-article-number gnus-sparse-mark)
+ gnus-newsgroup-reads)
+ (decf gnus-reffed-article-number)
+ ;; Make this new thread the child of its parent.
+ (if (boundp (setq pthread (intern (or (caddr relation) "none") deps)))
+ (setcdr (symbol-value pthread)
+ (nconc (cdr (symbol-value pthread))
+ (list (symbol-value cthread))))
+ (set pthread (list nil (symbol-value cthread))))))
(gnus-message 7 "Making sparse threads...done")))
(defun gnus-build-old-threads ()
(setq heads (cdr heads))
(setq id (symbol-name refs))
(while (and (setq id (gnus-build-get-header id))
- (not (car (gnus-id-to-thread id)))))
+ (not (car (gnus-gethash
+ id gnus-newsgroup-dependencies)))))
(setq heads nil)))))
gnus-newsgroup-dependencies)))
;; Look through the buffer of NOV lines and find the header to
;; ID. Enter this line into the dependencies hash table, and return
;; the id of the parent article (if any).
- (let (found header)
+ (let ((deps gnus-newsgroup-dependencies)
+ found header)
(prog1
(save-excursion
(set-buffer nntp-server-buffer)
(when found
(beginning-of-line)
(and
- (setq header (gnus-nov-parse-line (read (current-buffer))
- gnus-newsgroup-dependencies))
+ (setq header (gnus-nov-parse-line
+ (read (current-buffer)) deps))
(gnus-parent-id (mail-header-references header))))))
(when header
(let ((number (mail-header-number header)))
(defun gnus-build-all-threads ()
"Read all the headers."
- (let ((gnus-summary-ignore-duplicates t)
+ (let ((deps gnus-newsgroup-dependencies)
+ (gnus-summary-ignore-duplicates t)
found header article)
(save-excursion
(set-buffer nntp-server-buffer)
(while (not (eobp))
(ignore-errors
(setq article (read (current-buffer)))
- (setq header (gnus-nov-parse-line article
- gnus-newsgroup-dependencies)))
+ (setq header (gnus-nov-parse-line article deps)))
(when header
(push header gnus-newsgroup-headers)
(if (memq (setq article (mail-header-number header))
(when headers
(car headers))))
-(defun gnus-parent-headers (in-headers &optional generation)
+(defun gnus-parent-headers (headers &optional generation)
"Return the headers of the GENERATIONeth parent of HEADERS."
(unless generation
(setq generation 1))
(let ((parent t)
- (headers in-headers)
references)
- (while (and parent
- headers
- (not (zerop generation))
- (setq references (mail-header-references headers)))
+ (while (and parent headers (not (zerop generation)))
+ (setq references (mail-header-references headers))
(when (and references
(setq parent (gnus-parent-id references))
(setq headers (car (gnus-id-to-thread parent))))
(decf generation)))
- (and (not (eq headers in-headers))
- headers)))
+ headers))
(defun gnus-id-to-thread (id)
"Return the (sub-)thread where ID appears."
(defun gnus-root-id (id)
"Return the id of the root of the thread where ID appears."
(let (last-id prev)
- (while (and id (setq prev (car (gnus-id-to-thread id))))
+ (while (and id (setq prev (car (gnus-gethash
+ id gnus-newsgroup-dependencies))))
(setq last-id id
id (gnus-parent-id (mail-header-references prev))))
last-id))
(defun gnus-remove-thread (id &optional dont-remove)
"Remove the thread that has ID in it."
- (let (headers thread last-id)
+ (let ((dep gnus-newsgroup-dependencies)
+ headers thread last-id)
;; First go up in this thread until we find the root.
(setq last-id (gnus-root-id id))
(setq headers (list (car (gnus-id-to-thread last-id))
(if thread
(unless dont-remove
(setq gnus-newsgroup-threads (delq thread gnus-newsgroup-threads)))
- (setq thread (gnus-id-to-thread last-id)))
+ (setq thread (gnus-gethash last-id dep)))
(when thread
(prog1
thread ; We return this thread.
;; If we use dummy roots, then we have to remove the
;; dummy root as well.
(when (eq gnus-summary-make-false-root 'dummy)
- ;; We go to the dummy root by going to
- ;; the first sub-"thread", and then one line up.
- (gnus-summary-goto-article
- (mail-header-number (caadr thread)))
- (forward-line -1)
(gnus-delete-line)
(gnus-data-compute-positions))
(setq thread (cdr thread))
(apply gnus-thread-score-function
(or (append
(mapcar 'gnus-thread-total-score
- (cdr (gnus-id-to-thread (mail-header-id root))))
+ (cdr (gnus-gethash (mail-header-id root)
+ gnus-newsgroup-dependencies)))
(when (> (mail-header-number root) 0)
(list (or (cdr (assq (mail-header-number root)
gnus-newsgroup-scored))
(while (or threads stack gnus-tmp-new-adopts new-roots)
(if (and (= gnus-tmp-level 0)
+ (not (setq gnus-tmp-dummy-line nil))
(or (not stack)
(= (caar stack) 0))
(not gnus-tmp-false-parent)
(when gnus-tmp-header
;; We may have an old dummy line to output before this
;; article.
- (when (and gnus-tmp-dummy-line
- (gnus-subject-equal
- gnus-tmp-dummy-line
- (mail-header-subject gnus-tmp-header)))
+ (when gnus-tmp-dummy-line
(gnus-summary-insert-dummy-line
gnus-tmp-dummy-line (mail-header-number gnus-tmp-header))
(setq gnus-tmp-dummy-line nil))
articles gnus-newsgroup-name
;; We might want to fetch old headers, but
;; not if there is only 1 article.
- (and (or (and
+ (and gnus-fetch-old-headers
+ (or (and
(not (eq gnus-fetch-old-headers 'some))
(not (numberp gnus-fetch-old-headers)))
- (> (length articles) 1))
- gnus-fetch-old-headers))))
+ (> (length articles) 1))))))
(gnus-get-newsgroup-headers-xover
articles nil nil gnus-newsgroup-name t)
(gnus-get-newsgroup-headers)))
(funcall gnus-alter-header-function header)
(setq id (mail-header-id header)
ref (gnus-parent-id (mail-header-references header))))
-
- (setq header
- (gnus-dependencies-add-header header dependencies force-new))
- (if header
- (push header headers))
+
+ ;; We do the threading while we read the headers. The
+ ;; message-id and the last reference are both entered into
+ ;; the same hash table. Some tippy-toeing around has to be
+ ;; done in case an article has arrived before the article
+ ;; which it refers to.
+ (if (boundp (setq id-dep (intern id dependencies)))
+ (if (and (car (symbol-value id-dep))
+ (not force-new))
+ ;; An article with this Message-ID has already been seen.
+ (if gnus-summary-ignore-duplicates
+ ;; We ignore this one, except we add
+ ;; any additional Xrefs (in case the two articles
+ ;; came from different servers).
+ (progn
+ (mail-header-set-xref
+ (car (symbol-value id-dep))
+ (concat (or (mail-header-xref
+ (car (symbol-value id-dep)))
+ "")
+ (or (mail-header-xref header) "")))
+ (setq header nil))
+ ;; We rename the Message-ID.
+ (set
+ (setq id-dep (intern (setq id (nnmail-message-id))
+ dependencies))
+ (list header))
+ (mail-header-set-id header id))
+ (setcar (symbol-value id-dep) header))
+ (set id-dep (list header)))
+ (when header
+ (if (boundp (setq ref-dep (intern (or ref "none") dependencies)))
+ (setcdr (symbol-value ref-dep)
+ (nconc (cdr (symbol-value ref-dep))
+ (list (symbol-value id-dep))))
+ (set ref-dep (list nil (symbol-value id-dep))))
+ (push header headers))
(goto-char (point-max))
(widen))
(nreverse headers)))))
(forward-char))
(setq header
- (make-full-mail-header
+ (vector
number ; number
(funcall
gnus-unstructured-field-decoder (gnus-nov-field)) ; subject
(funcall
gnus-structured-field-decoder (gnus-nov-field)) ; from
(gnus-nov-field) ; date
- (or (gnus-nov-field)
- (nnheader-generate-fake-message-id)) ; id
- (gnus-nov-field) ; refs
+ (setq id (or (gnus-nov-field)
+ (nnheader-generate-fake-message-id))) ; id
+ (progn
+ (let ((beg (point)))
+ (search-forward "\t" eol)
+ (if (search-backward ">" beg t)
+ (setq ref
+ (buffer-substring
+ (1+ (point))
+ (or (search-backward "<" beg t) beg)))
+ (setq ref nil))
+ (goto-char beg))
+ (gnus-nov-field)) ; refs
(gnus-nov-read-integer) ; chars
(gnus-nov-read-integer) ; lines
- (unless (= (following-char) ?\n)
+ (if (= (following-char) ?\n)
+ nil
(gnus-nov-field))))) ; misc
(widen))
(when gnus-alter-header-function
- (funcall gnus-alter-header-function header))
-
- (setq id (mail-header-id header)
- ref (gnus-parent-id (mail-header-references header)))
-
- (gnus-dependencies-add-header header dependencies force-new)
-
+ (funcall gnus-alter-header-function header)
+ (setq id (mail-header-id header)
+ ref (gnus-parent-id (mail-header-references header))))
+
+ ;; We build the thread tree.
+ (when (equal id ref)
+ ;; This article refers back to itself. Naughty, naughty.
+ (setq ref nil))
+ (if (boundp (setq id-dep (intern id dependencies)))
+ (if (and (car (symbol-value id-dep))
+ (not force-new))
+ ;; An article with this Message-ID has already been seen.
+ (if gnus-summary-ignore-duplicates
+ ;; We ignore this one, except we add any additional
+ ;; Xrefs (in case the two articles came from different
+ ;; servers.
+ (progn
+ (mail-header-set-xref
+ (car (symbol-value id-dep))
+ (concat (or (mail-header-xref
+ (car (symbol-value id-dep)))
+ "")
+ (or (mail-header-xref header) "")))
+ (setq header nil))
+ ;; We rename the Message-ID.
+ (set
+ (setq id-dep (intern (setq id (nnmail-message-id))
+ dependencies))
+ (list header))
+ (mail-header-set-id header id))
+ (setcar (symbol-value id-dep) header))
+ (set id-dep (list header)))
+ (when header
+ (if (boundp (setq ref-dep (intern (or ref "none") dependencies)))
+ (setcdr (symbol-value ref-dep)
+ (nconc (cdr (symbol-value ref-dep))
+ (list (symbol-value id-dep))))
+ (set ref-dep (list nil (symbol-value id-dep)))))
header))
;; Goes through the xover lines and returns a list of vectors
;;; Process/prefix in the summary buffer
(defun gnus-summary-work-articles (n)
- "Return a list of articles to be worked upon.
-The prefix argument, the list of process marked articles, and the
-current article will be taken into consideration."
+ "Return a list of articles to be worked upon. The prefix argument,
+the list of process marked articles, and the current article will be
+taken into consideration."
(save-excursion
(set-buffer gnus-summary-buffer)
(cond
(save-excursion
(gnus-group-best-unread-group exclude-group))))
-(defun gnus-summary-find-next (&optional unread article backward undownloaded)
+(defun gnus-summary-find-next (&optional unread article backward)
(if backward (gnus-summary-find-prev)
(let* ((dummy (gnus-summary-article-intangible-p))
(article (or article (gnus-summary-article-number)))
(if unread
(progn
(while arts
- (when (or (and undownloaded
- (eq gnus-undownloaded-mark
- (gnus-data-mark (car arts))))
- (gnus-data-unread-p (car arts)))
+ (when (gnus-data-unread-p (car arts))
(setq result (car arts)
arts nil))
(setq arts (cdr arts)))
(unless (listp (cdr gnus-newsgroup-killed))
(setq gnus-newsgroup-killed (list gnus-newsgroup-killed)))
(let ((headers gnus-newsgroup-headers))
+ (when (and (not gnus-save-score)
+ (not non-destructive))
+ (setq gnus-newsgroup-scored nil))
;; Set the new ranges of read articles.
(save-excursion
(set-buffer gnus-group-buffer)
(gnus-update-read-articles
group (append gnus-newsgroup-unreads gnus-newsgroup-unselected))
;; Set the current article marks.
- (let ((gnus-newsgroup-scored
- (if (and (not gnus-save-score)
- (not non-destructive))
- nil
- gnus-newsgroup-scored)))
- (save-excursion
- (gnus-update-marks)))
+ (gnus-update-marks)
;; Do the cross-ref thing.
(when gnus-use-cross-reference
(gnus-mark-xrefs-as-read group headers gnus-newsgroup-unreads))
(gnus-handle-ephemeral-exit quit-config)))))
(defun gnus-handle-ephemeral-exit (quit-config)
- "Handle movement when leaving an ephemeral group.
-The state which existed when entering the ephemeral is reset."
+ "Handle movement when leaving an ephemeral group. The state
+which existed when entering the ephemeral is reset."
(if (not (buffer-name (car quit-config)))
(gnus-configure-windows 'group 'force)
(set-buffer (car quit-config))
(gnus-kill-buffer gnus-original-article-buffer)))
(cond (gnus-kill-summary-on-exit
(when (and gnus-use-trees
- (gnus-buffer-exists-p buffer))
+ (and (get-buffer buffer)
+ (buffer-name (get-buffer buffer))))
(save-excursion
- (set-buffer buffer)
+ (set-buffer (get-buffer buffer))
(gnus-tree-close gnus-newsgroup-name)))
(gnus-kill-buffer buffer))
- ((gnus-buffer-exists-p buffer)
+ ((and (get-buffer buffer)
+ (buffer-name (get-buffer buffer)))
(save-excursion
(set-buffer buffer)
(gnus-deaden-summary))))))
;; Walking around summary lines.
-(defun gnus-summary-first-subject (&optional unread undownloaded)
+(defun gnus-summary-first-subject (&optional unread)
"Go to the first unread subject.
If UNREAD is non-nil, go to the first unread article.
Returns the article selected or nil if there are no unread articles."
(t
(let ((data gnus-newsgroup-data))
(while (and data
- (and (not (and undownloaded
- (eq gnus-undownloaded-mark
- (gnus-data-mark (car data)))))
- (not (gnus-data-unread-p (car data)))))
+ (not (gnus-data-unread-p (car data))))
(setq data (cdr data)))
(when data
(goto-char (gnus-data-pos (car data)))
(let ((article (gnus-summary-article-number))
(article-window (get-buffer-window gnus-article-buffer t))
endp)
- ;; If the buffer is empty, we have no article.
- (unless article
- (error "No article to select"))
(gnus-configure-windows 'article)
(if (eq (cdr (assq article gnus-newsgroup-reads)) gnus-canceled-mark)
(if (and (eq gnus-summary-goto-unread 'never)
(setq is-younger (nnmail-time-less
(nnmail-time-since (nnmail-date-to-time date))
cutoff))
- (when (if younger-p
- (not is-younger)
- is-younger)
+ (when (if younger-p is-younger (not is-younger))
(push (gnus-data-number d) articles))))
(gnus-summary-limit (nreverse articles)))
(gnus-summary-position-point)))
(concat "("
(mail-header-date gnus-current-headers) ")"))))
(gnus-run-hooks 'gnus-ps-print-hook)
- (save-excursion
- (ps-print-buffer-with-faces filename))))
+ (ps-print-buffer-with-faces filename)))
(kill-buffer buffer))))))
(defun gnus-summary-show-article (&optional arg)
(gnus-summary-copy-article n nil method)))
(defun gnus-summary-import-article (file)
- "Import an arbitrary file into a mail newsgroup."
+ "Import a random file into a mail newsgroup."
(interactive "fImport file: ")
(let ((group gnus-newsgroup-name)
(now (current-time))
This means that *all* articles that are marked as expirable will be
deleted forever, right now."
(interactive)
- (or gnus-expert-user
- (gnus-yes-or-no-p
- "Are you really, really, really sure you want to delete all these messages? ")
- (error "Phew!"))
+ (unless gnus-expert-user
+ (gnus-yes-or-no-p
+ "Are you really, really, really sure you want to delete all these messages? ")
+ (error "Phew!"))
(gnus-summary-expire-articles t))
;; Suggested by Jack Vinson <vinson@unagi.cis.upenn.edu>.
;; We actually mark all articles as canceled, which we
;; have to do when using auto-expiry or adaptive scoring.
(gnus-summary-show-all-threads)
- (when (gnus-summary-first-subject (not all) t)
+ (when (gnus-summary-first-subject (not all))
(while (and
(if to-here (< (point) to-here) t)
(gnus-summary-mark-article-as-read gnus-catchup-mark)
- (gnus-summary-find-next (not all) nil nil t))))
+ (gnus-summary-find-next (not all)))))
(gnus-set-mode-line 'summary))
t))
(gnus-summary-position-point)))
(when (and header
(gnus-summary-article-sparse-p (mail-header-number header)))
(let* ((parent (gnus-parent-id (mail-header-references header)))
- (thread (and parent (gnus-id-to-thread parent))))
+ (thread
+ (and parent
+ (gnus-gethash parent gnus-newsgroup-dependencies))))
(when thread
(delq (assq header thread) thread))))
;; We have to really fetch the header to this article.
"mime-partial"
"Internal method to combine message/partial messages automatically.")
-(mime-add-condition
- 'action '((type . message)(subtype . partial)
- (method . mime-method-to-combine-message/partial-pieces)
- (major-mode . gnus-original-article-mode)
- (summary-buffer-exp . gnus-summary-buffer)
- ))
+(set-atype 'mime-acting-condition
+ '((type . message)(subtype . partial)
+ (method . mime-method-to-combine-message/partial-pieces)
+ (major-mode . gnus-original-article-mode)
+ (summary-buffer-exp . gnus-summary-buffer)
+ ))
(set-alist 'mime-view-partial-message-method-alist
'gnus-original-article-mode
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
;; Author: Ilja Weis <kult@uni-paderborn.de>
-;; Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;;; Generating group buffers
(defun gnus-group-prepare-topics (level &optional all lowest regexp list-topic topic-level)
- "List all newsgroups with unread articles of level LEVEL or lower.
-Use the `gnus-group-topics' to sort the groups.
+ "List all newsgroups with unread articles of level LEVEL or lower, and
+use the `gnus-group-topics' to sort the groups.
If ALL is non-nil, list groups that have no unread articles.
If LOWEST is non-nil, list all newsgroups of level LOWEST or higher."
(set-buffer gnus-group-buffer)
;;; gnus-undo.el --- minor mode for undoing in Gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;; This package allows arbitrary undoing in Gnus buffers. As all the
;; Gnus buffers aren't very text-oriented (what is in the buffers is
-;; just some arbitrary representation of the actual data), normal Emacs
+;; just some random representation of the actual data), normal Emacs
;; undoing doesn't work at all for Gnus.
;;
;; This package works by letting Gnus register functions for reversing
(require 'gnus-util)
(require 'gnus)
-(require 'custom)
-(defgroup gnus-undo nil
- "Undoing in Gnus buffers."
- :group 'gnus)
+(defvar gnus-undo-mode nil
+ "Minor mode for undoing in Gnus buffers.")
-(defcustom gnus-undo-limit 2000
- "The number of undoable actions recorded."
- :type 'integer
- :group 'gnus-undo)
-
-(defcustom gnus-undo-mode nil
- "Minor mode for undoing in Gnus buffers."
- :type 'boolean
- :group 'gnus-undo)
-
-(defcustom gnus-undo-mode-hook nil
- "Hook called in all `gnus-undo-mode' buffers."
- :type 'hook
- :group 'gnus-undo)
+(defvar gnus-undo-mode-hook nil
+ "Hook called in all `gnus-undo-mode' buffers.")
;;; Internal variables.
;; Initialize list.
(t
(setq gnus-undo-actions (list (list function)))))
- ;; Limit the length of the undo list.
- (let ((next (nthcdr gnus-undo-limit gnus-undo-actions)))
- (when next
- (setcdr next nil)))
- ;; We are not at a boundary...
(setq gnus-undo-boundary-inhibit t)))
(defun gnus-undo (n)
-;;; gnus-util.el --- utility functions for Semi-gnus
+;;; gnus-util.el --- utility functions for Gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: mail, news, MIME
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+;; Keywords: news
;; This file is part of GNU Emacs.
(yes-or-no-p prompt)
(message "")))
+;; I suspect there's a better way, but I haven't taken the time to do
+;; it yet. -erik selberg@cs.washington.edu
(defun gnus-dd-mmm (messy-date)
- "Return a string like DD-MMM from a big messy string."
+ "Return a string like DD-MMM from a big messy string"
(let ((datevec (ignore-errors (timezone-parse-date messy-date))))
- (if (or (not datevec)
- (string-equal "0" (aref datevec 1)))
+ (if (not datevec)
"??-???"
(format "%2s-%s"
(condition-case ()
(format-time-string "%Y%m%dT%H%M%S" time))
(defun gnus-date-iso8601 (date)
- "Convert the DATE to YYMMDDTHHMMSS."
+ "Convert the DATE to YYMMDDTHHMMSS"
(condition-case ()
(gnus-time-iso8601 (gnus-date-get-time date))
(error "")))
(setq filename (expand-file-name filename))
(setq rmail-default-rmail-file filename)
(let ((artbuf (current-buffer))
- (tmpbuf (get-buffer-create " *Gnus-output*"))
- (coding-system-for-write 'binary))
+ (tmpbuf (get-buffer-create " *Gnus-output*")))
(save-excursion
(or (get-file-buffer filename)
(file-exists-p filename)
(let ((file-buffer (create-file-buffer filename)))
(save-excursion
(set-buffer file-buffer)
- (let ((require-final-newline nil)
- (coding-system-for-write 'binary))
+ (let ((require-final-newline nil))
(gnus-write-buffer filename)))
(kill-buffer file-buffer))
(error "Output file does not exist")))
;; Decide whether to append to a file or to an Emacs buffer.
(let ((outbuf (get-file-buffer filename)))
(if (not outbuf)
- (let ((buffer-read-only nil)
- (coding-system-for-write 'binary))
+ (let ((buffer-read-only nil))
(save-excursion
(goto-char (point-max))
(forward-char -2)
"Return the value of token TYPE from ALIST."
(cdr (assoc type alist)))
-;;; Various
-
-(defun gnus-alive-p ()
- "Say whether Gnus is running or not."
- (and (boundp 'gnus-group-buffer)
- (get-buffer gnus-group-buffer)
- (save-excursion
- (set-buffer gnus-group-buffer)
- (eq major-mode 'gnus-group-mode))))
-
-
(provide 'gnus-util)
;;; gnus-util.el ends here
;;; gnus-uu.el --- extract (uu)encoded files in Gnus
;; Copyright (C) 1985,86,87,93,94,95,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Created: 2 Oct 1993
;; Keyword: news
"v" gnus-uu-mark-over
"s" gnus-uu-mark-series
"r" gnus-uu-mark-region
- "g" gnus-uu-unmark-region
"R" gnus-uu-mark-by-regexp
- "G" gnus-uu-unmark-by-regexp
"t" gnus-uu-mark-thread
"T" gnus-uu-unmark-thread
"a" gnus-uu-mark-all
(gnus-summary-position-point))
(defun gnus-uu-mark-over (&optional score)
- "Mark all articles with a score over SCORE (the prefix)."
+ "Mark all articles with a score over SCORE (the prefix.)"
(interactive "P")
(let ((score (gnus-score-default score))
(data gnus-newsgroup-data))
(when (not (eq in-state 'end))
(setq state (list 'middle))))
(save-excursion
- (set-buffer "*gnus-uu-body*")
+ (set-buffer (get-buffer "*gnus-uu-body*"))
(goto-char (setq beg (point-max)))
(save-excursion
(save-restriction
(when (re-search-forward "^Subject: \\(.*\\)$" nil t)
(setq subj (buffer-substring (match-beginning 1) (match-end 1)))
(save-excursion
- (set-buffer "*gnus-uu-pre*")
+ (set-buffer (get-buffer "*gnus-uu-pre*"))
(insert (format " %s\n" subj)))))
(when (or (eq in-state 'last)
(eq in-state 'first-and-last))
(save-excursion
- (set-buffer "*gnus-uu-pre*")
+ (set-buffer (get-buffer "*gnus-uu-pre*"))
(insert (format "\n\n%s\n\n" (make-string 70 ?-)))
(gnus-write-buffer gnus-uu-saved-article-name))
(save-excursion
- (set-buffer "*gnus-uu-body*")
+ (set-buffer (get-buffer "*gnus-uu-body*"))
(goto-char (point-max))
(insert
(concat (setq end-string (format "End of %s Digest" name))
(insert (concat (make-string (length end-string) ?*) "\n"))
(write-region
(point-min) (point-max) gnus-uu-saved-article-name t))
- (gnus-kill-buffer "*gnus-uu-pre*")
- (gnus-kill-buffer "*gnus-uu-body*")
+ (kill-buffer (get-buffer "*gnus-uu-pre*"))
+ (kill-buffer (get-buffer "*gnus-uu-body*"))
(push 'end state))
(if (memq 'begin state)
(cons gnus-uu-saved-article-name state)
(goto-char (point-max))
(insert (format "\n%s\n" gnus-uu-post-binary-separator))
- ;; #### Unix-specific?
(when (string-match "^~/" file-path)
(setq file-path (concat "$HOME" (substring file-path 1))))
- ;; #### Unix-specific?
(if (string-match "/[^/]*$" file-path)
(setq file-name (substring file-path (1+ (match-beginning 0))))
(setq file-name file-path))
;;; gnus-win.el --- window configuration functions for Gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;;; gnus-xmas.el --- Gnus functions for XEmacs
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
(gnus-xmas-menu-add tree
gnus-tree-menu))
-(defun gnus-xmas-draft-menu-add ()
- (gnus-xmas-menu-add draft
- gnus-draft-menu))
-
(defun gnus-xmas-server-menu-add ()
(gnus-xmas-menu-add menu
gnus-server-server-menu gnus-server-connections-menu))
(add-hook 'gnus-agent-summary-mode-hook 'gnus-xmas-agent-summary-menu-add)
(add-hook 'gnus-agent-group-mode-hook 'gnus-xmas-agent-group-menu-add)
(add-hook 'gnus-agent-server-mode-hook 'gnus-xmas-agent-server-menu-add)
-
- (add-hook 'gnus-draft-mode-hook 'gnus-xmas-draft-menu-add)
+
(add-hook 'gnus-summary-mode-hook
'gnus-xmas-switch-horizontal-scrollbar-off)
(add-hook 'gnus-tree-mode-hook 'gnus-xmas-switch-horizontal-scrollbar-off))
;; 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@gnus.org>
+;; Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; 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 "6.3.3"
+(defconst gnus-version-number "6.1.2"
"Version number for this version of gnus.")
(defconst gnus-version
- (format "Semi-gnus %s (based on Gnus 5.6.10; for SEMI 1.4)"
+ (format "Semi-gnus %s (based on Gnus 5.6.4; for SEMI 1.1/1.2)"
gnus-version-number)
"Version string for this version of gnus.")
(defcustom gnus-directory (or (getenv "SAVEDIR")
(nnheader-concat gnus-home-directory "News/"))
- "*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."
+ "*Directory variable from which all other Gnus file variables are derived."
:group 'gnus-files
:type 'directory)
("nnsoup" post-mail address)
("nndraft" post-mail)
("nnfolder" mail respool address)
- ("nngateway" post-mail address prompt-address physical-address)
+ ("nngateway" none address prompt-address physical-address)
("nnweb" none)
("nnlistserv" none)
("nnagent" post-mail))
(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 gnus-cache-directory)
- (nnspool-nov-directory gnus-cache-directory)
- (nnspool-active-file
- (nnheader-concat gnus-cache-directory "active")))))
+ (nnspool-spool-directory "~/News/cache/")
+ (nnspool-nov-directory "~/News/cache/")
+ (nnspool-active-file "~/News/cache/active"))))
"List of predefined (convenience) servers.")
(defvar gnus-topic-indentation "") ;; Obsolete variable.
("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-summary-set-agent-mark gnus-agent-save-group-info)
+ gnus-summary-set-agent-mark)
("gnus-agent" :interactive t
gnus-unplugged gnus-agentize gnus-agent-batch)
("gnus-vm" :interactive t gnus-summary-save-in-vm
"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)
(defun gnus-ephemeral-group-p (group)
"Say whether GROUP is ephemeral or not."
- (gnus-group-get-parameter group 'quit-config t))
+ (gnus-group-get-parameter group 'quit-config))
(defun gnus-group-quit-config (group)
"Return the quit-config of GROUP."
- (gnus-group-get-parameter group 'quit-config t))
+ (gnus-group-get-parameter group 'quit-config))
(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 allow-list)
+(defun gnus-group-find-parameter (group &optional symbol)
"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 allow-list)
+ (gnus-group-parameter-value parameters symbol)
parameters))))
-(defun gnus-group-get-parameter (group &optional symbol allow-list)
+(defun gnus-group-get-parameter (group &optional symbol)
"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 allow-list)
+ (gnus-group-parameter-value params symbol)
params)))
-(defun gnus-group-parameter-value (params symbol &optional allow-list)
+(defun gnus-group-parameter-value (params symbol)
"Return the value of SYMBOL in group PARAMS."
- ;; 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))))))))
+ (or (car (memq symbol params)) ; It's either a simple symbol
+ (cdr (assq symbol params)))) ; or a cons.
(defun gnus-group-add-parameter (group param)
"Add parameter PARAM to GROUP."
;;;###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))
(or (featurep 'path-util)
(load "apel/path-util"))
(add-path "apel")
-(add-path "flim")
+(add-path "mel")
(add-path "semi")
(defun maybe-fbind (args)
mouse-selection-click-count-buffer buffer-display-table
font-lock-defaults user-full-name user-login-name
gnus-newsgroup-name gnus-article-x-face-too-ugly
- mail-mode-hook enable-multibyte-characters
- adaptive-fill-first-line-regexp adaptive-fill-regexp)))
+ mail-mode-hook enable-multibyte-characters)))
(maybe-bind '(mail-mode-hook
- enable-multibyte-characters browse-url-browser-function
- adaptive-fill-first-line-regexp adaptive-fill-regexp))
+ enable-multibyte-characters browse-url-browser-function))
(maybe-fbind '(color-instance-rgb-components
make-color-instance color-instance-name specifier-instance
device-type device-class get-popup-menu-response event-object
;;; message.el --- composing mail and news messages
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
;; Keywords: mail, news, MIME
:group 'message-interface
:type 'regexp)
-(defcustom message-subject-re-regexp "^[ \t]*\\([Rr][Ee]:[ \t]*\\)*[ \t]*"
- "*Regexp matching \"Re: \" in the subject line."
- :group 'message-various
- :type 'regexp)
-
;;;###autoload
(defcustom message-signature-separator "^-- *$"
"Regexp matching the signature separator."
:type 'file
:group 'message-headers)
+(defcustom message-autosave-directory
+ (nnheader-concat message-directory "drafts/")
+ "*Directory where Message autosaves buffers.
+If nil, Message won't autosave."
+ :group 'message-buffers
+ :type 'directory)
+
(defcustom message-forward-start-separator
(concat (mime-make-tag "message" "rfc822") "\n")
"*Delimiter inserted before forwarded messages."
((boundp 'gnus-select-method)
gnus-select-method)
(t '(nnspool "")))
- "*Method used to post news.
-Note that when posting from inside Gnus, for instance, this
-variable isn't used."
+ "*Method used to post news."
:group 'message-news
:group 'message-sending
;; This should be the `gnus-select-method' widget, but that might
The default is `abbrev', which uses mailabbrev. nil switches
mail aliases off.")
-(defcustom message-autosave-directory
- (nnheader-concat message-directory "drafts/")
- "*Directory where Message autosaves buffers if Gnus isn't running.
-If nil, Message won't autosave."
- :group 'message-buffers
- :type 'directory)
-
;;; Internal variables.
;;; Well, not really internal.
(,(concat "^\\(X-[A-Za-z0-9-]+\\|In-Reply-To\\):" content)
(1 'message-header-name-face)
(2 'message-header-name-face))
- ,@(if (and mail-header-separator
- (not (equal mail-header-separator "")))
- `((,(concat "^\\(" (regexp-quote mail-header-separator) "\\)$")
- 1 'message-separator-face))
- nil)
+ (,(concat "^\\(" (regexp-quote mail-header-separator) "\\)$")
+ 1 'message-separator-face)
(,(concat "^[ \t]*"
"\\([" cite-prefix "]+[" cite-suffix "]*\\)?"
"[:>|}].*")
(autoload 'nndraft-request-expire-articles "nndraft")
(autoload 'gnus-open-server "gnus-int")
(autoload 'gnus-request-post "gnus-int")
- (autoload 'gnus-alive-p "gnus-util")
(autoload 'rmail-output "rmail"))
\f
(defun message-fetch-field (header &optional not-all)
"The same as `mail-fetch-field', only remove all newlines."
- (let* ((inhibit-point-motion-hooks t)
- (value (mail-fetch-field header nil (not not-all))))
+ (let ((value (mail-fetch-field header nil (not not-all))))
(when value
(nnheader-replace-chars-in-string value ?\n ? ))))
(defun message-strip-subject-re (subject)
"Remove \"Re:\" from subject lines."
- (if (string-match message-subject-re-regexp subject)
+ (if (string-match "^[Rr][Ee]: *" subject)
(substring subject (match-end 0))
subject))
(defun message-news-p ()
"Say whether the current buffer contains a news message."
- (and (not message-this-is-mail)
- (or message-this-is-news
- (save-excursion
- (save-restriction
- (message-narrow-to-headers)
- (and (message-fetch-field "newsgroups")
- (not (message-fetch-field "posted-to"))))))))
+ (or message-this-is-news
+ (save-excursion
+ (save-restriction
+ (message-narrow-to-headers)
+ (and (message-fetch-field "newsgroups")
+ (not (message-fetch-field "posted-to")))))))
(defun message-mail-p ()
"Say whether the current buffer contains a mail message."
- (and (not message-this-is-news)
- (or message-this-is-mail
- (save-excursion
- (save-restriction
- (message-narrow-to-headers)
- (or (message-fetch-field "to")
- (message-fetch-field "cc")
- (message-fetch-field "bcc")))))))
+ (or message-this-is-mail
+ (save-excursion
+ (save-restriction
+ (message-narrow-to-headers)
+ (or (message-fetch-field "to")
+ (message-fetch-field "cc")
+ (message-fetch-field "bcc"))))))
(defun message-next-header ()
"Go to the beginning of the next header."
(concat (regexp-quote mail-header-separator)
"$\\|[ \t]*[-_][-_][-_]+$\\|"
"-- $\\|"
- ;;!!! Uhm... shurely this can't be right?
+ ;;!!! Uhm... shurely this can't be right.
"[> " (regexp-quote message-yank-prefix) "]+$\\|"
paragraph-start))
(setq paragraph-separate
(unless (string-match "XEmacs" emacs-version)
(set (make-local-variable 'font-lock-defaults)
'(message-font-lock-keywords t)))
- (make-local-variable 'adaptive-fill-regexp)
- (setq adaptive-fill-regexp
- (concat "[ \t]*[-a-z0-9A-Z]*>+[ \t]*\\|" adaptive-fill-regexp))
- (unless (boundp 'adaptive-fill-first-line-regexp)
- (setq adaptive-fill-first-line-regexp nil))
- (make-local-variable 'adaptive-fill-first-line-regexp)
- (setq adaptive-fill-first-line-regexp
- (concat "[ \t]*[-a-z0-9A-Z]*>+[ \t]*\\|"
- adaptive-fill-first-line-regexp))
(run-hooks 'text-mode-hook 'message-mode-hook))
\f
(name-default (concat "*message* " mail-trimmed-to))
(name (if enter-string
(read-string "New buffer name: " name-default)
- name-default)))
+ name-default))
+ (default-directory
+ (if message-autosave-directory
+ (file-name-as-directory message-autosave-directory)
+ default-directory)))
(rename-buffer name t)))))
(defun message-fill-yanked-message (&optional justifyp)
t))))
(defun message-send-via-mail (arg)
- "Send the current message via mail."
+ "Send the current message via mail."
(message-send-mail arg))
(defun message-send-via-news (arg)
(when from
(let ((stop-pos
(string-match " *at \\| *@ \\| *(\\| *<" from)))
- (concat (if (and stop-pos
- (not (zerop stop-pos)))
- (substring from 0 stop-pos) from)
+ (concat (if stop-pos (substring from 0 stop-pos) from)
"'s message of \""
(if (or (not date) (string= date ""))
"(unknown date)" date)
(insert "Original-")
(beginning-of-line))
(when (or (message-news-p)
- (string-match "@.+\\.." secure-sender))
+ (string-match "^[^@]+@.+\\..+" secure-sender))
(insert "Sender: " secure-sender "\n")))))))
(defun message-insert-courtesy-copy ()
(defun message-set-auto-save-file-name ()
"Associate the message buffer with a file in the drafts directory."
(when message-autosave-directory
- (if (gnus-alive-p)
- (setq message-draft-article
- (nndraft-request-associate-buffer "drafts"))
- (setq buffer-file-name (expand-file-name "*message*"
- message-autosave-directory))
- (setq buffer-auto-save-file-name (make-auto-save-file-name)))
+ (setq message-draft-article (nndraft-request-associate-buffer "drafts"))
(clear-visited-file-modtime)))
(defun message-disassociate-draft ()
message-id (message-fetch-field "message-id" t))
;; Remove any (buggy) Re:'s that are present and make a
;; proper one.
- (when (string-match message-subject-re-regexp subject)
+ (when (string-match "^[ \t]*[Rr][Ee]:[ \t]*" subject)
(setq subject (substring subject (match-end 0))))
(setq subject (concat "Re: " subject))
(setq distribution nil))
;; Remove any (buggy) Re:'s that are present and make a
;; proper one.
- (when (string-match message-subject-re-regexp subject)
+ (when (string-match "^[ \t]*[Rr][Ee]:[ \t]*" subject)
(setq subject (substring subject (match-end 0))))
(setq subject (concat "Re: " subject))
(widen))
message-id (message-fetch-field "message-id" t)
distribution (message-fetch-field "distribution")))
;; Make sure that this article was written by the user.
- (unless (or (and sender
- (string-equal
- (downcase sender)
- (downcase (message-make-sender))))
- (string-equal
- (downcase (cadr (mail-extract-address-components from)))
- (downcase (cadr (mail-extract-address-components
- (message-make-from))))))
+ (unless (string-equal
+ (downcase
+ (or sender (cadr (std11-extract-address-components from))))
+ (downcase (message-make-address)))
(error "This article is not yours"))
;; Make control message.
(setq buf (set-buffer (get-buffer-create " *message cancel*")))
(let ((cur (current-buffer)))
;; Check whether the user owns the article that is to be superseded.
(unless (string-equal
- (downcase (or (message-fetch-field "sender")
- (cadr (mail-extract-address-components
- (message-fetch-field "from")))))
- (downcase (message-make-sender)))
+ (downcase (cadr (mail-extract-address-components
+ (message-fetch-field "from"))))
+ (downcase (message-make-address)))
(error "This article is not yours"))
;; Get a normal message buffer.
(message-pop-to-buffer (message-buffer-name "supersede"))
(concat "[" (or (message-fetch-field
(if (message-news-p) "newsgroups" "from"))
"(nowhere)")
- "] " (or (eword-decode-unstructured-field-body
- (message-fetch-field "Subject") ""))))))
+ "] " (or (message-fetch-field "Subject") "")))))
;;;###autoload
(defun message-forward (&optional news)
(point))
(skip-chars-backward "^, \t\n") (point))))
(completion-ignore-case t)
- (string (buffer-substring b (progn (skip-chars-forward "^,\t\n ")
- (point))))
+ (string (buffer-substring b (point)))
(hashtb (and (boundp 'gnus-active-hashtb) gnus-active-hashtb))
(completions (all-completions string hashtb))
(cur (current-buffer))
;;; messagexmas.el --- XEmacs extensions to message
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: mail, news
;; This file is part of GNU Emacs.
;;; messcompat.el --- making message mode compatible with mail mode
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: mail, news
;; This file is part of GNU Emacs.
;;; nnagent.el --- offline backend for Gnus
;; Copyright (C) 1997,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news, mail
;; This file is part of GNU Emacs.
nil)
(deffoo nnagent-request-post (&optional server)
- (gnus-agent-insert-meta-information 'news gnus-command-method)
(gnus-request-accept-article "nndraft:queue"))
;; Use nnml functions for just about everything.
;;; nnbabyl.el --- rmail mbox access for Gnus
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
;; Keywords: news, mail
(require 'nnheader)
(condition-case nil
(require 'rmail)
- (t (nnheader-message 5 "Ignore rmail errors from this file, you don't have rmail")))
+ (t (message "Ignore rmail errors from this file, you don't have rmail")))
(require 'nnmail)
(require 'nnoo)
(eval-when-compile (require 'cl))
(nnmail-activate 'nnbabyl)
(unless (assoc group nnbabyl-group-alist)
(push (list group (cons 1 0))
- nnbabyl-group-alist)
+ nnbabyl-group-alist)
(nnmail-save-active nnbabyl-group-alist nnbabyl-active-file))
t)
(when (buffer-modified-p (current-buffer))
(save-buffer))
(nnmail-save-active nnbabyl-group-alist nnbabyl-active-file)
- (nnheader-message 5 ""))))
+ (message ""))))
(provide 'nnbabyl)
(nntp-send-command "^[23].*\n" "X-DELETE" delete-list))
)
- (nnheader-message 5 "")
+ (message "")
(nconc rest articles)))
(defun nndb-get-remote-expire-response ()
(or (string-match "^\\([0-9]+\\)" msg)
(error "nndb: %s" msg))
(setq art (substring msg (match-beginning 1) (match-end 1)))
- (nnheader-message 5 "nndb: accepted %s" art)
+ (message "nndb: accepted %s" art)
(list art)))
(deffoo nndb-request-replace-article (article group buffer)
;;; nndir.el --- single directory newsgroup access for Gnus
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;;; nndoc.el --- single file access for Gnus
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
;; Keywords: news
;;; nndraft.el --- draft article access for Gnus
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
-;;; nneething.el --- arbitrary file access for Gnus
+;;; nneething.el --- random file access for Gnus
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
;; Keywords: news, mail
(and large
(zerop (% count 20))
- (nnheader-message 5 "nneething: Receiving headers... %d%%"
+ (message "nneething: Receiving headers... %d%%"
(/ (* count 100) number))))
(when large
- (nnheader-message 5 "nneething: Receiving headers...done"))
+ (message "nneething: Receiving headers...done"))
(nnheader-fold-continuation-lines)
'headers))))
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
;; Author: Scott Byer <byer@mv.us.adobe.com>
-;; Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
;; Keywords: mail
(save-excursion
(set-buffer nntp-server-buffer)
(erase-buffer)
- (let (article start stop)
+ (let (article art-string start stop)
(nnfolder-possibly-change-group group server)
(when nnfolder-current-buffer
(set-buffer nnfolder-current-buffer)
(goto-char (point-min))
(if (stringp (car articles))
'headers
- (while (setq article (pop articles))
+ (while articles
+ (setq article (car articles))
+ (setq art-string (nnfolder-article-string article))
(set-buffer nnfolder-current-buffer)
- (when (nnfolder-goto-article article)
+ (when (or (search-forward art-string nil t)
+ ;; Don't search the whole file twice! Also, articles
+ ;; probably have some locality by number, so searching
+ ;; backwards will be faster. Especially if we're at the
+ ;; beginning of the buffer :-). -SLB
+ (search-backward art-string nil t))
+ (nnmail-search-unix-mail-delim-backward)
(setq start (point))
(search-forward "\n\n" nil t)
(setq stop (1- (point)))
(insert (format "221 %d Article retrieved.\n" article))
(insert-buffer-substring nnfolder-current-buffer start stop)
(goto-char (point-max))
- (insert ".\n")))
+ (insert ".\n"))
+ (setq articles (cdr articles)))
(set-buffer nntp-server-buffer)
(nnheader-fold-continuation-lines)
(save-excursion
(set-buffer nnfolder-current-buffer)
(goto-char (point-min))
- (when (nnfolder-goto-article article)
+ (when (search-forward (nnfolder-article-string article) nil t)
(let (start stop)
+ (nnmail-search-unix-mail-delim-backward)
(setq start (point))
(forward-line 1)
(unless (and (nnmail-search-unix-mail-delim)
(set-buffer nnfolder-current-buffer)
(while (and articles is-old)
(goto-char (point-min))
- (when (nnfolder-goto-article (car articles))
+ (when (search-forward (nnfolder-article-string (car articles)) nil t)
(if (setq is-old
(nnmail-expired-article-p
newsgroup
(nnfolder-possibly-change-group group server)
(set-buffer nnfolder-current-buffer)
(goto-char (point-min))
- (when (nnfolder-goto-article article)
+ (when (search-forward (nnfolder-article-string article) nil t)
(nnfolder-delete-mail))
(when last
(nnfolder-save-buffer)
(nnfolder-possibly-change-group group)
(save-excursion
(set-buffer buffer)
- (goto-char (point-min))
- (when (looking-at "X-From-Line: ")
- (replace-match "From "))
(nnfolder-normalize-buffer)
(set-buffer nnfolder-current-buffer)
(goto-char (point-min))
- (if (not (nnfolder-goto-article article))
+ (if (not (search-forward (nnfolder-article-string article) nil t))
nil
- (nnfolder-delete-mail t)
+ (nnfolder-delete-mail t t)
(insert-buffer-substring buffer)
(nnfolder-save-buffer)
t)))
(goto-char (point-min))
(while (and (search-forward marker nil t)
(re-search-forward number nil t))
- (let ((newnum (string-to-number (match-string 0))))
- (if (nnmail-within-headers-p)
- (setq activemin (min activemin newnum)))))
+ (setq activemin (min activemin
+ (string-to-number (buffer-substring
+ (match-beginning 0)
+ (match-end 0))))))
(setcar active activemin))))
(defun nnfolder-article-string (article)
(concat "\n" nnfolder-article-marker (int-to-string article) " ")
(concat "\nMessage-ID: " article)))
-(defun nnfolder-goto-article (article)
- "Place point at the start of the headers of ARTICLE.
-ARTICLE can be an article number or a Message-ID.
-Returns t if successful, nil otherwise."
- (let ((art-string (nnfolder-article-string article))
- start found)
- ;; It is likely that we are at or before the delimiter line.
- ;; We therefore go to the end of the previous line, and start
- ;; searching from there.
- (beginning-of-line)
- (unless (bobp)
- (forward-char -1))
- (setq start (point))
- ;; First search forward.
- (while (and (setq found (search-forward art-string nil t))
- (not (nnmail-within-headers-p))))
- ;; If unsuccessful, search backward from where we started,
- (unless found
- (goto-char start)
- (while (and (setq found (search-backward art-string nil t))
- (not (nnmail-within-headers-p)))))
- (when found
- (nnmail-search-unix-mail-delim-backward))))
-
-(defun nnfolder-delete-mail (&optional leave-delim)
- "Delete the message that point is in.
-If optional argument LEAVE-DELIM is t, then mailbox delimiter is not
-deleted. Point is left where the deleted region was."
- (delete-region
- (save-excursion
- (forward-line 1) ; in case point is at beginning of message already
- (nnmail-search-unix-mail-delim-backward)
- (if leave-delim (progn (forward-line 1) (point))
- (point)))
- (progn
- (forward-line 1)
- (if (nnmail-search-unix-mail-delim)
- (point)
- (point-max)))))
+(defun nnfolder-delete-mail (&optional force leave-delim)
+ "Delete the message that point is in."
+ (save-excursion
+ (delete-region
+ (save-excursion
+ (nnmail-search-unix-mail-delim-backward)
+ (if leave-delim (progn (forward-line 1) (point))
+ (point)))
+ (progn
+ (forward-line 1)
+ (if (nnmail-search-unix-mail-delim)
+ (point)
+ (point-max))))))
(defun nnfolder-possibly-change-group (group &optional server dont-check)
;; Change servers.
(while (and (search-forward marker nil t)
(re-search-forward number nil t))
(let ((newnum (string-to-number (match-string 0))))
- (if (nnmail-within-headers-p)
- (setq maxid (max maxid newnum)
- minid (min minid newnum)))))
+ (setq maxid (max maxid newnum))
+ (setq minid (min minid newnum))))
(setcar active (max 1 (min minid maxid)))
(setcdr active (max maxid (cdr active)))
(goto-char (point-min)))
(nnfolder-possibly-change-folder file)
(nnfolder-possibly-change-group file)
(nnfolder-close-group file))))
- (nnheader-message 5 "")))
+ (message "")))
(defun nnfolder-group-pathname (group)
"Make pathname for GROUP."
;;; nngateway.el --- posting news via mail gateways
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news, mail
;; This file is part of GNU Emacs.
;; 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@gnus.org>
+;; Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
"Fold continuation lines in the current buffer."
(nnheader-replace-regexp "\\(\r?\n[ \t]+\\)+" " "))
-(defun nnheader-translate-file-chars (file &optional full)
- "Translate FILE into something that can be a file name.
-If FULL, translate everything."
+(defun nnheader-translate-file-chars (file)
(if (null nnheader-file-name-translation-alist)
;; No translation is necessary.
file
+ ;; We translate -- but only the file name. We leave the directory
+ ;; alone.
(let* ((i 0)
trans leaf path len)
- (if full
- ;; Do complete translation.
- (setq leaf (copy-sequence file)
- path "")
- ;; We translate -- but only the file name. We leave the directory
- ;; alone.
- (if (string-match "/[^/]+\\'" file)
- ;; This is needed on NT's and stuff.
- (setq leaf (substring file (1+ (match-beginning 0)))
- path (substring file 0 (1+ (match-beginning 0))))
- ;; Fall back on this.
- (setq leaf (file-name-nondirectory file)
- path (file-name-directory file))))
+ (if (string-match "/[^/]+\\'" file)
+ ;; This is needed on NT's and stuff.
+ (setq leaf (substring file (1+ (match-beginning 0)))
+ path (substring file 0 (1+ (match-beginning 0))))
+ ;; Fall back on this.
+ (setq leaf (file-name-nondirectory file)
+ path (file-name-directory file)))
(setq len (length leaf))
(while (< i len)
(when (setq trans (cdr (assq (aref leaf i)
(defun nnheader-get-report (backend)
"Get the most recent report from BACKEND."
(condition-case ()
- (nnheader-message 5 "%s" (symbol-value (intern (format "%s-status-string"
+ (message "%s" (symbol-value (intern (format "%s-status-string"
backend))))
- (error (nnheader-message 5 ""))))
+ (error (message ""))))
(defun nnheader-insert (format &rest args)
"Clear the communication buffer and insert FORMAT and ARGS into the buffer.
(default-major-mode 'fundamental-mode)
(enable-local-variables nil)
(after-insert-file-functions nil)
- (find-file-hooks nil)
(coding-system-for-read nnheader-file-coding-system))
(apply 'find-file-noselect args)))
;;; nnheaderxm.el --- making Gnus backends work under XEmacs
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;;; nnkiboze.el --- select virtual news access for Gnus
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
(save-excursion
(set-buffer nntp-server-buffer)
(erase-buffer)
- (unless (file-exists-p nov-file)
- (nnkiboze-request-scan group))
(if (not (file-exists-p nov-file))
(nnheader-report 'nnkiboze "Can't select group %s" group)
(nnheader-insert-file-contents nov-file)
;;;###autoload
(defun nnkiboze-generate-groups ()
- "\"Usage: emacs -batch -l nnkiboze -f nnkiboze-generate-groups\".
+ "Usage: emacs -batch -l nnkiboze -f nnkiboze-generate-groups
Finds out what articles are to be part of the nnkiboze groups."
(interactive)
(let ((nnmail-spool-file nil)
(gnus-verbose (min gnus-verbose 3))
gnus-select-group-hook gnus-summary-prepare-hook
gnus-thread-sort-functions gnus-show-threads
- gnus-visual gnus-suppress-duplicates num-unread)
+ gnus-visual gnus-suppress-duplicates)
(unless info
(error "No such group: %s" group))
;; Load the kiboze newsrc file for this group.
(gnus-group-jump-to-group (caar newsrc))
(gnus-message 3 "nnkiboze: Checking %s..." (caar newsrc))
(setq ginfo (gnus-get-info (gnus-group-group-name))
- orig-info (gnus-copy-sequence ginfo)
- num-unread (car (gnus-gethash (caar newsrc)
- gnus-newsrc-hashtb)))
+ orig-info (gnus-copy-sequence ginfo))
(unwind-protect
(progn
;; We set all list of article marks to nil. Since we operate
gnus-newsgroup-name))
(setq gnus-newsgroup-scored (cdr gnus-newsgroup-scored)))
;; That's it. We exit this group.
- (when (eq major-mode 'gnus-summary-mode)
- (kill-buffer (current-buffer)))))
+ (gnus-summary-exit-no-update)))
;; Restore the proper info.
(when ginfo
- (setcdr ginfo (cdr orig-info)))
- (setcar (gnus-gethash (caar newsrc) gnus-newsrc-hashtb)
- num-unread)))
+ (setcdr ginfo (cdr orig-info)))))
(setcdr (car newsrc) (car active))
(gnus-message 3 "nnkiboze: Checking %s...done" (caar newsrc))
(setq newsrc (cdr newsrc))))
(nnheader-temp-write newsrc-file
(insert "(setq nnkiboze-newsrc '")
(gnus-prin1 nnkiboze-newsrc)
- (insert ")\n")))
- (save-excursion
- (set-buffer gnus-group-buffer)
- (gnus-group-list-groups))
- t)
+ (insert ")\n"))
+ t))
(defun nnkiboze-enter-nov (buffer header group)
(save-excursion
;; The first Xref has to be the group this article
;; really came for - this is the article nnkiboze
;; will request when it is asked for the article.
- (insert " " group ":"
+ (insert group ":"
(int-to-string (mail-header-number header)) " ")
(while (re-search-forward " [^ ]+:[0-9]+" nil t)
(goto-char (1+ (match-beginning 0)))
;;; nnlistserv.el --- retrieving articles via web mailing list archives
;; Copyright (C) 1997,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news, mail
;; This file is part of GNU Emacs.
nil 0 0 url))
map)
(nnweb-set-hashtb (cadar map) (car map))
- (nnheader-message 5 "%s %s %s" (cdr active) (point) pages)
+ (message "%s %s %s" (cdr active) (point) pages)
))))
;; Return the articles in the right order.
(setq nnweb-articles
;;; nnmail.el --- mail support functions for the Gnus mail backends
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news, mail
;; This file is part of GNU Emacs.
:type 'function)
(defcustom nnmail-crosspost-link-function
- (if (string-match "windows-nt\\|emx" (symbol-name system-type))
+ (if (string-match "windows-nt\\|emx" (format "%s" system-type))
'copy-file
'add-name-to-file)
"*Function called to create a copy of a file.
"Incoming mail can be split according to this fancy variable.
To enable this, set `nnmail-split-methods' to `nnmail-split-fancy'.
-The format of this variable is SPLIT, where SPLIT can be one of
+The format is this variable is SPLIT, where SPLIT can be one of
the following:
GROUP: Mail will be stored in GROUP (a string).
"Convert DAYS into time."
(let* ((seconds (* 1.0 days 60 60 24))
(rest (expt 2 16))
- (ms (condition-case nil (floor (/ seconds rest))
+ (ms (condition-case nil (round (/ seconds rest))
(range-error (expt 2 16)))))
(list ms (condition-case nil (round (- seconds (* ms rest)))
(range-error (expt 2 16))))))
(nnmail-read-passwd
(format "Password for %s: "
(substring inbox (+ popmail 3))))))
- (nnheader-message 5 "Getting mail from the post office..."))
+ (message "Getting mail from the post office..."))
(when (or (and (file-exists-p tofile)
(/= 0 (nnheader-file-size tofile)))
(and (file-exists-p inbox)
(/= 0 (nnheader-file-size inbox))))
- (nnheader-message 5 "Getting mail from %s..." inbox)))
+ (message "Getting mail from %s..." inbox)))
;; Set TOFILE if have not already done so, and
;; rename or copy the file INBOX to TOFILE if and as appropriate.
(cond
nil errors nil inbox tofile)
(when nnmail-internal-password
(list nnmail-internal-password)))))))
- (push inbox nnmail-moved-inboxes)
(if (and (not (buffer-modified-p errors))
(zerop result))
;; No output => movemail won
(progn
(unless popmail
(when (file-exists-p tofile)
- (set-file-modes tofile nnmail-default-file-modes))))
+ (set-file-modes tofile nnmail-default-file-modes)))
+ (push inbox nnmail-moved-inboxes))
(set-buffer errors)
;; There may be a warning about older revisions. We
;; ignore those.
(progn
(unless popmail
(when (file-exists-p tofile)
- (set-file-modes
- tofile nnmail-default-file-modes))))
+ (set-file-modes tofile nnmail-default-file-modes)))
+ (push inbox nnmail-moved-inboxes))
;; Probably a real error.
(subst-char-in-region (point-min) (point-max) ?\n ?\ )
(goto-char (point-max))
(buffer-string) result))
(error "%s" (buffer-string)))
(setq tofile nil)))))))
- (nnheader-message 5 "Getting mail from %s...done" inbox)
+ (message "Getting mail from %s...done" inbox)
(and errors
(buffer-name errors)
(kill-buffer errors))
is a spool. If not using procmail, return GROUP."
(if (or (eq nnmail-spool-file 'procmail)
nnmail-use-procmail)
- (if (string-match (concat "^" (regexp-quote
- (expand-file-name
- (file-name-as-directory
- nnmail-procmail-directory)))
- "\\([^/]*\\)"
- (regexp-quote nnmail-procmail-suffix) "$")
+ (if (string-match (concat "^" (expand-file-name
+ (file-name-as-directory
+ nnmail-procmail-directory))
+ "\\([^/]*\\)" nnmail-procmail-suffix "$")
(expand-file-name file))
(let ((procmail-group (substring (expand-file-name file)
(match-beginning 1)
(goto-char (match-beginning 0))))
;; Possibly wrong format?
(progn
- (pop-to-buffer (nnheader-find-file-noselect nnmail-current-spool))
+ (pop-to-buffer (find-file-noselect nnmail-current-spool))
(error "Error, unknown mail format! (Possibly corrupted.)"))
;; Carry on until the bitter end.
(while (not (eobp))
(forward-line 1)))
;; Possibly wrong format?
(progn
- (pop-to-buffer (nnheader-find-file-noselect nnmail-current-spool))
+ (pop-to-buffer (find-file-noselect nnmail-current-spool))
(error "Error, unknown mail format! (Possibly corrupted.)"))
;; Carry on until the bitter end.
(while (not (eobp))
(or (funcall nnmail-split-methods)
'("bogus"))
(error
- (nnheader-message 5
+ (message
"Error in `nnmail-split-methods'; using `bogus' mail group")
(sit-for 1)
'("bogus")))))
(substring inbox (match-end (string-match "^po:" inbox)))))
(pop3-movemail crashbox)))
-(defun nnmail-within-headers-p ()
- "Check to see if point is within the headers of a unix mail message.
-Doesn't change point."
- (let ((pos (point)))
- (save-excursion
- (and (nnmail-search-unix-mail-delim-backward)
- (not (search-forward "\n\n" pos t))))))
-
(run-hooks 'nnmail-load-hook)
(provide 'nnmail)
;;; nnmbox.el --- mail mbox access for Gnus
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
;; Keywords: news, mail
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
;; 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,
(deffoo nnmbox-close-group (group &optional server)
t)
-(deffoo nnmbox-request-create-group (group &optional server args)
- (nnmail-activate 'nnmbox)
- (unless (assoc group nnmbox-group-alist)
- (push (list group (cons 1 0))
- nnmbox-group-alist)
- (nnmail-save-active nnmbox-group-alist nnmbox-active-file))
- t)
-
(deffoo nnmbox-request-list (&optional server)
(save-excursion
(nnmail-find-file nnmbox-active-file)
;;; nnmh.el --- mhspool access for Gnus
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
;; Keywords: news, mail
(and large
(zerop (% count 20))
- (nnheader-message 5 "nnmh: Receiving headers... %d%%"
+ (message "nnmh: Receiving headers... %d%%"
(/ (* count 100) number))))
(when large
- (nnheader-message 5 "nnmh: Receiving headers...done"))
+ (message "nnmh: Receiving headers...done"))
(nnheader-fold-continuation-lines)
'headers))))
(push (car articles) rest))))
(push (car articles) rest)))
(setq articles (cdr articles)))
- (nnheader-message 5 "")
+ (message "")
(nconc rest articles)))
(deffoo nnmh-close-group (group &optional server)
;;; nnml.el --- mail spool access for Gnus
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
;; Keywords: news, mail
article rest mod-time number)
(nnmail-activate 'nnml)
- (setq active-articles (sort active-articles '<))
- ;; Articles not listed in active-articles are already gone,
- ;; so don't try to expire them.
- (setq articles (gnus-sorted-intersection articles active-articles))
-
(while (and articles is-old)
(when (setq article (nnml-article-to-file (setq number (pop articles))))
(when (setq mod-time (nth 5 (file-attributes article)))
;;; nnoo.el --- OO Gnus Backends
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;;; nnsoup.el --- SOUP access for Gnus
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
;; Keywords: news, mail
(while (setq area (pop areas))
;; Change the name to the permanent name and move the files.
(setq cur-prefix (nnsoup-next-prefix))
- (nnheader-message 5 "Incorporating file %s..." cur-prefix)
+ (message "Incorporating file %s..." cur-prefix)
(when (file-exists-p
(setq file (concat nnsoup-tmp-directory
(gnus-soup-area-prefix area) ".IDX")))
nnsoup-packet-directory t nnsoup-packet-regexp))
packet)
(while (setq packet (pop packets))
- (nnheader-message 5 "nnsoup: unpacking %s..." packet)
+ (message "nnsoup: unpacking %s..." packet)
(if (not (gnus-soup-unpack-packet
nnsoup-tmp-directory nnsoup-unpacker packet))
- (nnheader-message 5 "Couldn't unpack %s" packet)
+ (message "Couldn't unpack %s" packet)
(delete-file packet)
(nnsoup-read-areas)
- (nnheader-message 5 "Unpacking...done")))))
+ (message "Unpacking...done")))))
(defun nnsoup-narrow-to-article (article &optional area head)
(let* ((area (or area (nnsoup-article-to-area article nnsoup-current-group)))
"Make an outbound package of SOUP replies."
(interactive)
(unless (file-exists-p nnsoup-replies-directory)
- (nnheader-message 5 "No such directory: %s" nnsoup-replies-directory))
+ (message "No such directory: %s" nnsoup-replies-directory))
;; Write all data buffers.
(gnus-soup-save-areas)
;; Write the active file.
(incf num))
(when nnsoup-always-save
(save-buffer)))
- (nnheader-message 5 "Stored %d messages" num)))
+ (message "Stored %d messages" num)))
(nnsoup-write-replies)
(kill-buffer tembuf))))))
(set-buffer (get-buffer-create " *nnsoup work*"))
(buffer-disable-undo (current-buffer))
(while files
- (nnheader-message 5 "Doing %s..." (car files))
+ (message "Doing %s..." (car files))
(erase-buffer)
(nnheader-insert-file-contents (car files))
(goto-char (point-min))
(vector ident group "ncm" "" lines))))
(setcdr (cadr elem) (+ min lines)))
(setq files (cdr files)))
- (nnheader-message 5 "")
+ (message "")
(setq nnsoup-group-alist active)
(nnsoup-write-active-file t)))
;; Copyright (C) 1988,89,90,93,94,95,96,97,98 Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
-;; Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
(and do-message
(zerop (% (incf count) 20))
- (nnheader-message 5 "nnspool: Receiving headers... %d%%"
+ (message "nnspool: Receiving headers... %d%%"
(/ (* count 100) number))))
(when do-message
- (nnheader-message 5 "nnspool: Receiving headers...done"))
+ (message "nnspool: Receiving headers...done"))
;; Fold continuation lines.
(nnheader-fold-continuation-lines)
(while (re-search-forward "[ \t\n]+" nil t)
(replace-match " " t t))
(nnheader-report 'nnspool "%s" (buffer-string))
- (nnheader-message 5 "nnspool: %s" nnspool-status-string)
+ (message "nnspool: %s" nnspool-status-string)
(ding)
(run-hooks 'nnspool-rejected-article-hook))))
;;; nntp.el --- nntp access for Gnus
;;; Copyright (C) 1987-90,92-97 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
The default is \"rsh\", but \"ssh\" is a popular alternative.")
(defvoo nntp-rlogin-parameters '("telnet" "-8" "${NNTPSERVER:=news}" "nntp")
- "*Parameters to `nntp-open-rlogin'.
+ "*Parameters to `nntp-open-login'.
That function may be used as `nntp-open-connection-function'. In that
case, this list will be used as the parameter list given to rsh.")
If the gap between two consecutive articles is bigger than this
variable, split the XOVER request into two requests.")
+(defvoo nntp-connection-timeout nil
+ "*Number of seconds to wait before an nntp connection times out.
+If this variable is nil, which is the default, no timers are set.")
+
(defvoo nntp-prepare-server-hook nil
"*Hook run before a server is opened.
If can be used to set up a server remotely, for instance. Say you
"*Coding system to write to NNTP.")
(defcustom nntp-authinfo-file "~/.authinfo"
- ".netrc-like file that holds nntp authinfo passwords."
+ "Docstring."
:type
'(choice file
(repeat :tag "Entries"
;; Nix out "nntp reading...." message.
(when nntp-have-messaged
(setq nntp-have-messaged nil)
- (nnheader-message 5 ""))
+ (message ""))
t))))
(unless discard
(erase-buffer)))))
(deffoo nntp-close-server (&optional server)
(nntp-possibly-change-group nil server t)
- (let ((process (nntp-find-connection nntp-server-buffer)))
- (while process
+ (let (process)
+ (while (setq process (car (pop nntp-connection-alist)))
(when (memq (process-status process) '(open run))
(ignore-errors
(nntp-send-string process "QUIT")
(unless (eq nntp-open-connection-function 'nntp-open-network-stream)
(sleep-for 1))))
(when (buffer-name (process-buffer process))
- (kill-buffer (process-buffer process)))
- (setq process (car (pop nntp-connection-alist))))
+ (kill-buffer (process-buffer process))))
(nnoo-close-server 'nntp)))
(deffoo nntp-request-close ()
(nntp-possibly-change-group nil server)
(save-excursion
(set-buffer nntp-server-buffer)
- (prog1
- (nntp-send-command
- "^\\.\r?\n" "NEWGROUPS"
- (format-time-string "%y%m%d %H%M%S" (nnmail-date-to-time date)))
- (nntp-decode-text))))
+ (let* ((date (timezone-parse-date date))
+ (time-string
+ (format "%s%02d%02d %s%s%s"
+ (substring (aref date 0) 2) (string-to-int (aref date 1))
+ (string-to-int (aref date 2)) (substring (aref date 3) 0 2)
+ (substring
+ (aref date 3) 3 5) (substring (aref date 3) 6 8))))
+ (prog1
+ (nntp-send-command "^\\.\r?\n" "NEWGROUPS" time-string)
+ (nntp-decode-text)))))
(deffoo nntp-request-post (&optional server)
(nntp-possibly-change-group nil server)
(generate-new-buffer
(format " *server %s %s %s*"
nntp-address nntp-port-number
- (gnus-buffer-exists-p buffer))))
+ (buffer-name (get-buffer buffer)))))
(buffer-disable-undo (current-buffer))
(set (make-local-variable 'after-change-functions) nil)
(set (make-local-variable 'nntp-process-wait-for) nil)
(when (and (> (point) nntp-process-start-point)
(re-search-backward nntp-process-wait-for
nntp-process-start-point t))
- (when (gnus-buffer-exists-p nntp-process-to-buffer)
+ (when (buffer-name (get-buffer nntp-process-to-buffer))
(let ((cur (current-buffer))
(start nntp-process-start-point))
(save-excursion
- (set-buffer nntp-process-to-buffer)
+ (set-buffer (get-buffer nntp-process-to-buffer))
(goto-char (point-max))
(let ((b (point)))
(insert-buffer-substring cur start)
(while (not (eobp))
(end-of-line)
(delete-char 1)
- (insert nntp-end-of-line))
+ (insert nntp-end-of-line)
+ (forward-line 1))
(forward-char -1)
(unless (eq (char-after (1- (point))) ?\r)
(insert "\r"))))
;; Copyright (C) 1994,95,96,97,98 Free Software Foundation, Inc.
;; Author: David Moore <dmoore@ucsd.edu>
-;; Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
;; Keywords: news
;;; nnweb.el --- retrieving articles via web search engines
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;; This file is part of GNU Emacs.
;;; score-mode.el --- mode for editing Gnus score files
;; Copyright (C) 1996 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news, mail
;; This file is part of GNU Emacs.
(define-key gnus-score-mode-map "\C-c\C-d" 'gnus-score-edit-insert-date)
(define-key gnus-score-mode-map "\C-c\C-p" 'gnus-score-pretty-print))
-(defvar score-mode-syntax-table
- (let ((table (copy-syntax-table lisp-mode-syntax-table)))
- (modify-syntax-entry ?| "w" table)
- table)
- "Syntax table used in score-mode buffers.")
-
;;;###autoload
(defun gnus-score-mode ()
"Mode for editing Gnus score files.
(kill-all-local-variables)
(use-local-map gnus-score-mode-map)
(gnus-score-make-menu-bar)
- (set-syntax-table score-mode-syntax-table)
+ (set-syntax-table emacs-lisp-mode-syntax-table)
(setq major-mode 'gnus-score-mode)
(setq mode-name "Score")
(lisp-mode-variables nil)
(goto-char (point-min))
(let ((form (read (current-buffer))))
(erase-buffer)
- (let ((emacs-lisp-mode-syntax-table score-mode-syntax-table))
- (pp form (current-buffer))))
+ (pp form (current-buffer)))
(goto-char (point-min)))
(defun gnus-score-edit-exit ()
(smiley-buffer (current-buffer) beg end))
(defun smiley-toggle-extent (event)
- "Toggle smiley at given point."
+ "Toggle smiley at given point"
(interactive "e")
(let* ((ant (event-glyph-extent event))
(pt (event-closest-point event))
(defvar gnus-article-buffer)
;;;###autoload
(defun gnus-smiley-display ()
- "Display \"smileys\" as small graphical icons."
+ "Display \"smileys\" as small graphical icons."
(interactive)
(save-excursion
(set-buffer gnus-article-buffer)
-Wed Jun 3 03:30:47 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * message.texi (Message Headers): Addition.
-
- * gnus.texi (Compatibility): Addition.
-
-Tue May 19 02:44:31 1998 Mike Pullen <mpullen@midwest.net>
-
- * gnus.texi.orig: Typo fixes.
-
-Wed Apr 29 21:52:28 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus.texi (Key Index): Untabified.
- (Group Parameters): Fix.
-
-Sun Apr 26 15:32:45 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus.texi (Summary Post Commands): Ref to Message.
-
- * message.texi (Various Message Variables): Deletia.
-
-Fri Apr 24 16:00:40 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus.texi (Unread Articles): Typo.
- (Summary Buffer Lines): Fix.
- (Foreign Groups): Addition.
- (Posting Server): Addition.
-
Sat Mar 28 08:57:46 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
* gnus.texi (Example Methods): Addition.
makeinfo -o $* $<; \
fi
-dvi: gnus.dvi message.dvi refcard.dvi
+dvi: gnus.dvi message.dvi
.texi.dvi :
$(PERL) -n -e 'print unless (/\@iflatex/ .. /\@end iflatex/)' $< > gnustmp.texi
install:
$(SHELL) $(top_srcdir)/mkinstalldirs $(infodir)
@for file in gnus message; do \
- for ifile in `echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
+ for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
if test -f $$ifile; then \
- echo " $(INSTALL_DATA) $$ifile $(infodir)/$$ifile"; \
+ echo " $(INSTALL_DATA) $$d/$$ifile $(infodir)/$$ifile"; \
$(INSTALL_DATA) $$ifile $(infodir)/$$ifile; \
else : ; fi; \
done; \
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Semi-gnus 6.3.3 Manual
+@settitle Gnus 5.6.4 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@c @direntry
-@c * Gnus: (gnus). The news reader gnus.
+@c * Gnus: (gnus). The news reader Gnus.
@c @end direntry
@iftex
@finalout
@ifinfo
-This file documents gnus, the GNU Emacs newsreader.
+This file documents Gnus, the GNU Emacs newsreader.
Copyright (C) 1995,96 Free Software Foundation, Inc.
@tex
@titlepage
-@title Semi-gnus 6.3.3 Manual
+@title Gnus 5.6.4 Manual
@author by Lars Magne Ingebrigtsen
@page
@node Top
-@top The gnus Newsreader
+@top The Gnus Newsreader
@ifinfo
-You can read news (and mail) from within Emacs by using gnus. The news
+You can read news (and mail) from within Emacs by using Gnus. The news
can be gotten by any nefarious means you can think of---@sc{nntp}, local
spool or your mbox file. All at the same time, if you want to push your
luck.
-Semi-gnus provides MIME features based on SEMI API. So Semi-gnus
-supports your right to read strange messages including big images or
-other various kinds of formats. Semi-gnus also supports
-internationalization/localization and multiscript features based on MULE
-API. So Semi-gnus does not discriminate various language communities.
-Oh, if you are a Klingon, please wait Unicode Next Generation.
-
-This manual corresponds to Semi-gnus 6.3.3.
+This manual corresponds to Gnus 5.6.4.
@end ifinfo
Gnus tries to empower people who read news the same way Emacs empowers
people who edit text. Gnus sets no limits to what the user should be
-allowed to do. Users are encouraged to extend gnus to make it behave
+allowed to do. Users are encouraged to extend Gnus to make it behave
like they want it to behave. A program should not control people;
people should be empowered to do what they want by using (or abusing)
the program.
@end menu
@node Starting Up
-@chapter Starting gnus
+@chapter Starting Gnus
@cindex starting up
@kindex M-x gnus
@findex gnus
-If your system administrator has set things up properly, starting gnus
+If your system administrator has set things up properly, starting Gnus
and reading news is extremely easy---you just type @kbd{M-x gnus} in
your Emacs.
@findex gnus-other-frame
@kindex M-x gnus-other-frame
-If you want to start gnus in a different frame, you can use the command
+If you want to start Gnus in a different frame, you can use the command
@kbd{M-x gnus-other-frame} instead.
If things do not go smoothly at startup, you have to twiddle some
@menu
* Finding the News:: Choosing a method for getting news.
-* The First Time:: What does gnus do the first time you start it?
+* The First Time:: What does Gnus do the first time you start it?
* The Server is Down:: How can I read my mail then?
-* Slave Gnusae:: You can have more than one gnus active at a time.
-* Fetching a Group:: Starting gnus just to read a group.
-* New Groups:: What is gnus supposed to do with new groups?
+* Slave Gnusae:: You can have more than one Gnus active at a time.
+* Fetching a Group:: Starting Gnus just to read a group.
+* New Groups:: What is Gnus supposed to do with new groups?
* Startup Files:: Those pesky startup files---@file{.newsrc}.
* Auto Save:: Recovering from a crash.
* The Active File:: Reading the active file over a slow line Takes Time.
@vindex gnus-select-method
@c @head
-The @code{gnus-select-method} variable says where gnus should look for
+The @code{gnus-select-method} variable says where Gnus should look for
news. This variable should be a list where the first element says
@dfn{how} and the second element says @dfn{where}. This method is your
-native method. All groups not fetched with this method are foreign
-groups.
+native method. All groups not fetched with this method are
+foreign groups.
For instance, if the @samp{news.somewhere.edu} @sc{nntp} server is where
you want to get your daily dosage of news from, you'd say:
@vindex gnus-nntpserver-file
@cindex NNTPSERVER
@cindex @sc{nntp} server
-If this variable is not set, gnus will take a look at the
+If this variable is not set, Gnus will take a look at the
@code{NNTPSERVER} environment variable. If that variable isn't set,
-gnus will see whether @code{gnus-nntpserver-file}
+Gnus will see whether @code{gnus-nntpserver-file}
(@file{/etc/nntpserver} by default) has any opinions on the matter. If
-that fails as well, gnus will try to use the machine running Emacs as an
-@sc{nntp} server. That's a long shot, though.
+that fails as well, Gnus will try to use the machine running Emacs as an @sc{nntp} server. That's a long shot, though.
@vindex gnus-nntp-server
If @code{gnus-nntp-server} is set, this variable will override
@code{gnus-nntp-server} to @code{nil}, which is what it is by default.
@vindex gnus-secondary-servers
-You can also make gnus prompt you interactively for the name of an
+You can also make Gnus prompt you interactively for the name of an
@sc{nntp} server. If you give a non-numerical prefix to @code{gnus}
-(i.e., @kbd{C-u M-x gnus}), gnus will let you choose between the servers
+(i.e., @kbd{C-u M-x gnus}), Gnus will let you choose between the servers
in the @code{gnus-secondary-servers} list (if any). You can also just
type in the name of any server you feel like visiting.
@section The First Time
@cindex first time usage
-If no startup files exist, gnus will try to determine what groups should
+If no startup files exist, Gnus will try to determine what groups should
be subscribed by default.
@vindex gnus-default-subscribed-newsgroups
-If the variable @code{gnus-default-subscribed-newsgroups} is set, gnus
+If the variable @code{gnus-default-subscribed-newsgroups} is set, Gnus
will subscribe you to just those groups in that list, leaving the rest
killed. Your system administrator should have set this variable to
something useful.
-Since she hasn't, gnus will just subscribe you to a few arbitrarily
+Since she hasn't, Gnus will just subscribe you to a few arbitrarily
picked groups (i.e., @samp{*.newusers}). (@dfn{Arbitrary} is defined
here as @dfn{whatever Lars thinks you should read}.)
-You'll also be subscribed to the gnus documentation group, which should
+You'll also be subscribed to the Gnus documentation group, which should
help you with most common problems.
-If @code{gnus-default-subscribed-newsgroups} is @code{t}, gnus will just
+If @code{gnus-default-subscribed-newsgroups} is @code{t}, Gnus will just
use the normal functions for handling new groups, and not do anything
special.
@section The Server is Down
@cindex server errors
-If the default server is down, gnus will understandably have some
+If the default server is down, Gnus will understandably have some
problems starting. However, if you have some mail groups in addition to
-the news groups, you may want to start gnus anyway.
+the news groups, you may want to start Gnus anyway.
Gnus, being the trusting sort of program, will ask whether to proceed
without a native select method if that server can't be contacted. This
@c @head
If you know that the server is definitely down, or you just want to read
your mail without bothering with the server at all, you can use the
-@code{gnus-no-server} command to start gnus. That might come in handy
+@code{gnus-no-server} command to start Gnus. That might come in handy
if you're in a hurry as well. This command will not attempt to contact
your primary server---instead, it will just activate all groups on level
1 and 2. (You should preferably keep no native groups on those two
@section Slave Gnusae
@cindex slave
-You might want to run more than one Emacs with more than one gnus at the
-same time. If you are using different @file{.newsrc} files (e.g., if
-you are using the two different gnusae to read from two different
-servers), that is no problem whatsoever. You just do it.
+You might want to run more than one Emacs with more than one Gnus at the
+same time. If you are using different @file{.newsrc} files (e.g., if you
+are using the two different Gnusae to read from two different servers),
+that is no problem whatsoever. You just do it.
The problem appears when you want to run two Gnusae that use the same
@code{.newsrc} file.
-To work around that problem some, we here at the Think-Tank at the gnus
-Towers have come up with a new concept: @dfn{Masters} and @dfn{slaves}.
-(We have applied for a patent on this concept, and have taken out a
-copyright on those words. If you wish to use those words in conjunction
-with each other, you have to send $1 per usage instance to me. Usage of
-the patent (@dfn{Master/Slave Relationships In Computer Applications})
-will be much more expensive, of course.)
+To work around that problem some, we here at the Think-Tank at the Gnus
+Towers have come up with a new concept: @dfn{Masters} and
+@dfn{slaves}. (We have applied for a patent on this concept, and have
+taken out a copyright on those words. If you wish to use those words in
+conjunction with each other, you have to send $1 per usage instance to
+me. Usage of the patent (@dfn{Master/Slave Relationships In Computer
+Applications}) will be much more expensive, of course.)
-Anyways, you start one gnus up the normal way with @kbd{M-x gnus} (or
-however you do it). Each subsequent slave gnusae should be started with
+Anyways, you start one Gnus up the normal way with @kbd{M-x gnus} (or
+however you do it). Each subsequent slave Gnusae should be started with
@kbd{M-x gnus-slave}. These slaves won't save normal @file{.newsrc}
files, but instead save @dfn{slave files} that contain information only
-on what groups have been read in the slave session. When a master gnus
+on what groups have been read in the slave session. When a master Gnus
starts, it will read (and delete) these slave files, incorporating all
information from them. (The slave files will be read in the sequence
they were created, so the latest changes will have precedence.)
@findex gnus-fetch-group
It is sometimes convenient to be able to just say ``I want to read this
-group and I don't care whether gnus has been started or not''. This is
+group and I don't care whether Gnus has been started or not''. This is
perhaps more useful for people who write code than for users, but the
command @code{gnus-fetch-group} provides this functionality in any case.
It takes the group name as a parameter.
@code{nil}, you can always subscribe to the new groups just by pressing
@kbd{U} in the group buffer (@pxref{Group Maintenance}). This variable
is @code{ask-server} by default. If you set this variable to
-@code{always}, then gnus will query the backends for new groups even
+@code{always}, then Gnus will query the backends for new groups even
when you do the @kbd{g} command (@pxref{Scanning New Messages}).
@menu
* Checking New Groups:: Determining what groups are new.
-* Subscription Methods:: What gnus should do with new groups.
-* Filtering New Groups:: Making gnus ignore certain new groups.
+* Subscription Methods:: What Gnus should do with new groups.
+* Filtering New Groups:: Making Gnus ignore certain new groups.
@end menu
Gnus normally determines whether a group is new or not by comparing the
list of groups from the active file(s) with the lists of subscribed and
dead groups. This isn't a particularly fast method. If
-@code{gnus-check-new-newsgroups} is @code{ask-server}, gnus will ask the
+@code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the
server for new groups since the last time. This is both faster and
cheaper. This also means that you can get rid of the list of killed
groups altogether, so you may set @code{gnus-save-killed-list} to
server supports @code{ask-server}? No? Good, because I don't have a
fail-safe answer. I would suggest just setting this variable to
@code{ask-server} and see whether any new groups appear within the next
-few days. If any do, then it works. If none do, then it doesn't work.
-I could write a function to make gnus guess whether the server supports
-@code{ask-server}, but it would just be a guess. So I won't. You could
-@code{telnet} to the server and say @code{HELP} and see whether it lists
-@samp{NEWGROUPS} among the commands it understands. If it does, then it
-might work. (But there are servers that lists @samp{NEWGROUPS} without
-supporting the function properly.)
-
-This variable can also be a list of select methods. If so, gnus will
+few days. If any do, then it works. If none do, then it doesn't
+work. I could write a function to make Gnus guess whether the server
+supports @code{ask-server}, but it would just be a guess. So I won't.
+You could @code{telnet} to the server and say @code{HELP} and see
+whether it lists @samp{NEWGROUPS} among the commands it understands. If
+it does, then it might work. (But there are servers that lists
+@samp{NEWGROUPS} without supporting the function properly.)
+
+This variable can also be a list of select methods. If so, Gnus will
issue an @code{ask-server} command to each of the select methods, and
subscribe them (or not) using the normal methods. This might be handy
if you are monitoring a few servers for new groups. A side effect is
@subsection Subscription Methods
@vindex gnus-subscribe-newsgroup-method
-What gnus does when it encounters a new group is determined by the
+What Gnus does when it encounters a new group is determined by the
@code{gnus-subscribe-newsgroup-method} variable.
This variable should contain a function. This function will be called
@item gnus-subscribe-interactively
@vindex gnus-subscribe-interactively
-Subscribe new groups interactively. This means that gnus will ask you
-about @strong{all} new groups. The groups you choose to subscribe to
-will be subscribed hierarchically.
+Subscribe new groups interactively. This means that Gnus will ask
+you about @strong{all} new groups. The groups you choose to subscribe
+to will be subscribed hierarchically.
@item gnus-subscribe-killed
@vindex gnus-subscribe-killed
@vindex gnus-subscribe-hierarchical-interactive
A closely related variable is
@code{gnus-subscribe-hierarchical-interactive}. (That's quite a
-mouthful.) If this variable is non-@code{nil}, gnus will ask you in a
+mouthful.) If this variable is non-@code{nil}, Gnus will ask you in a
hierarchical fashion whether to subscribe to new groups or not. Gnus
will ask you for each sub-hierarchy whether you want to descend the
hierarchy or not.
Now, you all know about the @file{.newsrc} file. All subscription
information is traditionally stored in this file.
-Things got a bit more complicated with @sc{GNUS}. In addition to
+Things got a bit more complicated with @sc{gnus}. In addition to
keeping the @file{.newsrc} file updated, it also used a file called
@file{.newsrc.el} for storing all the information that didn't fit into
the @file{.newsrc} file. (Actually, it also duplicated everything in
-the @file{.newsrc} file.) @sc{GNUS} would read whichever one of these
+the @file{.newsrc} file.) @sc{gnus} would read whichever one of these
files was the most recently saved, which enabled people to swap between
@sc{gnus} and other newsreaders.
@vindex gnus-save-newsrc-file
You can turn off writing the @file{.newsrc} file by setting
@code{gnus-save-newsrc-file} to @code{nil}, which means you can delete
-the file and save some space, as well as exiting from Gnus faster.
+the file and save some space, as well as making exit from Gnus faster.
However, this will make it impossible to use other newsreaders than
-gnus. But hey, who would want to, right?
+Gnus. But hey, who would want to, right?
@vindex gnus-save-killed-list
If @code{gnus-save-killed-list} (default @code{t}) is @code{nil}, Gnus
@end lisp
@vindex gnus-init-file
-When gnus starts, it will read the @code{gnus-site-init-file}
+When Gnus starts, it will read the @code{gnus-site-init-file}
(@file{.../site-lisp/gnus} by default) and @code{gnus-init-file}
(@file{~/.gnus} by default) files. These are normal Emacs Lisp files
and can be used to avoid cluttering your @file{~/.emacs} and
-@file{site-init} files with gnus stuff. Gnus will also check for files
+@file{site-init} files with Gnus stuff. Gnus will also check for files
with the same names as these, but with @file{.elc} and @file{.el}
suffixes. In other words, if you have set @code{gnus-init-file} to
@file{~/.gnus}, it will look for @file{~/.gnus.elc}, @file{~/.gnus.el},
@cindex dribble file
@cindex auto-save
-Whenever you do something that changes the gnus data (reading articles,
+Whenever you do something that changes the Gnus data (reading articles,
catching up, killing/subscribing groups), the change is added to a
special @dfn{dribble buffer}. This buffer is auto-saved the normal
Emacs way. If your Emacs should crash before you have saved the
@file{.newsrc} files, all changes you have made can be recovered from
this file.
-If gnus detects this file at startup, it will ask the user whether to
-read it. The auto save file is deleted whenever the real startup file
-is saved.
+If Gnus detects this file at startup, it will ask the user whether to
+read it. The auto save file is deleted whenever the real startup file is
+saved.
@vindex gnus-use-dribble-file
-If @code{gnus-use-dribble-file} is @code{nil}, gnus won't create and
+If @code{gnus-use-dribble-file} is @code{nil}, Gnus won't create and
maintain a dribble buffer. The default is @code{t}.
@vindex gnus-dribble-directory
Gnus will put the dribble file(s) in @code{gnus-dribble-directory}. If
-this variable is @code{nil}, which it is by default, gnus will dribble
+this variable is @code{nil}, which it is by default, Gnus will dribble
into the directory where the @file{.newsrc} file is located. (This is
normally the user's home directory.) The dribble file will get the same
file permissions as the @code{.newsrc} file.
@cindex active file
@cindex ignored groups
-When gnus starts, or indeed whenever it tries to determine whether new
+When Gnus starts, or indeed whenever it tries to determine whether new
articles have arrived, it reads the active file. This is a very large
file that lists all the active groups and articles on the server.
@vindex gnus-ignored-newsgroups
-Before examining the active file, gnus deletes all lines that match the
+Before examining the active file, Gnus deletes all lines that match the
regexp @code{gnus-ignored-newsgroups}. This is done primarily to reject
-any groups with bogus names, but you can use this variable to make gnus
+any groups with bogus names, but you can use this variable to make Gnus
ignore hierarchies you aren't ever interested in. However, this is not
recommended. In fact, it's highly discouraged. Instead, @pxref{New
Groups} for an overview of other variables that can be used instead.
@vindex gnus-read-active-file
@c @head
The active file can be rather Huge, so if you have a slow network, you
-can set @code{gnus-read-active-file} to @code{nil} to prevent gnus from
+can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
reading the active file. This variable is @code{some} by default.
Gnus will try to make do by getting information just on the groups that
you actually subscribe to.
Note that if you subscribe to lots and lots of groups, setting this
-variable to @code{nil} will probably make gnus slower, not faster. At
-present, having this variable @code{nil} will slow gnus down
+variable to @code{nil} will probably make Gnus slower, not faster. At
+present, having this variable @code{nil} will slow Gnus down
considerably, unless you read news over a 2400 baud modem.
This variable can also have the value @code{some}. Gnus will then
at all. In any case, @code{some} should be faster than @code{nil}, and
is certainly faster than @code{t} over slow lines.
-If this variable is @code{nil}, gnus will ask for group info in total
+If this variable is @code{nil}, Gnus will ask for group info in total
lock-step, which isn't very fast. If it is @code{some} and you use an
-@sc{nntp} server, gnus will pump out commands as fast as it can, and
+@sc{nntp} server, Gnus will pump out commands as fast as it can, and
read all the replies in one swoop. This will normally result in better
performance, but if the server does not support the aforementioned
@code{LIST ACTIVE group} command, this isn't very nice to the server.
@item gnus-load-hook
@vindex gnus-load-hook
-A hook run while gnus is being loaded. Note that this hook will
+A hook run while Gnus is being loaded. Note that this hook will
normally be run just once in each Emacs session, no matter how many
-times you start gnus.
+times you start Gnus.
@item gnus-before-startup-hook
@vindex gnus-before-startup-hook
-A hook run after starting up gnus successfully.
+A hook run after starting up Gnus successfully.
@item gnus-startup-hook
@vindex gnus-startup-hook
-A hook run as the very last thing after starting up gnus
+A hook run as the very last thing after starting up Gnus
@item gnus-started-hook
@vindex gnus-started-hook
-A hook that is run as the very last thing after starting up gnus
+A hook that is run as the very last thing after starting up Gnus
successfully.
@item gnus-started-hook
@item gnus-check-bogus-newsgroups
@vindex gnus-check-bogus-newsgroups
-If non-@code{nil}, gnus will check for and delete all bogus groups at
+If non-@code{nil}, Gnus will check for and delete all bogus groups at
startup. A @dfn{bogus group} is a group that you have in your
@file{.newsrc} file, but doesn't exist on the news server. Checking for
bogus groups can take quite a while, so to save time and resources it's
@item gnus-no-groups-message
@vindex gnus-no-groups-message
-Message displayed by gnus when no groups are available.
+Message displayed by Gnus when no groups are available.
@item gnus-play-startup-jingle
@vindex gnus-play-startup-jingle
-If non-@code{nil}, play the gnus jingle at startup.
+If non-@code{nil}, play the Gnus jingle at startup.
@item gnus-startup-jingle
@vindex gnus-startup-jingle
(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}.
@findex gnus-group-prev-group
Go to the previous group (@code{gnus-group-prev-group}).
-@item M-n
-@kindex M-n (Group)
+@item M-p
+@kindex M-p (Group)
@findex gnus-group-next-unread-group-same-level
Go to the next unread group on the same (or lower) level
(@code{gnus-group-next-unread-group-same-level}).
-@item M-p
-@kindex M-p (Group)
+@item M-n
+@kindex M-n (Group)
@findex gnus-group-prev-unread-group-same-level
Go to the previous unread group on the same (or lower) level
(@code{gnus-group-prev-unread-group-same-level}).
Select the first unread article when entering the group.
@item best
-Select the highest scored article in the group when entering the
+Select the most high-scored article in the group when entering the
group.
@end table
include @code{dejanews}, @code{altavista} and @code{reference}.
@xref{Web Searches}.
-If you use the @code{dejanews} search engine, you can limit the search
-to a particular group by using a match string like
-@samp{~g alt.sysadmin.recovery shaving}.
-
@item G DEL
@kindex G DEL (Group)
@findex gnus-group-delete-group
you'll get mail group semantics when doing @kbd{f}.
If you do an @kbd{a} command in a mail group and you have neither a
-@code{to-list} group parameter nor a @code{to-address} group parameter,
+@code{to-list} group parameter nor a @code{to-address} group paramater,
then a @code{to-list} group parameter will be added automatically upon
sending the message if @code{gnus-add-to-list} is set to @code{t}.
@vindex gnus-add-to-list
@item score-file
@cindex score file group parameter
Elements that look like @code{(score-file . "file")} will make
-@file{file} into the current score file for the group in question. All
-interactive score entries will be put into this file.
+@file{file} into the current adaptive score file for the group in
+question. All adaptive score entries will be put into this file.
@item adapt-file
@cindex adapt file group parameter
Twenty minus thread level spaces.
@item U
Unread.
-
@item R
-This misleadingly named specifier is the @dfn{secondary mark}. This
-mark will say whether the article has been replied to, has been cached,
-or has been saved.
-
+Replied.
@item i
Score as a number (@pxref{Scoring}).
@item z
current article (@code{gnus-summary-mail-crosspost-complaint}).
@findex gnus-crosspost-complaint
-This command is provided as a way to fight back against the current
+This command is provided as a way to fight back agains the current
crossposting pandemic that's sweeping Usenet. It will compose a reply
using the @code{gnus-crosspost-complaint} variable as a preamble. This
command understands the process/prefix convention
@end table
-Also @pxref{(message)Header Commands} for more information.
-
@node Summary Post Commands
@subsection Summary Post Commands
Post a followup to the current article via news, even if you got the
message through mail (@code{gnus-summary-followup-to-mail}).
-@item S N
-@kindex S N (Summary)
-@findex gnus-summary-followup-to-mail-with-original
+@item S n
+@kindex S n (Summary)
+@findex gnus-summary-followup-to-mail
Post a followup to the current article via news, even if you got the
message through mail and include the original message
(@code{gnus-summary-followup-to-mail-with-original}). This command uses
(@code{gnus-uu-post-news}). (@pxref{Uuencoding and Posting}).
@end table
-Also @pxref{(message)Header Commands} for more information.
-
@node Canceling and Superseding
@section Canceling Articles
live on here and there, while most sites will delete the article in
question.
-Gnus will use the ``current'' select method when canceling. If you
+Gnus will use the ``current'' select method when cancelling. If you
want to use the standard posting method, use the @samp{a} symbolic
prefix (@pxref{Symbolic Prefixes}).
@item SPACE
@vindex gnus-unread-mark
-Marked as unread (@code{gnus-unread-mark}).
+Markes as unread (@code{gnus-unread-mark}).
@dfn{Unread articles} are articles that haven't been read at all yet.
@end table
@item M P R
@kindex M P R (Summary)
@findex gnus-uu-mark-by-regexp
-Mark articles that have a @code{Subject} header that matches a regular
-expression (@code{gnus-uu-mark-by-regexp}).
+Mark articles by a regular expression (@code{gnus-uu-mark-by-regexp}).
@item M P r
@kindex M P r (Summary)
@item / m
@kindex / m (Summary)
@findex gnus-summary-limit-to-marks
-Ask for a mark and then limit to all articles that have been marked
+Ask for a mark and then limit to all articles that have not been marked
with that mark (@code{gnus-summary-limit-to-marks}).
@item / t
@kindex M S (Summary)
@kindex / E (Summary)
@findex gnus-summary-limit-include-expunged
-Include all expunged articles in the limit
+Display all expunged articles
(@code{gnus-summary-limit-include-expunged}).
@item / D
@kindex / D (Summary)
@findex gnus-summary-limit-include-dormant
-Include all dormant articles in the limit
-(@code{gnus-summary-limit-include-dormant}).
+Display all dormant articles (@code{gnus-summary-limit-include-dormant}).
@item / *
@kindex / * (Summary)
@findex gnus-summary-limit-include-cached
-Include all cached articles in the limit
-(@code{gnus-summary-limit-include-cached}).
+Display all cached articles (@code{gnus-summary-limit-include-cached}).
@item / d
@kindex / d (Summary)
@findex gnus-summary-limit-exclude-dormant
-Exclude all dormant articles from the limit
-(@code{gnus-summary-limit-exclude-dormant}).
+Hide all dormant articles (@code{gnus-summary-limit-exclude-dormant}).
@item / T
@kindex / T (Summary)
@findex gnus-summary-limit-include-thread
-Include all the articles in the current thread in the limit.
+Include all the articles in the current thread.
@item / c
@kindex / c (Summary)
@findex gnus-summary-limit-exclude-childless-dormant
-Exclude all dormant articles that have no children from the limit
+Hide all dormant articles that have no children
(@code{gnus-summary-limit-exclude-childless-dormant}).
@item / C
Threading is done by looking at the @code{References} headers of the
articles. In a perfect world, this would be enough to build pretty
trees, but unfortunately, the @code{References} header is often broken
-or simply missing. Weird news propagation excarcerbates the problem,
+or simply missing. Weird news propagration excarcerbates the problem,
so one has to employ other heuristics to get pleasing results. A
plethora of approaches exists, as detailed in horrible detail in
@pxref{Customizing Threading}.
@item loose threads
Threads often lose their roots due to article expiry, or due to the root
already having been read in a previous session, and not displayed in the
-summary buffer. We then typically have many sub-threads that really
+summary buffer. We then typicall have many sub-threads that really
belong to one thread, but are without connecting roots. These are
called loose threads.
@code{nil}, all the preceding functions will replace all periods
(@samp{.}) in the group names with slashes (@samp{/})---which means that
the functions will generate hierarchies of directories instead of having
-all the files in the top level directory
+all the files in the toplevel directory
(@file{~/News/alt/andrea-dworkin} instead of
@file{~/News/alt.andrea-dworkin}.) This variable is @code{t} by default
on most systems. However, for historical reasons, this is @code{nil} on
Then just save with @kbd{o}. You'd then read this hierarchy with
ephemeral @code{nneething} groups---@kbd{G D} in the group buffer, and
-the top level directory as the argument (@file{~/News/}). Then just walk
+the toplevel directory as the argument (@file{~/News/}). Then just walk
around to the groups/directories with @code{nneething}.
@menu
* Article Highlighting:: You want to make the article look like fruit salad.
-* Article Fontisizing:: Making emphasized text look nice.
+* Article Fontisizing:: Making emphasized text look niced.
* Article Hiding:: You also want to make certain info go away.
* Article Washing:: Lots of way-neat functions to make life better.
* Article Buttons:: Click on URLs, Message-IDs, addresses and the like.
It's commonly called ``rot13'' because each letter is rotated 13
positions in the alphabet, e. g. @samp{B} (letter #2) -> @samp{O} (letter
#15). It is sometimes referred to as ``Caesar rotate'' because Caesar
-is rumored to have employed this form of, uh, somewhat weak encryption.
+is rumoured to have employed this form of, uh, somewhat weak encryption.
@item W t
@kindex W t (Summary)
If that's the case, Gnus will always prompt you for what method to use
for posting.
-Finally, if you want to always post using the same select method as
-you're reading from (which might be convenient if you're reading lots of
-groups from different private servers), you can set this variable to
-@code{current}.
-
@node Mail and Post
@section Mail and Post
by the @code{nntp-maximum-request} variable, and is 400 by default. If
your network is buggy, you should set this to 1.
-@c @item nntp-connection-timeout
-@c @vindex nntp-connection-timeout
-@c If you have lots of foreign @code{nntp} groups that you connect to
-@c regularly, you're sure to have problems with @sc{nntp} servers not
-@c responding properly, or being too loaded to reply within reasonable
-@c time. This is can lead to awkward problems, which can be helped
-@c somewhat by setting @code{nntp-connection-timeout}. This is an integer
-@c that says how many seconds the @code{nntp} backend should wait for a
-@c connection before giving up. If it is @code{nil}, which is the default,
-@c no timeouts are done.
-@c
+@item nntp-connection-timeout
+@vindex nntp-connection-timeout
+If you have lots of foreign @code{nntp} groups that you connect to
+regularly, you're sure to have problems with @sc{nntp} servers not
+responding properly, or being too loaded to reply within reasonable
+time. This is can lead to awkward problems, which can be helped
+somewhat by setting @code{nntp-connection-timeout}. This is an integer
+that says how many seconds the @code{nntp} backend should wait for a
+connection before giving up. If it is @code{nil}, which is the default,
+no timeouts are done.
+
@c @item nntp-command-timeout
@c @vindex nntp-command-timeout
@c @cindex PPP connections
If you want to have Gnus create groups dynamically based on some
information in the headers (i.e., do @code{replace-match}-like
-substitutions in the group names), you can say things like:
+substitions in the group names), you can say things like:
@example
(any "debian-\\(\\w*\\)@@lists.debian.org" "mail.debian.\\1")
Agent is @dfn{plugged}.
The @dfn{local} machine is the one you're running on, and which isn't
-connected to the net continuously.
+connected to the net continously.
@dfn{Downloading} means fetching things from the net to your local
machine. @dfn{Uploading} is doing the opposite.
@lisp
(setq gnus-home-score-file
;; All groups that match the regexp "\\.emacs"
- '(("\\.emacs" "emacs.SCORE")
- ;; All the comp groups in one score file
- ("^comp" "comp.SCORE")))
+ '("\\.emacs" "emacs.SCORE")
+ ;; All the comp groups in one score file
+ ("^comp" "comp.SCORE"))
@end lisp
@vindex gnus-home-adapt-file
* Moderation:: What to do if you're a moderator.
* XEmacs Enhancements:: There are more pictures and stuff under XEmacs.
* Fuzzy Matching:: What's the big fuzz?
-* Thwarting Email Spam:: A how-to on avoiding unsolicited commercial email.
+* Thwarting Email Spam:: A how-to on avoiding unsolited commercial email.
* Various Various:: Things that are really various.
@end menu
@cindex symbolic prefixes
Quite a lot of Emacs commands react to the (numeric) prefix. For
-instance, @kbd{C-u 4 C-f} moves point four characters forward, and
+instance, @kbd{C-u 4 C-f} moves point four charaters forward, and
@kbd{C-u 9 0 0 I s s p} adds a permanent @code{Subject} substring score
rule of 900 to the current article.
run @code{gnus-demon-init} to make the changes take hold. To cancel all
daemons, you can use the @code{gnus-demon-cancel} function.
-Note that adding daemons can be pretty naughty if you over do it. Adding
+Note that adding daemons can be pretty naughty if you overdo it. Adding
functions that scan all news and mail from all servers every two seconds
is a sure-fire way of getting booted off any respectable system. So
behave.
false pretenses. I press @kbd{g} and Gnus merrily informs me that I
have 10 new emails. I say ``Golly gee! Happy is me!'' and select the
mail group, only to find two pyramid schemes, seven advertisements
-(``New! Miracle tonic for growing full, lustrous hair on your toes!'')
+(``New! Miracle tonic for growing full, lustrouos hair on your toes!'')
and one mail asking me to repent and find some god.
This is annoying.
In addition, many mail spammers talk directly to your @code{smtp} server
and do not include your email address explicitly in the @code{To}
header. Why they do this is unknown---perhaps it's to thwart this
-thwarting scheme? In any case, this is trivial to deal with---you just
+twarting scheme? In any case, this is trivial to deal with---you just
put anything not addressed to you in the @samp{spam} group by ending
your fancy split rule in this way:
each unsolicited commercial email---at your leisure.
If you are also a lazy net citizen, you will probably prefer complaining
-automatically with the @file{gnus-junk.el} package, available FOR FREE
+automatically with the @file{gnus-junk.el} package, availiable FOR FREE
at @file{<URL:http://stud2.tuwien.ac.at/~e9426626/gnus-junk.html>}.
Since most e-mail spam is sent automatically, this may reconcile the
cosmic balance somewhat.
This works for me. It allows people an easy way to contact me (they can
just press @kbd{r} in the usual way), and I'm not bothered at all with
spam. It's a win-win situation. Forging @code{From} headers to point
-to non-existent domains is yucky, in my opinion.
+to non-existant domains is yucky, in my opinion.
@node Various Various
which defaults to the @samp{SAVEDIR} environment variable, or
@file{~/News/} if that variable isn't set.
-Note that gnus is mostly loaded when the @file{.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
-@file{.gnus.el}. Set this variable in @file{.emacs} instead.
-
@item gnus-default-directory
@vindex gnus-default-directory
Not related to the above variable at all---this variable says what the
@sc{gnus} internals should suffer no problems. If problems occur,
please let me know by issuing that magic command @kbd{M-x gnus-bug}.
-@vindex gnus-bug-create-help-buffer
-If you are in the habit of sending bug reports @emph{very} often, you
-may find the helpful help buffer annoying after a while. If so, set
-@code{gnus-bug-create-help-buffer} to @code{nil} to avoid having it pop
-up at you.
-
@node Conformity
@subsection Conformity
Vladimir Alexiev---the refcard and reference booklets.
@item
-Felix Lee & Jamie Zawinski---I stole some pieces from the XGnus
+Felix Lee & Jamie Zawinsky---I stole some pieces from the XGnus
distribution by Felix Lee and JWZ.
@item
Peter Arius,
Matt Armstrong,
Marc Auslander,
-Frank Bennett,
Robert Bihlmeyer,
Chris Bone,
Mark Borges,
Lance A. Brown,
Kees de Bruin,
Martin Buchholz,
-Joe Buehler,
Kevin Buhr,
Alastair Burt,
Joao Cachopo,
Magnus Hammerin,
Kenichi Handa, @c Handa
Raja R. Harinath,
-Yoshiki Hayashi, @c ?
-P. E. Jareth Hein,
Hisashige Kenji, @c Hisashige
Marc Horowitz,
Gunnar Horrigmo,
Christian Limpach,
Markus Linnala,
Dave Love,
-Mike McEwan,
Tonny Madsen,
Shlomo Mahlab,
Nat Makarevitch,
Istvan Marko,
David Martin,
-Jason R. Mastaler,
+Jason R Mastaler,
Gordon Matzigkeit,
Timo Metzemakers,
Richard Mlynarik,
Jens-Ulrik Holger Petersen,
Ulrich Pfeifer,
John McClary Prevost,
-Mike Pullen,
-Jim Radford,
Colin Rafferty,
Lasse Rasinen,
Lars Balker Rasmussen,
Bart Robinson,
Christian von Roques,
Jason Rumney,
-Wolfgang Rupprecht,
Jay Sachs,
Dewey M. Sasser,
Loren Schall,
* ding Gnus:: New things in Gnus 5.0/5.1, the first new Gnus.
* September Gnus:: The Thing Formally Known As Gnus 5.3/5.3.
* Red Gnus:: Third time best---Gnus 5.4/5.5.
-* Quassia Gnus:: Two times two is four, or Gnus 5.6.11.
+* Quassia Gnus:: Two times two is four, or Gnus 5.6.4.
@end menu
These lists are, of course, just @emph{short} overviews of the
@node Quassia Gnus
@subsubsection Quassia Gnus
-New features in Gnus 5.6.11:
+New features in Gnus 5.6.4:
@itemize @bullet
rewrite them to use @code{face-spec-set} instead.
@item
- Canceling now uses the current select method. Symbolic prefix
+ Cancelling now uses the current select method. Symbolic prefix
@kbd{a} forces normal posting method.
@item
nnmh-be-safe means that crossposted articles will
be marked as unread.
@item
- Orphan score entries don't show on "V t" score trace
+ Orphan score entries dont show on "V t" score trace
@item
when clearing out data, the cache data should also be reset.
@item
rewrite gnus-summary-limit-children to be non-recursive
to avoid exceeding lisp nesting on huge groups.
@item
- expunged articles are counted when computing scores.
+ expinged articles are counted when computing scores.
@item
implement gnus-batch-brew-soup
@item
the server?
@item
sort after gathering threads -- make false roots have the
-headers of the oldest orphan with a 0 article number?
+headers of the oldest orhpan with a 0 article number?
@item
nndoc groups should inherit the score files of their parents? Also
inherit copy prompts and save files.
on. Eg. -- `(("nnml:" . 1))'.
@item
easier interface to nnkiboze to create ephemeral groups that
-contain groups that match a regexp.
+contaion groups that match a regexp.
@item
allow newlines in <URL:> urls, but remove them before using
the URL.
@item
hide-pgp should also hide PGP public key blocks.
@item
- Command in the group buffer to respool process-marked groups.
+ Command in the group buffer to respoll process-marked groups.
@item
`gnus-summary-find-matching' should accept
pseudo-"headers" like "body", "head" and "all"
@item
checking for bogus groups should clean topic alists as well.
@item
- canceling articles in foreign groups.
+ cancelling articles in foreign groups.
@item
article number in folded topics isn't properly updated by
Xref handling.
server mode command for clearing read marks from all groups
from a server.
@item
- when following up multiple articles, include all To, Cc, etc headers
+ when following up mulitple articles, include all To, Cc, etc headers
from all articles.
@item
a command for deciding what the total score of the current
a way to visually distinguish slave Gnusae from masters. (Whip instead
of normal logo?)
@item
- Use DJ Bernstein "From " quoting/dequoting, where applicable.
+ Use DJ Bernstein "From " quoting/dequoting, where appliccable.
@item
Why is hide-citation-maybe and hide-citation different? Also
clear up info.
<expr> would be a boolean expression on the labels, e.g.
-`/ l bug & !fixed RET'
+ `/ l bug & !fixed RET'
@end example
would show all the messages which are labeled `bug' but not labeled
`fixed'.
-One could also imagine the labels being used for highlighting, or
+One could also immagine the labels being used for highliting, or
affect the summary line format.
- If it is a directory containing numbered files, create an nndir
summary buffer.
-- For other directories, create a nneething summary buffer.
+- For other directories, create a nneething summaru buffer.
- For files matching "\\`From ", create a nndoc/mbox summary.
decend into ucd?
The problem above is that since there is really only one subsection of
-science, shouldn't it prompt you for only descending sci.something? If
+science, shouldn't it prompt you for only decending sci.something? If
there was a sci.somethingelse group or section, then it should prompt
for sci? first the sci.something? then sci.somethingelse?...
button:
-^L's
+ ^L's
-more than n blank lines
+ more than n blank lines
-more than m identical lines
-(which should be replaced with button to show them)
+ more than m identical lines
+ (which should be replaced with button to show them)
-any whitespace surrounding any of the above
+ any whitespace surrounding any of the above
@item
Group-mode
show-list-of-articles-in-group
- if (key-pressed == SPACE)
- if (no-more-articles-in-group-to-select)
- if (articles-selected)
- start-reading-selected-articles;
- junk-unread-articles;
- next-group;
- else
- show-next-page;
-
- else if (key-pressed = '.')
- if (consolidated-menus) # same as hide-thread in Gnus
- select-thread-under-cursor;
- else
- select-article-under-cursor;
+ if (key-pressed == SPACE)
+ if (no-more-articles-in-group-to-select)
+ if (articles-selected)
+ start-reading-selected-articles;
+ junk-unread-articles;
+ next-group;
+ else
+ show-next-page;
+
+ else if (key-pressed = '.')
+ if (consolidated-menus) # same as hide-thread in Gnus
+ select-thread-under-cursor;
+ else
+ select-article-under-cursor;
Article-mode
- if (key-pressed == SPACE)
- if (more-pages-in-article)
- next-page;
- else if (more-selected-articles-to-read)
- next-article;
- else
- next-group;
+ if (key-pressed == SPACE)
+ if (more-pages-in-article)
+ next-page;
+ else if (more-selected-articles-to-read)
+ next-article;
+ else
+ next-group;
@end example
@item
@item
It would be nice if it also handled
- <URL:news://sunsite.auc.dk/>
+ <URL:news://sunsite.auc.dk/>
which should correspond to `B nntp RET sunsite.auc.dk' in *Group*.
`x' should retain any sortings that have been performed.
@item
- allow the user to specify the precedence of the secondary marks. Also
+ allow the user to specify the presedence of the secondary marks. Also
allow them to be displayed separately.
@item
(let ((buffer-read-only nil))
(goto-char (point-min))
(while (search-forward "\221" nil t)
- (replace-match "`" t t))
+ (replace-match "`" t t))
(goto-char (point-min))
(while (search-forward "\222" nil t)
- (replace-match "'" t t))
+ (replace-match "'" t t))
(goto-char (point-min))
(while (search-forward "\223" nil t)
- (replace-match "\"" t t))
+ (replace-match "\"" t t))
(goto-char (point-min))
(while (search-forward "\224" nil t)
- (replace-match "\"" t t)))))
+ (replace-match "\"" t t)))))
@end example
@item
(add-hook 'gnus-exit-query-functions
'(lambda ()
(if (and (file-exists-p nnmail-spool-file)
- (> (nnheader-file-size nnmail-spool-file) 0))
+ (> (nnheader-file-size nnmail-spool-file) 0))
(yes-or-no-p "New mail has arrived. Quit Gnus anyways? ")
(y-or-n-p "Are you sure you want to quit Gnus? "))))
@end example
is less than a certain number of days old.
@item
-New spec: %~(tab 56) to put point on column 56
-
-@item
-Allow Gnus Agent scoring to use normal score files.
-
-@item
Solve the halting problem.
@c TODO
@node Score File Syntax
@subsection Score File Syntax
-Score files are meant to be easily parseable, but yet extremely
+Score files are meant to be easily parsable, but yet extremely
mallable. It was decided that something that had the same read syntax
as an Emacs Lisp list would fit that spec.
\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Message 5.6.11 Manual
+@settitle Message 5.6.4 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Message 5.6.11 Manual
+@title Message 5.6.4 Manual
@author by Lars Magne Ingebrigtsen
@page
* Key Index:: List of Message mode keys.
@end menu
-This manual corresponds to Message 5.6.11. Message is distributed with
+This manual corresponds to Message 5.6.4. Message is distributed with
the Gnus distribution bearing the same version number as this manual
has.
This string is inserted at the end of the headers in all message
buffers.
-@item message-subject-re-regexp
-@vindex message-subject-re-regexp
-Responses to messages have subjects that start with @samp{Re: }. This
-is @emph{not} an abbreviation of the English word ``response'', but in
-Latin, and means ``in response to''. Some illiterate nincompoops have
-failed to grasp this fact, and have ``internationalized'' their software
-to use abonimations like @samp{Aw: } (``antwort'') or @samp{Sv: }
-(``svar'') instead, which is meaningless and evil. However, you may
-have to deal with users that use these evil tools, in which case you may
-set this variable to a regexp that matches these prefixes. Myself, I
-just throw away non-compliant mail.
-
@end table
@vindex message-directory
Directory used by many mailey things. The default is @file{~/Mail/}.
+@item message-autosave-directory
+@vindex message-autosave-directory
+Directory where message buffers will be autosaved to.
+
@item message-signature-setup-hook
@vindex message-signature-setup-hook
Hook run when initializing the message buffer. It is run after the