+Tue Mar 12 01:42:11 1996 Lars Magne Ingebrigtsen <larsi@eistla.ifi.uio.no>
+
+ * gnus.el (gnus-article-strip-leading-blank-lines): New command.
+
+ * gnus-score.el (gnus-score-score-files-1): Message.
+ (gnus-score-score-files-1): Make sure this doesn't return a nil
+ value.
+
+ * gnus-vis.el (gnus-article-add-button): Would make all buttons
+ visible.
+
+Mon Mar 11 03:04:15 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus-soup.el (gnus-soup-group-brew): Might lose articles?
+
+ * gnus.el (gnus-request-article-this-buffer): Would set
+ `gnus-original-article' wrong.
+
+ * nnmail.el (nnmail-search-unix-mail-delim): Secondary ">From "
+ lines would make messages stick.
+ (nnmail-check-duplication): Changed warning message
+
+ * gnus-msg.el (gnus-inews-reject-message): Would prin1 to the echo
+ area.
+
+ * gnus.el (gnus-no-server): Would make variable buffer-local to
+ the wrong buffer.
+
+ * nnmail.el (nnmail-process-unix-mail-format): Doubled code.
+
+ * nnvirtual.el (nnvirtual-retrieve-headers): Don't propagate
+ `fetch-old'.
+
+ * gnus-msg.el (gnus-inews-cleanup-headers): Put "poster" in the
+ list of possible prompts.
+
+Sun Mar 10 00:13:48 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus-score.el (gnus-score-headers): Wouldn't score anything if
+ `gnus-save-score'.
+
+ * gnus-cache.el (gnus-cache-remove-article): Change buffer.
+
+ * gnus.el (gnus-add-shutdown, gnus-shutdown): New functions.
+ (gnus-clear-system): Nix out more variables.
+
+ * gnus-*.el: Use the functions.
+
+Sat Mar 9 08:03:00 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.el (gnus-group-delete-group): Remove the group from the
+ active hashtb.
+
+ * gnus-topic.el (gnus-topic-yank-group): Yank sub-topics as well.
+ (gnus-topic-remove-group): New implementation.
+
+ * gnus.el (gnus-gnus-to-newsrc-format): princ instead of
+ int-to-string.
+
+Sat Mar 9 07:36:22 1996 Thor Kristoffersen <thor@unik.no>
+
+ * nntp.el (nntp-request-article): New wait-for regexp to work with
+ rlogin.
+
+Sat Mar 9 07:21:57 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.el (gnus-request-article-this-buffer): Would bug out when
+ no summary buffer.
+
+ * gnus-topic.el (gnus-topic-mark-topic): Mark hidden groups in the
+ topic.
+
+ * gnus-msg.el (gnus-summary-resend-message): Would bug out.
+
+Sat Mar 9 06:57:13 1996 Michael Cook <mcook@cognex.com>
+
+ * nnmail.el (nnmail-split-fancy-syntax-table): New variable.
+
+Fri Mar 8 12:58:37 1996 Wes Hardaker <hardaker@ece.ucdavis.edu>
+
+ * gnus.el (gnus-summary-go-to-next-thread): Would always jump to
+ the next dummy-root if called on a dummy-root.
+
Sat Mar 9 01:58:10 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+ * gnus.el: 0.51 is released.
+
* gnus-msg.el (gnus-tokenize-header): Wouldn't do the right thing
under XEmacs.
Fri Mar 8 00:03:14 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+ * gnus.el: 0.50 is released.
+
* gnus.el (gnus-group-yank-group): Would bug out on groups with
scores.
(gnus-summary-go-to-next-thread): Do dummies properly.
"Initialize the cache."
(gnus-cache-read-active))
+(gnus-add-shutdown 'gnus-cache-close 'gnus)
+
(defun gnus-cache-close ()
"Shut down the cache."
(gnus-cache-write-active)
Returns the list of articles removed."
(interactive "P")
(gnus-set-global-variables)
+ (gnus-cache-change-buffer gnus-newsgroup-name)
(let ((articles (gnus-summary-work-articles n))
article out)
(while articles
(setq gnus-demon-idle-has-been-called nil)
(setq gnus-use-demon t)))
+(gnus-add-shutdown 'gnus-demon-cancel 'gnus)
+
(defun gnus-demon-cancel ()
"Cancel any Gnus daemons."
(interactive)
(if (looking-at "[0-9]+")
(buffer-substring token-pos (match-end 0)))))
+(gnus-add-shutdown 'bbb-logout 'gnus)
+
(defun bbb-logout ()
"logout of bbb session"
(let ((bbb-process
gnus-inews-sent-ids))
(setcdr end nil))
(nnheader-temp-write gnus-sent-message-ids-file
- (prin1 `(setq gnus-inews-sent-ids ',gnus-inews-sent-ids)))
+ (prin1 `(setq gnus-inews-sent-ids ',gnus-inews-sent-ids)
+ (current-buffer)))
nil)))))
(defun gnus-tokenize-header (header &optional separator)
;; Correct newsgroups field: change sequence of spaces to comma and
;; eliminate spaces around commas. Eliminate imbedded line breaks.
(goto-char (point-min))
- (if (re-search-forward "^Newsgroups: +" nil t)
- (save-restriction
- (narrow-to-region
- (point)
- (if (re-search-forward "^[^ \t]" nil t)
- (match-beginning 0)
- (forward-line 1)
- (point)))
- (goto-char (point-min))
- (while (re-search-forward "\n[ \t]+" nil t)
- (replace-match " " t t)) ;No line breaks (too confusing)
- (goto-char (point-min))
- (while (re-search-forward "[ \t\n]*,[ \t\n]*\\|[ \t]+" nil t)
- (replace-match "," t t))
- (goto-char (point-min))
- ;; Remove a trailing comma.
- (if (re-search-forward ",$" nil t)
- (replace-match "" t t))))
-
+ (when (re-search-forward "^Newsgroups: +" nil t)
+ (save-restriction
+ (narrow-to-region
+ (point)
+ (if (re-search-forward "^[^ \t]" nil t)
+ (match-beginning 0)
+ (forward-line 1)
+ (point)))
+ (goto-char (point-min))
+ (while (re-search-forward "\n[ \t]+" nil t)
+ (replace-match " " t t)) ;No line breaks (too confusing)
+ (goto-char (point-min))
+ (while (re-search-forward "[ \t\n]*,[ \t\n]*\\|[ \t]+" nil t)
+ (replace-match "," t t))
+ (goto-char (point-min))
+ ;; Remove trailing commas.
+ (when (re-search-forward ",+$" nil t)
+ (replace-match "" t t))))
+
;; Added by Per Abrahamsen <abraham@iesd.auc.dk>.
;; Help save the the world!
- (or
- gnus-expert-user
- (let ((newsgroups (mail-fetch-field "newsgroups"))
- (followup-to (mail-fetch-field "followup-to"))
- groups to)
- (if (and newsgroups
- (string-match "," newsgroups) (not followup-to))
- (progn
- (while (string-match "," newsgroups)
- (setq groups
- (cons (list (substring newsgroups 0 (match-beginning 0)))
- groups))
- (setq newsgroups (substring newsgroups (match-end 0))))
- (setq groups (nreverse (cons (list newsgroups) groups)))
-
- (setq to (completing-read
- "Followups to: (default all groups) " groups))
- (if (> (length to) 0)
- (progn
- (goto-char (point-min))
- (insert "Followup-To: " to "\n")))))))
+ (unless gnus-expert-user
+ (let ((newsgroups (mail-fetch-field "newsgroups"))
+ (followup-to (mail-fetch-field "followup-to"))
+ to)
+ (when (and newsgroups (string-match "," newsgroups)
+ (not followup-to)
+ (not
+ (zerop
+ (length
+ (setq to (completing-read
+ "Followups to: (default all groups) "
+ (mapcar (lambda (g) (list g))
+ (cons "poster"
+ (gnus-tokenize-header
+ newsgroups)))))))))
+ (goto-char (point-min))
+ (insert "Followup-To: " to "\n"))))
;; Cleanup Followup-To.
(goto-char (point-min))
- (if (search-forward-regexp "^Followup-To: +" nil t)
- (save-restriction
- (narrow-to-region
- (point)
- (if (re-search-forward "^[^ \t]" nil 'end)
- (match-beginning 0)
- (point-max)))
- (goto-char (point-min))
- (replace-regexp "\n[ \t]+" " ") ;No line breaks (too confusing)
- (goto-char (point-min))
- (replace-regexp "[ \t\n]*,[ \t\n]*\\|[ \t]+" ","))))
+ (when (search-forward-regexp "^Followup-To: +" nil t)
+ (save-restriction
+ (narrow-to-region
+ (point)
+ (if (re-search-forward "^[^ \t]" nil 'end)
+ (match-beginning 0)
+ (point-max)))
+ (goto-char (point-min))
+ ;; No line breaks (too confusing)
+ (while (re-search-forward "\n[ \t]+" nil t )
+ (replace-match " " t ))
+ (goto-char (point-min))
+ (while (re-search-forward "[ \t\n]*,[ \t\n]*\\|[ \t]+" nil t)
+ (replace-match "," t t)))))
(defun gnus-inews-remove-headers ()
(let ((case-fold-search t)
(forward-char -1)
(save-restriction
(narrow-to-region beg (point))
- (nnheader-remove-header gnus-ignored-resent-headers t))
+ (nnheader-remove-header gnus-ignored-resent-headers t)
+ (goto-char (point-max)))
(insert mail-header-separator)
;; Rename all old ("Also-")Resent headers.
(while (re-search-backward "^\\(Also-\\)?Resent-" beg t)
(unless (looking-at "$")
(forward-line 2)))
(sit-for 0)))
+
+(gnus-add-shutdown 'gnus-inews-close 'gnus)
+
+(defun gnus-inews-close ()
+ (setq gnus-inews-sent-ids nil))
;;; Allow redefinition of functions.
(setq entry (cdr entry))))
(setq alist (cdr alist)))))
+(gnus-add-shutdown 'gnus-nocem-close 'gnus)
+
(defun gnus-nocem-close ()
"Clear internal NoCeM variables."
(setq gnus-nocem-alist nil
(setq scores news
news nil)
(when (and gnus-summary-default-score
- scores
- (> (length gnus-newsgroup-headers)
- (length gnus-newsgroup-scored)))
+ scores)
(let* ((entries gnus-header-index)
(now (gnus-day-number (current-time-string)))
(expire (and gnus-score-expiry-days
gnus-short-name-score-file-cache nil)
(gnus-message 6 "The score cache is now flushed"))
+(gnus-add-shutdown 'gnus-score-close 'gnus)
+
(defun gnus-score-close ()
"Clear all internal score variables."
(setq gnus-score-cache nil
- gnus-internal-global-score-files nil))
+ gnus-internal-global-score-files nil
+ gnus-score-file-list nil
+ gnus-score-file-alist-cache nil))
;; Summary score marking commands.
(setq gnus-score-file-list
(cons nil
(or gnus-short-name-score-file-cache
- (setq gnus-short-name-score-file-cache
- (gnus-score-score-files-1
- gnus-kill-files-directory)))))
+ (prog2
+ (gnus-message 6 "Finding all score files...")
+ (setq gnus-short-name-score-file-cache
+ (gnus-score-score-files-1
+ gnus-kill-files-directory))
+ (gnus-message 6 "Finding all score files...done")))))
;; We want long file names.
(when (or (not gnus-score-file-list)
(not (car gnus-score-file-list))
;; Add files to the list of score files.
((string-match regexp file)
(push file out))))
- out))
+ (or out
+ ;; Return a dummy value.
+ (list "~/News/this.file.does.not.exist.SCORE"))))
(defun gnus-score-file-regexp ()
"Return a regexp that match all score files."
(gnus-range-length (cdr (assq 'tick (gnus-info-marks
(nth 2 entry)))))))
(when (gnus-summary-read-group group nil t)
- (let ((gnus-newsgroup-processable
+ (setq gnus-newsgroup-processable
+ (reverse
(if (not not-all)
- (reverse (append gnus-newsgroup-marked
- gnus-newsgroup-unreads))
- (reverse gnus-newsgroup-unreads))))
- (gnus-soup-add-article nil))
+ (append gnus-newsgroup-marked gnus-newsgroup-unreads)
+ gnus-newsgroup-unreads)))
+ (gnus-soup-add-article nil)
(gnus-summary-exit)))))
(defun gnus-soup-insert-idx (offset header)
;; Internal variables.
+(defvar gnus-topic-active-topology nil)
+(defvar gnus-topic-active-alist nil)
+
(defvar gnus-topic-killed-topics nil)
(defvar gnus-topic-inhibit-change-level nil)
(defvar gnus-topic-tallied-groups nil)
(setq topology (cdr topology)))
result)))
+(gnus-add-shutdown 'gnus-topic-close 'gnus)
+
+(defun gnus-topic-close ()
+ (setq gnus-topic-active-topology nil
+ gnus-topic-active-alist nil
+ gnus-topic-killed-topics nil
+ gnus-topic-tallied-groups nil))
+
(defun gnus-topic-check-topology ()
;; The first time we set the topology to whatever we have
;; gotten here, which can be rather random.
(gnus-topic-fold all))
(gnus-group-read-group all no-article group)))
-(defun gnus-topic-create-topic (topic parent &optional previous)
+(defun gnus-topic-create-topic (topic parent &optional previous full-topic)
(interactive
(list
(read-string "Create topic: ")
(error "Topic aleady exists"))
(unless parent
(setq parent (caar gnus-topic-topology)))
- (let ((top (cdr (gnus-topic-find-topology parent))))
+ (let ((top (cdr (gnus-topic-find-topology parent)))
+ (full-topic (or full-topic `((,topic visible)))))
(unless top
(error "No such parent topic: %s" parent))
(if previous
(while (and (cdr top)
(not (equal (caaadr top) previous)))
(setq top (cdr top)))
- (setcdr top (cons (list (list topic 'visible)) (cdr top))))
- (nconc top (list (list (list topic 'visible)))))
+ (setcdr top (cons full-topic (cdr top))))
+ (nconc top (list full-topic)))
(unless (assoc topic gnus-topic-alist)
(push (list topic) gnus-topic-alist)))
(gnus-topic-enter-dribble)
(gnus-topic-enter-dribble)
(gnus-group-list-groups))
-(defun gnus-topic-remove-group (n)
- "Remove the current group the topic."
- (interactive "P")
- (gnus-topic-move-group n nil))
+(defun gnus-topic-remove-group ()
+ "Remove the current group from the topic."
+ (interactive)
+ (let ((topicl (assoc (gnus-group-parent-topic) gnus-topic-alist))
+ (group (gnus-group-group-name))
+ (buffer-read-only nil))
+ (when (and topicl group)
+ (gnus-delete-line)
+ (delq (gnus-group-group-name) topicl))
+ (gnus-group-position-point)))
(defun gnus-topic-copy-group (n topic)
"Copy the current group to a topic."
(interactive "p")
(if gnus-topic-killed-topics
(let ((previous (gnus-group-parent-topic))
- (item (nth 1 (pop gnus-topic-killed-topics))))
+ (item (cdr (pop gnus-topic-killed-topics))))
(gnus-topic-create-topic
- (car item) (gnus-topic-parent-topic previous) previous))
+ (caar item) (gnus-topic-parent-topic previous) previous
+ item))
(let* ((prev (gnus-group-group-name))
(gnus-topic-inhibit-change-level t)
(gnus-group-indentation
"Mark all groups in the topic with the process mark."
(interactive (list (gnus-group-parent-topic)))
(save-excursion
- (let ((groups (gnus-topic-find-groups topic)))
+ (let ((groups (gnus-topic-find-groups topic 9 t)))
(while groups
(funcall (if unmark 'gnus-group-remove-mark 'gnus-group-set-mark)
(gnus-info-group (nth 2 (pop groups))))))))
from to
(nconc (and gnus-article-mouse-face
(list gnus-mouse-face-prop gnus-article-mouse-face))
- (list 'invisible nil)
(list 'gnus-callback fun)
(and data (list 'gnus-data data)))))
"Property list to use for hiding text.")
(defvar gnus-modtime-botch nil
- "*Non-nil means .newsrc should be deleted prior to save. Its use is
-due to the bogus appearance that .newsrc was modified on disc.")
+ "*Non-nil means .newsrc should be deleted prior to save.
+Its use is due to the bogus appearance that .newsrc was modified on
+disc.")
;; Hooks.
(defvar gnus-server-alist nil
"List of available servers.")
-(defvar gnus-topic-active-topology nil)
-(defvar gnus-topic-active-alist nil)
-
(defvar gnus-group-indentation-function nil)
(defvar gnus-topic-indentation "") ;; Obsolete variable.
"gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
"The mail address of the Gnus maintainers.")
-(defconst gnus-version "September Gnus v0.51"
+(defconst gnus-version "September Gnus v0.52"
"Version number for this version of Gnus.")
(defvar gnus-info-nodes
gnus-active-hashtb nil
gnus-moderated-list nil
gnus-description-hashtb nil
+ gnus-current-headers nil
+ gnus-thread-indent-array nil
gnus-newsgroup-headers nil
gnus-newsgroup-name nil
gnus-server-alist nil
gnus-group-list-mode nil
- gnus-topic-active-topology nil
- gnus-topic-active-alist nil
gnus-opened-servers nil
gnus-current-select-method nil)
- ;; Reset any score variables.
- (when gnus-use-scoring
- (gnus-score-close))
+ (gnus-shutdown 'gnus)
;; Kill the startup file.
(and gnus-current-startup-file
(get-file-buffer gnus-current-startup-file)
(kill-buffer (get-file-buffer gnus-current-startup-file)))
- ;; Save any cache buffers.
- (when gnus-use-cache
- (gnus-cache-save-buffers))
;; Clear the dribble buffer.
(gnus-dribble-clear)
- ;; Close down NoCeM.
- (when gnus-use-nocem
- (gnus-nocem-close))
- ;; Shut down the demons.
- (when gnus-use-demon
- (gnus-demon-cancel))
;; Kill global KILL file buffer.
(when (get-file-buffer (gnus-newsgroup-kill-file nil))
(kill-buffer (get-file-buffer (gnus-newsgroup-kill-file nil))))
(gnus-kill-buffer nntp-server-buffer)
- ;; Backlog.
- (when gnus-keep-backlog
- (gnus-backlog-shutdown))
;; Kill Gnus buffers.
(while gnus-buffer-list
(gnus-kill-buffer (pop gnus-buffer-list)))
prompt the user for the name of an NNTP server to use.
As opposed to `gnus', this command will not connect to the local server."
(interactive "P")
+ (let ((gnus-group-use-permanent-levels t))
+ (gnus (or arg (1- gnus-level-default-subscribed)) t slave))
(make-local-variable 'gnus-group-use-permanent-levels)
- (setq gnus-group-use-permanent-levels t)
- (gnus (or arg (1- gnus-level-default-subscribed)) t slave))
+ (setq gnus-group-use-permanent-levels t))
;;;###autoload
(defun gnus-slave (&optional arg)
(gnus-message 6 "Deleting group %s...done" group)
(gnus-group-goto-group group)
(gnus-group-kill-group 1 t)
+ (gnus-sethash group nil gnus-active-hashtb)
t))
(gnus-group-position-point)))
gnus-expert-user
(gnus-y-or-n-p "Are you sure you want to quit reading news? "))
(run-hooks 'gnus-exit-gnus-hook)
- ;; Close down GroupLens.
- (when gnus-use-grouplens
- (bbb-logout))
;; Offer to save data from non-quitted summary buffers.
(gnus-offer-save-summaries)
;; Save the newsrc file(s).
(gnus-save-newsrc-file)
;; Kill-em-all.
(gnus-close-backends)
- ;; Shut down the cache.
- (when gnus-use-cache
- (gnus-cache-close))
;; Reset everything.
(gnus-clear-system)
;; Allow the user to do things after cleaning up.
(gnus-remove-some-windows))
(gnus-dribble-save)
(gnus-close-backends)
- ;; Shut down the cache.
- (when gnus-use-cache
- (gnus-cache-close))
(gnus-clear-system)
;; Allow the user to do things after cleaning up.
(run-hooks 'gnus-after-exiting-gnus-hook)))
(gnus-summary-article-intangible-p))
(let ((beg (point)))
(while (and (zerop (forward-line 1))
- (not (gnus-summary-article-intangible-p))))
+ (not (gnus-summary-article-intangible-p))
+ (not (zerop (save-excursion
+ (gnus-summary-thread-level))))))
(if (eobp)
(progn
(goto-char beg)
;; message-id and request it by id instead of number.
(when (and (numberp article)
gnus-summary-buffer
- (buffer-name gnus-summary-buffer))
+ (get-buffer gnus-summary-buffer)
+ (buffer-name (get-buffer gnus-summary-buffer)))
(save-excursion
(set-buffer gnus-summary-buffer)
(let ((header (gnus-summary-article-header article)))
;; Take the article from the original article buffer
;; and place it in the buffer it's supposed to be in.
- (setq gnus-original-article (cons group article))
(when (and (get-buffer gnus-article-buffer)
(equal (buffer-name (current-buffer))
(buffer-name (get-buffer gnus-article-buffer))))
(save-excursion
+ (setq gnus-original-article (cons group article))
(if (get-buffer gnus-original-article-buffer)
(set-buffer (get-buffer gnus-original-article-buffer))
(set-buffer (get-buffer-create gnus-original-article-buffer))
(nconc (list 'gnus-type 'signature)
gnus-hidden-properties))))))))
+(defun gnus-article-strip-leading-blank-lines ()
+ "Remove all blank lines from the beginning of the article."
+ (interactive)
+ (save-excursion
+ (set-buffer gnus-article-buffer)
+ (let (buffer-read-only)
+ (goto-char (point-min))
+ (when (search-forward "\n\n" nil t)
+ (while (looking-at "[ \t]$")
+ (gnus-delete-line))))))
+
(defun gnus-narrow-to-signature ()
"Narrow to the signature."
(widen)
(defun gnus-gnus-to-newsrc-format ()
;; Generate and save the .newsrc file.
- (let ((newsrc (cdr gnus-newsrc-alist))
- info ranges range)
- (save-excursion
- (set-buffer (create-file-buffer gnus-current-startup-file))
+ (save-excursion
+ (set-buffer (create-file-buffer gnus-current-startup-file))
+ (let ((newsrc (cdr gnus-newsrc-alist))
+ (standard-output (current-buffer))
+ info ranges range)
(setq buffer-file-name gnus-current-startup-file)
(buffer-disable-undo (current-buffer))
(erase-buffer)
(insert " ")
(if (not (listp (cdr ranges)))
(if (= (car ranges) (cdr ranges))
- (insert (int-to-string (car ranges)))
- (insert (int-to-string (car ranges)) "-"
- (int-to-string (cdr ranges))))
+ (princ (car ranges))
+ (princ (car ranges))
+ (insert "-")
+ (princ (cdr ranges)))
(while ranges
(setq range (car ranges)
ranges (cdr ranges))
(if (or (atom range) (= (car range) (cdr range)))
- (insert (int-to-string
- (or (and (atom range) range)
- (car range))))
- (insert (int-to-string (car range)) "-"
- (int-to-string (cdr range))))
+ (princ (or (and (atom range) range) (car range)))
+ (princ (car range))
+ (insert "-")
+ (princ (cdr range)))
(if ranges (insert ",")))))
(insert "\n")))
(make-local-variable 'version-control)
(when (looking-at "[^ \t]+[ \t]+\\(.*\\)")
(match-string 1)))))
+\f
+;;;
+;;; Shutdown
+;;;
+
+(defvar gnus-shutdown-alist nil)
+
+(defun gnus-add-shutdown (function &rest symbols)
+ "Run FUNCTION whenever one of SYMBOLS is shut down."
+ (push (cons function symbols) gnus-shutdown-alist))
+
+(defun gnus-shutdown (symbol)
+ "Shut down everything that waits for SYMBOL."
+ (let ((alist gnus-shutdown-alist)
+ entry)
+ (while (setq entry (pop alist))
+ (when (memq symbol (cdr entry))
+ (funcall (car entry))))))
+
\f
;;;
;;; Buffering of read articles.
(unless gnus-backlog-hashtb
(setq gnus-backlog-hashtb (make-vector 1023 0))))
+(gnus-add-shutdown 'gnus-backlog-shutdown 'gnus)
+
(defun gnus-backlog-shutdown ()
"Clear all backlog variables and buffers."
(when (get-buffer gnus-backlog-buffer)
\(& SPLIT...): Process each SPLIT expression.
FIELD must match a complete field name. VALUE must match a complete
-word according to the fundamental mode syntax table. You can use .*
-in the regexps to match partial field names or words.
+word according to the `nnmail-split-fancy-syntax-table' syntax table.
+You can use .* in the regexps to match partial field names or words.
FIELD and VALUE can also be lisp symbols, in that case they are expanded
as specified in `nnmail-split-abbrev-alist'.
;;; Internal variables.
+(defvar nnmail-split-fancy-syntax-table
+ (copy-syntax-table (standard-syntax-table))
+ "Syntax table used by `nnmail-split-fancy'.")
+
\f
(defconst nnmail-version "nnmail 1.0"
(if (re-search-forward delim nil t)
(when (or (looking-at "[^\n :]+ *:")
(looking-at delim)
- (looking-at (concat ">" delim)))
+ (looking-at (concat ">" rmail-unix-mail-delimiter)))
(forward-line -1)
(setq found 'yes))
(setq found 'no)))
;; message separator or a blank line followed by the separator.
;; The blank line should probably be deleted. If neither of the
;; three is met, the content-length header is probably invalid.
- (when content-length
- (forward-line 1)
- (setq skip (+ (point) content-length))
- (when (or (= skip (point-max))
- (and (< skip (point-max))
- (goto-char skip)
- (or (looking-at delim)
- (and (looking-at
- (concat "[ \t]*\n\\(" delim "\\)"))
- (setq skip (match-beginning 1))))))
- (setq end skip)))
(when content-length
(forward-line 1)
(setq skip (+ (point) content-length))
(defun nnmail-split-fancy ()
"Fancy splitting method.
See the documentation for the variable `nnmail-split-fancy' for documentation."
- (nnmail-split-it nnmail-split-fancy))
+ (let ((syntab (syntax-table)))
+ (unwind-protect
+ (progn
+ (set-syntax-table nnmail-split-fancy-syntax-table)
+ (nnmail-split-it nnmail-split-fancy))
+ (set-syntax-table syntab))))
(defvar nnmail-split-cache nil)
;; Alist of split expressions their equivalent regexps.
(beginning-of-line)
(insert "Original-"))
(beginning-of-line)
- (insert "Message-ID: " newid "\n")
- (insert "Gnus-Warning: This is a duplication of message "
- message-id "\n")
+ (insert
+ "Message-ID: " newid "\n"
+ "Gnus-Warning: This is a duplicate of message " message-id "\n")
(nnmail-cache-insert newid)
(funcall func)))
(t
(defvar nnml-directory "~/Mail/"
"Mail spool directory.")
-(defvar nnml-active-file (concat nnml-directory "active")
+(defvar nnml-active-file
+ (concat (file-name-as-directory nnml-directory) "active")
"Mail active file.")
-(defvar nnml-newsgroups-file (concat nnml-directory "newsgroups")
+(defvar nnml-newsgroups-file
+ (concat (file-name-as-directory nnml-directory) "newsgroups")
"Mail newsgroups description file.")
(defvar nnml-get-new-mail t
(let ((nntp-server-buffer (or buffer nntp-server-buffer))
(art (or (and (numberp id) (int-to-string id)) id)))
(prog1
- (and (nntp-send-command "^\\.\r?\n" "ARTICLE" art)
+ (and (nntp-send-command
+ ;; A bit odd regexp to ensure working over rlogin.
+ "^\\.\\(\r?\n\\|\r$\\)" "ARTICLE" art)
(if (numberp id)
(cons nntp-current-group id)
;; We find out what the article number was.
(setq wait t)
(while wait
(goto-char (point-max))
- (forward-line -1)
+ (if (bolp) (forward-line -1) (beginning-of-line))
(if (looking-at regexp)
(setq wait nil)
(when nntp-debug-read
(gnus-request-group cgroup t))
(setq prefix (gnus-group-real-prefix cgroup))
(when (setq result (gnus-retrieve-headers
- (list (caddr article)) cgroup fetch-old))
+ (list (caddr article)) cgroup nil))
(set-buffer nntp-server-buffer)
(if (zerop (buffer-size))
(nconc (assq cgroup unfetched) (list (caddr article)))
+Sat Mar 9 07:00:48 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.texi (Fancy Mail Splitting): Addition.
+
Sat Mar 9 00:32:23 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
* gnus.texi (Summary Buffer Lines): Change.
an alist of cons cells, where the car of the cells contains the key, and
the cdr contains a string.
+@vindex nnmail-split-fancy-syntax-table
+@code{nnmail-split-fancy-syntax-table} is the syntax table in effect
+when all this splitting is performed.
+
@node Mail and Procmail
@subsection Mail and Procmail
@vindex gnus-score-mode-hook
@code{gnus-score-menu-hook} is run in score mode buffers.
+In the summary buffer you can use commands like @kbd{V f} and @kbd{V
+e} to begin editing score files.
+
@node Adaptive Scoring
@section Adaptive Scoring