*** pub/sgnus/lisp/gnus-cache.el Sat Mar 9 02:47:40 1996 --- sgnus/lisp/gnus-cache.el Sun Mar 10 01:38:16 1996 *************** *** 68,73 **** --- 68,75 ---- "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) *************** *** 303,308 **** --- 305,311 ---- 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 *** pub/sgnus/lisp/gnus-demon.el Sat Mar 9 02:47:40 1996 --- sgnus/lisp/gnus-demon.el Sun Mar 10 00:28:17 1996 *************** *** 99,104 **** --- 99,106 ---- (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) *** pub/sgnus/lisp/gnus-gl.el Sat Mar 9 02:47:40 1996 --- sgnus/lisp/gnus-gl.el Sun Mar 10 00:19:14 1996 *************** *** 304,309 **** --- 304,311 ---- (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 *** pub/sgnus/lisp/gnus-msg.el Sat Mar 9 02:47:41 1996 --- sgnus/lisp/gnus-msg.el Mon Mar 11 20:51:52 1996 *************** *** 1017,1023 **** 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))) nil))))) (defun gnus-tokenize-header (header &optional separator) --- 1017,1024 ---- 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) ! (current-buffer))) nil))))) (defun gnus-tokenize-header (header &optional separator) *************** *** 1227,1288 **** ;; 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)))) ! ;; Added by Per Abrahamsen . ;; 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"))))))) ;; 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]+" ",")))) (defun gnus-inews-remove-headers () (let ((case-fold-search t) --- 1228,1288 ---- ;; Correct newsgroups field: change sequence of spaces to comma and ;; eliminate spaces around commas. Eliminate imbedded line breaks. (goto-char (point-min)) ! (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 . ;; Help save the the world! ! (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)) ! (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) *************** *** 1812,1818 **** (forward-char -1) (save-restriction (narrow-to-region beg (point)) ! (nnheader-remove-header gnus-ignored-resent-headers t)) (insert mail-header-separator) ;; Rename all old ("Also-")Resent headers. (while (re-search-backward "^\\(Also-\\)?Resent-" beg t) --- 1812,1819 ---- (forward-char -1) (save-restriction (narrow-to-region beg (point)) ! (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) *************** *** 3056,3061 **** --- 3057,3067 ---- (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. *** pub/sgnus/lisp/gnus-nocem.el Sat Mar 9 02:47:42 1996 --- sgnus/lisp/gnus-nocem.el Sun Mar 10 00:28:18 1996 *************** *** 215,220 **** --- 215,222 ---- (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 *** pub/sgnus/lisp/gnus-score.el Sat Mar 9 02:47:43 1996 --- sgnus/lisp/gnus-score.el Tue Mar 12 03:16:06 1996 *************** *** 1046,1054 **** (setq scores news news nil) (when (and gnus-summary-default-score ! scores ! (> (length gnus-newsgroup-headers) ! (length gnus-newsgroup-scored))) (let* ((entries gnus-header-index) (now (gnus-day-number (current-time-string))) (expire (and gnus-score-expiry-days --- 1046,1052 ---- (setq scores news news nil) (when (and gnus-summary-default-score ! scores) (let* ((entries gnus-header-index) (now (gnus-day-number (current-time-string))) (expire (and gnus-score-expiry-days *************** *** 1896,1905 **** gnus-short-name-score-file-cache nil) (gnus-message 6 "The score cache is now flushed")) (defun gnus-score-close () "Clear all internal score variables." (setq gnus-score-cache nil ! gnus-internal-global-score-files nil)) ;; Summary score marking commands. --- 1894,1907 ---- 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-score-file-list nil ! gnus-score-file-alist-cache nil)) ;; Summary score marking commands. *************** *** 1980,1988 **** (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))))) ;; We want long file names. (when (or (not gnus-score-file-list) (not (car gnus-score-file-list)) --- 1982,1993 ---- (setq gnus-score-file-list (cons nil (or gnus-short-name-score-file-cache ! (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)) *************** *** 2012,2018 **** ;; Add files to the list of score files. ((string-match regexp file) (push file out)))) ! out)) (defun gnus-score-file-regexp () "Return a regexp that match all score files." --- 2017,2025 ---- ;; Add files to the list of score files. ((string-match regexp file) (push file 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." *** pub/sgnus/lisp/gnus-soup.el Sat Mar 9 02:47:43 1996 --- sgnus/lisp/gnus-soup.el Mon Mar 11 21:44:52 1996 *************** *** 271,282 **** (gnus-range-length (cdr (assq 'tick (gnus-info-marks (nth 2 entry))))))) (when (gnus-summary-read-group group nil t) ! (let ((gnus-newsgroup-processable (if (not not-all) ! (reverse (append gnus-newsgroup-marked ! gnus-newsgroup-unreads)) ! (reverse gnus-newsgroup-unreads)))) ! (gnus-soup-add-article nil)) (gnus-summary-exit))))) (defun gnus-soup-insert-idx (offset header) --- 271,282 ---- (gnus-range-length (cdr (assq 'tick (gnus-info-marks (nth 2 entry))))))) (when (gnus-summary-read-group group nil t) ! (setq gnus-newsgroup-processable ! (reverse (if (not not-all) ! (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) *** pub/sgnus/lisp/gnus-topic.el Sat Mar 9 02:47:43 1996 --- sgnus/lisp/gnus-topic.el Sun Mar 10 00:28:10 1996 *************** *** 56,61 **** --- 56,64 ---- ;; 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) *************** *** 337,342 **** --- 340,353 ---- (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. *************** *** 670,676 **** (gnus-topic-fold all)) (gnus-group-read-group all no-article group))) ! (defun gnus-topic-create-topic (topic parent &optional previous) (interactive (list (read-string "Create topic: ") --- 681,687 ---- (gnus-topic-fold all)) (gnus-group-read-group all no-article group))) ! (defun gnus-topic-create-topic (topic parent &optional previous full-topic) (interactive (list (read-string "Create topic: ") *************** *** 681,687 **** (error "Topic aleady exists")) (unless parent (setq parent (caar gnus-topic-topology))) ! (let ((top (cdr (gnus-topic-find-topology parent)))) (unless top (error "No such parent topic: %s" parent)) (if previous --- 692,699 ---- (error "Topic aleady exists")) (unless parent (setq parent (caar gnus-topic-topology))) ! (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 *************** *** 689,696 **** (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))))) (unless (assoc topic gnus-topic-alist) (push (list topic) gnus-topic-alist))) (gnus-topic-enter-dribble) --- 701,708 ---- (while (and (cdr top) (not (equal (caaadr top) previous))) (setq top (cdr top))) ! (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) *************** *** 717,726 **** (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-copy-group (n topic) "Copy the current group to a topic." --- 729,744 ---- (gnus-topic-enter-dribble) (gnus-group-list-groups)) ! (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." *************** *** 820,828 **** (interactive "p") (if gnus-topic-killed-topics (let ((previous (gnus-group-parent-topic)) ! (item (nth 1 (pop gnus-topic-killed-topics)))) (gnus-topic-create-topic ! (car item) (gnus-topic-parent-topic previous) previous)) (let* ((prev (gnus-group-group-name)) (gnus-topic-inhibit-change-level t) (gnus-group-indentation --- 838,847 ---- (interactive "p") (if gnus-topic-killed-topics (let ((previous (gnus-group-parent-topic)) ! (item (cdr (pop gnus-topic-killed-topics)))) (gnus-topic-create-topic ! (caar item) (gnus-topic-parent-topic previous) previous ! item)) (let* ((prev (gnus-group-group-name)) (gnus-topic-inhibit-change-level t) (gnus-group-indentation *************** *** 870,876 **** "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))) (while groups (funcall (if unmark 'gnus-group-remove-mark 'gnus-group-set-mark) (gnus-info-group (nth 2 (pop groups)))))))) --- 889,895 ---- "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 9 t))) (while groups (funcall (if unmark 'gnus-group-remove-mark 'gnus-group-set-mark) (gnus-info-group (nth 2 (pop groups)))))))) *** pub/sgnus/lisp/gnus-vis.el Sat Mar 9 02:47:46 1996 --- sgnus/lisp/gnus-vis.el Tue Mar 12 02:44:37 1996 *************** *** 1423,1429 **** 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))))) --- 1423,1428 ---- *** pub/sgnus/lisp/gnus.el Sat Mar 9 02:47:48 1996 --- sgnus/lisp/gnus.el Tue Mar 12 03:24:04 1996 *************** *** 1349,1356 **** "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.") ;; Hooks. --- 1349,1357 ---- "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.") ;; Hooks. *************** *** 1551,1559 **** (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. --- 1552,1557 ---- *************** *** 1717,1723 **** "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)" "The mail address of the Gnus maintainers.") ! (defconst gnus-version "September Gnus v0.51" "Version number for this version of Gnus.") (defvar gnus-info-nodes --- 1715,1721 ---- "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)" "The mail address of the Gnus maintainers.") ! (defconst gnus-version "September Gnus v0.52" "Version number for this version of Gnus.") (defvar gnus-info-nodes *************** *** 3104,3142 **** gnus-active-hashtb nil gnus-moderated-list nil gnus-description-hashtb 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)) ;; 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))) --- 3102,3126 ---- 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-opened-servers nil gnus-current-select-method nil) ! (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))) ;; Clear the dribble buffer. (gnus-dribble-clear) ;; 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) ;; Kill Gnus buffers. (while gnus-buffer-list (gnus-kill-buffer (pop gnus-buffer-list))) *************** *** 4180,4188 **** 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") (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)) ;;;###autoload (defun gnus-slave (&optional arg) --- 4164,4173 ---- 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)) ;;;###autoload (defun gnus-slave (&optional arg) *************** *** 5415,5420 **** --- 5400,5406 ---- (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))) *************** *** 6536,6553 **** 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. --- 6522,6533 ---- *************** *** 6581,6589 **** (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))) --- 6561,6566 ---- *************** *** 12349,12355 **** (gnus-summary-article-intangible-p)) (let ((beg (point))) (while (and (zerop (forward-line 1)) ! (not (gnus-summary-article-intangible-p)))) (if (eobp) (progn (goto-char beg) --- 12326,12334 ---- (gnus-summary-article-intangible-p)) (let ((beg (point))) (while (and (zerop (forward-line 1)) ! (not (gnus-summary-article-intangible-p)) ! (not (zerop (save-excursion ! (gnus-summary-thread-level)))))) (if (eobp) (progn (goto-char beg) *************** *** 13172,13178 **** ;; message-id and request it by id instead of number. (when (and (numberp article) gnus-summary-buffer ! (buffer-name gnus-summary-buffer)) (save-excursion (set-buffer gnus-summary-buffer) (let ((header (gnus-summary-article-header article))) --- 13151,13158 ---- ;; message-id and request it by id instead of number. (when (and (numberp article) 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))) *************** *** 13234,13244 **** ;; 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 (if (get-buffer gnus-original-article-buffer) (set-buffer (get-buffer gnus-original-article-buffer)) (set-buffer (get-buffer-create gnus-original-article-buffer)) --- 13214,13224 ---- ;; 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 + (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)) *************** *** 13812,13817 **** --- 13792,13808 ---- (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) *************** *** 16218,16227 **** (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)) (setq buffer-file-name gnus-current-startup-file) (buffer-disable-undo (current-buffer)) (erase-buffer) --- 16209,16219 ---- (defun gnus-gnus-to-newsrc-format () ;; Generate and save the .newsrc 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) *************** *** 16238,16255 **** (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)))) (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)))) (if ranges (insert ","))))) (insert "\n"))) (make-local-variable 'version-control) --- 16230,16247 ---- (insert " ") (if (not (listp (cdr ranges))) (if (= (car ranges) (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))) ! (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) *************** *** 16403,16408 **** --- 16395,16419 ---- ;;; + ;;; 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)))))) + + + ;;; ;;; Buffering of read articles. ;;; *************** *** 16424,16429 **** --- 16435,16442 ---- "Initialize backlog variables." (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." *** pub/sgnus/lisp/nnmail.el Sat Mar 9 02:47:48 1996 --- sgnus/lisp/nnmail.el Mon Mar 11 20:51:18 1996 *************** *** 204,211 **** \(& 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. FIELD and VALUE can also be lisp symbols, in that case they are expanded as specified in `nnmail-split-abbrev-alist'. --- 204,211 ---- \(& SPLIT...): Process each SPLIT expression. FIELD must match a complete field name. VALUE must match a complete ! 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'. *************** *** 261,266 **** --- 261,270 ---- ;;; Internal variables. + (defvar nnmail-split-fancy-syntax-table + (copy-syntax-table (standard-syntax-table)) + "Syntax table used by `nnmail-split-fancy'.") + (defconst nnmail-version "nnmail 1.0" *************** *** 531,537 **** (if (re-search-forward delim nil t) (when (or (looking-at "[^\n :]+ *:") (looking-at delim) ! (looking-at (concat ">" delim))) (forward-line -1) (setq found 'yes)) (setq found 'no))) --- 535,541 ---- (if (re-search-forward delim nil t) (when (or (looking-at "[^\n :]+ *:") (looking-at delim) ! (looking-at (concat ">" rmail-unix-mail-delimiter))) (forward-line -1) (setq found 'yes)) (setq found 'no))) *************** *** 596,612 **** (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)) (goto-char skip) (cond ((or (= skip (point-max)) (= (1+ skip) (point-max))) --- 600,605 ---- *************** *** 830,836 **** (defun nnmail-split-fancy () "Fancy splitting method. See the documentation for the variable `nnmail-split-fancy' for documentation." ! (nnmail-split-it nnmail-split-fancy)) (defvar nnmail-split-cache nil) ;; Alist of split expressions their equivalent regexps. --- 823,834 ---- (defun nnmail-split-fancy () "Fancy splitting method. See the documentation for the variable `nnmail-split-fancy' for documentation." ! (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. *************** *** 1058,1066 **** (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") (nnmail-cache-insert newid) (funcall func))) (t --- 1056,1064 ---- (beginning-of-line) (insert "Original-")) (beginning-of-line) ! (insert ! "Message-ID: " newid "\n" ! "Gnus-Warning: This is a duplicate of message " message-id "\n") (nnmail-cache-insert newid) (funcall func))) (t *** pub/sgnus/lisp/nnml.el Sat Mar 9 02:47:48 1996 --- sgnus/lisp/nnml.el Sun Mar 10 22:34:38 1996 *************** *** 37,46 **** (defvar nnml-directory "~/Mail/" "Mail spool directory.") ! (defvar nnml-active-file (concat nnml-directory "active") "Mail active file.") ! (defvar nnml-newsgroups-file (concat nnml-directory "newsgroups") "Mail newsgroups description file.") (defvar nnml-get-new-mail t --- 37,48 ---- (defvar nnml-directory "~/Mail/" "Mail spool directory.") ! (defvar nnml-active-file ! (concat (file-name-as-directory nnml-directory) "active") "Mail active file.") ! (defvar nnml-newsgroups-file ! (concat (file-name-as-directory nnml-directory) "newsgroups") "Mail newsgroups description file.") (defvar nnml-get-new-mail t *** pub/sgnus/lisp/nntp.el Sat Mar 9 02:47:49 1996 --- sgnus/lisp/nntp.el Sat Mar 9 07:47:52 1996 *************** *** 503,509 **** (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) (if (numberp id) (cons nntp-current-group id) ;; We find out what the article number was. --- 503,511 ---- (let ((nntp-server-buffer (or buffer nntp-server-buffer)) (art (or (and (numberp id) (int-to-string id)) id))) (prog1 ! (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. *************** *** 882,888 **** (setq wait t) (while wait (goto-char (point-max)) ! (forward-line -1) (if (looking-at regexp) (setq wait nil) (when nntp-debug-read --- 884,890 ---- (setq wait t) (while wait (goto-char (point-max)) ! (if (bolp) (forward-line -1) (beginning-of-line)) (if (looking-at regexp) (setq wait nil) (when nntp-debug-read *** pub/sgnus/lisp/nnvirtual.el Sat Mar 9 02:47:49 1996 --- sgnus/lisp/nnvirtual.el Mon Mar 11 20:51:20 1996 *************** *** 80,86 **** (gnus-request-group cgroup t)) (setq prefix (gnus-group-real-prefix cgroup)) (when (setq result (gnus-retrieve-headers ! (list (caddr article)) cgroup fetch-old)) (set-buffer nntp-server-buffer) (if (zerop (buffer-size)) (nconc (assq cgroup unfetched) (list (caddr article))) --- 80,86 ---- (gnus-request-group cgroup t)) (setq prefix (gnus-group-real-prefix cgroup)) (when (setq result (gnus-retrieve-headers ! (list (caddr article)) cgroup nil)) (set-buffer nntp-server-buffer) (if (zerop (buffer-size)) (nconc (assq cgroup unfetched) (list (caddr article))) *** pub/sgnus/lisp/ChangeLog Sat Mar 9 02:47:56 1996 --- sgnus/lisp/ChangeLog Tue Mar 12 03:24:05 1996 *************** *** 1,5 **** --- 1,90 ---- + Tue Mar 12 01:42:11 1996 Lars Magne Ingebrigtsen + + * 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 + + * 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 + + * 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 + + * 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 + + * nntp.el (nntp-request-article): New wait-for regexp to work with + rlogin. + + Sat Mar 9 07:21:57 1996 Lars Magne Ingebrigtsen + + * 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 + + * nnmail.el (nnmail-split-fancy-syntax-table): New variable. + + Fri Mar 8 12:58:37 1996 Wes Hardaker + + * 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 + * gnus.el: 0.51 is released. + * gnus-msg.el (gnus-tokenize-header): Wouldn't do the right thing under XEmacs. *************** *** 34,39 **** --- 119,126 ---- * gnus-xmas.el (gnus-xmas-menu-add): New macro. Fri Mar 8 00:03:14 1996 Lars Magne Ingebrigtsen + + * gnus.el: 0.50 is released. * gnus.el (gnus-group-yank-group): Would bug out on groups with scores. *** pub/sgnus/texi/gnus.texi Sat Mar 9 02:47:58 1996 --- sgnus/texi/gnus.texi Mon Mar 11 20:52:13 1996 *************** *** 8295,8300 **** --- 8295,8304 ---- 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 *************** *** 10043,10048 **** --- 10047,10055 ---- @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 *** pub/sgnus/texi/ChangeLog Sat Mar 9 02:47:56 1996 --- sgnus/texi/ChangeLog Sat Mar 9 07:48:44 1996 *************** *** 1,3 **** --- 1,7 ---- + Sat Mar 9 07:00:48 1996 Lars Magne Ingebrigtsen + + * gnus.texi (Fancy Mail Splitting): Addition. + Sat Mar 9 00:32:23 1996 Lars Magne Ingebrigtsen * gnus.texi (Summary Buffer Lines): Change.