+Thu Aug 27 11:03:59 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.41 is released.
+
+1998-08-27 Mike McEwan <mike@lotusland.demon.co.uk>
+
+ * gnus-agent.el (gnus-agent-fetch-group-1): Leave the calculation
+ of `articles' to `gnus-agent-fetch-headers'.
+ (gnus-agent-fetch-headers): We only want headers that are after
+ the last entry in `gnus-group-alist'.
+
+1998-08-27 09:45:42 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * Makefile.in (warn): New.
+
+ * gnus.el: Removed unreferenced bound variables all over.
+
+ * gnus-group.el (gnus-update-group-mark-positions): Removed topic.
+
+ * gnus-cus.el (gnus-group-customize): No part.
+
+ * gnus-agent.el (gnus-category-line-format-alist): Renamed specs.
+ (gnus-category-insert-line): Use it.
+
+Thu Aug 27 09:29:53 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.40 is released.
+
+1998-08-27 09:19:31 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-agent.el (gnus-agent-mode): Only toggle plugged in group
+ mode.
+
+1998-08-27 07:25:47 Lars Balker Rasmussen <gnort@daimi.aau.dk>
+
+ * message.el (message-supersede): Check the right headers.
+
+1998-08-26 13:51:18 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-sum.el (gnus-sort-threads): Changed level.
+
+1998-08-26 Mike McEwan <mike@lotusland.demon.co.uk>
+
+ * gnus-sum.el (gnus-build-all-threads): `save-excursion' and
+ `set-buffer' back to `gnus-summary-buffer' in order to access
+ buffer-local variables.
+
+1998-08-26 06:00:44 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-sum.el (gnus-data-compute-positions): More and faster.
+
+1998-08-26 05:41:15 Matt Pharr <mmp@Graphics.Stanford.EDU>
+
+ * message.el (message-wash-subject): Remove more.
+
+1998-08-25 11:33:28 Tatsuya Ichikawa <ichikawa@hv.epson.co.jp>
+
+ * gnus-cache.el (gnus-cache-overview-coding-system): New
+ variable.
+
+1998-08-25 08:23:05 Albert L. Ting <alt@artisan.com>
+
+ * gnus-group.el (gnus-fetch-group-other-frame): New command.
+
+1998-08-25 07:24:51 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-uu.el (gnus-uu-grab-articles): Check for pseudos.
+
+ * gnus-art.el (gnus-ignored-headers): More headers.
+
+ * gnus-sum.el (gnus-summary-move-article): Update the right
+ group.
+
+1998-08-23 14:31:31 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (gnus-ignored-headers): More headers.
+
+1998-08-23 Mike McEwan <mike@lotusland.demon.co.uk>
+
+ * gnus-agent.el (gnus-agent-copy-nov-line): Return to beginning of
+ line before next read.
+ (gnus-agent-braid-nov): Remove redundant `let'.
+
+1998-08-22 10:40:54 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (article-display-x-face): Allow multiple X-Faces
+ under XEmacs.
+
Sat Aug 22 10:28:25 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Gnus v5.6.39 is released.
all:
rm -f *.elc ; $(EMACS) $(FLAGS) -f dgnushack-compile
+warn:
+ rm -f *.elc ; $(EMACS) $(FLAGS) --eval '(dgnushack-compile t)' 2>&1 | egrep -v "variable G|inhibit-point-motion-hooks|coding-system|temp-results|variable gnus|variable nn|scroll-in-place|deactivate-mark|filladapt-mode|byte-code-function-p|print-quoted|ps-right-header|ps-left-header|article-inhibit|print-escape|ssl-program-arguments|message-log-max"
+
clever:
$(EMACS) $(FLAGS) -f dgnushack-compile
(require 'bytecomp)
(push "~/lisp/custom" load-path)
(push "." load-path)
-(load "./lpath.el")
+(load "./lpath.el" nil t)
(defalias 'device-sound-enabled-p 'ignore)
(defalias 'play-sound-file 'ignore)
(fset 'x-defined-colors 'ignore)
(fset 'read-color 'ignore)))
-(setq byte-compile-warnings
- '(free-vars unresolved callargs redefine))
-
-(defun dgnushack-compile ()
+(defun dgnushack-compile (&optional warn)
;;(setq byte-compile-dynamic t)
+ (unless warn
+ (setq byte-compile-warnings
+ '(free-vars unresolved callargs redefine)))
(unless (locate-library "cus-edit")
(error "You do not seem to have Custom installed.
Fetch it from <URL:http://www.dina.kvl.dk/~abraham/custom/>.
"Load FILE and do a `read' there."
(nnheader-temp-write nil
(ignore-errors
- (insert-file-contents file)
+ (nnheader-insert-file-contents file)
(goto-char (point-min))
(read (current-buffer)))))
(push (cons mode (symbol-value (intern (format "gnus-agent-%s-mode-map"
buffer))))
minor-mode-map-alist))
- (gnus-agent-toggle-plugged gnus-plugged)
+ (when (eq major-mode 'gnus-group-mode)
+ (gnus-agent-toggle-plugged gnus-plugged))
(gnus-run-hooks 'gnus-agent-mode-hook
(intern (format "gnus-agent-%s-mode-hook" buffer)))))
(gnus-make-directory (file-name-directory file))
(nnheader-temp-write file
(when (file-exists-p file)
- (insert-file-contents file))
+ (nnheader-insert-file-contents file))
(goto-char (point-min))
(if nntp-server-list-active-group
(progn
;; Prune off articles that we have already fetched.
(while (and articles
(cdr (assq (car articles) gnus-agent-article-alist)))
- (pop articles))
+ (pop articles))
(let ((arts articles))
(while (cdr arts)
(if (cdr (assq (cadr arts) gnus-agent-article-alist))
(gnus-agent-group-path group) "/"))
(date (gnus-time-to-day (current-time)))
(case-fold-search t)
- pos alists crosses id elem)
+ pos crosses id elem)
(gnus-make-directory dir)
(gnus-message 7 "Fetching articles for %s..." group)
;; Fetch the articles from the backend.
(if (gnus-check-backend-function 'retrieve-articles group)
(setq pos (gnus-retrieve-articles articles group))
(nnheader-temp-write nil
- (let ((buf (current-buffer))
- article)
+ (let (article)
(while (setq article (pop articles))
(when (gnus-request-article article group)
(goto-char (point-max))
(insert "\n"))
(pop gnus-agent-group-alist))))
-(defun gnus-agent-fetch-headers (group articles &optional force)
- (gnus-agent-load-alist group)
- ;; Find out what headers we need to retrieve.
- (when articles
- (while (and articles
- (assq (car articles) gnus-agent-article-alist))
- (pop articles))
- (let ((arts articles))
- (while (cdr arts)
- (if (assq (cadr arts) gnus-agent-article-alist)
- (setcdr arts (cddr arts))
- (setq arts (cdr arts)))))
- ;; Fetch them.
- (when articles
- (gnus-message 7 "Fetching headers for %s..." group)
- (save-excursion
- (set-buffer nntp-server-buffer)
- (unless (eq 'nov (gnus-retrieve-headers articles group))
- (nnvirtual-convert-headers))
- ;;
- ;; To gnus-agent-expire work fine with no Xref field in .overview
- ;; Tatsuya Ichikawa <ichikawa@hv.epson.co.jp>
- (goto-char (point-min))
- (while (not (eobp))
- (goto-char (point-at-eol))
- (insert "\t")
- (forward-line 1))
- ;; Tatsuya Ichikawa <ichikawa@hv.epson.co.jp>
- ;; To gnus-agent-expire work fine with no Xref field in .overview
- ;;
- ;; Save these headers for later processing.
- (copy-to-buffer gnus-agent-overview-buffer (point-min) (point-max))
- (let (file)
- (when (file-exists-p
- (setq file (gnus-agent-article-name ".overview" group)))
- (gnus-agent-braid-nov group articles file))
- (gnus-make-directory (nnheader-translate-file-chars
- (file-name-directory file)))
- (write-region (point-min) (point-max) file nil 'silent)
- (gnus-agent-save-alist group articles nil)
- (gnus-agent-enter-history "last-header-fetched-for-session"
- (list (cons group (nth (- (length articles) 1) articles)))
- (gnus-time-to-day (current-time)))
- t)))))
+(defun gnus-agent-fetch-headers (group &optional force)
+ (when (gnus-agent-load-alist group)
+ (let ((articles (gnus-uncompress-range
+ (cons (1+ (caar (last (gnus-agent-load-alist group))))
+ (cdr (gnus-active group))))))
+ ;; Fetch them.
+ (when articles
+ (gnus-message 7 "Fetching headers for %s..." group)
+ (save-excursion
+ (set-buffer nntp-server-buffer)
+ (unless (eq 'nov (gnus-retrieve-headers articles group))
+ (nnvirtual-convert-headers))
+ (goto-char (point-min))
+ (while (not (eobp))
+ (goto-char (point-at-eol))
+ (insert "\t")
+ (forward-line 1))
+ ;; Save these headers for later processing.
+ (copy-to-buffer gnus-agent-overview-buffer (point-min) (point-max))
+ (let (file)
+ (when (file-exists-p
+ (setq file (gnus-agent-article-name ".overview" group)))
+ (gnus-agent-braid-nov group articles file))
+ (gnus-make-directory (nnheader-translate-file-chars
+ (file-name-directory file)))
+ (write-region (point-min) (point-max) file nil 'silent)
+ (gnus-agent-save-alist group articles nil)
+ (gnus-agent-enter-history
+ "last-header-fetched-for-session"
+ (list (cons group (nth (- (length articles) 1) articles)))
+ (gnus-time-to-day (current-time)))
+ articles))))))
(defsubst gnus-agent-copy-nov-line (article)
(let (b e)
(setq b (point))
(if (eq article (read (current-buffer)))
(setq e (progn (forward-line 1) (point)))
- (setq e b))
+ (progn
+ (beginning-of-line)
+ (setq e b)))
(set-buffer nntp-server-buffer)
(insert-buffer-substring gnus-agent-overview-buffer b e)))
(defun gnus-agent-braid-nov (group articles file)
- (let (beg end)
- (set-buffer gnus-agent-overview-buffer)
- (goto-char (point-min))
- (set-buffer nntp-server-buffer)
- (erase-buffer)
- (nnheader-insert-file-contents file)
- (goto-char (point-max))
- (if (or (= (point-min) (point-max))
- (progn
- (forward-line -1)
- (< (read (current-buffer)) (car articles))))
- ;; We have only headers that are after the older headers,
- ;; so we just append them.
- (progn
- (goto-char (point-max))
- (insert-buffer-substring gnus-agent-overview-buffer))
- ;; We do it the hard way.
- (nnheader-find-nov-line (car articles))
- (gnus-agent-copy-nov-line (car articles))
- (pop articles)
- (while (and articles
- (not (eobp)))
- (while (and (not (eobp))
- (< (read (current-buffer)) (car articles)))
- (forward-line 1))
- (beginning-of-line)
- (unless (eobp)
- (gnus-agent-copy-nov-line (car articles))
- (setq articles (cdr articles))))
- (when articles
- (let (b e)
- (set-buffer gnus-agent-overview-buffer)
- (setq b (point)
- e (point-max))
- (set-buffer nntp-server-buffer)
- (insert-buffer-substring gnus-agent-overview-buffer b e))))))
+ (set-buffer gnus-agent-overview-buffer)
+ (goto-char (point-min))
+ (set-buffer nntp-server-buffer)
+ (erase-buffer)
+ (nnheader-insert-file-contents file)
+ (goto-char (point-max))
+ (if (or (= (point-min) (point-max))
+ (progn
+ (forward-line -1)
+ (< (read (current-buffer)) (car articles))))
+ ;; We have only headers that are after the older headers,
+ ;; so we just append them.
+ (progn
+ (goto-char (point-max))
+ (insert-buffer-substring gnus-agent-overview-buffer))
+ ;; We do it the hard way.
+ (nnheader-find-nov-line (car articles))
+ (gnus-agent-copy-nov-line (car articles))
+ (pop articles)
+ (while (and articles
+ (not (eobp)))
+ (while (and (not (eobp))
+ (< (read (current-buffer)) (car articles)))
+ (forward-line 1))
+ (beginning-of-line)
+ (unless (eobp)
+ (gnus-agent-copy-nov-line (car articles))
+ (setq articles (cdr articles))))
+ (when articles
+ (let (b e)
+ (set-buffer gnus-agent-overview-buffer)
+ (setq b (point)
+ e (point-max))
+ (set-buffer nntp-server-buffer)
+ (insert-buffer-substring gnus-agent-overview-buffer b e)))))
(defun gnus-agent-load-alist (group &optional dir)
"Load the article-state alist for GROUP."
(gnus-agent-article-name ".agentview" group)))))
(defun gnus-agent-save-alist (group &optional articles state dir)
- "Load the article-state alist for GROUP."
+ "Save the article-state alist for GROUP."
(nnheader-temp-write (if dir
(concat dir ".agentview")
(gnus-agent-article-name ".agentview" group))
(let ((gnus-command-method method)
gnus-newsgroup-dependencies gnus-newsgroup-headers
gnus-newsgroup-scored gnus-headers gnus-score
- gnus-use-cache articles score arts
+ gnus-use-cache articles 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))
- (gnus-agent-fetch-headers group articles))
+ (setq articles (gnus-agent-fetch-headers group)))
;; Parse them and see which articles we want to fetch.
(setq gnus-newsgroup-dependencies
(make-vector (length articles) 0))
(defvar gnus-category-buffer "*Agent Category*")
(defvar gnus-category-line-format-alist
- `((?c name ?s)
- (?g groups ?d)))
+ `((?c gnus-tmp-name ?s)
+ (?g gnus-tmp-groups ?d)))
(defvar gnus-category-mode-line-format-alist
`((?u user-defined ?s)))
(defalias 'gnus-category-position-point 'gnus-goto-colon)
(defun gnus-category-insert-line (category)
- (let* ((name (car category))
- (groups (length (cadddr category))))
+ (let* ((gnus-tmp-name (car category))
+ (gnus-tmp-groups (length (cadddr category))))
(beginning-of-line)
(gnus-add-text-properties
(point)
(prog1 (1+ (point))
;; Insert the text.
(eval gnus-category-line-format-spec))
- (list 'gnus-category name))))
+ (list 'gnus-category gnus-tmp-name))))
(defun gnus-enter-category-buffer ()
"Go to the Category buffer."
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
;; Keywords: mail, news, MIME
;; This file is part of GNU Emacs.
"^X-MimeOLE:" "^X-MSMail-Priority:" "^X-Priority:" "^X-Loop:"
"^X-Authentication-Warning:" "^X-MIME-Autoconverted:" "^X-Face:"
"^X-Attribution:" "^X-Originating-IP:" "^Delivered-To:"
- "^NNTP-[-A-Za-z]*:" "^Distribution:" "^X-no-archive:" "^X-Trace:"
+ "^NNTP-[-A-Za-z]+:" "^Distribution:" "^X-no-archive:" "^X-Trace:"
"^X-Complaints-To:" "^X-NNTP-Posting-Host:" "^X-Orig.*:"
"^Abuse-Reports-To:" "^Cache-Post-Path:" "^X-Article-Creation-Date:"
"^X-Poster:" "^X-Mail2News-Path:" "^X-Server-Date:" "^X-Cache:"
"^Originator:" "^X-Problems-To:" "^X-Auth-User:" "^X-Post-Time:"
- "^X-Admin:" "^X-UID:")
+ "^X-Admin:" "^X-UID:" "^Resent-[-A-Za-z]+:" "^X-Mailing-List:"
+ "^Precedence:" "^Original-[-A-Za-z]+:" "^X-filename:" "^X-Orcpt:"
+ "^Old-Received:" "^X-Pgp-Fingerprint:" "^X-Pgp-Key-Id:"
+ "^X-Pgp-Public-Key-Url:" "^X-Auth:" "^X-From-Line:"
+ "^X-Gnus-Article-Number:" "^X-Majordomo:" "^X-Url:" "^X-Sender:"
+ "^X-Mailing-List:" "^MBOX-Line" "^Priority:" "^X-Pgp" "^X400-[-A-Za-z]+:"
+ "^Status:")
"*All headers that start with this regexp will be hidden.
This variable can also be a list of regexps of headers to be ignored.
If `gnus-visible-headers' is non-nil, this variable will be ignored."
:group 'gnus-article-hiding)
(defcustom gnus-visible-headers
- "From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^Followup-To:\\|^Reply-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^Cc:\\|^Posted-To:\\|^Mail-Copies-To:\\|^Apparently-To:\\|^Gnus-Warning:\\|^Resent-From:\\|X-Sent:"
+ "From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^\\(Mail-\\)?Followup-To:\\|^\\(Mail-\\)?Reply-To:\\|^Mail-Copies-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^Cc:\\|^Posted-To:\\|^Apparently-To:\\|^Gnus-Warning:\\|^Resent-From:\\|X-Sent:"
"*All headers that do not match this regexp will be hidden.
This variable can also be a list of regexp of headers to remain visible.
If this variable is non-nil, `gnus-ignored-headers' will be ignored."
(sexp :value nil))))
(defcustom gnus-strict-mime t
- "*If nil, MIME-decode even if there is no Mime-Version header."
+ "*If nil, MIME-decode even if there is no MIME-Version header."
:group 'gnus-article-mime
:type 'boolean)
(listp gnus-visible-headers))
(mapconcat 'identity gnus-visible-headers "\\|"))))
(inhibit-point-motion-hooks t)
- want-list beg)
+ beg)
;; First we narrow to just the headers.
(widen)
(goto-char (point-min))
from reply-to
(ignore-errors
(equal
- (nth 1 (mail-extract-address-components from))
- (nth 1 (mail-extract-address-components reply-to)))))
+ (nth 1 (funcall gnus-extract-address-components from))
+ (nth 1 (funcall gnus-extract-address-components reply-to)))))
(gnus-article-hide-header "reply-to"))))
((eq elem 'date)
(let ((date (message-fetch-field "date")))
(delete-process "article-x-face"))
(let ((inhibit-point-motion-hooks t)
(case-fold-search t)
- from)
+ from last)
(save-restriction
(nnheader-narrow-to-headers)
(setq from (message-fetch-field "from"))
(goto-char (point-min))
- ;; This used to try to do multiple faces (`while' instead of
- ;; `when' below), but (a) sending multiple EOFs to xv doesn't
- ;; work (b) it can crash some versions of Emacs (c) are
- ;; multiple faces really something to encourage?
- (when (and gnus-article-x-face-command
- (or force
- ;; Check whether this face is censored.
- (not gnus-article-x-face-too-ugly)
- (and gnus-article-x-face-too-ugly from
- (not (string-match gnus-article-x-face-too-ugly
- from))))
- ;; Has to be present.
- (re-search-forward "^X-Face: " nil t))
+ (while (and gnus-article-x-face-command
+ (not last)
+ (or force
+ ;; Check whether this face is censored.
+ (not gnus-article-x-face-too-ugly)
+ (and gnus-article-x-face-too-ugly from
+ (not (string-match gnus-article-x-face-too-ugly
+ from))))
+ ;; Has to be present.
+ (re-search-forward "^X-Face: " nil t))
+ ;; This used to try to do multiple faces (`while' instead of
+ ;; `when' above), but (a) sending multiple EOFs to xv doesn't
+ ;; work (b) it can crash some versions of Emacs (c) are
+ ;; multiple faces really something to encourage?
+ (when (stringp gnus-article-x-face-command)
+ (setq last t))
;; We now have the area of the buffer where the X-Face is stored.
(save-excursion
(let ((beg (point))
(while (re-search-forward "^[ \t]*\n" nil t)
(replace-match "" t t)))))
-(defvar mime::preview/content-list)
-(defvar mime::preview-content-info/point-min)
(defun gnus-article-narrow-to-signature ()
"Narrow to the signature; return t if a signature is found, else nil."
(widen)
(let ((inhibit-point-motion-hooks t))
- (when (and (boundp 'mime::preview/content-list)
- mime::preview/content-list)
- ;; We have a MIMEish article, so we use the MIME data to narrow.
- (let ((pcinfo (car (last mime::preview/content-list))))
- (ignore-errors
- (narrow-to-region
- (funcall (intern "mime::preview-content-info/point-min") pcinfo)
- (point-max)))))
-
(when (gnus-article-search-signature)
(forward-line 1)
;; Check whether we have some limits to what we consider
(defun gnus-article-hidden-text-p (type)
"Say whether the current buffer contains hidden text of type TYPE."
- (let ((start (point-min))
- (pos (text-property-any (point-min) (point-max) 'article-type type)))
+ (let ((pos (text-property-any (point-min) (point-max) 'article-type type)))
(while (and pos
(not (get-text-property pos 'invisible)))
(setq pos
(defun gnus-article-display-mime-message ()
"Article display method for MIME message."
+ ;; called from `gnus-original-article-buffer'.
+ (let ((default-mime-charset (save-excursion
+ (set-buffer gnus-summary-buffer)
+ default-mime-charset)))
+ (mime-display-message mime-message-structure
+ gnus-article-buffer nil gnus-article-mode-map))
+ ;; `mime-display-message' changes current buffer to `gnus-article-buffer'.
(make-local-variable 'mime-button-mother-dispatcher)
(setq mime-button-mother-dispatcher
(function gnus-article-push-button))
- (let ((default-mime-charset
- (save-excursion
- (set-buffer gnus-summary-buffer)
- default-mime-charset))
- )
- (mime-display-message mime-message-structure
- gnus-article-buffer nil gnus-article-mode-map)
- )
- (run-hooks 'gnus-mime-article-prepare-hook)
- )
+ (run-hooks 'gnus-mime-article-prepare-hook))
(defun gnus-article-display-traditional-message ()
"Article display method for traditional message."
(set-buffer gnus-article-buffer)
(let (buffer-read-only)
(erase-buffer)
- (insert-buffer-substring gnus-original-article-buffer)
- ))
+ (insert-buffer-substring gnus-original-article-buffer)))
(defun gnus-article-display-message-with-encoded-word ()
"Article display method for message with encoded-words."
(eword-decode-header charset)
(goto-char (point-min))
(if (search-forward "\n\n" nil t)
- (decode-mime-charset-region (match-end 0) (point-max) charset))
- )
- (mime-maybe-hide-echo-buffer)
- )
- (gnus-run-hooks 'gnus-mime-article-prepare-hook)
- )
+ (decode-mime-charset-region (match-end 0) (point-max) charset)))
+ (mime-maybe-hide-echo-buffer))
+ (gnus-run-hooks 'gnus-mime-article-prepare-hook))
(defun gnus-article-prepare (article &optional all-headers header)
"Prepare ARTICLE in article mode buffer.
(setq gnus-summary-buffer (current-buffer))
(let* ((gnus-article (if header (mail-header-number header) article))
(summary-buffer (current-buffer))
- (internal-hook gnus-article-internal-prepare-hook)
+ (gnus-tmp-internal-hook gnus-article-internal-prepare-hook)
(group gnus-newsgroup-name)
result)
(save-excursion
(or all-headers gnus-show-all-headers))))
(when (or (numberp article)
(stringp article))
- (let ((method
- (if gnus-show-mime
- (progn
- (mime-parse-buffer)
- (if (or (not gnus-strict-mime)
- (mime-fetch-field "MIME-Version"))
- gnus-article-display-method-for-mime
- gnus-article-display-method-for-encoded-word))
- gnus-article-display-method-for-traditional)))
- ;; Hooks for getting information from the article.
- ;; This hook must be called before being narrowed.
- (gnus-run-hooks 'internal-hook)
+ ;; Hooks for getting information from the article.
+ ;; This hook must be called before being narrowed.
+ (let (buffer-read-only)
+ (gnus-run-hooks 'gnus-tmp-internal-hook)
(gnus-run-hooks 'gnus-article-prepare-hook)
;; Display message.
(funcall method)
;; Send mail to someone
(when (string-match "mailto:/*\\(.*\\)" url)
(setq url (substring url (match-beginning 1) nil)))
- (let (to args source-url subject func)
+ (let (to args subject func)
(if (string-match (regexp-quote "?") url)
(setq to (gnus-url-unhex-string (substring url 0 (match-beginning 0)))
args (gnus-url-parse-query-string
(setq to (gnus-url-unhex-string url)))
(setq args (cons (list "to" to) args)
subject (cdr-safe (assoc "subject" args)))
- (message-mail)
- (while args
- (setq func (intern-soft (concat "message-goto-" (downcase (caar args)))))
- (if (fboundp func)
- (funcall func)
- (message-position-on-field (caar args)))
- (insert (mapconcat 'identity (cdar args) ", "))
- (setq args (cdr args)))
- (if subject
- (message-goto-body)
- (message-goto-subject))))
+ (gnus-setup-message 'reply
+ (message-mail)
+ (while args
+ (setq func (intern-soft (concat "message-goto-" (downcase (caar args)))))
+ (if (fboundp func)
+ (funcall func)
+ (message-position-on-field (caar args)))
+ (insert (mapconcat 'identity (cdar args) ", "))
+ (setq args (cdr args)))
+ (if subject
+ (message-goto-body)
+ (message-goto-subject)))))
(defun gnus-button-mailto (address)
;; Mail to ADDRESS.
(set-buffer (gnus-copy-article-buffer))
- (message-reply address))
+ (gnus-setup-message 'reply
+ (message-reply address)))
(defun gnus-button-reply (address)
;; Reply to ADDRESS.
- (message-reply address))
+ (gnus-setup-message 'reply
+ (message-reply address)))
(defun gnus-button-url (address)
"Browse ADDRESS."
:type '(choice (const :tag "off" nil)
regexp))
+(defvar gnus-cache-overview-coding-system 'raw-text
+ "Coding system used on Gnus cache files.")
+
\f
;;; Internal variables.
(set-buffer buffer)
(if (> (buffer-size) 0)
;; Non-empty overview, write it to a file.
- (let ((coding-system-for-write gnus-cache-write-file-coding-system))
+ (let ((coding-system-for-write
+ gnus-cache-overview-coding-system))
(gnus-write-buffer overview-file))
;; Empty overview file, remove it
(when (file-exists-p overview-file)
headers (copy-sequence headers))
(mail-header-set-number headers (cdr result))))
(let ((number (mail-header-number headers))
- file dir)
+ file)
(when (and number
(> number 0) ; Reffed article.
(or force
(not (file-exists-p (setq file (gnus-cache-file-name
group number)))))
;; Possibly create the cache directory.
- (gnus-make-directory (setq dir (file-name-directory file)))
+ (gnus-make-directory (file-name-directory file))
;; Save the article in the cache.
(if (file-exists-p file)
t ; The article already is saved.
(defvar gnus-custom-method)
(defvar gnus-custom-group)
-(defun gnus-group-customize (group &optional part)
+(defun gnus-group-customize (group)
"Edit the group on the current line."
(interactive (list (gnus-group-group-name)))
- (let ((part (or part 'info))
- info
+ (let (info
(types (mapcar (lambda (entry)
`(cons :format "%v%h\n"
:doc ,(nth 2 entry)
gnus-cite-overlay-list)
(gnus-overlay-put (gnus-make-overlay from to) 'face face))))))
-(defun gnus-mule-max-width-function (el max-width)
- (` (let* ((val (eval (, el)))
- (valstr (if (numberp val)
- (int-to-string val) val)))
- (if (> (length valstr) (, max-width))
- (truncate-string valstr (, max-width))
- valstr))))
-
(defvar gnus-mule-bitmap-image-file nil)
(defun gnus-mule-group-startup-message (&optional x y)
"Insert startup message in current buffer."
(fset 'gnus-encode-coding-string 'encode-coding-string)
(fset 'gnus-decode-coding-string 'decode-coding-string)
+ (if (fboundp 'truncate-string-to-width)
+ (fset 'gnus-truncate-string 'truncate-string-to-width)
+ (fset 'gnus-truncate-string 'truncate-string))
+
+ (defun gnus-tilde-max-form (el max-width)
+ "Return a form that limits EL to MAX-WIDTH."
+ (let ((max (abs max-width)))
+ (if (symbolp el)
+ `(if (> (string-width ,el) ,max)
+ ,(if (< max-width 0)
+ `(gnus-truncate-string
+ ,el (string-width ,el)
+ (- (string-width ,el) ,max))
+ `(gnus-truncate-string ,el ,max))
+ ,el)
+ `(let ((val (eval ,el)))
+ (if (> (string-width val) ,max)
+ ,(if (< max-width 0)
+ `(gnus-truncate-string
+ val (string-width val)
+ (- (string-width val) ,max))
+ `(gnus-truncate-string val ,max))
+ val)))))
+
+ (defun gnus-tilde-cut-form (el cut-width)
+ "Return a form that cuts CUT-WIDTH off of EL."
+ (let ((cut (abs cut-width)))
+ (if (symbolp el)
+ `(if (> (string-width ,el) ,cut)
+ ,(if (< cut-width 0)
+ `(gnus-truncate-string
+ ,el (- (string-width ,el) ,cut))
+ `(gnus-truncate-string
+ ,el (- (string-width ,el) ,cut) ,cut))
+ ,el)
+ `(let ((val (eval ,el)))
+ (if (> (string-width val) ,cut)
+ ,(if (< cut-width 0)
+ `(gnus-truncate-string
+ val (- (string-width val) ,cut))
+ `(gnus-truncate-string
+ val (- (string-width val) ,cut) ,cut))
+ val)))))
+
(when window-system
(require 'path-util)
(if (module-installed-p 'bitmap)
(delq 'long-lines
(delq 'control-chars gnus-check-before-posting))))
- (unless (and (fboundp 'set-buffer-multibyte)
- (subrp (symbol-function 'set-buffer-multibyte)))
- ;; For Emacs 20.1 and 20.2
- (defalias 'gnus-truncate-string 'truncate-string)
- (fset 'gnus-cite-add-face 'gnus-mule-cite-add-face)
- (fset 'gnus-max-width-function 'gnus-mule-max-width-function)
-
- (defun gnus-tilde-max-form (el max-width)
- "Return a form that limits EL to MAX-WIDTH."
- (let ((max (abs max-width)))
- (if (symbolp el)
- `(if (> (length ,el) ,max)
- ,(if (< max-width 0)
- `(truncate-string
- ,el (string-width ,el) (- (string-width ,el) ,max))
- `(truncate-string ,el ,max))
- ,el)
- `(let ((val (eval ,el)))
- (if (> (length val) ,max)
- ,(if (< max-width 0)
- `(truncate-string
- val (string-width val) (- (string-width val) ,max))
- `(truncate-string val ,max))
- val)))))
- )
+ (when (fboundp 'chars-in-string)
+ (fset 'gnus-cite-add-face 'gnus-mule-cite-add-face))
+
)))
(defun gnus-region-active-p ()
found buffer-read-only)
;; Enter the current status into the dribble buffer.
(let ((entry (gnus-gethash group gnus-newsrc-hashtb)))
- (when (and entry (not (gnus-ephemeral-group-p group)))
+ (when (and entry
+ (not (gnus-ephemeral-group-p group)))
(gnus-dribble-enter
(concat "(gnus-group-set-info '"
(gnus-prin1-to-string (nth 2 entry))
(gnus-no-server))
(gnus-group-read-group nil nil group))
+;;;###autoload
+(defun gnus-fetch-group-other-frame (group)
+ "Pop up a frame and enter GROUP."
+ (interactive "P")
+ (let ((window (get-buffer-window gnus-group-buffer)))
+ (cond (window
+ (select-frame (window-frame window)))
+ ((= (length (frame-list)) 1)
+ (select-frame (make-frame)))
+ (t
+ (other-frame 1))))
+ (gnus-fetch-group group))
+
(defvar gnus-ephemeral-group-server 0)
;; Enter a group that is not in the group buffer. Non-nil is returned
"Create the Gnus documentation group."
(interactive)
(let ((name (gnus-group-prefixed-name "gnus-help" '(nndoc "gnus-help")))
- (file (nnheader-find-etc-directory "gnus-tut.txt" t))
- dir)
+ (file (nnheader-find-etc-directory "gnus-tut.txt" t)))
(when (gnus-gethash name gnus-newsrc-hashtb)
(error "Documentation group already exists"))
(if (not file)
(when (gnus-group-native-p (gnus-info-group info))
(gnus-info-clear-data info)))
(gnus-get-unread-articles)
- (gnus-dribble-enter "")
+ (gnus-dribble-touch)
(when (gnus-y-or-n-p
"Move the cache away to avoid problems in the future? ")
(call-interactively 'gnus-cache-move-cache)))))
;; If INFO is non-nil, use that info. If FORCE is non-nil, don't
;; add, but replace marked articles of TYPE with ARTICLES.
(let ((info (or info (gnus-get-info group)))
- (uncompressed '(score bookmark killed))
marked m)
(or (not info)
(and (not (setq marked (nthcdr 3 info)))
(?h . "")
(?f . "from")
(?: . "subject")))
- (com-to-com
- '((?m . " ")
- (?j . "X")))
+ ;;(com-to-com
+ ;; '((?m . " ")
+ ;; (?j . "X")))
pattern modifier commands)
(while (not (eobp))
(if (not (looking-at "[ \t]*/\\([^/]*\\)/\\([ahfcH]\\)?:\\([a-z=:]*\\)"))
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
-;; Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
;; Keywords: mail, news, MIME
;; This file is part of GNU Emacs.
(defvar gnus-message-group-art nil)
(defconst gnus-bug-message
- "Sending a bug report to the Gnus Towers.
+ (format "Sending a bug report to the Gnus Towers.
+========================================
+
+This gnus is the %s%s.
+If you think the bug is a Semi-gnus bug, send a bug report to Semi-gnus
+Developers. (the addresses below are mailing list addresses)
+
========================================
The buffer below is a mail buffer. When you press `C-c C-c', it will
Please describe the bug in annoying, painstaking detail.
Thank you for your help in stamping out bugs.
-")
+"
+ gnus-product-name
+ (if (string= gnus-product-name "Semi-gnus")
+ ""
+ ", a modified version of Semi-gnus")))
(eval-and-compile
(autoload 'gnus-uu-post-news "gnus-uu" nil t)
"\M-c" gnus-summary-mail-crosspost-complaint
"om" gnus-summary-mail-forward
"op" gnus-summary-post-forward
- "Om" gnus-uu-digest-mail-forward
- "Op" gnus-uu-digest-post-forward)
+ "Om" gnus-summary-mail-digest
+ "Op" gnus-summary-post-digest)
(gnus-define-keys (gnus-send-bounce-map "D" gnus-summary-send-map)
"b" gnus-summary-resend-bounced-mail
;;; Internal functions.
+(defun gnus-extended-version ()
+ "Stringified gnus version."
+ (interactive) ; ???
+ (concat gnus-product-name "/" gnus-version-number))
+
(defvar gnus-article-reply nil)
(defmacro gnus-setup-message (config &rest forms)
(let ((winconf (make-symbol "gnus-setup-message-winconf"))
(add-hook 'message-header-setup-hook 'gnus-inews-insert-gcc)
(add-hook 'message-header-setup-hook 'gnus-inews-insert-archive-gcc)
(add-hook 'message-mode-hook 'gnus-configure-posting-styles)
+ (add-hook 'message-mode-hook
+ (lambda ()
+ (setq message-user-agent (gnus-extended-version))))
(unwind-protect
(progn
,@forms)
(setq message-post-method
`(lambda (arg)
(gnus-post-method arg ,gnus-newsgroup-name)))
- (setq message-user-agent (gnus-extended-version))
(message-add-action
`(set-window-configuration ,winconf) 'exit 'postpone 'kill)
(message-add-action
(setq gnus-article-copy (gnus-get-buffer-create " *gnus article copy*"))
(buffer-disable-undo gnus-article-copy)
(let ((article-buffer (or article-buffer gnus-article-buffer))
- end beg contents)
+ end beg)
(if (not (and (get-buffer article-buffer)
(gnus-buffer-exists-p article-buffer)))
(error "Can't find any article buffer")
(t gnus-select-method))))
\f
-
-;; Dummy to avoid byte-compile warning.
-(defvar nnspool-rejected-article-hook)
-(defvar mule-version)
-(defvar xemacs-betaname)
-(defvar xemacs-codename)
-
-(defun gnus-extended-version ()
- "Stringified Gnus version and Emacs version."
- (interactive) ; ???
- (concat
- ;; Semi-gnus/VERSION
- gnus-product-name "/" gnus-version-number
- ;; EMACS/VERSION
- (if (featurep 'xemacs)
- ;; XEmacs
- (concat
- (format " XEmacs/%d.%d%s" emacs-major-version emacs-minor-version
- (if (and (boundp 'xemacs-betaname) xemacs-betaname)
- (if (string-match "\\`(\\(.*\\))\\'" xemacs-betaname)
- (match-string 1 xemacs-betaname)
- "") ; unknown format
- "")) ; not beta
- (if (boundp 'xemacs-codename)
- (concat " (" xemacs-codename ")")
- "") ; no codename
- )
- ;; not XEmacs
- (concat
- (format " Emacs/%d.%d" emacs-major-version emacs-minor-version)
- (if (and (boundp 'enable-multibyte-characters)
- enable-multibyte-characters)
- ;; Should return " (multibyte)" ?
- ""
- " (unibyte)")
- ))
- ;; MULE[/VERSION]
- (if (featurep 'mule)
- (if (and (boundp 'mule-version) mule-version)
- (concat " MULE/" mule-version)
- " MULE") ; no mule-version
- "") ; not Mule
- ;; Meadow/VERSION
- (if (featurep 'meadow)
- (let ((version (Meadow-version)))
- (if (string-match "\\`Meadow.\\([^ ]*\\)\\( (.*)\\)\\'" version)
- (concat " Meadow/"
- (match-string 1 version)
- (match-string 2 version)
- )
- "Meadow")) ; unknown format
- "") ; not Meadow
- ))
-
-\f
;;;
;;; Gnus Mail Functions
;;;
(if full-headers "" message-included-forward-headers)))
(message-forward post))))
+(defun gnus-summary-post-forward (&optional full-headers)
+ "Forward the current article to a newsgroup.
+If FULL-HEADERS (the prefix), include full headers when forwarding."
+ (interactive "P")
+ (gnus-summary-mail-forward full-headers t))
+
+;;; XXX: generate Subject and ``Topics''?
+(defun gnus-summary-mail-digest (&optional n post)
+ "Digests and forwards all articles in this series."
+ (interactive "P")
+ (let ((subject "Digested Articles")
+ (articles (gnus-summary-work-articles n))
+ article)
+ (gnus-setup-message 'forward
+ (gnus-summary-select-article)
+ (if post (message-news nil subject) (message-mail nil subject))
+ (message-goto-body)
+ (while (setq article (pop articles))
+ (save-window-excursion
+ (set-buffer gnus-summary-buffer)
+ (gnus-summary-select-article nil nil nil article)
+ (gnus-summary-remove-process-mark article))
+ (insert (mime-make-tag "message" "rfc822") "\n")
+ (insert-buffer-substring gnus-original-article-buffer))
+ (push-mark)
+ (message-goto-body)
+ (mime-edit-enclose-digest-region (point)(mark t)))))
+
+(defun gnus-summary-post-digest (&optional n)
+ "Digest and forwards all articles in this series to a newsgroup."
+ (interactive "P")
+ (gnus-summary-mail-digest n t))
+
(defun gnus-summary-resend-message (address n)
"Resend the current article to ADDRESS."
(interactive "sResend message(s) to: \nP")
(set-buffer gnus-original-article-buffer)
(message-resend address)))))
-(defun gnus-summary-post-forward (&optional full-headers)
- "Forward the current article to a newsgroup.
-If FULL-HEADERS (the prefix), include full headers when forwarding."
- (interactive "P")
- (gnus-summary-mail-forward full-headers t))
-
(defvar gnus-nastygram-message
"The following article was inappropriately posted to %s.\n\n"
"Format string to insert in nastygrams.
(insert gnus-bug-message)
(goto-char (point-min)))
(message-pop-to-buffer "*Gnus Bug*")
- (message-setup `((To . ,gnus-maintainer) (Subject . "")))
+ (message-setup
+ `((To . ,gnus-maintainer) (Cc . ,semi-gnus-developers) (Subject . "")))
(when gnus-bug-create-help-buffer
(push `(gnus-bug-kill-buffer) message-send-actions))
(goto-char (point-min))
(start-point (posn-point start-posn))
(start-line (1+ (count-lines 1 start-point)))
(start-window (posn-window start-posn))
- (start-frame (window-frame start-window))
(bounds (gnus-window-edges start-window))
(top (nth 1 bounds))
(bottom (if (window-minibuffer-p start-window)
;; end-of-range is used only in the single-click case.
;; It is the place where the drag has reached so far
;; (but not outside the window where the drag started).
- (let (event end end-point last-end-point (end-of-range (point)))
+ (let (event end end-point (end-of-range (point)))
(track-mouse
(while (progn
(setq event (cdr (gnus-read-event-char)))
nil
(setq end (event-end event)
end-point (posn-point end))
- (when end-point
- (setq last-end-point end-point))
(cond
;; Are we moving within the original window?
"Return a form that limits EL to MAX-WIDTH."
(let ((max (abs max-width)))
(if (symbolp el)
- `(if (> (gnus-string-width ,el) ,max)
+ `(if (> (length ,el) ,max)
,(if (< max-width 0)
- `(gnus-truncate-string
- ,el (gnus-string-width ,el)
- (- (gnus-string-width ,el) ,max))
- `(gnus-truncate-string ,el ,max))
+ `(substring ,el (- (length el) ,max))
+ `(substring ,el 0 ,max))
,el)
`(let ((val (eval ,el)))
- (if (> (gnus-string-width val) ,max)
+ (if (> (length val) ,max)
,(if (< max-width 0)
- `(gnus-truncate-string
- val (gnus-string-width val)
- (- (gnus-string-width val) ,max))
- `(gnus-truncate-string val ,max))
+ `(substring val (- (length val) ,max))
+ `(substring val 0 ,max))
val)))))
(defun gnus-tilde-cut-form (el cut-width)
"Return a form that cuts CUT-WIDTH off of EL."
(let ((cut (abs cut-width)))
(if (symbolp el)
- `(if (> (gnus-string-width ,el) ,cut)
+ `(if (> (length ,el) ,cut)
,(if (< cut-width 0)
- `(gnus-truncate-string
- ,el (- (gnus-string-width ,el) ,cut))
- `(gnus-truncate-string
- ,el (- (gnus-string-width ,el) ,cut) ,cut))
+ `(substring ,el 0 (- (length el) ,cut))
+ `(substring ,el ,cut))
,el)
`(let ((val (eval ,el)))
- (if (> (gnus-string-width val) ,cut)
+ (if (> (length val) ,cut)
,(if (< cut-width 0)
- `(gnus-truncate-string
- val (- (gnus-string-width val) ,cut))
- `(gnus-truncate-string
- val (- (gnus-string-width val) ,cut) ,cut))
+ `(substring val 0 (- (length val) ,cut))
+ `(substring val ,cut))
val)))))
(defun gnus-tilde-ignore-form (el ignore-value)
(push (cons 'version emacs-version) gnus-format-specs)
;; Mark the .newsrc.eld file as "dirty".
- (gnus-dribble-enter " ")
+ (gnus-dribble-touch)
(gnus-message 7 "Compiling user specs...done"))))
(defun gnus-set-format (type &optional insertable)
(defvar gnus-inserted-opened-servers nil)
(defvar gnus-server-line-format-alist
- `((?h how ?s)
- (?n name ?s)
- (?w where ?s)
- (?s status ?s)))
+ `((?h gnus-tmp-how ?s)
+ (?n gnus-tmp-name ?s)
+ (?w gnus-tmp-where ?s)
+ (?s gnus-tmp-status ?s)))
(defvar gnus-server-mode-line-format-alist
- `((?S news-server ?s)
- (?M news-method ?s)
- (?u user-defined ?s)))
+ `((?S gnus-tmp-news-server ?s)
+ (?M gnus-tmp-news-method ?s)
+ (?u gnus-tmp-user-defined ?s)))
(defvar gnus-server-line-format-spec nil)
(defvar gnus-server-mode-line-format-spec nil)
(setq buffer-read-only t)
(gnus-run-hooks 'gnus-server-mode-hook))
-(defun gnus-server-insert-server-line (name method)
- (let* ((how (car method))
- (where (nth 1 method))
+(defun gnus-server-insert-server-line (gnus-tmp-name method)
+ (let* ((gnus-tmp-how (car method))
+ (gnus-tmp-where (nth 1 method))
(elem (assoc method gnus-opened-servers))
- (status (cond ((eq (nth 1 elem) 'denied)
+ (gnus-tmp-status (cond ((eq (nth 1 elem) 'denied)
"(denied)")
((or (gnus-server-opened method)
(eq (nth 1 elem) 'ok))
(prog1 (1+ (point))
;; Insert the text.
(eval gnus-server-line-format-spec))
- (list 'gnus-server (intern name)))))
+ (list 'gnus-server (intern gnus-tmp-name)))))
(defun gnus-enter-server-buffer ()
"Set up the server buffer."
(error "No server on the current line")))
(unless (assoc server gnus-server-alist)
(error "Read-only server %s" server))
- (gnus-dribble-enter "")
+ (gnus-dribble-touch)
(let ((buffer-read-only nil))
(gnus-delete-line))
(push (assoc server gnus-server-alist) gnus-server-killed-servers)
(require 'gnus-range)
(require 'gnus-int)
(require 'gnus-undo)
+(require 'gnus-util)
(require 'mime-view)
(autoload 'gnus-summary-limit-include-cached "gnus-cache" nil t)
["Wide reply and yank" gnus-summary-wide-reply-with-original t]
["Mail forward" gnus-summary-mail-forward t]
["Post forward" gnus-summary-post-forward t]
- ["Digest and mail" gnus-uu-digest-mail-forward t]
- ["Digest and post" gnus-uu-digest-post-forward t]
+ ["Digest and mail" gnus-summary-mail-digest t]
+ ["Digest and post" gnus-summary-post-digest t]
["Resend message" gnus-summary-resend-message t]
["Send bounced mail" gnus-summary-resend-bounced-mail t]
["Send a mail" gnus-summary-mail-other-window t]
(defun gnus-data-compute-positions ()
"Compute the positions of all articles."
(setq gnus-newsgroup-data-reverse nil)
- (let ((data gnus-newsgroup-data)
- pos)
- (while data
- (when (setq pos (text-property-any
- (point-min) (point-max)
- 'gnus-number (gnus-data-number (car data))))
- (gnus-data-set-pos (car data) (+ pos 3)))
- (setq data (cdr data)))))
+ (let ((data gnus-newsgroup-data))
+ (save-excursion
+ (goto-char (point-min))
+ (while data
+ (while (get-text-property (point) 'gnus-intangible)
+ (forward-line 1))
+ (gnus-data-set-pos (car data) (+ (point) 3))
+ (setq data (cdr data))
+ (forward-line 1)))))
(defun gnus-summary-article-pseudo-p (article)
"Say whether this article is a pseudo article or not."
(gnus-score-over-mark 130)
(gnus-download-mark 131)
(spec gnus-summary-line-format-spec)
- thread gnus-visual pos)
+ gnus-visual pos)
(save-excursion
(gnus-set-work-buffer)
(let ((gnus-summary-line-format-spec spec)
(let ((headers gnus-newsgroup-headers)
(gnus-summary-ignore-duplicates t)
header references generation relations
- cthread subject child end pthread relation new-child date)
+ subject child end new-child date)
;; First we create an alist of generations/relations, where
;; generations is how much we trust the relation, and the relation
;; is parent/child.
(defsubst gnus-nov-parse-line (number dependencies &optional force-new)
(let ((eol (gnus-point-at-eol))
(buffer (current-buffer))
- header)
+ header rawtext decoded)
;; overview: [num subject from date id refs chars lines misc]
(unwind-protect
(setq header
(make-full-mail-header
number ; number
- (funcall
- gnus-unstructured-field-decoder (gnus-nov-field)) ; subject
- (funcall
- gnus-structured-field-decoder (gnus-nov-field)) ; from
+ (progn
+ (setq rawtext (gnus-nov-field) ; subject
+ decoded (funcall
+ gnus-unstructured-field-decoder rawtext))
+ (if (string= rawtext decoded)
+ rawtext
+ (put-text-property 0 (length decoded) 'raw-text rawtext decoded)
+ decoded))
+ (progn
+ (setq rawtext (gnus-nov-field) ; from
+ decoded (funcall
+ gnus-structured-field-decoder rawtext))
+ (if (string= rawtext decoded)
+ rawtext
+ (put-text-property 0 (length decoded) 'raw-text rawtext decoded)
+ decoded))
(gnus-nov-field) ; date
(or (gnus-nov-field)
(nnheader-generate-fake-message-id)) ; id
"Read all the headers."
(let ((gnus-summary-ignore-duplicates t)
(dependencies gnus-newsgroup-dependencies)
- found header article)
+ header article)
(save-excursion
(set-buffer nntp-server-buffer)
(let ((case-fold-search nil))
header (gnus-nov-parse-line
article dependencies)))
(when header
- (push header gnus-newsgroup-headers)
- (if (memq (setq article (mail-header-number header))
- gnus-newsgroup-unselected)
- (progn
- (push article gnus-newsgroup-unreads)
- (setq gnus-newsgroup-unselected
- (delq article gnus-newsgroup-unselected)))
- (push article gnus-newsgroup-ancient))
+ (save-excursion
+ (set-buffer gnus-summary-buffer)
+ (push header gnus-newsgroup-headers)
+ (if (memq (setq article (mail-header-number header))
+ gnus-newsgroup-unselected)
+ (progn
+ (push article gnus-newsgroup-unreads)
+ (setq gnus-newsgroup-unselected
+ (delq article gnus-newsgroup-unselected)))
+ (push article gnus-newsgroup-ancient)))
(forward-line 1)))))))
(defun gnus-summary-update-article-line (article header)
references))
"none")))
(buffer-read-only nil)
- (old (car thread))
- (number (mail-header-number header))
- pos)
+ (old (car thread)))
(when thread
(unless iheader
(setcar thread nil)
"Sort THREADS."
(if (not gnus-thread-sort-functions)
threads
- (gnus-message 7 "Sorting threads...")
+ (gnus-message 8 "Sorting threads...")
(prog1
(sort threads (gnus-make-sort-function gnus-thread-sort-functions))
- (gnus-message 7 "Sorting threads...done"))))
+ (gnus-message 8 "Sorting threads...done"))))
(defun gnus-sort-articles (articles)
"Sort ARTICLES."
(or dependencies
(save-excursion (set-buffer gnus-summary-buffer)
gnus-newsgroup-dependencies)))
- headers id id-dep ref-dep end ref)
+ headers id end ref)
(save-excursion
(set-buffer nntp-server-buffer)
;; Translate all TAB characters into SPACE characters.
(subst-char-in-region (point-min) (point-max) ?\t ? t)
(gnus-run-hooks 'gnus-parse-headers-hook)
(let ((case-fold-search t)
+ rawtext decoded
in-reply-to header p lines chars)
(goto-char (point-min))
;; Search to the beginning of the next header. Error messages
(progn
(goto-char p)
(if (search-forward "\nsubject: " nil t)
- (funcall
- gnus-unstructured-field-decoder (nnheader-header-value))
+ (progn
+ (setq rawtext (nnheader-header-value)
+ decoded (funcall
+ gnus-unstructured-field-decoder rawtext))
+ (if (string-equal rawtext decoded)
+ rawtext
+ (put-text-property 0 (length decoded) 'raw-text rawtext decoded)
+ decoded))
"(none)"))
;; From.
(progn
(goto-char p)
(if (search-forward "\nfrom: " nil t)
- (funcall
- gnus-structured-field-decoder (nnheader-header-value))
+ (progn
+ (setq rawtext (nnheader-header-value)
+ decoded (funcall
+ gnus-structured-field-decoder rawtext))
+ (if (string-equal rawtext decoded)
+ rawtext
+ (put-text-property 0 (length decoded) 'raw-text rawtext decoded)
+ decoded))
"(nobody)"))
;; Date.
(progn
(t
(gnus-read-header id))))
(number (and (numberp id) id))
- pos d)
+ d)
(when header
;; Rebuild the thread that this article is part of and go to the
;; article we have fetched.
(interactive "P")
(let ((id (mail-header-id (gnus-summary-article-header)))
(limit (if limit (prefix-numeric-value limit)
- gnus-refer-thread-limit))
- fmethod root)
+ gnus-refer-thread-limit)))
;; We want to fetch LIMIT *old* headers, but we also have to
;; re-fetch all the headers in the current buffer, because many of
;; them may be undisplayed. So we adjust LIMIT.
(gnus-summary-article-sparse-p
(mail-header-number header))
(memq (mail-header-number header)
- gnus-newsgroup-limit)))
- h)
+ gnus-newsgroup-limit))))
(cond
;; If the article is present in the buffer we just go to it.
((and header
(gnus-summary-mark-article article gnus-canceled-mark)
(gnus-message 4 "Deleted article %s" article))
(t
- (let* ((entry
- (or
- (gnus-gethash (car art-group) gnus-newsrc-hashtb)
- (gnus-gethash
- (gnus-group-prefixed-name
- (car art-group)
- (or select-method
- (gnus-find-method-for-group to-newsgroup)))
- gnus-newsrc-hashtb)))
+ (let* ((pto-group (gnus-group-prefixed-name
+ (car art-group) to-method))
+ (entry
+ (gnus-gethash pto-group gnus-newsrc-hashtb))
(info (nth 2 entry))
(to-group (gnus-info-group info)))
;; Update the group that has been moved to.
"Pipe the current article through PROGRAM."
(interactive "sProgram: ")
(gnus-summary-select-article)
- (let ((mail-header-separator "")
- (art-buf (get-buffer gnus-article-buffer)))
+ (let ((mail-header-separator ""))
(gnus-eval-in-buffer-window gnus-article-buffer
(save-restriction
(widen)
(set symbol nil))
symbol))
-(defun gnus-string-width (str)
- (length str))
-
-(defun gnus-truncate-string (str width)
+;; Avoid byte-compile warning.
+;; In Mule, this function will be redefined to `truncate-string',
+;; which takes 3 or 4 args.
+(defun gnus-truncate-string (str width &rest ignore)
(substring str 0 width))
;; Added by Geoffrey T. Dairiki <dairiki@u.washington.edu>. A safe way
(defun gnus-map-function (funs arg)
"Applies the result of the first function in FUNS to the second, and so on.
ARG is passed to the first function."
- (let ((myfuns funs)
- (myarg arg))
+ (let ((myfuns funs))
(while myfuns
(setq arg (funcall (pop myfuns) arg)))
arg))
;;; Various
+(defvar gnus-group-buffer) ; Compiler directive
(defun gnus-alive-p ()
"Say whether Gnus is running or not."
(and (boundp 'gnus-group-buffer)
(interactive "P")
(let ((gnus-uu-save-in-digest t)
(file (make-temp-name (nnheader-concat gnus-uu-tmp-dir "forward")))
- buf subject from newsgroups)
+ buf subject from)
(gnus-setup-message 'forward
(setq gnus-uu-digest-from-subject nil)
(gnus-uu-decode-save n file)
"Invert the list of process-marked articles."
(interactive)
(let ((data gnus-newsgroup-data)
- d number)
+ number)
(save-excursion
(while data
(if (memq (setq number (gnus-data-number (pop data)))
(mail-header-subject header))
gnus-uu-digest-from-subject))
(let ((name (file-name-nondirectory gnus-uu-saved-article-name))
- (delim (concat "^" (make-string 30 ?-) "$"))
beg subj headers headline sorthead body end-string state)
(if (or (eq in-state 'first)
(eq in-state 'first-and-last))
;; replaces the last thing that looks like "2/3" with "[0-9]+/3"
;; or, if it can't find something like that, tries "2 of 3", then
;; finally just replaces the next to last number with "[0-9]+".
- (let ((count 2))
- (save-excursion
- (set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name))
- (buffer-disable-undo (current-buffer))
- (erase-buffer)
- (insert (regexp-quote string))
+ (save-excursion
+ (set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name))
+ (buffer-disable-undo (current-buffer))
+ (erase-buffer)
+ (insert (regexp-quote string))
+
+ (setq case-fold-search nil)
- (setq case-fold-search nil)
+ (end-of-line)
+ (if (re-search-backward "\\([^0-9]\\)[0-9]+/\\([0-9]+\\)" nil t)
+ (replace-match "\\1[0-9]+/\\2")
(end-of-line)
- (if (re-search-backward "\\([^0-9]\\)[0-9]+/\\([0-9]+\\)" nil t)
- (replace-match "\\1[0-9]+/\\2")
+ (if (re-search-backward "\\([^0-9]\\)[0-9]+[ \t]*of[ \t]*\\([0-9]+\\)"
+ nil t)
+ (replace-match "\\1[0-9]+ of \\2")
(end-of-line)
- (if (re-search-backward "\\([^0-9]\\)[0-9]+[ \t]*of[ \t]*\\([0-9]+\\)"
+ (if (re-search-backward "\\([^0-9]\\)[0-9]+\\([^0-9]+\\)[0-9]+"
nil t)
- (replace-match "\\1[0-9]+ of \\2")
-
- (end-of-line)
- (if (re-search-backward "\\([^0-9]\\)[0-9]+\\([^0-9]+\\)[0-9]+"
- nil t)
- (replace-match "\\1[0-9]+\\2[0-9]+" t nil nil nil))))
+ (replace-match "\\1[0-9]+\\2[0-9]+" t nil nil nil))))
- (goto-char 1)
- (while (re-search-forward "[ \t]+" nil t)
- (replace-match "[ \t]+" t t))
+ (goto-char 1)
+ (while (re-search-forward "[ \t]+" nil t)
+ (replace-match "[ \t]+" t t))
- (buffer-substring 1 (point-max)))))
+ (buffer-substring 1 (point-max))))
(defun gnus-uu-get-list-of-articles (n)
;; If N is non-nil, the article numbers of the N next articles
(not (memq 'end process-state))))
(setq article (pop articles))
- (push article article-series)
+ (when (vectorp (gnus-summary-article-header article))
+ (push article article-series)
- (unless articles
- (if (eq state 'first)
- (setq state 'first-and-last)
- (setq state 'last)))
+ (unless articles
+ (if (eq state 'first)
+ (setq state 'first-and-last)
+ (setq state 'last)))
- (let ((part (gnus-uu-part-number article)))
- (gnus-message 6 "Getting article %d%s..."
- article (if (string= part "") "" (concat ", " part))))
- (gnus-summary-display-article article)
+ (let ((part (gnus-uu-part-number article)))
+ (gnus-message 6 "Getting article %d%s..."
+ article (if (string= part "") "" (concat ", " part))))
+ (gnus-summary-display-article article)
- ;; Push the article to the processing function.
- (save-excursion
- (set-buffer gnus-original-article-buffer)
- (let ((buffer-read-only nil))
- (save-excursion
- (set-buffer gnus-summary-buffer)
- (setq process-state
- (funcall process-function
- gnus-original-article-buffer state)))))
-
- (gnus-summary-remove-process-mark article)
-
- ;; If this is the beginning of a decoded file, we push it
- ;; on to a list.
- (when (or (memq 'begin process-state)
- (and (or (eq state 'first)
- (eq state 'first-and-last))
- (memq 'ok process-state)))
- (when has-been-begin
- ;; If there is a `result-file' here, that means that the
- ;; file was unsuccessfully decoded, so we delete it.
- (when (and result-file
- (file-exists-p result-file)
- (not gnus-uu-be-dangerous)
- (or (eq gnus-uu-be-dangerous t)
- (gnus-y-or-n-p
- (format "Delete unsuccessfully decoded file %s"
- result-file))))
- (delete-file result-file)))
- (when (memq 'begin process-state)
- (setq result-file (car process-state)))
- (setq has-been-begin t))
-
- ;; Check whether we have decoded one complete file.
- (when (memq 'end process-state)
- (setq article-series nil)
- (setq has-been-begin nil)
- (if (stringp result-file)
- (setq files (list result-file))
- (setq files result-file))
- (setq result-file (car files))
- (while files
- (push (list (cons 'name (pop files))
- (cons 'article article))
- result-files))
- ;; Allow user-defined functions to be run on this file.
- (when gnus-uu-grabbed-file-functions
- (let ((funcs gnus-uu-grabbed-file-functions))
- (unless (listp funcs)
- (setq funcs (list funcs)))
- (while funcs
- (funcall (pop funcs) result-file))))
- (setq result-file nil)
- ;; Check whether we have decoded enough articles.
- (and limit (= (length result-files) limit)
- (setq articles nil)))
-
- ;; If this is the last article to be decoded, and
- ;; we still haven't reached the end, then we delete
- ;; the partially decoded file.
- (and (or (eq state 'last) (eq state 'first-and-last))
- (not (memq 'end process-state))
- result-file
- (file-exists-p result-file)
- (not gnus-uu-be-dangerous)
- (or (eq gnus-uu-be-dangerous t)
- (gnus-y-or-n-p
- (format "Delete incomplete file %s? " result-file)))
- (delete-file result-file))
-
- ;; If this was a file of the wrong sort, then
- (when (and (or (memq 'wrong-type process-state)
- (memq 'error process-state))
- gnus-uu-unmark-articles-not-decoded)
- (gnus-summary-tick-article article t))
-
- ;; Set the new series state.
- (if (and (not has-been-begin)
- (not sloppy)
- (or (memq 'end process-state)
- (memq 'middle process-state)))
- (progn
- (setq process-state (list 'error))
- (gnus-message 2 "No begin part at the beginning")
- (sleep-for 2))
- (setq state 'middle)))
-
- ;; When there are no result-files, then something must be wrong.
- (if result-files
- (message "")
- (cond
- ((not has-been-begin)
- (gnus-message 2 "Wrong type file"))
- ((memq 'error process-state)
- (gnus-message 2 "An error occurred during decoding"))
- ((not (or (memq 'ok process-state)
- (memq 'end process-state)))
- (gnus-message 2 "End of articles reached before end of file")))
- ;; Make unsuccessfully decoded articles unread.
- (when gnus-uu-unmark-articles-not-decoded
- (while article-series
- (gnus-summary-tick-article (pop article-series) t))))
+ ;; Push the article to the processing function.
+ (save-excursion
+ (set-buffer gnus-original-article-buffer)
+ (let ((buffer-read-only nil))
+ (save-excursion
+ (set-buffer gnus-summary-buffer)
+ (setq process-state
+ (funcall process-function
+ gnus-original-article-buffer state)))))
+
+ (gnus-summary-remove-process-mark article)
+
+ ;; If this is the beginning of a decoded file, we push it
+ ;; on to a list.
+ (when (or (memq 'begin process-state)
+ (and (or (eq state 'first)
+ (eq state 'first-and-last))
+ (memq 'ok process-state)))
+ (when has-been-begin
+ ;; If there is a `result-file' here, that means that the
+ ;; file was unsuccessfully decoded, so we delete it.
+ (when (and result-file
+ (file-exists-p result-file)
+ (not gnus-uu-be-dangerous)
+ (or (eq gnus-uu-be-dangerous t)
+ (gnus-y-or-n-p
+ (format "Delete unsuccessfully decoded file %s"
+ result-file))))
+ (delete-file result-file)))
+ (when (memq 'begin process-state)
+ (setq result-file (car process-state)))
+ (setq has-been-begin t))
+
+ ;; Check whether we have decoded one complete file.
+ (when (memq 'end process-state)
+ (setq article-series nil)
+ (setq has-been-begin nil)
+ (if (stringp result-file)
+ (setq files (list result-file))
+ (setq files result-file))
+ (setq result-file (car files))
+ (while files
+ (push (list (cons 'name (pop files))
+ (cons 'article article))
+ result-files))
+ ;; Allow user-defined functions to be run on this file.
+ (when gnus-uu-grabbed-file-functions
+ (let ((funcs gnus-uu-grabbed-file-functions))
+ (unless (listp funcs)
+ (setq funcs (list funcs)))
+ (while funcs
+ (funcall (pop funcs) result-file))))
+ (setq result-file nil)
+ ;; Check whether we have decoded enough articles.
+ (and limit (= (length result-files) limit)
+ (setq articles nil)))
+
+ ;; If this is the last article to be decoded, and
+ ;; we still haven't reached the end, then we delete
+ ;; the partially decoded file.
+ (and (or (eq state 'last) (eq state 'first-and-last))
+ (not (memq 'end process-state))
+ result-file
+ (file-exists-p result-file)
+ (not gnus-uu-be-dangerous)
+ (or (eq gnus-uu-be-dangerous t)
+ (gnus-y-or-n-p
+ (format "Delete incomplete file %s? " result-file)))
+ (delete-file result-file))
+
+ ;; If this was a file of the wrong sort, then
+ (when (and (or (memq 'wrong-type process-state)
+ (memq 'error process-state))
+ gnus-uu-unmark-articles-not-decoded)
+ (gnus-summary-tick-article article t))
+
+ ;; Set the new series state.
+ (if (and (not has-been-begin)
+ (not sloppy)
+ (or (memq 'end process-state)
+ (memq 'middle process-state)))
+ (progn
+ (setq process-state (list 'error))
+ (gnus-message 2 "No begin part at the beginning")
+ (sleep-for 2))
+ (setq state 'middle)))
+
+ ;; When there are no result-files, then something must be wrong.
+ (if result-files
+ (message "")
+ (cond
+ ((not has-been-begin)
+ (gnus-message 2 "Wrong type file"))
+ ((memq 'error process-state)
+ (gnus-message 2 "An error occurred during decoding"))
+ ((not (or (memq 'ok process-state)
+ (memq 'end process-state)))
+ (gnus-message 2 "End of articles reached before end of file")))
+ ;; Make unsuccessfully decoded articles unread.
+ (when gnus-uu-unmark-articles-not-decoded
+ (while article-series
+ (gnus-summary-tick-article (pop article-series) t)))))
result-files))
(top-string "[ cut here %s (%s %d/%d) %s gnus-uu ]")
(separator (concat mail-header-separator "\n\n"))
uubuf length parts header i end beg
- beg-line minlen buf post-buf whole-len beg-binary end-binary)
+ beg-line minlen post-buf whole-len beg-binary end-binary)
(setq post-buf (current-buffer))
'x-color-values
(lambda (color)
(color-instance-rgb-components
- (make-color-instance color))))))
+ (make-color-instance color)))))
+
+ (when (featurep 'mule)
+ (defun gnus-tilde-pad-form (el pad-width)
+ "Return a form that pads EL to PAD-WIDTH."
+ (let ((pad (abs pad-width)))
+ (if (symbolp el)
+ (if (< pad-width 0)
+ `(concat ,el (make-string
+ (max 0 (- ,pad (string-width ,el))) ?\ ))
+ `(concat (make-string
+ (max 0 (- ,pad (string-width ,el))) ?\ )
+ ,el))
+ (if (< pad-width 0)
+ `(let ((val (eval ,el)))
+ (concat val (make-string
+ (max 0 (- ,pad (string-width val))) ?\ )))
+ `(let ((val (eval ,el)))
+ (concat (make-string
+ (max 0 (- ,pad (string-width val))) ?\ )
+ val))))))
+ ))
(defun gnus-xmas-redefine ()
"Redefine lots of Gnus functions for XEmacs."
(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))
-
+ (add-hook 'gnus-tree-mode-hook 'gnus-xmas-switch-horizontal-scrollbar-off)
+
+ (when (featurep 'mule)
+ (defun gnus-truncate-string (str end-column &optional start-column padding)
+ "Truncate string STR to end at column END-COLUMN.
+The optional 2nd arg START-COLUMN, if non-nil, specifies
+the starting column; that means to return the characters occupying
+columns START-COLUMN ... END-COLUMN of STR.
+
+The optional 3rd arg PADDING, if non-nil, specifies a padding character
+to add at the end of the result if STR doesn't reach column END-COLUMN,
+or if END-COLUMN comes in the middle of a character in STR.
+PADDING is also added at the beginning of the result
+if column START-COLUMN appears in the middle of a character in STR.
+
+If PADDING is nil, no padding is added in these cases, so
+the resulting string may be narrower than END-COLUMN.
+\[Emacs 20.3 emulating function]"
+ (or start-column
+ (setq start-column 0))
+ (let ((len (length str))
+ (idx 0)
+ (column 0)
+ (head-padding "") (tail-padding "")
+ ch last-column last-idx from-idx)
+ (condition-case nil
+ (while (< column start-column)
+ (setq ch (aref str idx)
+ column (+ column (char-width ch))
+ idx (1+ idx)))
+ (args-out-of-range (setq idx len)))
+ (if (< column start-column)
+ (if padding (make-string end-column padding) "")
+ (if (and padding (> column start-column))
+ (setq head-padding
+ (make-string (- column start-column) padding)))
+ (setq from-idx idx)
+ (if (< end-column column)
+ (setq idx from-idx)
+ (condition-case nil
+ (while (< column end-column)
+ (setq last-column column
+ last-idx idx
+ ch (aref str idx)
+ column (+ column (char-width ch))
+ idx (1+ idx)))
+ (args-out-of-range (setq idx len)))
+ (if (> column end-column)
+ (setq column last-column idx last-idx))
+ (if (and padding (< column end-column))
+ (setq tail-padding
+ (make-string (- end-column column) padding))))
+ (setq str (substring str from-idx idx))
+ (if padding
+ (concat head-padding str tail-padding)
+ str))))
+
+ (defun gnus-tilde-max-form (el max-width)
+ "Return a form that limits EL to MAX-WIDTH."
+ (let ((max (abs max-width)))
+ (if (symbolp el)
+ (if (< max-width 0)
+ `(let ((width (string-width ,el)))
+ (gnus-truncate-string ,el width (- width ,max)))
+ `(gnus-truncate-string ,el ,max))
+ (if (< max-width 0)
+ `(let* ((val (eval ,el))
+ (width (string-width val)))
+ (gnus-truncate-string val width (- width ,max)))
+ `(let ((val (eval ,el)))
+ (gnus-truncate-string val ,max))))))
+
+ (defun gnus-tilde-cut-form (el cut-width)
+ "Return a form that cuts CUT-WIDTH off of EL."
+ (let ((cut (abs cut-width)))
+ (if (symbolp el)
+ (if (< cut-width 0)
+ `(gnus-truncate-string ,el (- (string-width ,el) ,cut))
+ `(gnus-truncate-string ,el (string-width ,el) ,cut))
+ (if (< cut-width 0)
+ `(let ((val (eval ,el)))
+ (gnus-truncate-string val (- (string-width val) ,cut)))
+ `(let ((val (eval ,el)))
+ (gnus-truncate-string val (string-width val) ,cut))))))
+ ))
;;; XEmacs logo and toolbar.
(defconst gnus-product-name "T-gnus"
"Product name of this version of gnus.")
-(defconst gnus-version-number "6.8.15"
+(defconst gnus-version-number "6.8.16"
"Version number for this version of gnus.")
(defconst gnus-version
- (format "%s %s (based on Gnus 5.6.39; for SEMI 1.8, FLIM 1.8/1.9)"
+ (format "%s %s (based on Gnus 5.6.41; for SEMI 1.8, FLIM 1.8/1.9)"
gnus-product-name gnus-version-number)
"Version string for this version of gnus.")
:group 'gnus-files
:group 'gnus-server
:type 'file)
-
+
;; This function is used to check both the environment variable
;; NNTPSERVER and the /etc/nntpserver file to see whether one can find
;; an nntp server name default.
gnus-start-date-timer gnus-stop-date-timer)
("gnus-int" gnus-request-type)
("gnus-start" gnus-newsrc-parse-options gnus-1 gnus-no-server-1
- gnus-dribble-enter gnus-read-init-file)
+ gnus-dribble-enter gnus-read-init-file gnus-dribble-touch)
("gnus-dup" gnus-dup-suppress-articles gnus-dup-unsuppress-article
gnus-dup-enter-articles)
("gnus-range" gnus-copy-sequence)
"Version number of this version of Gnus.
If ARG, insert string at point."
(interactive "P")
- (let ((methods gnus-valid-select-methods)
- (mess gnus-version)
- meth)
- (if arg
- (insert (message mess))
- (message mess))))
+ (if arg
+ (insert (message gnus-version))
+ (message gnus-version)))
(defun gnus-continuum-version (version)
"Return VERSION as a floating point number."
:type 'string)
(defcustom message-forward-end-separator
- ""
+ (concat (mime-make-tag "text" "plain") "\n")
"*Delimiter inserted after forwarded messages."
:group 'message-forwarding
:type 'string)
(insert "\n"))
(funcall message-citation-line-function))))
+(defvar mail-citation-hook) ;Compiler directive
(defun message-cite-original ()
"Cite function in the standard Message manner."
(if (and (boundp 'mail-citation-hook)
(defun message-pop-to-buffer (name)
"Pop to buffer NAME, and warn if it already exists and is modified."
- (let ((pop-up-frames pop-up-frames)
- (special-display-buffer-names special-display-buffer-names)
- (special-display-regexps special-display-regexps)
- (same-window-buffer-names same-window-buffer-names)
- (same-window-regexps same-window-regexps)
- (buffer (get-buffer name))
- (cur (current-buffer)))
- (if (or (and (featurep 'xemacs)
- (not (eq 'tty (device-type))))
- window-system)
- (when message-use-multi-frames
- (setq pop-up-frames t
- special-display-buffer-names nil
- special-display-regexps nil
- same-window-buffer-names nil
- same-window-regexps nil))
- (setq pop-up-frames nil))
+ (let ((buffer (get-buffer name)))
(if (and buffer
(buffer-name buffer))
(progn
This is done simply by taking the old article and adding a Supersedes
header line with the old Message-ID."
(interactive)
- (let ((cur (current-buffer)))
+ (let ((cur (current-buffer))
+ (sender (message-fetch-field "sender"))
+ (from (message-fetch-field "from")))
;; Check whether the user owns the article that is to be superseded.
- (unless (string-equal
- (downcase (or (message-fetch-field "sender")
- (cadr (funcall gnus-extract-address-components
- (message-fetch-field "from")))))
- (downcase (message-make-sender)))
+ (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))))))
(error "This article is not yours"))
;; Get a normal message buffer.
(message-pop-to-buffer (message-buffer-name "supersede"))
(goto-char (point-min))
;; strip Re/Fwd stuff off the beginning
(while (re-search-forward
- "\\([Rr][Ee]:\\|[Ff][Ww][Dd]:\\|[Ff][Ww]:\\)" nil t)
+ "\\([Rr][Ee]:\\|[Ff][Ww][Dd]\\(\\[[0-9]*\\]\\)?:\\|[Ff][Ww]:\\)" nil t)
(replace-match ""))
;; and gnus-style forwards [foo@bar.com] subject
(point))))
(hashtb (and (boundp 'gnus-active-hashtb) gnus-active-hashtb))
(completions (all-completions string hashtb))
- (cur (current-buffer))
comp)
(delete-region b (point))
(cond
(save-excursion
(set-buffer buffer)
(goto-char (point-max))
- (let ((xref (mail-header-xref header))
- (prefix (gnus-group-real-prefix group))
+ (let ((prefix (gnus-group-real-prefix group))
(oheader (copy-sequence header))
- (first t)
article)
(if (zerop (forward-line -1))
(progn
(deffoo nnmh-request-expire-articles (articles newsgroup
&optional server force)
(nnmh-possibly-change-directory newsgroup server)
- (let* ((active-articles
- (mapcar
- (function
- (lambda (name)
- (string-to-int name)))
- (directory-files nnmh-current-directory nil "^[0-9]+$" t)))
- (is-old t)
+ (let* ((is-old t)
article rest mod-time)
(nnheader-init-server-buffer)
(nntp-inhibit-erase t)
(map (apply 'vector articles))
(point 1)
- article alist)
+ article)
(set-buffer buf)
(erase-buffer)
;; Send ARTICLE command.
(let ((mart (nnvirtual-map-article article)))
(if mart
(gnus-request-type (car mart) (cdr mart))))
- (let ((method (gnus-find-method-for-group
- nnvirtual-last-accessed-component-group)))
- (gnus-request-type
- nnvirtual-last-accessed-component-group nil)))))
+ (gnus-request-type
+ nnvirtual-last-accessed-component-group nil))))
(deffoo nnvirtual-request-update-mark (group article mark)
(let* ((nart (nnvirtual-map-article article))
+1998-08-27 07:29:17 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Mail Folders): Addition.
+
+1998-08-25 08:06:28 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Posting Styles): Document this-is.
+ (Virtual Groups): Addition.
+
1998-08-18 00:30:05 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus.texi (Article Hiding): Addition.
\input texinfo @c -*-texinfo-*-
@setfilename gnus-ja
-@settitle Semi-gnus 6.8.13 Manual
+@settitle Semi-gnus 6.8.16 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Semi-gnus 6.8.13 Manual
+@title Semi-gnus 6.8.16 Manual
@author by Lars Magne Ingebrigtsen
@author by members of Semi-gnus mailing-list
\e$B$J8@8l7w$r:9JL$7$^$;$s!#$"$"!"%/%j%s%4%s$NJ}$O\e(B Unicode Next Generation\e$B$r\e(B
\e$B$*BT$A$/$@$5$$!#\e(B
-\e$B$3$N@bL@=q$O\e(B Semi-gnus 6.8.13 \e$B$KBP1~$7$^$9!#\e(B
+\e$B$3$N@bL@=q$O\e(B Semi-gnus 6.8.16 \e$B$KBP1~$7$^$9!#\e(B
@end ifinfo
@kindex SPACE \e$B!J35N,!K\e(B
@findex gnus-summary-next-page
@kbd{SPACE} \e$B$O5-;v$r0l%Z!<%8@h$K%9%/%m!<%k$7$^$9!#5-;v$N:G8e$K$$$k>l9g$O\e(B
-\e$B<!$N5-;v$rA*Br$7$^$9\e(B (@code{gnus-summary-prev-page})\e$B!#\e(B
+\e$B<!$N5-;v$rA*Br$7$^$9\e(B (@code{gnus-summary-next-page})\e$B!#\e(B
@item DEL
@kindex DEL \e$B!J35N,!K\e(B
@findex gnus-summary-prev-page
-\e$B8=:_$N5-;v$r0l%Z!<%8A0$K%9%/%m!<%k$7$^$9\e(B (code{gnus-summary-prev-page})\e$B!#\e(B
+\e$B8=:_$N5-;v$r0l%Z!<%8A0$K%9%/%m!<%k$7$^$9\e(B (@code{gnus-summary-prev-page})\e$B!#\e(B
@item RET
@kindex RET \e$B!J35N,!K\e(B
@kindex W H h \e$B!J35N,!K\e(B
@findex gnus-article-highlight-headers
@vindex gnus-header-face-alist
-\e$B%X%C%@!<$r%O%$%i%$%H$7$^$9\e(B (@code{gnus-article-highlight-headers})\e$B!#%O%$%i\e(B
-\e$B%$%H$OJQ?t\e(B @code{gnus-header-face-alist} \e$B$K$7$?$,$C$F$J$5$l!"$=$l$O$=$l$>\e(B
-\e$B$l$NMWAG$,\e(B @var{(\e$B@55,I=8=\e(B \e$BL>A0\e(B \e$BFbMF\e(B)} \e$B$H$$$&MM<0$N%j%9%H$G$9!#\e(B @var{\e$B@55,I=\e(B
-\e$B8=\e(B}\e$B$O%X%C%@!<$K9gCW$9$k@55,I=8=!"\e(B@var{\e$BL>A0\e(B}\e$B$O%X%C%@!<$NL>A0$r%O%$%i%$%H$9\e(B
-\e$B$k$N$K;H$o$l$k%U%'%$%9\e(B (face) (@pxref{FacesandFonts})\e$B!"\e(B@var{\e$BFbMF\e(B}\e$B$O%X%C%@!<\e(B
-\e$B$NCM$r%O%$%i%$%H$9$k%U%'%$%9$G$9!#:G=i$K9gCW$7$?$b$N$,;H$o$l$^$9!#\e(B@var{\e$B@5\e(B
-\e$B5,I=8=\e(B}\e$B$O\e(B @samp{^} \e$B$,IU$1$i$l$k$Y$-$G$O$J$$;v$KCm0U$7$F$/$@$5$$!=!=\e(Bgnus \e$B$,\e(B
-\e$B$=$l$rIU$12C$($^$9!#\e(B
+\e$B%X%C%@!<$r%O%$%i%$%H$7$^$9\e(B (@code{gnus-article-highlight-headers})\e$B!#%O%$\e(B
+\e$B%i%$%H$OJQ?t\e(B @code{gnus-header-face-alist} \e$B$K$7$?$,$C$F$J$5$l!"$=$l$O$=\e(B
+\e$B$l$>$l$NMWAG$,\e(B @var{(\e$B@55,I=8=\e(B \e$BL>A0\e(B \e$BFbMF\e(B)} \e$B$H$$$&MM<0$N%j%9%H$G$9!#\e(B @var
+{\e$B@55,I=8=\e(B}\e$B$O%X%C%@!<$K9gCW$9$k@55,I=8=!"\e(B@var{\e$BL>A0\e(B}\e$B$O%X%C%@!<$NL>A0$r%O%$\e(B
+\e$B%i%$%H$9$k$N$K;H$o$l$k%U%'%$%9\e(B (face) (@pxref{Faces and Fonts})\e$B!"\e(B@var{\e$BFb\e(B
+\e$BMF\e(B}\e$B$O%X%C%@!<$NCM$r%O%$%i%$%H$9$k%U%'%$%9$G$9!#:G=i$K9gCW$7$?$b$N$,;H$o\e(B
+\e$B$l$^$9!#\e(B@var{\e$B@55,I=8=\e(B}\e$B$O\e(B @samp{^} \e$B$,IU$1$i$l$k$Y$-$G$O$J$$;v$KCm0U$7$F$/\e(B
+\e$B$@$5$$!=!=\e(Bgnus \e$B$,$=$l$rIU$12C$($^$9!#\e(B
@item W H c
@kindex W H c \e$B!J35N,!K\e(B
@vindex gnus-tree-mode-line-format
\e$BLZ%b!<%I%P%C%U%!$G$N%b!<%I9T$N$?$a$N%U%)!<%^%C%HJ8;zNs$G$9\e(B (@pxref{Mode
Line Formatting})\e$B!#%G%#%U%)%k%H$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=\e(B
-\e$B$J;XDj$O\e(B @pxref{Summary Buffer ModeLine} \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+\e$B$J;XDj$O\e(B @pxref{Summary Buffer Mode Line} \e$B$r;2>H$7$F$/$@$5$$!#\e(B
@item gnus-selected-tree-face
@vindex gnus-selected-tree-face
@item
`G f' \e$B$HBG$C$F!"\e(Bmbox \e$B%U%!%$%k$+$i\e(B @code{nndoc} \e$B%0%k!<%W$r:n@.$9$k$h$&$K\e(B
-\e$BB%?J$5$l$?$H$-$K\e(B mbox \e$B%U%!%$%k$X$N%Q%9$rM?$($^$9\e(B (@pxref{Foregin
+\e$BB%?J$5$l$?$H$-$K\e(B mbox \e$B%U%!%$%k$X$N%Q%9$rM?$($^$9\e(B (@pxref{Foreign
Groups})\e$B!#\e(B
@item
@code{never} \e$B$N$I$A$i$+$G$"$k;v$,$G$-$^$9!#\e(B
\e$B4|8B@Z$l4|4V$rA*BrE*$KJQ99$9$k$?$a$K%0%k!<%W%Q%i%a!<%?\e(B
-@code{expiry-wait} \e$B$r;H$&;v$b$G$-$^$9\e(B (@pxref{Groups Parameters})\e$B!#\e(B
+@code{expiry-wait} \e$B$r;H$&;v$b$G$-$^$9\e(B (@pxref{Group Parameters})\e$B!#\e(B
@vindex nnmail-keep-last-article
@code{nnmail-keep-last-article} \e$B$,\e(B @code{nil} \e$B$G$J$$$H!"\e(Bgnus \e$B$O%a!<%k%K%e!<\e(B
@kindex J S (Agent Group)
@findex gnus-group-send-drafts
\e$B2<=q$-%0%k!<%W$K$"$kAw?.2DG=$J%a%C%;!<%8$rA4$FAw?.$9$k\e(B
-(@code{gnus-agent-fetch-session})\e$B!#\e(B @xref{Drafts}
+(@code{gnus-group-send-session})\e$B!#\e(B @xref{Drafts}
@item J a
@kindex J a (Agent Group)
\e$BL>$OC1=c$J%9%3%"IU$1$r$9$k$H$-$N$b$N$HF1$8$G!"9gCW$N7?$bF1$8$G$9!#\e(B
-@node Advanced Scring Examples
+@node Advanced Scoring Examples
@subsection \e$B>e5i%9%3%"IU$1$NNc\e(B
Lars \e$B$,\e(B Gnus \e$B$K4X$7$FOC$r$7$F$$$k$H$-$KH`$K$h$C$F=q$+$l$?5-;v$N%9%3%"$r\e(B
\e$BA^F~$5$l$^$9!#4X?t$O0UL#$NL5$$CM$H6&$K8F$P$l$k;v$b$"$j$($^$9$N$G!"$=$l$N\e(B
\e$BBP:v$r$9$k$Y$-$G$9!#\e(B
-\e$B?7$7$$4X?t$rDj5A$7$J$$$G$b!"%A%k%@=$>~;R\e(B (@pxref{Advanced Formattin}) \e$B$r\e(B
-\e$B;H$C$F$[$H$s$IF1$8;v$rC#@.$9$k;v$,$G$-$^$9!#Nc$G$9\e(B: @samp{%~(form
+\e$B?7$7$$4X?t$rDj5A$7$J$$$G$b!"%A%k%@=$>~;R\e(B (@pxref{Advanced Formatting})
+\e$B$r;H$C$F$[$H$s$IF1$8;v$rC#@.$9$k;v$,$G$-$^$9!#Nc$G$9\e(B: @samp{%~(form
(count-lines (point-min) (point)))@@}\e$B!#$3$3$GM?$($i$l$?<0$OI>2A$5$l$F!"\e(B
\e$B8=:_$N9T?t$r$b$?$i$7!"$=$l$+$iA^F~$5$l$^$9!#\e(B
(gnus-demon-scan-pgp 60 t)
@end lisp
-\e$B$3$N\e(B @var{\e$B;~4V\e(B} \e$B%Q%i%a!<%?$H$=$7$F\e(B @var{\e$B6uE>\e(B} \e$B%Q%i%a!<%?$O!"4qL/\e(B
-\e$B$G$+$DAG@2$i$7$$J}K!$G0l=o$KF0:n$7$^$9!#4pK\E*$K$O!"\e(B@var {\e$B6uE>\e(B}
-\e$B$,\e(B @code{nil} \e$B$N;~$K$O$3$N4X?t$O\e(B @var{\e$B;~4V\e(B} \e$BJ,Kh$K8F$S=P$5$l$^$9!#\e(B
+\e$B$3$N\e(B @var{\e$B;~4V\e(B} \e$B%Q%i%a!<%?$H$=$7$F\e(B @var{\e$B6uE>\e(B} \e$B%Q%i%a!<%?$O!"4qL/$G$+$DAG\e(B
+\e$B@2$i$7$$J}K!$G0l=o$KF0:n$7$^$9!#4pK\E*$K$O!"\e(B@var{\e$B6uE>\e(B} \e$B$,\e(B @code{nil} \e$B$N\e(B
+\e$B;~$K$O$3$N4X?t$O\e(B @var{\e$B;~4V\e(B} \e$BJ,Kh$K8F$S=P$5$l$^$9!#\e(B
\e$B$b$7\e(B @var{\e$B6uE>\e(B} \e$B$,\e(B @code{t} \e$B$G$"$l$P!"$3$N4X?t$O\e(B Emacs \e$B$,2?$b$7\e(B
\e$B$F$$$J$$;~$K8B$j!"\e(B@var{\e$B;~4V\e(B} \e$BJ,8e$K8F$S=P$5$l$^$9!#0lC6\e(B Emacs \e$B$,\e(B
\e$B$^$9!#\e(B
@end table
-\e$B$3$l$iA4$F$N?M!9$N\e(B NoCeM \e$B%a%C%;!<%8$KN10U$9$kI,MW$O$"$j$^$;$s\e(B
---- \e$B8@$&$3$H$rJ9$-$?$$?M$@$1$G$$$$$s$G$9!#$^$?$=$N?M$+$i$N\e(B NoCeM
-\e$B%a%C%;!<%8A4$F$r<u$1F~$l$kI,MW$b$"$j$^$;$s!#\e(BNoCeM \e$B%a%C%;!<%8$K$O\e(B
-\e$B$=$l$>$l<oJL\e(B @dfn{type} \e$B%X%C%@!<$,$D$$$F$*$j!"$3$l$O$=$N%a%C%;!<\e(B
-\e$B%8$N87L)$JDj5A$rM?$($F$$$^$9\e(B(\e$BB?>/$O87L)$J!"DxEY$M!#$?$$$F$$$O>/\e(B
-\e$B$@$1$I\e(B)\e$B!#NI$/;H$o$l$k<oJL$K$O!"\e(B@samp{spam}\e$B!"\e(B @samp{spew}\e$B!"\e(B
-@samp{mmf}\e$B!"\e(B@samp{binary}\e$B!"\e(B@samp{troll} \e$B$,$"$j$^$9!#$3$l$r;XDj$9\e(B
-\e$B$k$K$O!"%j%9%H$NCf$G\e(B @var{(\e$BH/9T<T\e(B \e$B>r7o\e(B ...)} \e$BMWAG$r;H$&I,MW$,$"\e(B
-\e$B$j$^$9!#3F>r7o$OJ8;zNs\e(B (\e$B;H$$$?$$<oJL$K%^%C%A$9$k@55,I=8=\e(B) \e$B$+!"$^\e(B
-\e$B$?$O\e(B @code {(not \e$BJ8;zNs\e(B)} \e$B$H$$$&7A<0$N%j%9%H$G$9!#$3$N>l9g$O\e(B
-@var{\e$BJ8;zNs\e(B} \e$B$O;H$$$?$/$J$$<oJL$K%^%C%A$9$k@55,I=8=$G$9!#\e(B
+\e$B$3$l$iA4$F$N?M!9$N\e(B NoCeM \e$B%a%C%;!<%8$KN10U$9$kI,MW$O$"$j$^$;$s\e(B --- \e$B8@$&$3\e(B
+\e$B$H$rJ9$-$?$$?M$@$1$G$$$$$s$G$9!#$^$?$=$N?M$+$i$N\e(B NoCeM\e$B%a%C%;!<%8A4$F$r<u\e(B
+\e$B$1F~$l$kI,MW$b$"$j$^$;$s!#\e(BNoCeM \e$B%a%C%;!<%8$K$O$=$l$>$l<oJL\e(B @dfn{type} \e$B%X%C\e(B
+\e$B%@!<$,$D$$$F$*$j!"$3$l$O$=$N%a%C%;!<%8$N87L)$JDj5A$rM?$($F$$$^$9\e(B(\e$BB?>/$O\e(B
+\e$B87L)$J!"DxEY$M!#$?$$$F$$$O>/$@$1$I\e(B)\e$B!#NI$/;H$o$l$k<oJL$K$O!"\e(B@samp{spam}\e$B!"\e(B
+@samp{spew}\e$B!"\e(B @samp{mmf}\e$B!"\e(B@samp{binary}\e$B!"\e(B@samp{troll} \e$B$,$"$j$^$9!#$3$l$r\e(B
+\e$B;XDj$9$k$K$O!"%j%9%H$NCf$G\e(B @var{(\e$BH/9T<T\e(B \e$B>r7o\e(B ...)} \e$BMWAG$r;H$&I,MW$,$"$j\e(B
+\e$B$^$9!#3F>r7o$OJ8;zNs\e(B (\e$B;H$$$?$$<oJL$K%^%C%A$9$k@55,I=8=\e(B) \e$B$+!"$^$?$O\e(B
+@code{(not \e$BJ8;zNs\e(B)} \e$B$H$$$&7A<0$N%j%9%H$G$9!#$3$N>l9g$O\e(B @var{\e$BJ8;zNs\e(B} \e$B$O;H\e(B
+\e$B$$$?$/$J$$<oJL$K%^%C%A$9$k@55,I=8=$G$9!#\e(B
\e$BNc$($P!"\e(BChris Lewis \e$B$+$i$N\e(B NoCeM \e$B%a%C%;!<%8$G!"\e(B@samp{troll} \e$B%a%C\e(B
\e$B%;!<%80J30$NA4$F$rM_$7$$>l9g$K$O!"\e(B
Andreas Jaeger,
Randell Jesup,
Fred Johansen,
+Gareth Jones,
Simon Josefsson,
Greg Klanderman,
Karl Kleinpaste,
Peter Skov Knudsen,
Shuhei Kobayashi, @c Kobayashi
+Koseki Yoshinori, @c Koseki
Thor Kristoffersen,
Jens Lautenbacher,
+Martin Larose,
Seokchan Lee, @c Lee
Carsten Leonhardt,
James LewisMoss,
Stephen Peters,
Jens-Ulrik Holger Petersen,
Ulrich Pfeifer,
+Matt Pharr,
John McClary Prevost,
+Bill Pringlemeir,
Mike Pullen,
Jim Radford,
Colin Rafferty,
Chuck Thompson,
Philippe Troin,
James Troup,
+Trung Tran-Duc,
Aaron M. Ucko,
Aki Vehtari,
Didier Verna,
@item
\e$B%0%k!<%W$rB?$/$N4p=`$K=>$C$FJB$SBX$($G$-$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Soring Groups})\e$B!#\e(B
+(@pxref{Sorting Groups})\e$B!#\e(B
@item
\e$B%"%I%l%9$N%j%9%H$H4|8B@Z$l>C5n$N;~4V$r@_Dj$9$k?7$7$$%0%k!<%W%Q%i%a!<%?$,\e(B
@item
@kbd{*} \e$BL?Na$K$h$C$F!"5-;v$r1JB3$K$9$k;v$,$G$-$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Presistent Articles})\e$B!#\e(B
+(@pxref{Persistent Articles})\e$B!#\e(B
@item
\e$B5-;v$NMWAG$r1#$9A4$F$N4X?t$O@Z$jBX$(4X?t$K$J$j$^$7$?!#\e(B
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Semi-gnus 6.8.13 Manual
+@settitle Semi-gnus 6.8.16 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Semi-gnus 6.8.13 Manual
+@title Semi-gnus 6.8.16 Manual
@author by Lars Magne Ingebrigtsen
@page
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.8.13.
+This manual corresponds to Semi-gnus 6.8.16.
@end ifinfo
return value will be used), a variable (its value will be used) or a
list (it will be @code{eval}ed and the return value will be used).
+If you wish to check whether the message you are about to compose is
+meant to be a news article or a mail message, you can check the values
+of the two dynamically bound variables @code{message-this-is-news} and
+@code{message-this-is-mail}.
+
+@vindex message-this-is-mail
+@vindex message-this-is-news
+
So here's a new example:
@lisp
(signature my-funny-signature-randomizer))
((equal (system-name) "gnarly")
(signature my-quote-randomizer))
+ (message-this-is-new
+ (signature my-news-signature))
(posting-from-work-p
(signature-file "~/.work-signature")
(address "user@@bar.foo")
@item nnfolder-get-new-mail
@vindex nnfolder-get-new-mail
If non-@code{nil}, @code{nnfolder} will read incoming mail.
+
+@item nnfolder-save-buffer-hook
+@vindex nnfolder-save-buffer-hook
+@cindex backup files
+Hook run before saving the folders. Note that Emacs does the normal
+backup renaming of files even with the @code{nnfolder} buffers. If you
+wish to switch this off, you could say something like the following in
+your @file{.emacs} file:
+
+@lisp
+(defun turn-off-backup ()
+ (set (make-local-variable 'backup-inhibited) t))
+
+(add-hook 'nnfolder-save-buffer-hook 'turn-off-backup)
+@end lisp
+
@end table
+
@findex nnfolder-generate-active-file
@kindex M-x nnfolder-generate-active-file
If you have lots of @code{nnfolder}-like files you'd like to read with
Or you can just tap @code{M-g} on the virtual group every time before
you enter it---it'll have much the same effect.
+@code{nnvirtual} can have both mail and news groups as component groups.
+When responding to articles in @code{nnvirtual} groups, @code{nnvirtual}
+has to ask the backend of the component group the article comes from
+whether it is a news or mail backend. However, when you do a @kbd{^},
+there is typically no sure way for the component backend to know this,
+and in that case @code{nnvirtual} tells Gnus that the article came from a
+not-news backend. (Just to be on the safe side.)
+
+@kbd{C-c C-t} in the message buffer will insert the @code{Newsgroups}
+line from the article you respond to in these cases.
+
+
@node Kibozed Groups
@subsection Kibozed Groups
* 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.
+* Quassia Gnus:: Two times two is four, or Gnus 5.6/5.7.
@end menu
These lists are, of course, just @emph{short} overviews of the
lists.
@item
+Introduce nnmail-home-directory.
+
+@item
+gnus-fetch-group and friends should exit Gnus when the user
+exits the group.
+
+@item
Solve the halting problem.
@c TODO
\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Message 5.6.33 Manual
+@settitle Message 5.6.41 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Message 5.6.33 Manual
+@title Message 5.6.41 Manual
@author by Lars Magne Ingebrigtsen
@page
* Key Index:: List of Message mode keys.
@end menu
-This manual corresponds to Message 5.6.33. Message is distributed with
+This manual corresponds to Message 5.6.41. Message is distributed with
the Gnus distribution bearing the same version number as this manual
has.