+Sun Feb 8 18:13:58 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.23 is released.
+
+Sun Feb 8 17:20:40 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-group.el (gnus-update-group-mark-positions): Bind `topic'.
+
+ * message.el (message-expand-group): Added doc string.
+
+ * nntp.el (nntp-wait-for): Don't change limit until after
+ accepting output.
+
+Sun Feb 8 16:44:36 1998 Richard Hoskins <rmh@interlaced.net>
+
+ * message.el (message-kill-to-signature): Don't kill the
+ delimiter.
+
+Sun Feb 8 16:15:33 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-summary-prepared-hook): New hook.
+ (gnus-summary-read-group-1): Use it.
+
+ * message.el (message-cite-original-without-signature): New
+ function.
+ (message-cite-function): Added to custom.
+
+1998-01-13 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * gnus/message.el (message-cite-original): Don't quote signature.
+
+Sun Feb 8 15:50:20 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-group.el (gnus-group-unsubscribe-group): Protest against
+ empty group names.
+
+Mon Feb 2 18:56:22 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-draft.el (gnus-draft-setup): Associate with drafts group.
+
+ * message.el (message-header-format-alist): Fill references.
+
+ * gnus-agent.el (gnus-category-read): Changed default.
+ (gnus-agent-handle-level): New variable.
+ (gnus-agent-fetch-session): Use it.
+
+ * gnus-art.el (article-strip-all-blank-lines): New command and
+ keystroke.
+
+Sun Feb 1 18:00:54 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-msg.el (gnus-inews-reject-message): Removed function.
+ (gnus-sent-message-ids-file): Removed.
+ (gnus-sent-message-ids-length): Ditto.
+
+ * gnus-xmas.el (gnus-xmas-summary-set-display-table): Ditto.
+
+ * gnus-sum.el (gnus-simplify-subject-fuzzy): Respect
+ `gnus-simplify-ignored-prefixes'.
+ (gnus-summary-set-display-table): Keep TAB.
+
+Thu Jan 15 22:47:38 1998 <Use-Author-Address-Header@[127.1]>
+
+ * gnus-art.el (gnus-request-article-this-buffer): Put it into the
+ backlog.
+
+Mon Jan 12 23:30:59 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-get-newsgroup-headers): Use the longest ID.
+
+ * nnheader.el (nnheader-parse-head): Ditto.
+
+Thu Jan 8 09:47:18 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-start.el (gnus-1): Use gnus-alive-p.
+
+Tue Jan 6 11:53:09 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-art.el (gnus-article-prepare): Bind coding systems.
+
Tue Jan 6 07:45:39 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Quassia Gnus v0.22 is released.
:group 'gnus-agent
:type 'hook)
+(defcustom gnus-agent-handle-level gnus-level-subscribed
+ "Groups on levels higher than this variable will be ignored by the Agent."
+ :group 'gnus-agent
+ :type 'integer)
+
;;; Internal variables
(defvar gnus-agent-history-buffers nil)
(gnus-close-server (pop methods)))))
;;;###autoload
-(defun gnus-unplugged ()
+(defun gnus-ungplugged ()
"Start Gnus unplugged."
(interactive)
(setq gnus-plugged nil)
(save-excursion
(while methods
(setq gnus-command-method (car methods)
- groups (gnus-groups-from-server (pop methods)))
+ groups (nreverse (gnus-groups-from-server (pop methods))))
(gnus-agent-with-fetch
(while (setq group (pop groups))
- (gnus-agent-fetch-group-1 group gnus-command-method))))
+ (when (<= (gnus-group-level group) gnus-agent-handle-level)
+ (gnus-agent-fetch-group-1 group gnus-command-method)))))
(gnus-message 6 "Finished fetching articles into the Gnus agent"))))
(defun gnus-agent-fetch-group-1 (group method)
(setq gnus-category-alist
(or (gnus-agent-read-file
(nnheader-concat gnus-agent-directory "lib/categories"))
- (list (list 'default 'true nil nil)))))
+ (list (list 'default 'short nil nil)))))
(defun gnus-category-write ()
"Write the category alist."
(article-remove-trailing-blank-lines)
(article-strip-multiple-blank-lines))
+(defun article-strip-all-blank-lines ()
+ "Strip all blank lines."
+ (interactive)
+ (save-excursion
+ (let ((inhibit-point-motion-hooks t)
+ buffer-read-only)
+ (goto-char (point-min))
+ (search-forward "\n\n" nil t)
+ (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 ()
article-strip-multiple-blank-lines
article-strip-leading-space
article-strip-blank-lines
+ article-strip-all-blank-lines
article-date-local
article-date-original
article-date-ut
(when gnus-show-mime
(if (or (not gnus-strict-mime)
(gnus-fetch-field "Mime-Version"))
- (funcall gnus-show-mime-method)
+ (let ((coding-system-for-write 'binary)
+ (coding-system-for-read 'binary))
+ (funcall gnus-show-mime-method))
(funcall gnus-decode-encoded-word-method)))
;; Perform the article display hooks.
(run-hooks 'gnus-article-display-hook))
;; Check asynchronous pre-fetch.
((gnus-async-request-fetched-article group article (current-buffer))
(gnus-async-prefetch-next group article gnus-summary-buffer)
+ (when (and (numberp article) gnus-keep-backlog)
+ (gnus-backlog-enter-article group article (current-buffer)))
'article)
;; Check the cache.
((and gnus-use-cache
(search-forward "\n\n")
(forward-char -1)
(insert mail-header-separator)
- (forward-line 1))))))
+ (forward-line 1)
+ (message-set-auto-save-file-name))))))
(defun gnus-draft-article-sendable-p (article)
"Say whether ARTICLE is sendable."
(save-excursion
(let ((gnus-process-mark 128)
(gnus-group-marked '("dummy.group"))
- (gnus-active-hashtb (make-vector 10 0)))
+ (gnus-active-hashtb (make-vector 10 0))
+ (topic ""))
(gnus-set-active "dummy.group" '(0 . 0))
(gnus-set-work-buffer)
(gnus-group-insert-group-line "dummy.group" 0 nil 0 nil)
'gnus-group-history)))
(let ((newsrc (gnus-gethash group gnus-newsrc-hashtb)))
(cond
- ((string-match "^[ \t]$" group)
+ ((string-match "^[ \t]*$" group)
(error "Empty group name"))
(newsrc
;; Toggle subscription flag.
(defvar gnus-add-to-list nil
"*If non-nil, add a `to-list' parameter automatically.")
-(defvar gnus-sent-message-ids-file
- (nnheader-concat gnus-directory "Sent-Message-IDs")
- "File where Gnus saves a cache of sent message ids.")
-
-(defvar gnus-sent-message-ids-length 1000
- "The number of sent Message-IDs to save.")
-
(defvar gnus-crosspost-complaint
"Hi,
;; Use the normal select method.
(t gnus-select-method))))
-;;;
-;;; Check whether the message has been sent already.
-;;;
-
-(defvar gnus-inews-sent-ids nil)
-
-(defun gnus-inews-reject-message ()
- "Check whether this message has already been sent."
- (when gnus-sent-message-ids-file
- (let ((message-id (save-restriction (message-narrow-to-headers)
- (mail-fetch-field "message-id")))
- end)
- (when message-id
- (unless gnus-inews-sent-ids
- (ignore-errors
- (load t t t)))
- (if (member message-id gnus-inews-sent-ids)
- ;; Reject this message.
- (not (gnus-yes-or-no-p
- (format "Message %s already sent. Send anyway? "
- message-id)))
- (push message-id gnus-inews-sent-ids)
- ;; Chop off the last Message-IDs.
- (when (setq end (nthcdr gnus-sent-message-ids-length
- gnus-inews-sent-ids))
- (setcdr end nil))
- (nnheader-temp-write gnus-sent-message-ids-file
- (gnus-prin1 `(setq gnus-inews-sent-ids ',gnus-inews-sent-ids)))
- nil)))))
-
\f
;; Dummy to avoid byte-compile warning.
(insert " ")))
(insert "\n")))))))
-(gnus-add-shutdown 'gnus-inews-close 'gnus)
-
-(defun gnus-inews-close ()
- (setq gnus-inews-sent-ids nil))
-
;;; Allow redefinition of functions.
(gnus-ems-redefine)
prompt the user for the name of an NNTP server to use."
(interactive "P")
- (if (and (get-buffer gnus-group-buffer)
- (save-excursion
- (set-buffer gnus-group-buffer)
- (eq major-mode 'gnus-group-mode)))
+ (if (gnus-alive-p)
(progn
(switch-to-buffer gnus-group-buffer)
(gnus-group-get-new-news
:group 'gnus-summary-various
:type 'hook)
+(defcustom gnus-summary-prepared-hook nil
+ "*A hook called as the last thing after the summary buffer has been generated."
+ :group 'gnus-summary-various
+ :type 'hook)
+
(defcustom gnus-summary-generate-hook nil
"*A hook run just before generating the summary buffer.
This hook is commonly used to customize threading variables and the
(save-excursion
(gnus-set-work-buffer)
(let ((case-fold-search t))
+ ;; Remove uninteresting prefixes.
+ (when (and gnus-simplify-ignored-prefixes
+ (string-match gnus-simplify-ignored-prefixes subject))
+ (setq subject (substring subject (match-end 0))))
(insert subject)
(inline (gnus-simplify-buffer-fuzzy))
(buffer-string))))
"l" gnus-article-strip-leading-blank-lines
"m" gnus-article-strip-multiple-blank-lines
"a" gnus-article-strip-blank-lines
+ "A" gnus-article-strip-all-blank-lines
"s" gnus-article-strip-leading-space)
(gnus-define-keys (gnus-summary-help-map "H" gnus-summary-mode-map)
["Multiple" gnus-article-strip-multiple-blank-lines t]
["Trailing" gnus-article-remove-trailing-blank-lines t]
["All of the above" gnus-article-strip-blank-lines t]
+ ["All" gnus-article-strip-all-blank-lines t]
["Leading space" gnus-article-strip-leading-space t])
["Overstrike" gnus-article-treat-overstrike t]
["Dumb quotes" gnus-article-treat-dumbquotes t]
;; selective display).
(aset table ?\n nil)
(aset table ?\r nil)
+ ;; We keep TAB as well.
+ (aset table ?\t nil)
;; We nix out any glyphs over 126 that are not set already.
(let ((i 256))
(while (>= (setq i (1- i)) 127)
(select-window owin)))
;; Mark this buffer as "prepared".
(setq gnus-newsgroup-prepared t)
+ (run-hooks 'gnus-summary-prepared-hook)
t)))))
(defun gnus-summary-prepare ()
(if (and (search-forward "\nin-reply-to: " nil t)
(setq in-reply-to (nnheader-header-value))
(string-match "<[^>]+>" in-reply-to))
- (setq ref (substring in-reply-to (match-beginning 0)
- (match-end 0)))
+ (let (ref2)
+ (setq ref (substring in-reply-to (match-beginning 0)
+ (match-end 0)))
+ (while (string-match "<[^>]+>" in-reply-to (match-end 0))
+ (setq ref2 (substring in-reply-to (match-beginning 0)
+ (match-end 0)))
+ (when (> (length ref2) (length ref))
+ (setq ref ref2))))
(setq ref nil))))
;; Chars.
0
;; selective display).
(aset table ?\n nil)
(aset table ?\r nil)
+ ;; We keep TAB as well.
+ (aset table ?\t nil)
;; We nix out any glyphs over 126 below ctl-arrow.
(let ((i (if (integerp ctl-arrow) ctl-arrow 160)))
(while (>= (setq i (1- i)) 127)
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "0.22"
+(defconst gnus-version-number "0.23"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Quassia Gnus v%s" gnus-version-number)
mail-citation-hook)
mail-citation-hook
'message-cite-original)
- "*Function for citing an original message."
+ "*Function for citing an original message.
+Pre-defined functions include `message-cite-original' and
+`message-cite-original-without-signature'."
:type '(radio (function-item message-cite-original)
+ (function-item message-cite-original-without-signature)
(function-item sc-cite-original)
(function :tag "Other"))
:group 'message-insertion)
(Lines)
(Expires)
(Message-ID)
- (References)
+ (References . message-fill-header)
(X-Mailer)
(X-Newsreader))
"Alist used for formatting headers.")
(interactive)
(let ((point (point)))
(message-goto-signature)
- (kill-region point (point))))
+ (forward-line -2)
+ (kill-region point (point))
+ (unless (bolp)
+ (insert "\n"))))
(defun message-newline-and-reformat ()
"Insert four newlines, and then reformat if inside quoted text."
(unless modified
(setq message-checksum (cons (message-checksum) (buffer-size)))))))
+(defun message-cite-original-without-signature ()
+ "Cite function in the standard Message manner."
+ (let ((start (point))
+ (end (mark t))
+ (functions
+ (when message-indent-citation-function
+ (if (listp message-indent-citation-function)
+ message-indent-citation-function
+ (list message-indent-citation-function)))))
+ (goto-char end)
+ (when (re-search-backward "^-- $" start t)
+ (delete-region (point) end))
+ (goto-char start)
+ (while functions
+ (funcall (pop functions)))
+ (when message-citation-line-function
+ (unless (bolp)
+ (insert "\n"))
+ (funcall message-citation-line-function))))
+
(defun message-cite-original ()
"Cite function in the standard Message manner."
(let ((start (point))
(defvar gnus-active-hashtb)
(defun message-expand-group ()
- (let* ((b (save-excursion
+ "Expand the group name under point." (let* ((b (save-excursion
(save-restriction
(narrow-to-region
(save-excursion
(let ((case-fold-search t)
(cur (current-buffer))
(buffer-read-only nil)
- in-reply-to lines p)
+ in-reply-to lines p ref)
(goto-char (point-min))
(when naked
(insert "\n"))
(if (and (search-forward "\nin-reply-to: " nil t)
(setq in-reply-to (nnheader-header-value))
(string-match "<[^>]+>" in-reply-to))
- (substring in-reply-to (match-beginning 0)
- (match-end 0))
+ (let (ref2)
+ (setq ref (substring in-reply-to (match-beginning 0)
+ (match-end 0)))
+ (while (string-match "<[^>]+>" in-reply-to (match-end 0))
+ (setq ref2 (substring in-reply-to (match-beginning 0)
+ (match-end 0)))
+ (when (> (length ref2) (length ref))
+ (setq ref ref2))))
"")))
;; Chars.
0
(goto-char (point-max))
(let ((limit (point-min)))
(while (not (re-search-backward wait-for limit t))
+ (nntp-accept-process-output process)
;; We assume that whatever we wait for is less than 1000
;; characters long.
(setq limit (max (- (point-max) 1000) (point-min)))
- (nntp-accept-process-output process)
(goto-char (point-max))))
(nntp-decode-text (not decode))
(unless discard
+Sun Feb 8 16:28:35 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Newest Features): Addition.
+
+Mon Feb 2 19:21:43 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Agent Variables): Addition.
+
+Sun Feb 1 18:08:45 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Using MIME): Addition.
+
Tue Jan 6 07:22:41 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
* gnus.texi (Batching Agents): New.
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Quassia Gnus 0.22 Manual
+@settitle Quassia Gnus 0.23 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Quassia Gnus 0.22 Manual
+@title Quassia Gnus 0.23 Manual
@author by Lars Magne Ingebrigtsen
@page
spool or your mbox file. All at the same time, if you want to push your
luck.
-This manual corresponds to Quassia Gnus 0.22.
+This manual corresponds to Quassia Gnus 0.23.
@end ifinfo
generated. It may be used to modify the buffer in some strange,
unnatural way.
+@item gnus-group-prepared-hook
+@vindex gnus-group-prepare-hook
+is called as the very last thing after the group buffer has been
+generated. It may be used to move point around, for instance.
+
@item gnus-permanently-visible-groups
@vindex gnus-permanently-visible-groups
Groups matching this regexp will always be listed in the group buffer,
Do all the three commands above
(@code{gnus-article-strip-blank-lines}).
+@item W E A
+@kindex W E A (Summary)
+@findex gnus-article-strip-all-blank-lines
+Remove all blank lines
+(@code{gnus-article-strip-all-blank-lines}).
+
@item W E s
@kindex W E s (Summary)
@findex gnus-article-strip-leading-space
@findex metamail-buffer
Gnus handles @sc{mime} by pushing the articles through
@code{gnus-show-mime-method}, which is @code{metamail-buffer} by
-default. Set @code{gnus-show-mime} to @code{t} if you want to use
+default. This function calls the external @code{metamail} program to
+actually do the work. One common problem with this program is that is
+thinks that it can't display 8-bit things in the Emacs buffer. To tell
+it the truth, put something like the following in your
+@file{.bash_profile} file. (You do use @code{bash}, don't you?)
+
+@example
+export MM_CHARSET="iso-8859-1"
+@end example
+
+For more information on @code{metamail}, see its manual page.
+
+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
non-@code{nil}, the @sc{mime} method will only be used if there are
@sc{mime} headers in the article. If you have @code{gnus-show-mime}
Where the Gnus Agent will store its files. The default is
@file{~/News/agent/}.
+@item gnus-agent-handle-level
+@vindex gnus-agent-handle-level
+Groups on levels (@pxref{Group Levels}) higher than this variable will
+be ignored by the Agent. The default is @code{gnus-level-subscribed},
+which means that only subscribed group will be considered by the Agent
+by default.
+
@item gnus-agent-plugged-hook
@vindex gnus-agent-plugged-hook
Hook run when connecting to the network.
One command to edit the original version if an article, and one to edit
the displayed version.
+@item
+@kbd{T v} -- make all process-marked articles the children of the
+current article.
+
+@item
+Solve the halting problem.
+
@c TODO
@end itemize
-And much, much, much more. There is more to come than has already been
-implemented. (But that's always true, isn't it?)
-
@iftex
@page
\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Message 0.22 Manual
+@settitle Message 0.23 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Message 0.22 Manual
+@title Message 0.23 Manual
@author by Lars Magne Ingebrigtsen
@page
* Key Index:: List of Message mode keys.
@end menu
-This manual corresponds to Message 0.22. Message is distributed with
+This manual corresponds to Message 0.23. Message is distributed with
the Gnus distribution bearing the same version number as this manual
has.
@vindex message-cite-function
@findex message-cite-original
@findex sc-cite-original
+@findex message-cite-original-without-signature
@cindex Supercite
Function for citing an original message. The default is
@code{message-cite-original}, which simply inserts the original message
-and prepends @samp{> } to each line. You can also set it to
-@code{sc-cite-original} to use Supercite.
+and prepends @samp{> } to each line.
+@code{message-cite-original-without-signature} does the same, but elides
+the signature. You can also set it to @code{sc-cite-original} to use
+Supercite.
@item message-indent-citation-function
@vindex message-indent-citation-function