+Mon Apr 29 02:24:14 1996 Lars Magne Ingebrigtsen <larsi@aegir.ifi.uio.no>
+
+ * message.el (message-check-news-syntax): Better `empty' check.
+ (message-checksum): Better checksums.
+
+Sun Apr 28 14:40:04 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * message.el (message-ignored-bounced-headers): New default.
+
+ * nnsoup.el (nnsoup-store-reply): Generate in mail buffer.
+
+Sun Apr 28 13:12:48 1996 Wes Hardaker <hardaker@ece.ucdavis.edu>
+
+ * gnus-picon.el: Moved variables.
+
+Sun Apr 28 11:58:51 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * nnml.el (nnml-active-number): Change group.
+
+ * gnus.el (gnus-group-sort-by-rank): Reverse logic.
+
+ * message.el (message-font-lock-keywords): New default.
+
+ * gnus-cite.el (gnus-article-hide-citation-in-followups): Didn't
+ work.
+
+ * gnus.el: Autoload gnus-article-hide-citation-in-followups.
+
+ * nnml.el (nnml-active-number): Bugged out.
+
+ * gnus-uu.el (gnus-uu-grab-articles): Override
+ `gnus-summary-display-article-function'.
+
+ * gnus.el (gnus-summary-move-article): Didn't use proper defaults
+ when copying.
+
+Sun Apr 28 11:40:44 1996 ISO-2022-JP <morioka@jaist.ac.jp>
+
+ * nnheader.el (nnheader-insert-raw-file-contents): Ner alias.
+
+Sun Apr 28 11:19:58 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.el (gnus-read-save-file-name): Use different prompt when
+ mulitple matches.
+
+Wed Apr 24 23:21:21 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.el (gnus-summary-mode): Make gnus-summary-mark-positions
+ local.
+
+ * gnus-vis.el (gnus-header-button-alist): Buttonize urls in
+ headers.
+
+ * gnus-uu.el (gnus-uu-part-number): Check more.
+
Wed Apr 24 04:04:54 1996 Lars Magne Ingebrigtsen <larsi@trym.ifi.uio.no>
+ * gnus.el: September Gnus v0.79 is released.
+
* message.el (message-syntax-checks): Doc fix.
Wed Apr 24 05:08:10 1996 Lars Magne Ingebrigtsen <larsi@hler.ifi.uio.no>
(let ((article (cdr gnus-article-current)))
(unless (save-excursion
(set-buffer gnus-summary-buffer)
- (gnus-root-id (mail-header-id
+ (gnus-root-id (mail-header-references
(gnus-summary-article-header article))))
(gnus-article-hide-citation)))))
Some people may want to add \"unknown\" to this list."
)
+(defvar gnus-picons-x-face-file-name
+ (format "/tmp/picon-xface.%s.xbm" (user-login-name))
+ "The name of the file in which to store the converted X-face header.")
+
+(defvar gnus-picons-convert-x-face (format "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | pbmtoxbm > %s" gnus-picons-x-face-file-name)
+ "Command to convert the x-face header into a xbm file."
+)
+
(defvar gnus-group-annotations nil)
(defvar gnus-article-annotations nil)
(defvar gnus-x-face-annotations nil)
((stringp variable)
variable)))
-(defvar gnus-picons-x-face-file-name
- (format "/tmp/picon-xface.%s.xbm" (user-login-name))
- "The name of the file in which to store the converted X-face header.")
-
-(defvar gnus-picons-convert-x-face (format "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | pbmtoxbm > %s" gnus-picons-x-face-file-name)
- "Command to convert the x-face header into a xbm file."
-)
-
(defun gnus-picons-article-display-x-face ()
"Display the x-face header bitmap in the 'gnus-picons-display-where buffer."
;; delete any old ones.
(articles process-function &optional sloppy limit no-errors)
(let ((state 'first)
has-been-begin article result-file result-files process-state
+ gnus-summary-display-article-function
article-series files)
(while (and articles
(make-symbolic-link to-file file)))))
(defun gnus-uu-part-number (article)
- (let ((subject (mail-header-subject (gnus-summary-article-header article))))
- (if (string-match "[0-9]+ */[0-9]+\\|[0-9]+ * of *[0-9]+"
- subject)
- (substring subject (match-beginning 0) (match-end 0))
+ (let* ((header (gnus-summary-article-header article))
+ (subject (and header (mail-header-subject header))))
+ (if (and subject
+ (string-match "[0-9]+ */[0-9]+\\|[0-9]+ * of *[0-9]+" subject))
+ (match-string 0 subject)
"")))
(defun gnus-uu-uudecode-sentinel (process event)
("^\\(From\\|Reply-To\\): " ": *\\(.+\\)$" 1 t gnus-button-reply 0)
("^\\(Cc\\|To\\):" "[^ \t\n<>,()\"]+@[^ \t\n<>,()\"]+"
0 t gnus-button-mailto 0)
- ("^X-[Uu][Rr][Ll]:" ,gnus-button-url-regexp 0 t gnus-button-url 0))
+ ("^X-[Uu][Rr][Ll]:" ,gnus-button-url-regexp 0 t gnus-button-url 0)
+ ("^[^:]+:" ,gnus-button-url-regexp 0 t gnus-button-url 0)
+ ("^[^:]+:" "\\(<\\(url: \\)?news:\\([^>\n ]*\\)>\\)" 1 t
+ gnus-button-message-id 3))
"Alist of headers and regexps to match buttons in article heads.
This alist is very similar to `gnus-button-alist', except that each
"gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
"The mail address of the Gnus maintainers.")
-(defconst gnus-version "September Gnus v0.79"
+(defconst gnus-version "September Gnus v0.80"
"Version number for this version of Gnus.")
(defvar gnus-info-nodes
("gnus-srvr" gnus-browse-foreign-server)
("gnus-cite" :interactive t
gnus-article-highlight-citation gnus-article-hide-citation-maybe
- gnus-article-hide-citation gnus-article-fill-cited-article)
+ gnus-article-hide-citation gnus-article-fill-cited-article
+ gnus-article-hide-citation-in-followups)
("gnus-kill" gnus-kill gnus-apply-kill-file-internal
gnus-kill-file-edit-file gnus-kill-file-raise-followups-to-author
gnus-execute gnus-expunge)
(gnus-visual nil)
(spec gnus-summary-line-format-spec)
pos)
- (gnus-set-work-buffer)
- (let ((gnus-summary-line-format-spec spec))
- (gnus-summary-insert-line
- [0 "" "" "" "" "" 0 0 ""] 0 nil 128 t nil "" nil 1)
- (goto-char (point-min))
- (setq pos (list (cons 'unread (and (search-forward "\200" nil t)
- (- (point) 2)))))
- (goto-char (point-min))
- (push (cons 'replied (and (search-forward "\201" nil t) (- (point) 2)))
- pos)
- (goto-char (point-min))
- (push (cons 'score (and (search-forward "\202" nil t) (- (point) 2)))
- pos)
- (setq gnus-summary-mark-positions pos)))))
+ (save-excursion
+ (gnus-set-work-buffer)
+ (let ((gnus-summary-line-format-spec spec))
+ (gnus-summary-insert-line
+ [0 "" "" "" "" "" 0 0 ""] 0 nil 128 t nil "" nil 1)
+ (goto-char (point-min))
+ (setq pos (list (cons 'unread (and (search-forward "\200" nil t)
+ (- (point) 2)))))
+ (goto-char (point-min))
+ (push (cons 'replied (and (search-forward "\201" nil t)
+ (- (point) 2)))
+ pos)
+ (goto-char (point-min))
+ (push (cons 'score (and (search-forward "\202" nil t) (- (point) 2)))
+ pos)))
+ (setq gnus-summary-mark-positions pos))))
(defun gnus-update-group-mark-positions ()
(save-excursion
(level2 (gnus-info-level info2)))
(or (< level1 level2)
(and (= level1 level2)
- (< (gnus-info-score info1) (gnus-info-score info2))))))
+ (> (gnus-info-score info1) (gnus-info-score info2))))))
;; Group catching up.
(setq gnus-newsgroup-name group)
(make-local-variable 'gnus-summary-line-format)
(make-local-variable 'gnus-summary-line-format-spec)
+ (make-local-variable 'gnus-summary-mark-positions)
(run-hooks 'gnus-summary-mode-hook))
(defun gnus-summary-make-display-table ()
(error "The current group does not support article editing")))
(let ((articles (gnus-summary-work-articles n))
(prefix (gnus-group-real-prefix gnus-newsgroup-name))
- (names '((move "move" "Moving")
- (copy "copy" "Copying")
- (crosspost "crosspost" "Crossposting")))
+ (names '((move "Move" "Moving")
+ (copy "Copy" "Copying")
+ (crosspost "Crosspost" "Crossposting")))
(copy-buf (save-excursion
(nnheader-set-temp-buffer " *copy article*")))
art-group to-method new-xref article to-groups)
(setq to-newsgroup
(gnus-read-move-group-name
(cadr (assq action names))
- gnus-current-move-group articles prefix))
+ (symbol-value (intern (format "gnus-current-%s-group" action)))
+ articles prefix))
(set (intern (format "gnus-current-%s-group" action)) to-newsgroup))
(setq to-method (or select-method
(gnus-find-method-for-group to-newsgroup)))
(defun gnus-read-move-group-name (prompt default articles prefix)
"Read a group name."
(let* ((split-name (gnus-get-split-value gnus-move-split-methods))
+ group-map
+ (dum (mapatoms
+ (lambda (g)
+ (and (boundp g)
+ (symbol-name g)
+ (memq 'respool
+ (assoc (symbol-name
+ (car (gnus-find-method-for-group
+ (symbol-name g))))
+ gnus-valid-select-methods))
+ (push (list (symbol-name g)) group-map)))
+ gnus-active-hashtb))
(prom
- (format "Where do you want to %s %s?"
+ (format "%s %s to:"
prompt
(if (> (length articles) 1)
(format "these %d articles" (length articles))
(cond
((null split-name)
(gnus-completing-read default prom
- gnus-active-hashtb nil nil prefix
+ group-map nil nil prefix
'gnus-group-history))
((= 1 (length split-name))
- (gnus-completing-read (car split-name) prom gnus-active-hashtb
+ (gnus-completing-read (car split-name) prom group-map
nil nil nil
'gnus-group-history))
(t
(concat gnus-article-save-directory (car split-name))))
;; A list of splits was found.
(t
- (setq split-name (mapcar (lambda (el) (list el))
- (nreverse split-name)))
- (let ((result (completing-read
- (concat prompt " ") split-name nil nil)))
- (concat gnus-article-save-directory
- (if (string= result "")
- (caar split-name)
- result)))))))
+ (setq split-name (nreverse split-name))
+ (let (result)
+ (let ((file-name-history (nconc split-name file-name-history)))
+ (setq result
+ (read-file-name
+ (concat prompt " (`M-p' for defaults) ")
+ gnus-article-save-directory
+ (car split-name))))
+ (car (push result file-name-history)))))))
;; If we have read a directory, we append the default file name.
(when (file-directory-p file)
(setq file (concat (file-name-as-directory file)
If this variable is nil, no such courtesy message will be added.")
;;;###autoload
-(defvar message-ignored-bounced-headers "^\\(Received\\):"
+(defvar message-ignored-bounced-headers "^\\(Received\\|Return-Path\\):"
"*Regexp that matches headers to be removed in resent bounced mail.")
;;;###autoload
(defvar message-font-lock-keywords
(let* ((cite-prefix "A-Za-z") (cite-suffix (concat cite-prefix "0-9_.@-")))
(list '("^To:" . font-lock-function-name-face)
- '("^B?CC:\\|^Reply-To:" . font-lock-keyword-face)
+ '("^[GBF]?[Cc][Cc]:\\|^Reply-To:" . font-lock-keyword-face)
'("^\\(Subject:\\)[ \t]*\\(.+\\)?"
(1 font-lock-comment-face) (2 font-lock-type-face nil t))
(list (concat "^\\(" (regexp-quote mail-header-separator) "\\)$")
(re-search-forward
(concat "^" (regexp-quote mail-header-separator) "$"))
(forward-line 1)
- (or (re-search-forward "[^ \n\t]" nil t)
- (y-or-n-p "Empty article. Really post?"))))
+ (let ((b (point)))
+ (or (re-search-forward message-signature-separator nil t)
+ (goto-char (point-max)))
+ (beginning-of-line)
+ (or (re-search-backward "[^ \n\t]" b t)
+ (y-or-n-p "Empty article. Really post? ")))))
;; Check for control characters.
(or (message-check-element 'control-chars)
(save-excursion
"Return a \"checksum\" for the current buffer."
(let ((sum 0))
(save-excursion
+ (goto-char (point-min))
+ (re-search-forward
+ (concat "^" (regexp-quote mail-header-separator) "$"))
(while (not (eobp))
(setq sum (logxor sum (following-char)))
(forward-char 1)))
(setq save-list group-art-list)
(nnmail-insert-lines)
(nnmail-insert-xref group-art-list)
+ (run-hooks 'nnmail-prepare-save-mail-hook)
(run-hooks 'nnfolder-prepare-save-mail-hook)
;; Insert the mail into each of the destination groups.
(defun nnheader-parse-head ()
(let ((case-fold-search t)
- end ref in-reply-to lines p cur)
+ (cur (current-buffer))
+ end ref in-reply-to lines p)
(goto-char (point-min))
;; Search to the beginning of the next header. Error messages
;; do not begin with 2 or 3.
(and (listp form) (eq (car form) 'lambda))))
(fset 'nnheader-find-file-noselect 'find-file-noselect)
+(fset 'nnheader-insert-raw-file-contents 'insert-file-contents)
(provide 'nnheader)
+(run-hooks 'nnheader-load-hook)
+
;;; nnheader.el ends here
(copy-syntax-table (standard-syntax-table))
"Syntax table used by `nnmail-split-fancy'.")
+(defvar nnmail-prepare-save-mail-hook nil
+ "Hook called before saving mail.")
+
\f
(defconst nnmail-version "nnmail 1.0"
(set-buffer nntp-server-buffer)
(erase-buffer)
(condition-case ()
- (progn (insert-file-contents file) t)
+ (progn (nnheader-insert-raw-file-contents file) t)
(file-error nil)))
(defun nnmail-group-pathname (group dir &optional file)
(set-buffer (get-buffer-create " *nnmail incoming*"))
(buffer-disable-undo (current-buffer))
(erase-buffer)
- (insert-file-contents incoming)
+ (nnheader-insert-raw-file-contents incoming)
(unless (zerop (buffer-size))
(goto-char (point-min))
(save-excursion (run-hooks 'nnmail-prepare-incoming-hook))
(nnmail-insert-lines)
(nnmail-insert-xref group-art)
(nnmbox-insert-newsgroup-line group-art)
+ (run-hooks 'nnmail-prepare-save-mail-hook)
(run-hooks 'nnmbox-prepare-save-mail-hook)
group-art))
(unless noinsert
(nnmail-insert-lines)
(nnmail-insert-xref group-art))
+ (run-hooks 'nnmail-prepare-save-mail-hook)
(run-hooks 'nnmh-prepare-save-mail-hook)
(goto-char (point-min))
(while (looking-at "From ")
(require 'nnheader)
(require 'nnmail)
(require 'nnoo)
-(eval-when-compile (require 'cl))
+(require 'cl)
(nnoo-declare nnml)
chars nov-line)
(setq chars (nnmail-insert-lines))
(nnmail-insert-xref group-art)
+ (run-hooks 'nnmail-prepare-save-mail-hook)
(run-hooks 'nnml-prepare-save-mail-hook)
(goto-char (point-min))
(while (looking-at "From ")
(unless active
;; Perhaps the active file was corrupt? See whether
;; there are any articles in this group.
+ (nnml-possibly-change-directory group)
(unless nnml-article-file-alist
(setq nnml-article-file-alist
(sort
(setq active
(if nnml-article-file-alist
(cons (caar nnml-article-file-alist)
- (car (last nnml-article-file-alist)))
+ (caar (last nnml-article-file-alist)))
(cons 1 0)))
(setq nnml-group-alist (cons (list group active) nnml-group-alist)))
(setcdr active (1+ (cdr active)))
(mailbuf (current-buffer)))
(unwind-protect
(save-excursion
+ (save-restriction
+ (message-narrow-to-headers)
+ (if (equal kind "mail")
+ (message-generate-headers message-required-mail-headers)
+ (message-generate-headers message-required-news-headers)))
(set-buffer tembuf)
(erase-buffer)
(insert-buffer-substring mailbuf)
(save-restriction
(message-narrow-to-headers)
;; Remove some headers.
- (message-remove-header message-ignored-mail-headers t)
- (if (equal kind "mail")
- (message-generate-headers message-required-mail-headers)
- (message-generate-headers message-required-news-headers)))
+ (message-remove-header message-ignored-mail-headers t))
(goto-char (point-max))
;; require one newline at the end.
(or (= (preceding-char) ?\n)
(set-buffer nntp-server-buffer)
(erase-buffer)
(condition-case ()
- (progn (insert-file-contents file) t)
+ (progn (nnheader-insert-raw-file-contents file) t)
(file-error nil)))
(defun nnspool-possibly-change-directory (group)
+Wed Apr 24 23:41:21 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.texi (Archived Messages): Addition.
+
+Wed Apr 24 23:41:21 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.texi (Archived Messages): Addition.
+
Wed Apr 17 19:10:17 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
* gnus.texi (posting): Update to use message.
(which is the default), the @code{message-signature-file} file will be
inserted instead. If a function, the result from the function will be
used instead. If a form, the result from the form will be used instead.
+If this variable is @code{nil}, no signature will be inserted at all.
@item message-signature-file
File containing the signature to be inserted at the end of the buffer.
Gnus provides a few different methods for storing the mail you send.
The default method is to use the @dfn{archive virtual server} to store
-the mail.
+the mail. If you want to disable this completely, you should set
+@code{gnus-message-archive-group} to @code{nil}.
@vindex gnus-message-archive-method
@code{gnus-message-archive-method} says what virtual server Gnus is to