+1998-06-26 MORIOKA Tomohiko <morioka@jaist.ac.jp>
+
+ * lisp/gnus.el (gnus-version-number): Update to 6.7.3.
+
+ * lisp/gnus-sum.el (gnus-summary-move-article): Use
+ `gnus-request-article-this-buffer'.
+ (gnus-request-partial-message): Likewise.
+
+ * lisp/gnus-art.el (gnus-article-prepare): Use
+ `gnus-request-article-this-buffer'.
+ (gnus-request-article-this-buffer): Renamed from
+ `gnus-request-original-article'; abolish conventional
+ implementation.
+ - Abolish unused setting for `mime-view-show-summary-method'.
+
+1998-06-26 MORIOKA Tomohiko <morioka@jaist.ac.jp>
+
+ * readme, texi/ChangeLog, texi/gnus.texi, texi/message.texi,
+ lisp/ChangeLog, lisp/gnus.el, lisp/nnmail.el, lisp/nnheader.el,
+ lisp/nngateway.el, lisp/nnfolder.el, lisp/nnagent.el,
+ lisp/message.el, lisp/gnus-sum.el, lisp/gnus-score.el,
+ lisp/gnus-salt.el, lisp/gnus-msg.el, lisp/gnus-cus.el,
+ lisp/gnus-cache.el, lisp/gnus-art.el: Sync up with gnus-5_6_15.
+
+1998-06-24 MORIOKA Tomohiko <morioka@jaist.ac.jp>
+
+ * texi/gnus.texi, texi/message.texi, texi/ChangeLog: Sync up with
+ Gnus 5.6.13.
+
+1998-06-14 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+
+ * Sync up with Gnus 5.6.13.
+
+1998-06-24 MORIOKA Tomohiko <morioka@jaist.ac.jp>
+
+ * lisp/gnus-art.el (gnus-article-display-mime-message): Don't
+ `save-excursion'.
+ (gnus-article-prepare): Use `mime-fetch-field' instead of
+ `mime-entity-fetch-field'.
+
+1998-06-19 MORIOKA Tomohiko <morioka@jaist.ac.jp>
+
+ * lisp/gnus-art.el (gnus-article-display-mime-message): Use
+ `mime-display-message' instead of `mime-view-buffer'.
+ (gnus-article-display-traditional-message): Set
+ `gnus-article-buffer'.
+ (gnus-article-display-message-with-encoded-word): Modify for
+ `gnus-article-display-traditional-message'.
+ (gnus-article-prepare): Use `mime-parse-buffer' and
+ `mime-entity-fetch-field'; don't set gnus-article-buffer.
+
+1998-06-19 MORIOKA Tomohiko <morioka@jaist.ac.jp>
+
+ * lisp/gnus-sum.el (gnus-summary-move-article): Use
+ `gnus-request-original-article' instead of
+ `gnus-request-article-this-buffer'.
+
+1998-06-19 MORIOKA Tomohiko <morioka@jaist.ac.jp>
+
+ * texi/gnus-ja.texi, texi/gnus.texi (Using MIME): Modify
+ description about new display mechanism.
+
+1998-06-19 MORIOKA Tomohiko <morioka@jaist.ac.jp>
+
+ * lisp/gnus.el (gnus-version-number): Update to 6.6.0.
+ (gnus-version): Modify for this branch.
+
+ * lisp/gnus-art.el (gnus-article-display-method-for-mime): New
+ variable; abolish `gnus-show-mime-method'.
+ (gnus-article-display-method-for-encoded-word): New variable;
+ abolish `gnus-decode-encoded-word-method'.
+ (gnus-article-display-method-for-traditional): New variable.
+ (gnus-article-display-mime-message): New function; abolish
+ `gnus-article-preview-mime-message'.
+ (gnus-article-display-traditional-message): New function.
+ (gnus-article-display-message-with-encoded-word): New function;
+ abolish `gnus-article-decode-encoded-word'.
+ (gnus-article-prepare): Change display mechanism; use
+ `gnus-request-original-article' instead of
+ `gnus-request-article-this-buffer'.
+ (gnus-request-original-article): New function.
+
+1998-06-22 MORIOKA Tomohiko <morioka@jaist.ac.jp>
+
+ * lisp/gnus.el (gnus-version-number): Update to 6.6.0.
+ (gnus-version): Modify for SEMI 1.8.
+
+ * lisp/gnus-sum.el: Modify for interface change in SEMI 1.8 about
+ automatic message/partial combining.
+
1998-06-19 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* lisp/gnus.el (gnus-version-number): Update to 6.5.0.
+Fri Jun 26 04:23:12 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.15 is released.
+
+Fri Jun 26 03:39:32 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnfolder.el (nnfolder-request-replace-article): Delete old
+ delimiter.
+
+ * gnus-msg.el (gnus-summary-reply): Use it.
+
+ * message.el (message-reply): Removed parameter.
+ (message-wide-reply): Ditto.
+
+ * gnus-msg.el (gnus-msg-treat-broken-reply-to): New function.
+
+ * gnus-art.el (gnus-check-group-server): New function.
+ (gnus-request-article-this-buffer): Don't try to waken the server
+ before needing to.
+
+Thu Jun 25 10:35:48 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-summary-delete-article): Sort the articles
+ before deleting.
+
+ * nngateway.el (nngateway-request-post): Return success.
+
+ * nnheader.el (nnheader-insert-file-contents): Bind more hooks.
+
+ * gnus-sum.el (gnus-summary-limit-to-age): Reverse logic.
+
+ * gnus-score.el (gnus-summary-score-entry): Removed interactive
+ spec.
+ ((gnus-summary-score-map "V" gnus-summary-mode-map)): Removed
+ keystroke.
+
+ * gnus-art.el (gnus-article-show-summary): Position point.
+
+ * gnus-cache.el (gnus-cache-update-article): Change group first.
+
+ * gnus.el (gnus-short-group-name): Collapse more.
+
+Thu Jun 25 08:48:06 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.14 is released.
+
+Thu Jun 25 05:13:31 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-rebuild-thread): Accept a line argument.
+ (gnus-rebuild-thread): Would skip around a lot when `P'-ing past
+ the beginning.
+
+ * gnus-msg.el (gnus-post-method): Present all known servers if
+ `C-u 0'.
+
+ * gnus-salt.el (gnus-pick-mode-map): Reinstated keymap.
+
+ * gnus-sum.el (gnus-build-sparse-threads): Put the proper date
+ in.
+
+Wed Jun 24 07:52:30 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.13 is released.
+
+Wed Jun 24 07:47:04 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-topic.el (gnus-topic-rename): Disallow "nil".
+
+Wed Jun 24 07:33:17 1998 Vladimir Alexiev <vladimir@cs.ualberta.ca>
+
+ * nnvirtual.el (nnvirtual-update-xref-header): Regexp-quote group
+ name.
+
+Wed Jun 24 06:15:27 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-build-sparse-threads): Give all the sparse
+ articles the date of the current child.
+
+ * gnus-topic.el (gnus-group-topic-parameters): Didn't compute.
+
+Wed Jun 24 03:27:44 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.12 is released.
+
+Wed Jun 10 11:06:35 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * message.el (message-mail-other-window): Bind message-this-is-mail.
+ (message-mail-other-frame): Likewise.
+ (message-news-other-window): Bind message-this-is-news.
+ (message-news-other-frame): Likewise.
+
+1998-06-09 Sam Steingold <sds@goems.com>
+
+ * gnus-uu.el (gnus-uu-default-view-rules): make sed kill ^M only
+ at the end of line.
+
+1998-06-05 Hrvoje Niksic <hniksic@srce.hr>
+
+ * nnmail.el (nnmail-get-split-group): Don't regexp-quote
+ nnmail-procmail-suffix.
+
+Wed Jun 24 03:04:05 1998 Kim-Minh Kaplan <kaplan@sky.fr>
+
+ * gnus-sum.el (gnus-build-get-header): Fix obarray.
+
+Wed Jun 24 02:49:57 1998 Castor <castor@my-dejanews.com>
+
+ * nntp.el (nntp-open-ssl-stream):
+
+Wed Jun 24 02:31:46 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-nov-parse-line): Cleaned up.
+ (gnus-build-all-threads): Put things in the wrong obarray.
+
+Wed Jun 24 01:43:26 1998 Decklin Foster <djarum@base.org>
+
+ * nngateway.el (nngateway-mail2news-header-transformation): New
+ function.
+
+Wed Jun 24 00:25:45 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * message.el (message-shorten-references): New function.
+ (message-header-format-alist): Use it.
+
+ * gnus-start.el (gnus-always-read-dribble-file): Customized.
+
+ * message.el (message-generate-new-buffers): Dox fox.
+
+Tue Jun 23 23:58:48 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-topic.el (gnus-topic-prepare-topic): Respect visible topic
+ param.
+ (gnus-topic-hierarchical-parameters): New function.
+
+1998-06-02 Didier Verna <verna@inf.enst.fr>
+
+ * gnus-picon.el (gnus-get-buffer-name): use get-buffer-create
+ instead of get-buffer
+
+Wed Jun 3 04:41:45 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnkiboze.el (nnkiboze-request-delete-group): Delete .newsrc
+ file.
+
+ * nnmail.el (nnmail-article-group): Nuke looong lines.
+
+ * gnus-art.el (gnus-button-alist): Buggy default.
+
Wed Jun 3 04:03:37 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Gnus v5.6.11 is released.
:group 'gnus-article-mime
:type 'boolean)
-(defcustom gnus-show-mime-method 'gnus-article-preview-mime-message
- "Function to process a MIME message.
+(defcustom gnus-article-display-method-for-mime
+ 'gnus-article-display-mime-message
+ "Function to display a MIME message.
The function is called from the article buffer."
:group 'gnus-article-mime
:type 'function)
-(defcustom gnus-decode-encoded-word-method 'gnus-article-decode-encoded-word
- "*Function to decode MIME encoded words.
+(defcustom gnus-article-display-method-for-encoded-word
+ 'gnus-article-display-message-with-encoded-word
+ "*Function to display a message with MIME encoded-words.
+The function is called from the article buffer."
+ :group 'gnus-article-mime
+ :type 'function)
+
+(defcustom gnus-article-display-method-for-traditional
+ 'gnus-article-display-traditional-message
+ "*Function to display a traditional message.
The function is called from the article buffer."
:group 'gnus-article-mime
:type 'function)
;;; @@ article filters
;;;
-(defun gnus-article-preview-mime-message ()
+(defun gnus-article-display-mime-message ()
+ "Article display method for MIME message."
(make-local-variable 'mime-button-mother-dispatcher)
(setq mime-button-mother-dispatcher
(function gnus-article-push-button))
(set-buffer gnus-summary-buffer)
default-mime-charset))
)
- (save-excursion
- (mime-view-buffer gnus-original-article-buffer gnus-article-buffer
- nil gnus-article-mode-map)
- ))
+ (mime-display-message mime-message-structure
+ gnus-article-buffer nil gnus-article-mode-map)
+ )
(run-hooks 'gnus-mime-article-prepare-hook)
)
-(defun gnus-article-decode-encoded-word ()
- "Header filter for gnus-article-mode."
+(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)
+ ))
+
+(defun gnus-article-display-message-with-encoded-word ()
+ "Article display method for message with encoded-words."
(let ((charset (save-excursion
(set-buffer gnus-summary-buffer)
default-mime-charset)))
- (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))
+ (gnus-article-display-traditional-message)
+ (let (buffer-read-only)
+ (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)
(unless (eq major-mode 'gnus-summary-mode)
(set-buffer gnus-summary-buffer))
(setq gnus-summary-buffer (current-buffer))
- ;; Make sure the connection to the server is alive.
- (unless (gnus-server-opened
- (gnus-find-method-for-group gnus-newsgroup-name))
- (gnus-check-server (gnus-find-method-for-group gnus-newsgroup-name))
- (gnus-request-group gnus-newsgroup-name t))
(let* ((gnus-article (if header (mail-header-number header) article))
(summary-buffer (current-buffer))
(internal-hook gnus-article-internal-prepare-hook)
result)
(save-excursion
(gnus-article-setup-buffer)
- (set-buffer gnus-article-buffer)
+ (set-buffer gnus-original-article-buffer)
;; Deactivate active regions.
(when (and (boundp 'transient-mark-mode)
transient-mark-mode)
(or all-headers gnus-show-all-headers))))
(when (or (numberp article)
(stringp article))
- ;; Hooks for getting information from the article.
- ;; This hook must be called before being narrowed.
- (let (buffer-read-only)
+ (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)
(gnus-run-hooks 'gnus-article-prepare-hook)
- ;; Decode MIME message.
- (when gnus-show-mime
- (if (or (not gnus-strict-mime)
- (gnus-fetch-field "Mime-Version"))
- (funcall gnus-show-mime-method)
- (funcall gnus-decode-encoded-word-method)))
+ ;; Display message.
+ (funcall method)
;; Perform the article display hooks.
(gnus-run-hooks 'gnus-article-display-hook))
;; Do page break.
(error "There is no summary buffer for this article buffer")
(gnus-article-set-globals)
(gnus-configure-windows 'article)
- (gnus-summary-goto-subject gnus-current-article)))
+ (gnus-summary-goto-subject gnus-current-article)
+ (gnus-summary-position-point)))
(defun gnus-article-describe-briefly ()
"Describe article mode commands briefly."
(when (gnus-visual-p 'article-highlight 'highlight)
(gnus-article-highlight-some)))
+(defun gnus-check-group-server ()
+ ;; Make sure the connection to the server is alive.
+ (unless (gnus-server-opened
+ (gnus-find-method-for-group gnus-newsgroup-name))
+ (gnus-check-server (gnus-find-method-for-group gnus-newsgroup-name))
+ (gnus-request-group gnus-newsgroup-name t)))
+
(defun gnus-request-article-this-buffer (article group)
"Get an article and insert it into this buffer."
(let (do-update-line)
(gnus-kill-all-overlays)
(setq group (or group gnus-newsgroup-name))
- ;; Open server if it has closed.
- (gnus-check-server (gnus-find-method-for-group group))
-
;; Using `gnus-request-article' directly will insert the article into
;; `nntp-server-buffer' - so we'll save some time by not having to
;; copy it from the server buffer into the article buffer.
(assq article gnus-newsgroup-reads)))
gnus-canceled-mark))
nil)
- ;; We first check `gnus-original-article-buffer'.
- ((and (get-buffer gnus-original-article-buffer)
- (numberp article)
- (save-excursion
- (set-buffer gnus-original-article-buffer)
- (and (equal (car gnus-original-article) group)
- (eq (cdr gnus-original-article) article))))
- (insert-buffer-substring gnus-original-article-buffer)
- 'article)
;; Check the backlog.
((and gnus-keep-backlog
(gnus-backlog-request-article group article (current-buffer)))
(buffer-read-only nil))
(erase-buffer)
(gnus-kill-all-overlays)
+ (gnus-check-group-server)
(when (gnus-request-article article group (current-buffer))
(when (numberp article)
(gnus-async-prefetch-next group article gnus-summary-buffer)
;; Associate this article with the current summary buffer.
(setq gnus-article-current-summary gnus-summary-buffer)
-
- ;; Take the article from the original article buffer
- ;; and place it in the buffer it's supposed to be in.
- (when (and (get-buffer gnus-article-buffer)
- (equal (buffer-name (current-buffer))
- (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-create gnus-original-article-buffer))
- (buffer-disable-undo (current-buffer))
- (setq major-mode 'gnus-original-article-mode)
- (setq buffer-read-only t)
- (gnus-add-current-to-buffer-list))
- (let (buffer-read-only)
- (erase-buffer)
- (insert-buffer-substring gnus-article-buffer))
- (setq gnus-original-article (cons group article))))
;; Update sparse articles.
(when (and do-update-line
("\\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)
+ ("mailto:\\([a-zA-Z.-@_+0-9%]+\\)" 0 t gnus-url-mailto 1)
("\\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)
-(set-alist 'mime-view-show-summary-method
- 'gnus-original-article-mode
- #'mime-preview-quitting-method-for-gnus)
-
(defun gnus-following-method (buf)
(set-buffer buf)
(message-followup)
(defun gnus-cache-update-article (group article)
"If ARTICLE is in the cache, remove it and re-enter it."
- (when (gnus-cache-possibly-remove-article article nil nil nil t)
+ (gnus-cache-change-buffer group)
+ (when (gnus-cache-possibly-remove-article article nil nil nil t)
(let ((gnus-use-cache nil))
(gnus-cache-possibly-enter-article
gnus-newsgroup-name article (gnus-summary-article-header article)
(provide 'gnus-cus)
;;; gnus-cus.el ends here
-
(push (list 'gnus-inews-add-to-address pgroup)
message-send-actions)))
(set-buffer gnus-article-copy)
- (message-wide-reply to-address
- (gnus-group-find-parameter
- gnus-newsgroup-name 'broken-reply-to))))
+ (gnus-msg-treat-broken-reply-to)
+ (message-wide-reply to-address)))
(when yank
(gnus-inews-yank-articles yank))))))
+(defun gnus-msg-treat-broken-reply-to ()
+ "Remove the Reply-to header iff broken-reply-to."
+ (when (gnus-group-find-parameter
+ gnus-newsgroup-name 'broken-reply-to)
+ (save-restriction
+ (message-narrow-to-head)
+ (message-remove-header "reply-to"))))
+
(defun gnus-post-method (arg group &optional silent)
"Return the posting method based on GROUP and ARG.
If SILENT, don't prompt the user."
gnus-post-method
(list gnus-post-method)))
gnus-secondary-select-methods
+ (mapcar 'cdr gnus-server-alist)
(list gnus-select-method)
(list group-method)))
method-alist post-methods 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."
+ "Stringified gnus version."
(interactive)
gnus-version)
(gnus-setup-message (if yank 'reply-yank 'reply)
(gnus-summary-select-article)
(set-buffer (gnus-copy-article-buffer))
- (message-reply nil wide (gnus-group-find-parameter
- gnus-newsgroup-name 'broken-reply-to))
+ (gnus-msg-treat-broken-reply-to)
+ (message-reply nil wide)
(when yank
(gnus-inews-yank-articles yank)))))
(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
- (cdr (assq variable gnus-window-to-buffer))))))
+ (let ((buf (get-buffer-create (gnus-window-to-buffer-helper
+ (cdr
+ (assq variable gnus-window-to-buffer))))))
(and buf
(buffer-name buf))))
"." 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
+ "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
))
(defun gnus-pick-make-menu-bar ()
(gnus-define-keys (gnus-summary-score-map "V" gnus-summary-mode-map)
"s" gnus-summary-set-score
- "a" gnus-summary-score-entry
"S" gnus-summary-current-score
"c" gnus-score-change-score-file
"C" gnus-score-customize
DATE is the expire date, or nil for no expire, or 'now for immediate expire.
If optional argument `PROMPT' is non-nil, allow user to edit match.
If optional argument `SILENT' is nil, show effect of score entry."
- (interactive
- (list (completing-read "Header: "
- gnus-header-index
- (lambda (x) (fboundp (nth 2 x)))
- t)
- (read-string "Match: ")
- (if (y-or-n-p "Use regexp match? ") 'r 's)
- (and current-prefix-arg
- (prefix-numeric-value current-prefix-arg))
- (cond ((not (y-or-n-p "Add to score file? "))
- 'now)
- ((y-or-n-p "Expire kill? ")
- (current-time-string))
- (t nil))))
;; Regexp is the default type.
(when (eq type t)
(setq type 'r))
:group 'gnus-newsrc
:type 'hook)
-;;; Internal variables
+(defcustom gnus-always-read-dribble-file nil
+ "Uncoditionally read the dribble file."
+ :group 'gnus-newsrc
+ :type 'boolean)
-(defvar gnus-always-read-dribble-file nil
- "Uncoditionally read the dribble file.")
+;;; Internal variables
(defvar gnus-newsrc-file-version nil)
(defvar gnus-override-subscribe-method nil)
(require 'gnus-range)
(require 'gnus-int)
(require 'gnus-undo)
-(require 'std11)
(require 'mime-view)
(autoload 'gnus-summary-limit-include-cached "gnus-cache" nil t)
(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 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
+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."
-
+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
+ ;; 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,
+ ;; 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)))
;; 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.
+ ;; 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.
(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.
+ ;; 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))
(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
+ ;; Yuk! This is a reference loop. Make the article be a
;; root article.
(progn
+ (debug)
(mail-header-set-references (car (symbol-value id-dep)) "none")
(setq ref nil))
(setq ref (gnus-parent-id (mail-header-references ref-header)))))
(defun gnus-build-sparse-threads ()
(let ((headers gnus-newsgroup-headers)
header references generation relations
- cthread subject child end pthread relation new-child)
+ cthread subject child end pthread relation 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.
(not (string= references "")))
(insert references)
(setq child (mail-header-id header)
- subject (mail-header-subject header))
- (setq generation 0)
+ subject (mail-header-subject header)
+ date (mail-header-date header)
+ generation 0)
(while (search-backward ">" nil t)
(setq end (1+ (point)))
(if (search-backward "<" nil t)
(push (list (incf generation)
child (setq child new-child)
- subject)
+ subject date)
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))
+ (mapcar
+ (lambda (relation)
+ (when (gnus-dependencies-add-header
+ (make-full-mail-header
+ gnus-reffed-article-number
+ (nth 3 relation) "" (nth 4 relation)
+ (nth 1 relation)
+ (or (nth 2 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))
(gnus-message 7 "Making sparse threads...done")))
(defun gnus-build-old-threads ()
(setq heads nil)))))
gnus-newsgroup-dependencies)))
+;; The following macros and functions were written by Felix Lee
+;; <flee@cse.psu.edu>.
+
+(defmacro gnus-nov-read-integer ()
+ '(prog1
+ (if (= (following-char) ?\t)
+ 0
+ (let ((num (ignore-errors (read buffer))))
+ (if (numberp num) num 0)))
+ (unless (eobp)
+ (search-forward "\t" eol 'move))))
+
+(defmacro gnus-nov-skip-field ()
+ '(search-forward "\t" eol 'move))
+
+(defmacro gnus-nov-field ()
+ '(buffer-substring (point) (if (gnus-nov-skip-field) (1- (point)) eol)))
+
+;; This function has to be called with point after the article number
+;; on the beginning of the line.
+(defsubst gnus-nov-parse-line (number dependencies &optional force-new)
+ (let ((eol (gnus-point-at-eol))
+ (buffer (current-buffer))
+ header)
+
+ ;; overview: [num subject from date id refs chars lines misc]
+ (unwind-protect
+ (progn
+ (narrow-to-region (point) eol)
+ (unless (eobp)
+ (forward-char))
+
+ (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
+ (gnus-nov-field) ; date
+ (or (gnus-nov-field)
+ (nnheader-generate-fake-message-id)) ; id
+ (gnus-nov-field) ; refs
+ (gnus-nov-read-integer) ; chars
+ (gnus-nov-read-integer) ; lines
+ (unless (= (following-char) ?\n)
+ (gnus-nov-field))))) ; misc
+
+ (widen))
+
+ (when gnus-alter-header-function
+ (funcall gnus-alter-header-function header))
+ (gnus-dependencies-add-header header dependencies force-new)))
+
(defun gnus-build-get-header (id)
;; 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)
+ (dependencies gnus-newsgroup-dependencies)
found header article)
(save-excursion
(set-buffer nntp-server-buffer)
(goto-char (point-min))
(while (not (eobp))
(ignore-errors
- (setq article (read (current-buffer)))
- (setq header (gnus-nov-parse-line article
- gnus-newsgroup-dependencies)))
+ (setq article (read (current-buffer))
+ header (gnus-nov-parse-line
+ article dependencies)))
(when header
(push header gnus-newsgroup-headers)
(if (memq (setq article (mail-header-number header))
(setcar thread old)
nil))))
-(defun gnus-rebuild-thread (id)
- "Rebuild the thread containing ID."
+(defun gnus-rebuild-thread (id &optional line)
+ "Rebuild the thread containing ID.
+If LINE, insert the rebuilt thread starting on line LINE."
(let ((buffer-read-only nil)
old-pos current thread data)
(if (not gnus-show-threads)
(setq thread (cons subject (gnus-sort-threads roots))))))
(let (threads)
;; We then insert this thread into the summary buffer.
+ (when line
+ (goto-char (point-min))
+ (forward-line (1- line)))
(let (gnus-newsgroup-data gnus-newsgroup-threads)
(if gnus-show-threads
(gnus-summary-prepare-threads (gnus-cut-threads (list thread)))
(setq data (nreverse gnus-newsgroup-data))
(setq threads gnus-newsgroup-threads))
;; We splice the new data into the data structure.
- (gnus-data-enter-list current data (- (point) old-pos))
- (setq gnus-newsgroup-threads (nconc threads gnus-newsgroup-threads)))))
+ ;;!!! This is kinda bogus. We assume that in LINE is non-nil,
+ ;;!!! then we want to insert at the beginning of the buffer.
+ ;;!!! That happens to be true with Gnus now, but that may
+ ;;!!! change in the future. Perhaps.
+ (gnus-data-enter-list (if line nil current) data (- (point) old-pos))
+ (setq gnus-newsgroup-threads (nconc threads gnus-newsgroup-threads))
+ (when line
+ (gnus-data-compute-positions)))))
(defun gnus-number-to-header (number)
"Return the header for article NUMBER."
(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))
+ (when (setq header
+ (gnus-dependencies-add-header
+ header dependencies force-new))
+ (push header headers))
(goto-char (point-max))
(widen))
(nreverse headers)))))
-;; The following macros and functions were written by Felix Lee
-;; <flee@cse.psu.edu>.
-
-(defmacro gnus-nov-read-integer ()
- '(prog1
- (if (= (following-char) ?\t)
- 0
- (let ((num (ignore-errors (read buffer))))
- (if (numberp num) num 0)))
- (unless (eobp)
- (search-forward "\t" eol 'move))))
-
-(defmacro gnus-nov-skip-field ()
- '(search-forward "\t" eol 'move))
-
-(defmacro gnus-nov-field ()
- '(buffer-substring (point) (if (gnus-nov-skip-field) (1- (point)) eol)))
-
-;; (defvar gnus-nov-none-counter 0)
-
-;; This function has to be called with point after the article number
-;; on the beginning of the line.
-(defun gnus-nov-parse-line (number dependencies &optional force-new)
- (let ((eol (gnus-point-at-eol))
- (buffer (current-buffer))
- header ref id id-dep ref-dep)
-
- ;; overview: [num subject from date id refs chars lines misc]
- (unwind-protect
- (progn
- (narrow-to-region (point) eol)
- (unless (eobp)
- (forward-char))
-
- (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
- (gnus-nov-field) ; date
- (or (gnus-nov-field)
- (nnheader-generate-fake-message-id)) ; id
- (gnus-nov-field) ; refs
- (gnus-nov-read-integer) ; chars
- (gnus-nov-read-integer) ; lines
- (unless (= (following-char) ?\n)
- (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)
-
- header))
-
;; Goes through the xover lines and returns a list of vectors
(defun gnus-get-newsgroup-headers-xover (sequence &optional
force-new dependencies
(mail-header-set-xref headers xref)))))))
(defun gnus-summary-insert-subject (id &optional old-header use-old-header)
- "Find article ID and insert the summary line for that article."
- (let ((header (cond ((and old-header use-old-header)
+ "Find article ID and insert the summary line for that article.
+OLD-HEADER can either be a header or a line number to insert
+the subject line on."
+ (let* ((line (and (numberp old-header) old-header))
+ (old-header (and (vectorp old-header) old-header))
+ (header (cond ((and old-header use-old-header)
old-header)
((and (numberp id)
(gnus-number-to-header id))
gnus-newsgroup-sparse))
(setq gnus-newsgroup-ancient (delq number gnus-newsgroup-ancient))
(push number gnus-newsgroup-limit)
- (gnus-rebuild-thread (mail-header-id header))
+ (gnus-rebuild-thread (mail-header-id header) line)
(gnus-summary-goto-subject number nil t))
(when (and (numberp number)
(> number 0))
;; We read in the article if we have to.
(and (not data)
force
- (gnus-summary-insert-subject article (and (vectorp force) force) t)
+ (gnus-summary-insert-subject
+ article
+ (if (or (numberp force) (vectorp force)) force)
+ t)
(setq data (gnus-data-find article)))
(goto-char b)
(if (not data)
(not unread) (not subject))
(gnus-summary-goto-article
(if backward (1- gnus-newsgroup-begin) (1+ gnus-newsgroup-end))
- nil t))
+ nil (count-lines (point-min) (point))))
;; Go to next/previous group.
(t
(unless (gnus-ephemeral-group-p gnus-newsgroup-name)
(defun gnus-summary-goto-article (article &optional all-headers force)
"Fetch ARTICLE (article number or Message-ID) and display it if it exists.
-If ALL-HEADERS is non-nil, no header lines are hidden."
+If ALL-HEADERS is non-nil, no header lines are hidden.
+If FORCE, go to the article even if it isn't displayed. If FORCE
+is a number, it is the line the article is to be displayed on."
(interactive
(list
(completing-read
(nnmail-time-since (nnmail-date-to-time date))
cutoff))
(when (if younger-p
- (not is-younger)
- is-younger)
+ is-younger
+ (not is-younger))
(push (gnus-data-number d) articles))))
(gnus-summary-limit (nreverse articles)))
(gnus-summary-position-point)))
gnus-newsgroup-name)
(error "The current newsgroup does not support article deletion"))
;; Compute the list of articles to delete.
- (let ((articles (gnus-summary-work-articles n))
+ (let ((articles (sort (copy-sequence (gnus-summary-work-articles n)) '<))
not-deleted)
(if (and gnus-novice-user
(not (gnus-yes-or-no-p
;;; @ for mime-partial
;;;
-(defun gnus-mime-partial-preview-function ()
- (gnus-summary-preview-mime-message (gnus-summary-article-number))
- )
+(defun gnus-request-partial-message ()
+ (save-excursion
+ (let ((number (gnus-summary-article-number))
+ (group gnus-newsgroup-name)
+ (mother gnus-article-buffer))
+ (set-buffer (get-buffer-create " *Partial Article*"))
+ (erase-buffer)
+ (setq mime-preview-buffer mother)
+ (gnus-request-article-this-buffer number group)
+ (mime-parse-buffer)
+ )))
(autoload 'mime-combine-message/partial-pieces-automatically
"mime-partial"
(major-mode . gnus-original-article-mode)
(method . mime-combine-message/partial-pieces-automatically)
(summary-buffer-exp . gnus-summary-buffer)
+ (request-partial-message-method . gnus-request-partial-message)
))
-(set-alist 'mime-view-partial-message-method-alist
- 'gnus-original-article-mode
- 'gnus-mime-partial-preview-function)
-
;;; @ end
;;;
(when result
(symbol-name result))))
-(defun gnus-current-topics ()
- "Return a list of all current topics, lowest in hierarchy first."
- (let ((topic (gnus-current-topic))
+(defun gnus-current-topics (&optional topic)
+ "Return a list of all current topics, lowest in hierarchy first.
+If TOPIC, start with that topic."
+ (let ((topic (or topic (gnus-current-topic)))
topics)
(while topic
(push topic topics)
active
(- (1+ (cdr active)) (car active))))
clevel (or (gnus-info-level info)
- (if (member group gnus-zombie-list) gnus-level-zombie gnus-level-killed))))
+ (if (member group gnus-zombie-list)
+ gnus-level-zombie gnus-level-killed))))
(and
unread ; nil means that the group is dead.
(<= clevel level)
(defun gnus-group-topic-parameters (group)
"Compute the group parameters for GROUP taking into account inheritance from topics."
- (let ((params-list (list (gnus-group-get-parameter group)))
- topics params param out)
+ (let ((params-list (copy-sequence (gnus-group-get-parameter group))))
(save-excursion
(gnus-group-goto-group group)
- (setq topics (gnus-current-topics))
- (while topics
- (push (gnus-topic-parameters (pop topics)) params-list))
- ;; We probably have lots of nil elements here, so
- ;; we remove them. Probably faster than doing this "properly".
- (setq params-list (delq nil params-list))
- ;; Now we have all the parameters, so we go through them
- ;; and do inheritance in the obvious way.
- (while (setq params (pop params-list))
- (while (setq param (pop params))
- (when (atom param)
- (setq param (cons param t)))
- ;; Override any old versions of this param.
- (setq out (delq (assq (car param) out) out))
- (push param out)))
- ;; Return the resulting parameter list.
- out)))
+ (nconc params-list
+ (gnus-topic-hierarchical-parameters (gnus-current-topic))))))
+
+(defun gnus-topic-hierarchical-parameters (topic)
+ "Return a topic list computed for TOPIC."
+ (let ((topics (gnus-current-topics topic))
+ params-list param out params)
+ (while topics
+ (push (gnus-topic-parameters (pop topics)) params-list))
+ ;; We probably have lots of nil elements here, so
+ ;; we remove them. Probably faster than doing this "properly".
+ (setq params-list (delq nil params-list))
+ ;; Now we have all the parameters, so we go through them
+ ;; and do inheritance in the obvious way.
+ (while (setq params (pop params-list))
+ (while (setq param (pop params))
+ (when (atom param)
+ (setq param (cons param t)))
+ ;; Override any old versions of this param.
+ (setq out (delq (assq (car param) out) out))
+ (push param out)))
+ ;; Return the resulting parameter list.
+ out))
;;; General utility functions
If SILENT, don't insert anything. Return the number of unread
articles in the topic and its subtopics."
(let* ((type (pop topicl))
- (entries (gnus-topic-find-groups (car type) list-level all lowest))
+ (entries (gnus-topic-find-groups
+ (car type) list-level
+ (or all
+ (cdr (assq 'visible
+ (gnus-topic-hierarchical-parameters
+ (car type)))))
+ lowest))
(visiblep (and (eq (nth 1 type) 'visible) (not silent)))
(gnus-group-indentation
(make-string (* gnus-topic-indent-level level) ? ))
;; Check whether the new name exists.
(when (gnus-topic-find-topology new-name)
(error "Topic '%s' already exists"))
+ ;; "nil" is an invalid name, for reasons I'd rather not go
+ ;; into here. Trust me.
+ (when (equal new-name "nil")
+ (error "Invalid name: %s" nil))
;; Do the renaming.
(let ((top (gnus-topic-find-topology old-name))
(entry (assoc old-name gnus-topic-alist)))
;; Default viewing action rules
(defcustom gnus-uu-default-view-rules
- '(("\\.te?xt$\\|\\.doc$\\|read.*me\\|\\.c?$\\|\\.h$\\|\\.bat$\\|\\.asm$\\|makefile" "cat %s | sed s/\r//g")
- ("\\.pas$" "cat %s | sed s/\r//g")
+ '(("\\.te?xt$\\|\\.doc$\\|read.*me\\|\\.c?$\\|\\.h$\\|\\.bat$\\|\\.asm$\\|makefile" "cat %s | sed 's/\r$//'")
+ ("\\.pas$" "cat %s | sed 's/\r$//'")
("\\.[1-9]$" "groff -mandoc -Tascii %s | sed s/\b.//g")
("\\.\\(jpe?g\\|gif\\|tiff?\\|p[pgb]m\\|xwd\\|xbm\\|pcx\\)$" "xv")
("\\.tga$" "tgatoppm %s | xv -")
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "6.5.0"
+(defconst gnus-version-number "6.7.3"
"Version number for this version of gnus.")
(defconst gnus-version
- (format "Semi-gnus %s (based on Gnus 5.6.11; for SEMI 1.7)"
+ (format "Semi-gnus %s (based on Gnus 5.6.15; for SEMI 1.8)"
gnus-version-number)
"Version string for this version of gnus.")
"Collapse GROUP name LEVELS.
Select methods are stripped and any remote host name is stripped down to
just the host name."
- (let* ((name "") (foreign "") (depth -1) (skip 1)
+ (let* ((name "")
+ (foreign "")
+ (depth 0)
+ (skip 1)
(levels (or levels
(progn
(while (string-match "\\." group skip)
:type 'boolean)
(defcustom message-generate-new-buffers t
- "*Non-nil means that a new message buffer will be created whenever `mail-setup' is called.
+ "*Non-nil means that a new message buffer will be created whenever `message-setup' is called.
If this is a function, call that function with three parameters: The type,
the to address and the group name. (Any of these may be nil.) The function
should return the new buffer name."
(Lines)
(Expires)
(Message-ID)
- (References . message-fill-references)
+ (References . message-shorten-references)
(X-Mailer)
(X-Newsreader))
"Alist used for formatting headers.")
If FIRST, only remove the first instance of the header.
Return the number of headers removed."
(goto-char (point-min))
- (let ((regexp (if is-regexp header (concat "^" header ":")))
+ (let ((regexp (if is-regexp header (concat "^" (regexp-quote header) ":")))
(number 0)
(case-fold-search t)
last)
(replace-match " " t t))
(goto-char (point-max)))))
+(defun message-shorten-references (header references)
+ "Limit REFERENCES to be shorter than 988 characters."
+ (let ((max 988)
+ (cut 4)
+ refs)
+ (nnheader-temp-write nil
+ (insert references)
+ (goto-char (point-min))
+ (while (re-search-forward "<[^>]+>" nil t)
+ (push (match-string 0) refs))
+ (setq refs (nreverse refs))
+ (while (> (length (mapconcat 'identity refs " ")) max)
+ (when (< (length refs) (1+ cut))
+ (decf cut))
+ (setcdr (nthcdr cut refs) (cddr (nthcdr cut refs)))))
+ (insert (capitalize (symbol-name header)) ": "
+ (mapconcat 'identity refs " ") "\n")))
+
(defun message-position-point ()
"Move point to where the user probably wants to find it."
(message-narrow-to-headers)
(Subject . ,(or subject ""))))))
;;;###autoload
-(defun message-reply (&optional to-address wide ignore-reply-to)
+(defun message-reply (&optional to-address wide)
"Start editing a reply to the article in the current buffer."
(interactive)
(let ((cur (current-buffer))
to (message-fetch-field "to")
cc (message-fetch-field "cc")
mct (message-fetch-field "mail-copies-to")
- reply-to (unless ignore-reply-to (message-fetch-field "reply-to"))
+ reply-to (message-fetch-field "reply-to")
references (message-fetch-field "references")
message-id (message-fetch-field "message-id" t))
;; Remove any (buggy) Re:'s that are present and make a
cur)))
;;;###autoload
-(defun message-wide-reply (&optional to-address ignore-reply-to)
+(defun message-wide-reply (&optional to-address)
"Make a \"wide\" reply to the message in the current buffer."
(interactive)
- (message-reply to-address t ignore-reply-to))
+ (message-reply to-address t))
;;;###autoload
(defun message-followup (&optional to-newsgroups)
(same-window-buffer-names nil)
(same-window-regexps nil))
(message-pop-to-buffer (message-buffer-name "mail" to)))
- (message-setup `((To . ,(or to "")) (Subject . ,(or subject "")))))
+ (let ((message-this-is-mail t))
+ (message-setup `((To . ,(or to "")) (Subject . ,(or subject ""))))))
;;;###autoload
(defun message-mail-other-frame (&optional to subject)
(same-window-buffer-names nil)
(same-window-regexps nil))
(message-pop-to-buffer (message-buffer-name "mail" to)))
- (message-setup `((To . ,(or to "")) (Subject . ,(or subject "")))))
+ (let ((message-this-is-mail t))
+ (message-setup `((To . ,(or to "")) (Subject . ,(or subject ""))))))
;;;###autoload
(defun message-news-other-window (&optional newsgroups subject)
(same-window-buffer-names nil)
(same-window-regexps nil))
(message-pop-to-buffer (message-buffer-name "news" nil newsgroups)))
- (message-setup `((Newsgroups . ,(or newsgroups ""))
- (Subject . ,(or subject "")))))
+ (let ((message-this-is-news t))
+ (message-setup `((Newsgroups . ,(or newsgroups ""))
+ (Subject . ,(or subject ""))))))
;;;###autoload
(defun message-news-other-frame (&optional newsgroups subject)
(same-window-buffer-names nil)
(same-window-regexps nil))
(message-pop-to-buffer (message-buffer-name "news" nil newsgroups)))
- (message-setup `((Newsgroups . ,(or newsgroups ""))
- (Subject . ,(or subject "")))))
+ (let ((message-this-is-news t))
+ (message-setup `((Newsgroups . ,(or newsgroups ""))
+ (Subject . ,(or subject ""))))))
;;; underline.el
(require 'nnheader)
(require 'nnoo)
-(require 'cl)
+(eval-when-compile (require 'cl))
(require 'gnus-agent)
(require 'nnml)
(require 'message)
(require 'nnmail)
(require 'nnoo)
-(require 'cl)
+(eval-when-compile (require 'cl))
(require 'gnus-util)
(nnoo-declare nnfolder)
(save-excursion
(set-buffer buffer)
(goto-char (point-min))
- (when (looking-at "X-From-Line: ")
- (replace-match "From "))
+ (if (looking-at "X-From-Line: ")
+ (replace-match "From ")
+ (unless (looking-at message-unix-mail-delimiter)
+ (insert "From nobody " (current-time-string) "\n")))
(nnfolder-normalize-buffer)
(set-buffer nnfolder-current-buffer)
(goto-char (point-min))
(if (not (nnfolder-goto-article article))
nil
- (nnfolder-delete-mail t)
+ (nnfolder-delete-mail)
(insert-buffer-substring buffer)
(nnfolder-save-buffer)
t)))
(insert mail-header-separator "\n")
(widen)
(let (message-required-mail-headers)
- (funcall message-send-mail-function))))))
+ (funcall message-send-mail-function))
+ t))))
;;; Internal functions
(insert "To: " (nnheader-replace-chars-in-string newsgroups ?. ?-)
"@" gateway "\n")))
+(defun nngateway-mail2news-header-transformation (gateway)
+ "Transform the headers for sending to a mail2news gateway."
+ (message-remove-header "to")
+ (message-remove-header "cc")
+ (goto-char (point-min))
+ (insert "To: mail2news@" gateway "\n"))
+
(nnoo-define-skeleton nngateway)
(provide 'nngateway)
(let ((format-alist nil)
(auto-mode-alist (nnheader-auto-mode-alist))
(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))
(insert-file-contents filename visit beg end replace)))
(let ((files (nconc
(nnkiboze-score-file group)
(list (nnkiboze-nov-file-name)
- (concat nnkiboze-directory
- (nnheader-translate-file-chars
- (concat group ".newsrc")))))))
+ (nnkiboze-nov-file-name ".newsrc")))))
(while files
(and (file-exists-p (car files))
(file-writable-p (car files))
(goto-char (1+ (match-beginning 0)))
(insert prefix)))))
-(defun nnkiboze-nov-file-name ()
+(defun nnkiboze-nov-file-name (&optional suffix)
(concat (file-name-as-directory nnkiboze-directory)
(nnheader-translate-file-chars
- (concat (nnkiboze-prefixed-name nnkiboze-current-group) ".nov"))))
+ (concat (nnkiboze-prefixed-name nnkiboze-current-group)
+ (or suffix ".nov")))))
(provide 'nnkiboze)
;;; Code:
-(eval-when-compile (require 'cl))
+(require 'cl)
(require 'nnheader)
(require 'timezone)
(file-name-as-directory
nnmail-procmail-directory)))
"\\([^/]*\\)"
- (regexp-quote nnmail-procmail-suffix) "$")
+ nnmail-procmail-suffix "$")
(expand-file-name file))
(let ((procmail-group (substring (expand-file-name file)
(match-beginning 1)
(goto-char (point-min))
(while (re-search-forward "\\(\r?\n[ \t]+\\)+" nil t)
(replace-match " " t t))
+ ;; Nuke pathologically long headers. Since Gnus applies
+ ;; pathologically complex regexps to the buffer, lines
+ ;; that are looong will take longer than the Universe's
+ ;; existence to process.
+ (goto-char (point-min))
+ (while (not (eobp))
+ (end-of-line)
+ (if (> (current-column) 1024)
+ (gnus-delete-line)
+ (forward-line 1)))
;; Allow washing.
+ (goto-char (point-min))
(run-hooks 'nnmail-split-hook)
(if (and (symbolp nnmail-split-methods)
(fboundp nnmail-split-methods))
(defvoo nntp-server-list-active-group 'try)
(eval-and-compile
- (autoload 'nnmail-read-passwd "nnmail"))
+ (autoload 'nnmail-read-passwd "nnmail")
+ (autoload 'open-ssl-stream "ssl"))
\f
(defun nntp-open-network-stream (buffer)
(open-network-stream "nntpd" buffer nntp-address nntp-port-number))
+(defun nntp-open-ssl-stream (buffer)
+ (let* ((ssl-program-arguments '("-connect" (concat host ":" service)))
+ (proc (open-ssl-stream "nntpd" buffer nntp-address nntp-port-number)))
+ (save-excursion
+ (set-buffer buffer)
+ (nntp-wait-for-string "^\r*20[01]")
+ (beginning-of-line)
+ (delete-region (point-min) (point))
+ proc)))
+
(defun nntp-read-server-type ()
"Find out what the name of the server we have connected to is."
;; Wait for the status string to arrive.
(replace-match "" t t))
(goto-char (point-min))
(when (re-search-forward
- (concat (gnus-group-real-name group) ":[0-9]+")
+ (concat (regexp-quote (gnus-group-real-name group)) ":[0-9]+")
nil t)
(replace-match "" t t))
(unless (= (point) (point-max))
can simply say "./configure; make" in this directory. If you are
using XEmacs, you *must* say "make EMACS=xemacs". In that case you
may also want to pull down the package of nice glyphs from
-<URL:http://www.gnus.org/~larsi/etc.tar.gz>. It should be installed
+<URL:http://www.gnus.org/etc.tar.gz>. It should be installed
into the "gnus-5.4.53/etc" directory.
Then you have to tell Emacs where Gnus is. You might put something
+Thu Jun 25 11:24:14 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Summary Score Commands): Deletia.
+
+Wed Jun 24 00:37:32 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Auto Save): Addition.
+ (Mail-To-News Gateways): Addition.
+ (NNTP): Addition.
+
Wed Jun 3 03:30:47 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
* message.texi (Message Headers): Addition.
\e$B3J9%$N5-;v$GKd$a9~$`$3$H$5$(2DG=$K$7$^$9!#\e(B
@vindex gnus-show-mime
-@vindex gnus-show-mime-method
+@vindex gnus-article-display-method-for-mime
@vindex gnus-strict-mime
-@findex metamail-buffer
-Gnus \e$B$O\e(B @code{gnus-show-mime-method} \e$B$K5-;v$r2!$7IU$1$k$3$H$G\e(B @sc{mime} \e$B$r\e(B
-\e$B07$$$^$9!#$3$l$O%G%#%U%)%k%H$G$O\e(B @code{gnus-show-mime-method} \e$B$G$9!#$3$N4X\e(B
-\e$B?t$O\e(B SEMI MIME-View \e$B%W%m%0%i%`$r8F$S=P$7$F<B:]$N=hM}$r9T$$$^$9!#\e(BSEMI
-MIME-View \e$B$K4X$9$k>\$7$$>pJs$O!"%^%K%e%"%k$r;2>H$7$F$/$@$5$$!J$^$@$J$$$1$I\e(B
-(;_;)\e$B!K!#\e(B
+@findex gnus-article-display-mime-message
+Gnus \e$B$O\e(B @code{gnus-article-display-method-for-mime} \e$B$K5-;v$r2!$7IU$1$k$3\e(B
+\e$B$H$G\e(B @sc{mime} \e$B$r07$$$^$9!#$3$N=i4|CM$O\e(B
+@code{gnus-article-display-mime-message} \e$B$G$9!#$3$N4X?t$O\e(B SEMI MIME-View
+\e$B%W%m%0%i%`$r8F$S=P$7$F<B:]$N=hM}$r9T$$$^$9!#\e(BSEMI MIME-View \e$B$K4X$9$k>\$7\e(B
+\e$B$$>pJs$O!"%^%K%e%"%k$r;2>H$7$F$/$@$5$$!J$^$@$J$$$1$I\e(B(;_;)\e$B!K!#\e(B
@sc{mime} \e$B$r>o$K;HMQ$7$?$1$l$P!"\e(B@code{gnus-show-mime} \e$B$r\e(B
@code{t} \e$B$K@_Dj$7$F$/$@$5$$!#$7$+$7!"\e(B@code{gnus-strict-mime} \e$B$,\e(B
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Semi-gnus 6.4.0 Manual
+@settitle Semi-gnus 6.7.2 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Semi-gnus 6.4.0 Manual
+@title Semi-gnus 6.7.2 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.4.0.
+This manual corresponds to Semi-gnus 6.7.2.
@end ifinfo
normally the user's home directory.) The dribble file will get the same
file permissions as the @code{.newsrc} file.
+@vindex gnus-always-read-dribble-file
+If @code{gnus-always-read-dribble-file} is non-@code{nil}, Gnus will
+read the dribble file on startup without querying the user.
+
@node The Active File
@section The Active File
methods.
@vindex gnus-activate-foreign-newsgroups
-If @code{gnus-activate-foreign-newsgroups} is a positive number, gnus
-will check all foreign groups with this level or lower at startup. This
-might take quite a while, especially if you subscribe to lots of groups
-from different @sc{nntp} servers.
+If @code{gnus-activate-foreign-newsgroups} is a positive number,
+gnus will check all foreign groups with this level or lower at startup.
+This might take quite a while, especially if you subscribe to lots of
+groups from different @sc{nntp} servers. Also @pxref{Group Levels};
+@code{gnus-activate-level} also affects activation of foreign
+newsgroups.
@node Group Parameters
other naughty stuff in innocent-looking articles.
@vindex gnus-show-mime
-@vindex gnus-show-mime-method
+@vindex gnus-article-display-method-for-mime
@vindex gnus-strict-mime
-@findex metamail-buffer
+@findex gnus-article-display-mime-message
Gnus handles @sc{mime} by pushing the articles through
-@code{gnus-show-mime-method}, which is @code{gnus-show-mime-method} by
-default. This function calls the SEMI MIME-View program to actually do
-the work. For more information on SEMI MIME-View, see its manual page
-(however it is not existed yet, sorry).
+@code{gnus-article-display-method-for-mime}, which is
+@code{gnus-article-display-mime-message} by default. This function
+calls the SEMI MIME-View program to actually do the work. For more
+information on SEMI MIME-View, see its manual page (however it is not
+existed yet, sorry).
Set @code{gnus-show-mime} to @code{t} if you want to use
@sc{mime} all the time. However, if @code{gnus-strict-mime} is
@findex nntp-open-network-stream
@item nntp-open-connection-function
@vindex nntp-open-connection-function
-This function is used to connect to the remote system. Three pre-made
-functions are @code{nntp-open-network-stream}, which is the default, and
-simply connects to some port or other on the remote system. The other
-two are @code{nntp-open-rlogin}, which does an @samp{rlogin} on the
+This function is used to connect to the remote system. Four pre-made
+functions are supplied:
+
+@table @code
+@item nntp-open-network-stream
+This is the default, and simply connects to some port or other on the
+remote system.
+
+@item nntp-open-rlogin
+Does an @samp{rlogin} on the
remote system, and then does a @samp{telnet} to the @sc{nntp} server
-available there, and @code{nntp-open-telnet}, which does a @samp{telnet}
-to the remote system and then another @samp{telnet} to get to the
-@sc{nntp} server.
+available there.
@code{nntp-open-rlogin}-related variables:
@end table
+@item nntp-open-telnet
+Does a @samp{telnet} to the remote system and then another @samp{telnet}
+to get to the @sc{nntp} server.
+
@code{nntp-open-telnet}-related variables:
@table @code
@end table
+@findex nntp-open-ssl-stream
+@item nntp-open-ssl-stream
+Opens a connection to a server over a @dfn{secure} channel. To use this
+you must have SSLay installed
+(@file{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL}, and you also need
+@file{ssl.el} (from the W3 distributeion, for instance). You then
+define a server as follows:
+
+@lisp
+;; Type `C-c C-c' after you've finished editing.
+;;
+;; "snews" is port 563 and is predefined in our /etc/services
+;;
+(nntp "snews.bar.com"
+ (nntp-open-connection-function nntp-open-ssl-stream)
+ (nntp-port-number "snews")
+ (nntp-address "snews.bar.com"))
+@end lisp
+
+@end table
+
@item nntp-end-of-line
@vindex nntp-end-of-line
String to use as end-of-line marker when talking to the @sc{nntp}
To: alt-religion-emacs@@GATEWAY
@end example
+The following pre-defined functions exist:
+
+@findex nngateway-simple-header-transformation
+@table @code
+
+@item nngateway-simple-header-transformation
+Creates a @code{To} header that looks like
+@var{newsgroup}@@@code{nngateway-address}.
+
+@findex nngateway-mail2news-header-transformation
+
+@item nngateway-mail2news-header-transformation
+Creates a @code{To} header that looks like
+@samp{mail2news}@@@code{nngateway-address}.
+
+@end table
+
+
@end table
So, to use this, simply say something like:
around with your score files behind Gnus' back and want to see the
effect you're having.
-@item V a
-@kindex V a (Summary)
-@findex gnus-summary-score-entry
-Add a new score entry, and allow specifying all elements
-(@code{gnus-summary-score-entry}).
-
@item V c
@kindex V c (Summary)
@findex gnus-score-change-score-file
* 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.15.
@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.15:
@itemize @bullet
Allow Gnus Agent scoring to use normal score files.
@item
+Rething the Agent active file thing. `M-g' doesn't update the active
+file, for instance.
+
+@item
+With dummy roots, `^' and then selecing the first article
+in any other dummy thread will make gnus highlight the
+dummy root instead of the first article.
+
+@item
Solve the halting problem.
@c TODO
\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Message 5.6.11 Manual
+@settitle Message 5.6.15 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Message 5.6.11 Manual
+@title Message 5.6.15 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.15. Message is distributed with
the Gnus distribution bearing the same version number as this manual
has.