+Wed Jun 5 17:17:00 1996 Lars Magne Ingebrigtsen <larsi@trym.ifi.uio.no>
+
+ * nndoc.el (nndoc-type-alist): New babyl head begin.
+ (nndoc-babyl-head-begin): New function.
+
+Wed Jun 5 16:26:55 1996 Lars Magne Ingebrigtsen <larsi@hler.ifi.uio.no>
+
+ * gnus.el (gnus-summary-save-article): Remove headers.
+
+Wed Jun 5 18:16:55 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
+
+ * gnus.el (gnus-read-old-newsrc-el-file): Would bug out.
+
+Wed Jun 5 12:43:22 1996 Lars Magne Ingebrigtsen <larsi@hler.ifi.uio.no>
+
+ * gnus-score.el: `V f' to flush the cache.
+ (gnus-score-flush-cache): Save scores before flushing.
+
+ * gnus-cite.el (gnus-cite-prefix-regexp): Removed "-" as cite
+ prefix.
+
+ * gnus.el (gnus-summary-caesar-message): Use message.
+
+ * gnus-cite.el (gnus-cite-prefix-regexp): Allow "-" as a cite
+ prefix.
+
+ * nnvirtual.el (nnvirtual-convert-headers): Wouldn't convert.
+
+ * gnus-cus.el (()): Have `gnus-mouse-face' respect gnus-visual.
+
+Wed Jun 5 12:52:15 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * dgnushack.el (custom-file): Changed setq.
+
+Tue Jun 4 13:46:45 1996 Scott Byer <byer@mv.us.adobe.com>
+
+ * nnfolder.el (nnfolder-read-folder) Take an additional parameter,
+ scanning, which is t when we are only scanning for new news. In
+ this case, if the modtime of the file hasn't changed since we last
+ scanned it, we don't bother reading the file in, and simply return
+ nil. When we do scan it, pay attention to the
+ nnfolder-distrust-mbox variable, and only scan forward from the
+ last marked message when nil. After scanning, remember the
+ modtime of the visited buffer.
+
+ * nnfolder.el (nnfolder-save-mail) If nnfolder-current-buffer is
+ nil, make sure any open group is closed before changing the group
+ - in the case where a group was opened for scanning but not read
+ in because it wasn't touched, this forces the read.
+
+ * nnfolder.el (nnfolder-possibly-change-group) Take an additional
+ optional variable, which indicated if we're scanning. Passes it
+ on to nnfolder-read-folder, and is prepared for
+ nnfolder-read-folder to return nil for nnfolder-current-buffer.
+ If we get a request to change to the currently open group, and
+ nnfolder-current-buffer is nil (we're on the tail end of a scan),
+ simply return.
+
+ * nnfolder.el (nnfolder-request-scan) Inform
+ nnfolder-possibly-change-group that we're scanning.
+
+ * nnfolder.el (nnfolder-scantime-alist) New internal variable.
+ Keep track of the last scantime of each mbox.
+
+ * nnfolder.el (nnfolder-distrust-mbox) New variable. When t,
+ nnfolder-read-folder reverts to it's old behavior of scanning an
+ entire file looking for unmarked messages. When nil (the
+ default), scans forward from the last marked message. Unless you
+ have an external mailer which inserts new messages in the middle
+ of your mailboxes, leave nil.
+
+Wed Jun 5 09:20:38 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * message.el (message-goto-body): Expand abbrev.
+
+Tue Jun 4 17:12:06 1996 Lars Magne Ingebrigtsen <larsi@eistla.ifi.uio.no>
+
+ * gnus.el: Gnus v5.2.7 is released.
+
Tue Jun 4 18:26:24 1996 Christoph Wedler <wedler@fmi.uni-passau.de>
* message-xms.el (message-xmas-find-glyph-directory): Wouldn't use
(require 'cl)
(setq load-path (cons "." load-path))
-(setq custom-file "/dev/null")
+(setq custom-file "/THIS FILE DOES NOT eXiST!")
(defun dgnushack-compile ()
;(setq byte-compile-dynamic t)
"turquoise"))
(defvar gnus-face-dark-name-list
- '("RoyalBlue" "firebrick" "dark green" "OrangeRed"
+ '("dark blue" "firebrick" "dark green" "OrangeRed"
"dark khaki" "dark violet" "SteelBlue4"))
; CornflowerBlue SeaGreen OrangeRed SteelBlue4 DeepPink3
; DarkOlviveGreen4
(default .
(summary-highlight group-highlight
article-highlight
+ mouse-face
summary-menu group-menu article-menu
tree-highlight menu highlight
browse-menu server-menu
The line beneath the mouse pointer will be highlighted with this
face.")
(name . gnus-mouse-face)
- (calculate . (if (boundp 'gnus-mouse-face)
- gnus-mouse-face
- 'highlight))
+ (calculate . (if (gnus-visual-p 'mouse-face 'highlight)
+ (if (boundp 'gnus-mouse-face)
+ gnus-mouse-face
+ 'highlight)
+ 'default))
(type . face))
((tag . "Article Display")
(doc . "Controls how the article buffer will look.
(t
(list
(list "From" nil
- (custom-face-lookup "RoyalBlue" nil nil t t nil))
+ (custom-face-lookup "MidnightBlue" nil nil t t nil))
(list "Subject" nil
(custom-face-lookup "firebrick" nil nil t t nil))
(list "Newsgroups:.*," nil
((and (not mailp) (eq level 4)) .
,(custom-face-lookup "DarkGreen" nil nil t))
((and (not mailp) (eq level 5)) .
- ,(custom-face-lookup "Red" nil nil t))
+ ,(custom-face-lookup "CadetBlue4" nil nil t))
((and mailp (eq level 1)) .
,(custom-face-lookup "DeepPink3" nil nil t))
((and mailp (eq level 2)) .
"R" gnus-summary-rescore
"e" gnus-score-edit-current-scores
"f" gnus-score-edit-file
+ "F" gnus-score-flush-cache
"t" gnus-score-find-trace
"C" gnus-score-customize)
(defun gnus-score-flush-cache ()
"Flush the cache of score files."
(interactive)
+ (gnus-score-save)
(setq gnus-score-cache nil
+ gnus-score-alist nil
gnus-short-name-score-file-cache nil)
(gnus-message 6 "The score cache is now flushed"))
"gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
"The mail address of the Gnus maintainers.")
-(defconst gnus-version-number "5.2.7"
+(defconst gnus-version-number "5.2.8"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Gnus v%s" gnus-version-number)
flist)
(cons 'progn (cddr fval)))))
+;; Find out whether the gnus-visual TYPE is wanted.
+(defun gnus-visual-p (&optional type class)
+ (and gnus-visual ; Has to be non-nil, at least.
+ (if (not type) ; We don't care about type.
+ gnus-visual
+ (if (listp gnus-visual) ; It's a list, so we check it.
+ (or (memq type gnus-visual)
+ (memq class gnus-visual))
+ t))))
+
;;; Load the compatability functions.
(require 'gnus-cus)
"Hide text of TYPE between B and E."
(gnus-hide-text b e (cons 'gnus-type (cons type gnus-hidden-properties))))
-;; Find out whether the gnus-visual TYPE is wanted.
-(defun gnus-visual-p (&optional type class)
- (and gnus-visual ; Has to be non-nil, at least.
- (if (not type) ; We don't care about type.
- gnus-visual
- (if (listp gnus-visual) ; It's a list, so we check it.
- (or (memq type gnus-visual)
- (memq class gnus-visual))
- t))))
-
(defun gnus-parent-headers (headers &optional generation)
"Return the headers of the GENERATIONeth parent of HEADERS."
(unless generation
gnus-article-buffer
(save-restriction
(widen)
- (let ((start (window-start)))
- (news-caesar-buffer-body arg)
+ (let ((start (window-start))
+ buffer-read-only)
+ (message-caesar-buffer-body arg)
(set-window-start (get-buffer-window (current-buffer)) start))))))
(defun gnus-summary-stop-page-breaking ()
;; Remove headers accoring to `gnus-saved-headers'.
(let ((gnus-visible-headers
(or gnus-saved-headers gnus-visible-headers)))
- (gnus-article-hide-headers nil t)))
+ (gnus-article-hide-headers 1 t)))
;; Remove any X-Gnus lines.
(save-excursion
(set-buffer gnus-article-buffer)
killed gnus-killed-assoc
marked gnus-marked-assoc)))
(setq gnus-newsrc-alist nil)
- (while (setq info (gnus-get-info (setq group (pop newsrc))))
- (if info
+ (while (setq group (pop newsrc))
+ (if (setq info (gnus-get-info (car group)))
(progn
(gnus-info-set-read info (cddr group))
(gnus-info-set-level
(defun message-goto-body ()
"Move point to the beginning of the message body."
(interactive)
+ (if (looking-at "[ \t]*\n") (expand-abbrev))
(goto-char (point-min))
(search-forward (concat "\n" mail-header-separator "\n") nil t))
(article-begin . "\^_\^L *\n")
(body-end . "\^_")
(body-begin-function . nndoc-babyl-body-begin)
- (head-begin . "^[0-9].*\n"))
+ (head-begin-function . nndoc-babyl-head-begin))
(forward
(article-begin . "^-+ Start of forwarded message -+\n+")
(body-end . "^-+ End of forwarded message -+$")
(defvoo nndoc-body-begin nil)
(defvoo nndoc-body-end-function nil)
(defvoo nndoc-body-begin-function nil)
+(defvoo nndoc-head-begin-function nil)
(defvoo nndoc-body-end nil)
(defvoo nndoc-dissection-alist nil)
(defvoo nndoc-prepare-body nil)
nndoc-file-end nndoc-article-begin
nndoc-body-begin nndoc-body-end-function nndoc-body-end
nndoc-prepare-body nndoc-article-transform
- nndoc-generate-head nndoc-body-begin-function)))
+ nndoc-generate-head nndoc-body-begin-function
+ nndoc-head-begin-function)))
(while vars
(set (pop vars) nil)))
(let* (defs guess)
(nndoc-search nndoc-first-article)
(nndoc-search nndoc-article-begin))
(setq first nil)
- (when nndoc-head-begin
- (nndoc-search nndoc-head-begin))
+ (cond (nndoc-head-begin-function
+ (funcall nndoc-head-begin-function))
+ (nndoc-head-begin
+ (nndoc-search nndoc-head-begin)))
(if (and nndoc-file-end
(looking-at nndoc-file-end))
(goto-char (point-max))
(when (looking-at "\*\*\* EOOH \*\*\*")
(re-search-forward "^\n" nil t)))
+(defun nndoc-babyl-head-begin ()
+ (when (re-search-forward "^[0-9].*\n" nil t)
+ (when (looking-at "\*\*\* EOOH \*\*\*")
+ (forward-line 1))
+ t))
+
(provide 'nndoc)
;;; nndoc.el ends here
;; style. -SLB
(defvoo nnfolder-ignore-active-file nil
- "If non-nil, causes nnfolder to do some extra work in order to determine the true active ranges of an mbox file.
-Note that the active file is still saved, but it's values are not
-used. This costs some extra time when scanning an mbox when opening
-it.")
+ "If non-nil, causes nnfolder to do some extra work in order to determine
+the true active ranges of an mbox file. Note that the active file is still
+saved, but it's values are not used. This costs some extra time when
+scanning an mbox when opening it.")
+
+(defvoo nnfolder-distrust-mbox nil
+ "If non-nil, causes nnfolder to not trust the user with respect to
+inserting unaccounted for mail in the middle of an mbox file. This can greatly
+slow down scans, which now must scan the entire file for unmarked messages.
+When nil, scans occur forward from the last marked message, a huge
+time saver for large mailboxes.")
(defvoo nnfolder-newsgroups-file
(concat (file-name-as-directory nnfolder-directory) "newsgroups")
(defvoo nnfolder-status-string "")
(defvoo nnfolder-group-alist nil)
(defvoo nnfolder-buffer-alist nil)
-(defvoo nnfolder-active-timestamp nil)
+(defvoo nnfolder-scantime-alist nil)
\f
(car range) (cdr range) group))))))))
(deffoo nnfolder-request-scan (&optional group server)
- (nnfolder-possibly-change-group group server)
+ (nnfolder-possibly-change-group group server t)
(nnmail-get-new-mail
'nnfolder
(lambda ()
(match-beginning 0))
(point-max))))))
-(defun nnfolder-possibly-change-group (group &optional server)
+;; When scanning, we're not looking t immediately switch into the group - if
+;; we know our information is up to date, don't even bother reading the file.
+(defun nnfolder-possibly-change-group (group &optional server scanning)
(when (and server
(not (nnfolder-server-opened server)))
(nnfolder-open-server server))
- (when group
+ (when (and group (or nnfolder-current-buffer
+ (not (equal group nnfolder-current-group))))
(unless (file-exists-p nnfolder-directory)
(make-directory (directory-file-name nnfolder-directory) t))
(nnfolder-possibly-activate-groups nil)
(unless (file-exists-p (file-name-directory file))
(make-directory (file-name-directory file) t))
(write-region 1 1 file t 'nomesg))
- (setq nnfolder-current-buffer
- (set-buffer (nnfolder-read-folder file)))
- (setq nnfolder-buffer-alist (cons (list group (current-buffer))
- nnfolder-buffer-alist)))))))
+ (setq nnfolder-current-buffer
+ (nnfolder-read-folder file scanning))
+ (if nnfolder-current-buffer
+ (progn
+ (set-buffer nnfolder-current-buffer)
+ (setq nnfolder-buffer-alist
+ (cons (list group nnfolder-current-buffer)
+ nnfolder-buffer-alist)))))))))
(setq nnfolder-current-group group)))
(defun nnfolder-save-mail (&optional group)
;; Insert the new newsgroup marker.
(nnfolder-insert-newsgroup-line group-art)
(unless nnfolder-current-buffer
+ (nnfolder-close-group (car group-art))
(nnfolder-request-create-group (car group-art))
(nnfolder-possibly-change-group (car group-art)))
(let ((beg (point-min))
;; shouldn't cost us much extra time at all, but will be a lot less
;; vulnerable to glitches between the mbox and the active file.
-(defun nnfolder-read-folder (file)
- (save-excursion
- (nnfolder-possibly-activate-groups nil)
- ;; We should be paranoid here and make sure the group is in the alist,
- ;; and add it if it isn't.
- ;;(if (not (assoc nnfoler-current-group nnfolder-group-alist)
- (set-buffer (setq nnfolder-current-buffer
- (nnheader-find-file-noselect file nil 'raw)))
- (buffer-disable-undo (current-buffer))
- (let* ((delim (concat "^" message-unix-mail-delimiter))
- (marker (concat "\n" nnfolder-article-marker))
- (number "[0-9]+")
- (active (cadr (assoc nnfolder-current-group
- nnfolder-group-alist)))
- ;; Set min to Big Number.
- (min (max (1- (lsh 1 23)) (1- (lsh 1 24)) (1- (lsh 1 25))))
- (max (cdr active))
- start end)
- (goto-char (point-min))
-
- ;; Anytime the active number is 1 or 0, it is suspect. In that case,
- ;; search the file manually to find the active number. Or, of course,
- ;; if we're being paranoid. (This would also be the place to build
- ;; other lists from the header markers, such as expunge lists, etc., if
- ;; we ever desired to abandon the active file entirely for mboxes.)
- (when (or nnfolder-ignore-active-file
- (< max 2))
- (while (and (search-forward marker nil t)
- (re-search-forward number nil t))
- (let ((newnum (string-to-number (match-string 0))))
- (setq max (max max newnum))
- (setq min (min min newnum))))
- (setcar active (max 1 (min min max)))
- (setcdr active (max max (cdr active)))
- (goto-char (point-min)))
-
- ;; Keep track of the active number on our own, and insert it back into
- ;; the active list when we're done. Also, prime the pump to cut down on
- ;; the number of searches we do.
- (setq end (point-marker))
- (set-marker end (or (and (re-search-forward delim nil t)
- (match-beginning 0))
- (point-max)))
- (while (not (= end (point-max)))
- (setq start (marker-position end))
- (goto-char end)
- ;; There may be more than one "From " line, so we skip past
- ;; them.
- (while (looking-at delim)
- (forward-line 1))
- (set-marker end (or (and (re-search-forward delim nil t)
- (match-beginning 0))
- (point-max)))
- (goto-char start)
- (if (not (search-forward marker end t))
- (progn
- (narrow-to-region start end)
- (nnmail-insert-lines)
- (nnfolder-insert-newsgroup-line
- (cons nil (nnfolder-active-number nnfolder-current-group)))
- (widen))))
-
- ;; Make absolutely sure that the active list reflects reality!
- (nnmail-save-active nnfolder-group-alist nnfolder-active-file)
- (current-buffer))))
+(defun nnfolder-read-folder (file &optional scanning)
+ ;; This is an attempt at a serious shortcut - don't even read in the file
+ ;; if we know we've seen it since the last time it was touched.
+ (let ((scantime (cadr (assoc nnfolder-current-group
+ nnfolder-scantime-alist)))
+ (modtime (nth 5 (or (file-attributes file) '(nil nil nil nil nil)))))
+ (if (and scanning scantime
+ (eq (car scantime) (car modtime))
+ (eq (cdr scantime) (cadr modtime)))
+ nil
+ (save-excursion
+ (nnfolder-possibly-activate-groups nil)
+ ;; Read in the file.
+ (set-buffer (setq nnfolder-current-buffer
+ (nnheader-find-file-noselect file nil 'raw)))
+ (buffer-disable-undo (current-buffer))
+ ;; If the file hasn't been touched since the last time we scanned it,
+ ;; don't bother doing anything with it.
+ (let ((delim (concat "^" message-unix-mail-delimiter))
+ (marker (concat "\n" nnfolder-article-marker))
+ (number "[0-9]+")
+ (active (cadr (assoc nnfolder-current-group nnfolder-group-alist)))
+ (scantime (assoc nnfolder-current-group nnfolder-scantime-alist))
+ (minid (lsh -1 -1))
+ oldactive maxid start end newscantime)
+
+ (setq maxid (or (cdr active) 0))
+ (setq oldactive active)
+ (goto-char (point-min))
+
+ ;; Anytime the active number is 1 or 0, it is suspect. In that
+ ;; case, search the file manually to find the active number. Or,
+ ;; of course, if we're being paranoid. (This would also be the
+ ;; place to build other lists from the header markers, such as
+ ;; expunge lists, etc., if we ever desired to abandon the active
+ ;; file entirely for mboxes.)
+ (when (or nnfolder-ignore-active-file
+ (< maxid 2))
+ (while (and (search-forward marker nil t)
+ (re-search-forward number nil t))
+ (let ((newnum (string-to-number (match-string 0))))
+ (setq maxid (max maxid newnum))
+ (setq minid (min minid newnum))))
+ (setcar active (max 1 (min minid maxid)))
+ (setcdr active (max maxid (cdr active)))
+ (goto-char (point-min)))
+
+ ;; As long as we trust that the user will only insert unmarked mail
+ ;; at the end, go to the end and search backwards for the last
+ ;; marker. Find the start of that message, and begin to search for
+ ;; unmarked messages from there.
+ (if (not (or nnfolder-distrust-mbox
+ (< maxid 2)))
+ (progn
+ (goto-char (point-max))
+ (if (not (re-search-backward marker nil t))
+ (goto-char (point-min))
+ (if (not (re-search-backward delim nil t))
+ (goto-char (point-min))))))
+
+ ;; Keep track of the active number on our own, and insert it back
+ ;; into the active list when we're done. Also, prime the pump to
+ ;; cut down on the number of searches we do.
+ (setq end (point-marker))
+ (set-marker end (or (and (re-search-forward delim nil t)
+ (match-beginning 0))
+ (point-max)))
+ (while (not (= end (point-max)))
+ (setq start (marker-position end))
+ (goto-char end)
+ ;; There may be more than one "From " line, so we skip past
+ ;; them.
+ (while (looking-at delim)
+ (forward-line 1))
+ (set-marker end (or (and (re-search-forward delim nil t)
+ (match-beginning 0))
+ (point-max)))
+ (goto-char start)
+ (if (not (search-forward marker end t))
+ (progn
+ (narrow-to-region start end)
+ (nnmail-insert-lines)
+ (nnfolder-insert-newsgroup-line
+ (cons nil (nnfolder-active-number nnfolder-current-group)))
+ (widen))))
+
+ ;; Make absolutely sure that the active list reflects reality!
+ (nnmail-save-active nnfolder-group-alist nnfolder-active-file)
+ ;; Set the scantime for this group.
+ (setq newscantime (visited-file-modtime))
+ (if scantime
+ (setcdr scantime (list newscantime))
+ (push (list nnfolder-current-group newscantime)
+ nnfolder-scantime-alist))
+ (current-buffer))))))
;;;###autoload
(defun nnfolder-generate-active-file ()
header)
(erase-buffer)
(while (setq header (pop headers))
-))))
+ (nnheader-insert-nov header)))))
(defun nnvirtual-possibly-change-server (server)
(or (not server)
+Wed Jun 5 09:38:28 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * message.texi (News Headers): Addition.
+
Mon Jun 3 07:37:34 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
* gnus.texi (History): Change.
Edit a score file and make this score file the current one
(@code{gnus-score-edit-file}).
+@item V F
+@kindex V F (Summary)
+@findex gnus-score-flush-cache
+Flush the score cahe (@code{gnus-score-flush-cache}). This is useful
+after editing score files.
+
@item V C
@kindex V C (Summary)
@findex gnus-score-customize
@item From
@cindex From
+@findex user-full-name
+@findex user-mail-address
This required header will be filled out with the result of the
@code{message-make-from} function, which depends on the
@code{message-from-style}, @code{user-full-name},
@item Message-ID
@cindex Message-ID
+@vindex mail-host-address
+@findex system-name
+@cindex Sun
This required header will be generated by Message. A unique ID will be
-created based on date, time, user name and system name.
+created based on date, time, user name and system name. Message will
+use @code{mail-host-address} as the fully qualified domain name (FQDN)
+of the machine if that variable is define. If not, it will use
+@code{system-name}, which doesn't report a FQDN on some machines --
+notably Suns.
@item X-Newsreader
@cindex X-Newsreader