*** pub/qgnus/lisp/dgnushack.el Wed Sep 17 03:33:29 1997 --- qgnus/lisp/dgnushack.el Sat Sep 20 23:33:28 1997 *************** *** 31,36 **** --- 31,37 ---- (require 'cl) (require 'bytecomp) (push "." load-path) + (push "~/lisp/custom" load-path) (require 'lpath) (defalias 'device-sound-enabled-p 'ignore) *** pub/qgnus/lisp/gnus-agent.el Thu Sep 18 05:00:57 1997 --- qgnus/lisp/gnus-agent.el Sat Sep 20 23:33:28 1997 *************** *** 243,254 **** --- 243,264 ---- agent minor mode in all Gnus buffers." (interactive) (add-hook 'gnus-before-startup-hook 'gnus-open-agent) + (add-hook 'gnus-setup-news-hook 'gnus-agent-queue-setup) (unless gnus-agent-send-mail-function (setq gnus-agent-send-mail-function message-send-mail-function message-send-mail-function 'gnus-agent-send-mail)) (unless gnus-agent-covered-methods (setq gnus-agent-covered-methods (list gnus-select-method)))) + (defun gnus-agent-queue-setup () + "Make sure the queue group exists." + (unless (gnus-gethash "nndraft:queue" gnus-newsrc-hashtb) + (gnus-request-create-group "queue" '(nndraft "")) + (let ((gnus-level-default-subscribed 1)) + (gnus-subscribe-group "nndraft:queue" nil '(nndraft ""))) + (gnus-group-set-parameter + "nndraft:queue" 'gnus-dummy '((gnus-draft-mode))))) + (defun gnus-agent-send-mail () (if gnus-plugged (funcall gnus-agent-send-mail-function) *************** *** 256,262 **** (re-search-forward (concat "^" (regexp-quote mail-header-separator) "\n")) (replace-match "\n") ! (gnus-request-accept-article "nndraft:drafts"))) ;;; ;;; Group mode commands --- 266,272 ---- (re-search-forward (concat "^" (regexp-quote mail-header-separator) "\n")) (replace-match "\n") ! (gnus-request-accept-article "nndraft:queue"))) ;;; ;;; Group mode commands *** pub/qgnus/lisp/gnus-draft.el Wed Sep 17 03:33:31 1997 --- qgnus/lisp/gnus-draft.el Sat Sep 20 23:33:28 1997 *************** *** 88,94 **** (interactive) (gnus-set-global-variables) (let ((article (gnus-summary-article-number))) ! (gnus-draft-setup article) (push `((lambda () (when (buffer-name (get-buffer ,gnus-summary-buffer)) --- 88,94 ---- (interactive) (gnus-set-global-variables) (let ((article (gnus-summary-article-number))) ! (gnus-draft-setup article gnus-newsgroup-name) (push `((lambda () (when (buffer-name (get-buffer ,gnus-summary-buffer)) *************** *** 112,118 **** (defun gnus-draft-send (article) "Send message ARTICLE." ! (gnus-draft-setup article) (message-send-and-exit)) (defun gnus-draft-send-all-messages () --- 112,119 ---- (defun gnus-draft-send (article) "Send message ARTICLE." ! (message "In gnus-draft-send, article is %s" article) ! (gnus-draft-setup article "nndraft:queue") (message-send-and-exit)) (defun gnus-draft-send-all-messages () *************** *** 122,136 **** (gnus-draft-send-message)) (defun gnus-group-send-drafts () ! "Send all sendable articles from the draft group." (interactive) ! (gnus-request-group "nndraft:drafts") (save-excursion (let ((articles (nndraft-articles)) (unsendable (gnus-uncompress-range (cdr (assq 'unsend (gnus-info-marks ! (gnus-get-info "nndraft:drafts")))))) article) (while (setq article (pop articles)) (unless (memq article unsendable) --- 123,137 ---- (gnus-draft-send-message)) (defun gnus-group-send-drafts () ! "Send all sendable articles from the queue group." (interactive) ! (gnus-request-group "nndraft:queue") (save-excursion (let ((articles (nndraft-articles)) (unsendable (gnus-uncompress-range (cdr (assq 'unsend (gnus-info-marks ! (gnus-get-info "nndraft:queue")))))) article) (while (setq article (pop articles)) (unless (memq article unsendable) *************** *** 138,149 **** ;;; Utility functions ! (defun gnus-draft-setup (article) (gnus-setup-message 'forward (message-mail) (erase-buffer) ! (if (not (gnus-request-restore-buffer ! article (or gnus-newsgroup-name "nndraft:drafts"))) (error "Couldn't restore the article") ;; Insert the separator. (goto-char (point-min)) --- 139,151 ---- ;;; Utility functions ! (defun gnus-draft-setup (article group) ! (message "In gnus-draft-setup, article is %s %s" article group) (gnus-setup-message 'forward (message-mail) (erase-buffer) ! (message "Article is %s" article) ! (if (not (gnus-request-restore-buffer article group)) (error "Couldn't restore the article") ;; Insert the separator. (goto-char (point-min)) *************** *** 160,163 **** (provide 'gnus-draft) ;;; gnus-draft.el ends here - --- 162,164 ---- *** pub/qgnus/lisp/gnus-start.el Wed Sep 17 03:33:32 1997 --- qgnus/lisp/gnus-start.el Sat Sep 20 23:33:29 1997 *************** *** 348,353 **** --- 348,358 ---- :group 'gnus-start :type 'hook) + (defcustom gnus-setup-news-hook nil + "A hook after reading the .newsrc file, but before generating the buffer." + :group 'gnus-start + :type 'hook) + (defcustom gnus-get-new-news-hook nil "A hook run just before Gnus checks for new news." :group 'gnus-group-new *************** *** 690,695 **** --- 695,701 ---- ;; Do the actual startup. (gnus-setup-news nil level dont-connect) + (run-hooks 'gnus-setup-news-hook) (gnus-start-draft-setup) ;; Generate the group buffer. (gnus-group-list-groups level) *** pub/qgnus/lisp/gnus.el Thu Sep 18 05:00:58 1997 --- qgnus/lisp/gnus.el Sat Sep 20 23:33:30 1997 *************** *** 244,250 **** :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) ! (defconst gnus-version-number "0.7" "Version number for this version of Gnus.") (defconst gnus-version (format "Quassia Gnus v%s" gnus-version-number) --- 244,250 ---- :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) ! (defconst gnus-version-number "0.8" "Version number for this version of Gnus.") (defconst gnus-version (format "Quassia Gnus v%s" gnus-version-number) *** pub/qgnus/lisp/message.el Thu Sep 18 05:00:59 1997 --- qgnus/lisp/message.el Sat Sep 20 23:33:31 1997 *************** *** 3035,3048 **** (defun message-set-auto-save-file-name () "Associate the message buffer with a file in the drafts directory." (when message-autosave-directory ! (setq message-draft-article (nndraft-request-associate-buffer "drafts")) ! (clear-visited-file-modtime))) (defun message-disassociate-draft () "Disassociate the message buffer from the drafts directory." (when message-draft-article ! (nndraft-request-expire-articles ! (list message-draft-article) "drafts" nil t))) --- 3035,3071 ---- (defun message-set-auto-save-file-name () "Associate the message buffer with a file in the drafts directory." (when message-autosave-directory ! (cond ! ((fboundp 'nndraft-request-associate-buffer) ! (setq message-draft-article (nndraft-request-associate-buffer "drafts")) ! (clear-visited-file-modtime)) ! (t (unless (file-exists-p message-autosave-directory) ! (make-directory message-autosave-directory t)) ! (let ((name (make-temp-name ! (expand-file-name ! (concat (file-name-as-directory ! message-autosave-directory) ! "msg." ! (message-replace-chars-in-string ! (message-replace-chars-in-string ! (buffer-name) ?* ?.) ! ?/ ?-)))))) ! (setq buffer-auto-save-file-name ! (save-excursion ! (prog1 ! (progn ! (set-buffer (get-buffer-create " *draft tmp*")) ! (setq buffer-file-name name) ! (make-auto-save-file-name)) ! (kill-buffer (current-buffer))))) ! (clear-visited-file-modtime)))))) (defun message-disassociate-draft () "Disassociate the message buffer from the drafts directory." (when message-draft-article ! (if (fboundp 'nndraft-request-expire-articles) ! (nndraft-request-expire-articles ! (list message-draft-article) "drafts" nil t)))) *************** *** 3722,3727 **** --- 3745,3765 ---- (set (make-local-variable (car local)) (cdr local))))) locals))) + + ;;; Miscellaneous functions + + ;; stolen (and renamed) from nnheader.el + (defun message-replace-chars-in-string (string from to) + "Replace characters in STRING from FROM to TO." + (let ((string (substring string 0)) ;Copy string. + (len (length string)) + (idx 0)) + ;; Replace all occurrences of FROM with TO. + (while (< idx len) + (when (= (aref string idx) from) + (aset string idx to)) + (setq idx (1+ idx))) + string)) (run-hooks 'message-load-hook) *** pub/qgnus/lisp/nnagent.el Wed Sep 17 03:33:36 1997 --- qgnus/lisp/nnagent.el Sat Sep 20 23:33:31 1997 *************** *** 105,111 **** nil) (deffoo nnagent-request-post (&optional server) ! (gnus-request-accept-article "nndraft:drafts")) ;; Use nnml functions for just about everything. (nnoo-import nnagent --- 105,111 ---- nil) (deffoo nnagent-request-post (&optional server) ! (gnus-request-accept-article "nndraft:queue")) ;; Use nnml functions for just about everything. (nnoo-import nnagent *** pub/qgnus/lisp/nndraft.el Thu Sep 18 05:00:59 1997 --- qgnus/lisp/nndraft.el Sat Sep 20 23:33:31 1997 *************** *** 37,49 **** (defvoo nndraft-directory (nnheader-concat gnus-directory "drafts/") "Where nndraft will store its files." ! nnmh-current-directory) (defvoo nndraft-current-group "" nil nnmh-current-group) - (defvoo nndraft-top-directory nil nil nnmh-directory) (defvoo nndraft-get-new-mail nil nil nnmh-get-new-mail) (defconst nndraft-version "nndraft 1.0") (defvoo nndraft-status-string "" nil nnmh-status-string) --- 37,49 ---- (defvoo nndraft-directory (nnheader-concat gnus-directory "drafts/") "Where nndraft will store its files." ! nnmh-directory) (defvoo nndraft-current-group "" nil nnmh-current-group) (defvoo nndraft-get-new-mail nil nil nnmh-get-new-mail) + (defvoo nndraft-current-directory nil nil nnmh-current-directory) (defconst nndraft-version "nndraft 1.0") (defvoo nndraft-status-string "" nil nnmh-status-string) *************** *** 55,66 **** (nnoo-define-basics nndraft) (deffoo nndraft-open-server (server &optional defs) - (push `(nndraft-current-group - ,(file-name-nondirectory (directory-file-name nndraft-directory))) - defs) - (push `(nndraft-top-directory - ,(file-name-directory (directory-file-name nndraft-directory))) - defs) (nnoo-change-server 'nndraft server defs) (cond ((not (file-exists-p nndraft-directory)) --- 55,60 ---- *************** *** 76,81 **** --- 70,76 ---- t))) (deffoo nndraft-retrieve-headers (articles &optional group server fetch-old) + (nndraft-possibly-change-group group) (save-excursion (set-buffer nntp-server-buffer) (erase-buffer) *************** *** 106,111 **** --- 101,107 ---- 'headers)))) (deffoo nndraft-request-article (id &optional group server buffer) + (nndraft-possibly-change-group group) (when (numberp id) ;; We get the newest file of the auto-saved file and the ;; "real" file. *************** *** 127,141 **** (deffoo nndraft-request-restore-buffer (article &optional group server) "Request a new buffer that is restored to the state of ARTICLE." (when (nndraft-request-article article group server (current-buffer)) (let ((gnus-verbose-backends nil)) (nndraft-request-expire-articles (list article) group server t)) t)) (deffoo nndraft-request-update-info (group info &optional server) (gnus-info-set-read info ! (gnus-update-read-articles "nndraft:drafts" (nndraft-articles) t)) (let (marks) (when (setq marks (nth 3 info)) (setcar (nthcdr 3 info) --- 123,140 ---- (deffoo nndraft-request-restore-buffer (article &optional group server) "Request a new buffer that is restored to the state of ARTICLE." + (nndraft-possibly-change-group group) (when (nndraft-request-article article group server (current-buffer)) (let ((gnus-verbose-backends nil)) (nndraft-request-expire-articles (list article) group server t)) t)) (deffoo nndraft-request-update-info (group info &optional server) + (nndraft-possibly-change-group group) (gnus-info-set-read info ! (gnus-update-read-articles (gnus-group-prefixed-name group '(nndraft "")) ! (nndraft-articles) t)) (let (marks) (when (setq marks (nth 3 info)) (setcar (nthcdr 3 info) *************** *** 146,151 **** --- 145,151 ---- (deffoo nndraft-request-associate-buffer (group) "Associate the current buffer with some article in the draft group." + (nndraft-possibly-change-group group) (let ((gnus-verbose-backends nil) (buf (current-buffer)) article file) *************** *** 160,165 **** --- 160,166 ---- article)) (deffoo nndraft-request-expire-articles (articles group &optional server force) + (nndraft-possibly-change-group group) (let* ((nnmh-allow-delete-final t) (res (nndraft-execute-nnmh-command `(nnmh-request-expire-articles *************** *** 175,200 **** res)) (deffoo nndraft-request-accept-article (group &optional server last noinsert) (let ((gnus-verbose-backends nil)) (nndraft-execute-nnmh-command `(nnmh-request-accept-article group ,server ,last noinsert)))) (deffoo nndraft-request-create-group (group &optional server args) ! (if (file-exists-p nndraft-directory) ! (if (file-directory-p nndraft-directory) t nil) (condition-case () (progn ! (gnus-make-directory nndraft-directory) t) (file-error nil)))) ;;; Low-Level Interface (defun nndraft-execute-nnmh-command (command) ! (let* ((dir (directory-file-name (expand-file-name nndraft-directory))) (group (file-name-nondirectory dir)) (nnmh-directory (file-name-directory dir)) (nnmail-keep-last-article nil) --- 176,211 ---- res)) (deffoo nndraft-request-accept-article (group &optional server last noinsert) + (nndraft-possibly-change-group group) (let ((gnus-verbose-backends nil)) (nndraft-execute-nnmh-command `(nnmh-request-accept-article group ,server ,last noinsert)))) (deffoo nndraft-request-create-group (group &optional server args) ! (nndraft-possibly-change-group group) ! (if (file-exists-p nndraft-current-directory) ! (if (file-directory-p nndraft-current-directory) t nil) (condition-case () (progn ! (gnus-make-directory nndraft-current-directory) t) (file-error nil)))) ;;; Low-Level Interface + (defun nndraft-possibly-change-group (group) + (when (and group + (not (equal group nndraft-current-group))) + (setq nndraft-current-group group) + (setq nndraft-current-directory + (nnheader-concat nndraft-directory group)))) + (defun nndraft-execute-nnmh-command (command) ! (let* ((dir (directory-file-name ! (expand-file-name nndraft-current-directory))) (group (file-name-nondirectory dir)) (nnmh-directory (file-name-directory dir)) (nnmail-keep-last-article nil) *************** *** 203,209 **** (defun nndraft-article-filename (article &rest args) (apply 'concat ! (file-name-as-directory nndraft-directory) (int-to-string article) args)) --- 214,220 ---- (defun nndraft-article-filename (article &rest args) (apply 'concat ! (file-name-as-directory nndraft-current-directory) (int-to-string article) args)) *************** *** 218,235 **** (defun nndraft-articles () "Return the list of messages in the group." ! (gnus-make-directory nndraft-directory) (sort (mapcar 'string-to-int ! (directory-files nndraft-directory nil "\\`[0-9]+\\'" t)) '<)) ! (nnoo-map-functions nndraft ! (nnmh-retrieve-headers 0 nndraft-current-group 0 0) ! (nnmh-request-group nndraft-current-group 0 0) ! (nnmh-close-group nndraft-current-group 0) ! (nnmh-request-list (nnoo-current-server 'nndraft) nndraft-directory) ! (nnmh-request-newsgroups (nnoo-current-server 'nndraft) nndraft-directory)) (provide 'nndraft) --- 229,247 ---- (defun nndraft-articles () "Return the list of messages in the group." ! (gnus-make-directory nndraft-current-directory) (sort (mapcar 'string-to-int ! (directory-files nndraft-current-directory nil "\\`[0-9]+\\'" t)) '<)) ! (nnoo-import nndraft ! (nnmh ! nnmh-retrieve-headers ! nnmh-request-group ! nnmh-close-group ! nnmh-request-list ! nnmh-request-newsgroups)) (provide 'nndraft) *** pub/qgnus/lisp/nnmh.el Thu Sep 18 05:00:59 1997 --- qgnus/lisp/nnmh.el Sat Sep 20 23:33:32 1997 *************** *** 199,211 **** (let ((dirs (and (file-readable-p dir) (> (nth 1 (file-attributes (file-chase-links dir))) 2) (directory-files dir t nil t))) ! dir) ;; Recurse down directories. ! (while (setq dir (pop dirs)) ! (when (and (not (member (file-name-nondirectory dir) '("." ".."))) ! (file-directory-p dir) ! (file-readable-p dir)) ! (nnmh-request-list-1 dir)))) ;; For each directory, generate an active file line. (unless (string= (expand-file-name nnmh-toplev) dir) (let ((files (mapcar --- 199,213 ---- (let ((dirs (and (file-readable-p dir) (> (nth 1 (file-attributes (file-chase-links dir))) 2) (directory-files dir t nil t))) ! rdir) ;; Recurse down directories. ! (while (setq rdir (pop dirs)) ! (when (and (not (member (file-name-nondirectory rdir) '("." ".."))) ! (file-directory-p rdir) ! (file-readable-p rdir) ! (equal (file-truename rdir) ! (file-truename dir))) ! (nnmh-request-list-1 rdir)))) ;; For each directory, generate an active file line. (unless (string= (expand-file-name nnmh-toplev) dir) (let ((files (mapcar *** pub/qgnus/lisp/ChangeLog Thu Sep 18 05:00:56 1997 --- qgnus/lisp/ChangeLog Sat Sep 20 23:33:27 1997 *************** *** 2,7 **** --- 2,31 ---- * gnus.el: Quassia Gnus v0.1 is released. + Sat Sep 20 23:23:49 1997 Lars Magne Ingebrigtsen + + * gnus.el: Quassia Gnus v0.8 is released. + + Sat Sep 20 20:41:16 1997 Lars Magne Ingebrigtsen + + * gnus-start.el (gnus-setup-news-hook): New hook. + + * gnus-agent.el (gnus-agentize): Really set up queue group. + (gnus-open-agent): Setup queue here. + + Sat Sep 20 20:23:07 1997 Matt Simmons + + * message.el (message-set-auto-save-file-name): Make things work + without drafts. + + Sat Sep 20 18:32:02 1997 Lars Magne Ingebrigtsen + + * nnmh.el (nnmh-request-list-1): Check for links to ".". + + * nndraft.el (nndraft-possibly-change-group): New function. + + * gnus-agent.el (gnus-agent-queue-setup): New function. + Thu Sep 18 04:54:59 1997 Lars Magne Ingebrigtsen * gnus.el: Quassia Gnus v0.7 is released. *** pub/qgnus/texi/gnus.texi Thu Sep 18 05:01:03 1997 --- qgnus/texi/gnus.texi Sat Sep 20 23:33:35 1997 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename gnus ! @settitle Quassia Gnus 0.7 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename gnus ! @settitle Quassia Gnus 0.8 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 309,315 **** @tex @titlepage ! @title Quassia Gnus 0.7 Manual @author by Lars Magne Ingebrigtsen @page --- 309,315 ---- @tex @titlepage ! @title Quassia Gnus 0.8 Manual @author by Lars Magne Ingebrigtsen @page *************** *** 345,351 **** spool or your mbox file. All at the same time, if you want to push your luck. ! This manual corresponds to Quassia Gnus 0.7. @end ifinfo --- 345,351 ---- spool or your mbox file. All at the same time, if you want to push your luck. ! This manual corresponds to Quassia Gnus 0.8. @end ifinfo *************** *** 999,1004 **** --- 999,1009 ---- @vindex gnus-started-hook A hook that is run as the very last thing after starting up Gnus successfully. + + @item gnus-started-hook + @vindex gnus-started-hook + A hook that is run after reading the @file{.newsrc} file(s), but before + generating the group buffer. @item gnus-check-bogus-newsgroups @vindex gnus-check-bogus-newsgroups *** pub/qgnus/texi/message.texi Thu Sep 18 05:01:04 1997 --- qgnus/texi/message.texi Sat Sep 20 23:33:35 1997 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Message 0.7 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Message 0.8 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 39,45 **** @tex @titlepage ! @title Message 0.7 Manual @author by Lars Magne Ingebrigtsen @page --- 39,45 ---- @tex @titlepage ! @title Message 0.8 Manual @author by Lars Magne Ingebrigtsen @page *************** *** 79,85 **** * Key Index:: List of Message mode keys. @end menu ! This manual corresponds to Message 0.7. Message is distributed with the Gnus distribution bearing the same version number as this manual has. --- 79,85 ---- * Key Index:: List of Message mode keys. @end menu ! This manual corresponds to Message 0.8. Message is distributed with the Gnus distribution bearing the same version number as this manual has. *** pub/qgnus/texi/ChangeLog Thu Sep 18 05:01:04 1997 --- qgnus/texi/ChangeLog Sat Sep 20 23:33:36 1997 *************** *** 1,3 **** --- 1,7 ---- + Sat Sep 20 20:53:43 1997 Lars Magne Ingebrigtsen + + * gnus.texi (Startup Variables): Addition. + 1997-09-16 SL Baur * gnus.texi: Correct typo. *** pub/qgnus/GNUS-NEWS Wed Sep 17 03:33:42 1997 --- qgnus/GNUS-NEWS Sat Sep 20 23:33:36 1997 *************** *** 1,5 **** --- 1,14 ---- ** Gnus changes. + *** The Gnus alpha distribution no longer bundles Custom and Widget. + If your Emacs doesn't come with these libraries, fetch them from + . You also then need to + add the following to the lisp/dgnushack.el file: + + (push "~/lisp/custom" load-path) + + Modify to suit your needs. + *** New functionality for using Gnus as an offline newsreader has been added. A plethora of new commands and modes have been added. See the Gnus manual for the full story. *** pub/qgnus/texi/dir Wed Jun 18 00:54:19 1997 --- qgnus/texi/dir Sat Jul 12 19:54:27 1997 *************** *** 0 **** --- 1,11 ---- + -*- Text -*- + The Gnus-related top node. +  + File: dir Node: Top This is the Gnus Info tree + + * Menu: + + * Gnus: (gnus). The news reader Gnus. + * Message: (message). The Message sending thingamabob. + * Widget: (widget). The Widget library. + * Custom: (custom). The Custom library.