*** pub/qgnus/lisp/dgnushack.el Sat Sep 13 15:43:22 1997 --- qgnus/lisp/dgnushack.el Wed Sep 17 03:33:29 1997 *************** *** 52,58 **** (defun dgnushack-compile () ;;(setq byte-compile-dynamic t) ! (let ((files (directory-files "." nil ".el$")) (xemacs (string-match "XEmacs" emacs-version)) ;;(byte-compile-generate-call-tree t) byte-compile-warnings file elc) --- 52,58 ---- (defun dgnushack-compile () ;;(setq byte-compile-dynamic t) ! (let ((files (directory-files "." nil "^[^=].*\\.el$")) (xemacs (string-match "XEmacs" emacs-version)) ;;(byte-compile-generate-call-tree t) byte-compile-warnings file elc) *** pub/qgnus/lisp/gnus-agent.el Tue Sep 16 00:22:07 1997 --- qgnus/lisp/gnus-agent.el Wed Sep 17 03:33:29 1997 *************** *** 116,122 **** (defun gnus-agent-lib-file (file) "The full path of the Gnus agent library FILE." ! (concat (gnus-agent-directory) "lib/" file)) ;;; ;;; Mode infestation --- 116,122 ---- (defun gnus-agent-lib-file (file) "The full path of the Gnus agent library FILE." ! (concat (gnus-agent-directory) "agent.lib/" file)) ;;; ;;; Mode infestation *************** *** 243,250 **** agent minor mode in all Gnus buffers." (interactive) (add-hook 'gnus-before-startup-hook 'gnus-open-agent) ! (setq gnus-agent-send-mail-function message-send-mail-function ! message-send-mail-function 'gnus-agent-send-mail)) (defun gnus-agent-send-mail () (if gnus-plugged --- 243,253 ---- agent minor mode in all Gnus buffers." (interactive) (add-hook 'gnus-before-startup-hook 'gnus-open-agent) ! (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-send-mail () (if gnus-plugged *************** *** 264,273 **** (interactive (list (gnus-group-group-name))) (unless group (error "No group on the current line")) ! (let ((articles (gnus-list-of-unread-articles group)) ! (gnus-command-method (gnus-find-method-for-group group))) ! (gnus-agent-with-fetch ! (gnus-agent-fetch-articles group articles)))) (defun gnus-agent-add-group (category arg) "Add the current group to an agent category." --- 267,274 ---- (interactive (list (gnus-group-group-name))) (unless group (error "No group on the current line")) ! (gnus-agent-with-fetch ! (gnus-agent-fetch-group-1 group (gnus-find-method-for-group group)))) (defun gnus-agent-add-group (category arg) "Add the current group to an agent category." *************** *** 756,813 **** (unless gnus-plugged (error "Can't fetch articles while Gnus is unplugged")) (let ((methods gnus-agent-covered-methods) ! gnus-newsgroup-dependencies gnus-newsgroup-headers ! gnus-newsgroup-scored ! gnus-headers gnus-score ! gnus-use-cache ! gnus-command-method groups group articles score arts ! category predicate info marks score-param) (save-excursion (while methods ! (setq gnus-command-method (car methods) groups (gnus-groups-from-server (pop methods))) (gnus-agent-with-fetch (while (setq group (pop groups)) ! ;; Fetch headers. ! (when (and (setq articles (gnus-list-of-unread-articles group)) ! (gnus-agent-fetch-headers group articles)) ! ;; Parse them and see which articles we want to fetch. ! (setq gnus-newsgroup-dependencies ! (make-vector (length articles) 0)) ! (setq gnus-newsgroup-headers ! (gnus-get-newsgroup-headers-xover articles nil nil group)) ! (setq category (gnus-group-category group)) ! (setq predicate ! (gnus-get-predicate ! (or (gnus-group-get-parameter group 'agent-predicate) ! (cadr category)))) ! (setq score-param ! (or (gnus-group-get-parameter group 'agent-score) ! (caddr category))) ! (when score-param ! (gnus-score-headers (list (list score-param)))) ! (setq arts nil) ! (while (setq gnus-headers (pop gnus-newsgroup-headers)) ! (setq gnus-score ! (or (cdr (assq (mail-header-number gnus-headers) ! gnus-newsgroup-scored)) ! gnus-summary-default-score)) ! (when (funcall predicate) ! (push (mail-header-number gnus-headers) ! arts))) ! ;; Fetch the articles. ! (when arts ! (gnus-agent-fetch-articles group arts))) ! ;; Perhaps we have some additional articles to fetch. ! (setq arts (assq 'download (gnus-info-marks ! (setq info (gnus-get-info group))))) ! (when (cdr arts) ! (gnus-agent-fetch-articles ! group (gnus-uncompress-range (cdr arts))) ! (setq marks (delq arts (gnus-info-marks info))) ! (gnus-info-set-marks info marks))))) (gnus-message 6 "Finished fetching articles into the Gnus agent")))) ;;; ;;; Agent Category Mode ;;; --- 757,818 ---- (unless gnus-plugged (error "Can't fetch articles while Gnus is unplugged")) (let ((methods gnus-agent-covered-methods) ! method groups group) (save-excursion (while methods ! (setq method (car methods) groups (gnus-groups-from-server (pop methods))) (gnus-agent-with-fetch (while (setq group (pop groups)) ! (gnus-agent-fetch-group-1 group method)))) (gnus-message 6 "Finished fetching articles into the Gnus agent")))) + (defun gnus-agent-fetch-group-1 (group method) + "Fetch GROUP." + (let ((gnus-command-method method) + gnus-newsgroup-dependencies gnus-newsgroup-headers + gnus-newsgroup-scored gnus-headers gnus-score + gnus-use-cache articles score arts + category predicate info marks score-param) + ;; Fetch headers. + (when (and (setq articles (gnus-list-of-unread-articles group)) + (gnus-agent-fetch-headers group articles)) + ;; Parse them and see which articles we want to fetch. + (setq gnus-newsgroup-dependencies + (make-vector (length articles) 0)) + (setq gnus-newsgroup-headers + (gnus-get-newsgroup-headers-xover articles nil nil group)) + (setq category (gnus-group-category group)) + (setq predicate + (gnus-get-predicate + (or (gnus-group-get-parameter group 'agent-predicate) + (cadr category)))) + (setq score-param + (or (gnus-group-get-parameter group 'agent-score) + (caddr category))) + (when score-param + (gnus-score-headers (list (list score-param)))) + (setq arts nil) + (while (setq gnus-headers (pop gnus-newsgroup-headers)) + (setq gnus-score + (or (cdr (assq (mail-header-number gnus-headers) + gnus-newsgroup-scored)) + gnus-summary-default-score)) + (when (funcall predicate) + (push (mail-header-number gnus-headers) + arts))) + ;; Fetch the articles. + (when arts + (gnus-agent-fetch-articles group arts))) + ;; Perhaps we have some additional articles to fetch. + (setq arts (assq 'download (gnus-info-marks + (setq info (gnus-get-info group))))) + (when (cdr arts) + (gnus-agent-fetch-articles + group (gnus-uncompress-range (cdr arts))) + (setq marks (delq arts (gnus-info-marks info))) + (gnus-info-set-marks info marks)))) + ;;; ;;; Agent Category Mode ;;; *************** *** 1222,1228 **** (setq file (concat dir (number-to-string article)))) (delete-file file)))))) (gnus-agent-save-alist nil nil nil dir)))) ! (provide 'gnus-agent) ;;; gnus-agent.el ends here --- 1227,1233 ---- (setq file (concat dir (number-to-string article)))) (delete-file file)))))) (gnus-agent-save-alist nil nil nil dir)))) ! (provide 'gnus-agent) ;;; gnus-agent.el ends here *** pub/qgnus/lisp/gnus-art.el Sat Sep 13 15:43:22 1997 --- qgnus/lisp/gnus-art.el Wed Sep 17 03:33:30 1997 *************** *** 1977,1982 **** --- 1977,1983 ---- (cons gnus-newsgroup-name gnus-current-article)) (unless (vectorp gnus-current-headers) (setq gnus-current-headers nil)) + (gnus-summary-goto-subject gnus-current-article) (gnus-summary-show-thread) (run-hooks 'gnus-mark-article-hook) (gnus-set-mode-line 'summary) *** pub/qgnus/lisp/gnus-cite.el Sat Sep 13 21:56:41 1997 --- qgnus/lisp/gnus-cite.el Wed Sep 17 03:33:31 1997 *************** *** 383,389 **** (gnus-article-search-signature) (push (cons (point-marker) "") marks) ;; Sort the marks. ! (setq marks (sort marks (lambda (m1 m2) (< (car m1) (car m2))))) (let ((omarks marks)) (setq marks nil) (while (cdr omarks) --- 383,389 ---- (gnus-article-search-signature) (push (cons (point-marker) "") marks) ;; Sort the marks. ! (setq marks (sort marks 'car-less-than-car)) (let ((omarks marks)) (setq marks nil) (while (cdr omarks) *** pub/qgnus/lisp/gnus-draft.el Tue Sep 16 00:22:07 1997 --- qgnus/lisp/gnus-draft.el Wed Sep 17 03:33:31 1997 *************** *** 60,69 **** \\{gnus-draft-mode-map}" (interactive "P") (when (eq major-mode 'gnus-summary-mode) ! (if (not (set (make-local-variable 'gnus-draft-mode) (if (null arg) (not gnus-draft-mode) ! (> (prefix-numeric-value arg) 0)))) ! (remove-hook 'gnus-message-setup-hook 'gnus-draft-setup-message) ;; Set up the menu. (when (gnus-visual-p 'draft-menu 'menu) (gnus-draft-make-menu-bar)) --- 60,68 ---- \\{gnus-draft-mode-map}" (interactive "P") (when (eq major-mode 'gnus-summary-mode) ! (when (set (make-local-variable 'gnus-draft-mode) (if (null arg) (not gnus-draft-mode) ! (> (prefix-numeric-value arg) 0))) ;; Set up the menu. (when (gnus-visual-p 'draft-menu 'menu) (gnus-draft-make-menu-bar)) *************** *** 125,136 **** (defun gnus-group-send-drafts () "Send all sendable articles from the draft group." (interactive) ! (gnus-request-group "nndraft:draft") (save-excursion (let ((articles (nndraft-articles)) (unsendable (gnus-uncompress-range ! (cdr (assq 'unsend (gnus-info-marks ! (gnus-get-info "nndraft:draft")))))) article) (while (setq article (pop articles)) (unless (memq article unsendable) --- 124,136 ---- (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) *************** *** 143,149 **** (message-mail) (erase-buffer) (if (not (gnus-request-restore-buffer ! article (or gnus-newsgroup-name "nndraft:draft"))) (error "Couldn't restore the article") ;; Insert the separator. (goto-char (point-min)) --- 143,149 ---- (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)) *** pub/qgnus/lisp/gnus-score.el Sun Sep 14 00:30:31 1997 --- qgnus/lisp/gnus-score.el Wed Sep 17 03:33:31 1997 *************** *** 2544,2550 **** files))) (mapcar (lambda (f) (cdr f)) ! (sort alist (lambda (f1 f2) (< (car f1) (car f2)))))))) (defun gnus-score-find-alist (group) "Return list of score files for GROUP. --- 2544,2550 ---- files))) (mapcar (lambda (f) (cdr f)) ! (sort alist 'car-less-than-car))))) (defun gnus-score-find-alist (group) "Return list of score files for GROUP. *** pub/qgnus/lisp/gnus-start.el Tue Sep 16 00:22:08 1997 --- qgnus/lisp/gnus-start.el Wed Sep 17 03:33:32 1997 *************** *** 700,711 **** (defun gnus-start-draft-setup () "Make sure the draft group exists." ! (unless (gnus-gethash "nndraft:draft" gnus-newsrc-hashtb) ! (gnus-request-create-group "draft" '(nndraft "")) (let ((gnus-level-default-subscribed 1)) ! (gnus-subscribe-group "nndraft:draft" nil '(nndraft ""))) (gnus-group-set-parameter ! "nndraft:draft" 'gnus-dummy '((gnus-draft-mode))))) ;;;###autoload (defun gnus-unload () --- 700,711 ---- (defun gnus-start-draft-setup () "Make sure the draft group exists." ! (unless (gnus-gethash "nndraft:drafts" gnus-newsrc-hashtb) ! (gnus-request-create-group "drafts" '(nndraft "")) (let ((gnus-level-default-subscribed 1)) ! (gnus-subscribe-group "nndraft:drafts" nil '(nndraft ""))) (gnus-group-set-parameter ! "nndraft:drafts" 'gnus-dummy '((gnus-draft-mode))))) ;;;###autoload (defun gnus-unload () *** pub/qgnus/lisp/gnus-sum.el Tue Sep 16 00:22:10 1997 --- qgnus/lisp/gnus-sum.el Wed Sep 17 03:33:34 1997 *************** *** 2882,2896 **** (while (search-backward ">" nil t) (setq end (1+ (point))) (when (search-backward "<" nil t) ! (push (list (incf generation) ! child (setq child (buffer-substring (point) end)) ! subject) ! relations))) (push (list (1+ generation) child nil subject) relations) (erase-buffer))) (kill-buffer (current-buffer))) ;; Sort over trustworthiness. ! (setq relations (sort relations (lambda (r1 r2) (< (car r1) (car r2))))) (while (setq relation (pop relations)) (when (if (boundp (setq cthread (intern (cadr relation) deps))) (unless (car (symbol-value cthread)) --- 2882,2898 ---- (while (search-backward ">" nil t) (setq end (1+ (point))) (when (search-backward "<" nil t) ! (unless (string= (setq new-child (buffer-substring (point) end)) ! child) ! (push (list (incf generation) ! child (setq child new-child) ! subject) ! relations)))) (push (list (1+ generation) child nil subject) relations) (erase-buffer))) (kill-buffer (current-buffer))) ;; Sort over trustworthiness. ! (setq relations (sort relations 'car-less-than-car)) (while (setq relation (pop relations)) (when (if (boundp (setq cthread (intern (cadr relation) deps))) (unless (car (symbol-value cthread)) *** pub/qgnus/lisp/gnus.el Tue Sep 16 00:22:10 1997 --- qgnus/lisp/gnus.el Wed Sep 17 03:33:35 1997 *************** *** 244,250 **** :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) ! (defconst gnus-version-number "0.5" "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.6" "Version number for this version of Gnus.") (defconst gnus-version (format "Quassia Gnus v%s" gnus-version-number) *** pub/qgnus/lisp/message.el Mon Sep 15 00:48:29 1997 --- qgnus/lisp/message.el Wed Sep 17 03:33:36 1997 *************** *** 1170,1175 **** --- 1170,1176 ---- (define-key message-mode-map "\C-c\C-d" 'message-dont-send) (define-key message-mode-map "\C-c\C-e" 'message-elide-region) + (define-key message-mode-map "\C-c\C-v" 'message-delete-not-region) (define-key message-mode-map "\t" 'message-tab)) *************** *** 1183,1188 **** --- 1184,1190 ---- ["Caesar (rot13) Message" message-caesar-buffer-body t] ["Caesar (rot13) Region" message-caesar-region (mark t)] ["Elide Region" message-elide-region (mark t)] + ["Delete Outside Region" message-delete-not-region (mark t)] ["Rename buffer" message-rename-buffer t] ["Spellcheck" ispell-message t] "----" *************** *** 1240,1245 **** --- 1242,1249 ---- (make-local-variable 'message-kill-actions) (make-local-variable 'message-postpone-actions) (make-local-variable 'message-draft-article) + (make-local-hook 'kill-buffer-hook) + (add-hook 'kill-buffer-hook 'message-disassociate-draft) (set-syntax-table message-mode-syntax-table) (use-local-map message-mode-map) (setq local-abbrev-table message-mode-abbrev-table) *************** *** 1402,1407 **** --- 1406,1427 ---- ;;; Various commands + (defun message-delete-not-region (beg end) + "Delete everything in the body of the current message that is outside of the region." + (interactive "r") + (save-excursion + (goto-char end) + (delete-region (point) (progn (message-goto-signature) + (forward-line -2) + (point))) + (insert "\n") + (goto-char beg) + (delete-region beg (progn (message-goto-body) + (forward-line 2) + (point)))) + (message-goto-signature) + (forward-line -2)) + (defun message-insert-signature (&optional force) "Insert a signature. See documentation for the `message-signature' variable." (interactive (list 0)) *************** *** 1726,1731 **** --- 1746,1752 ---- (when (or (not (buffer-modified-p)) (yes-or-no-p "Message modified; kill anyway? ")) (let ((actions message-kill-actions)) + (setq buffer-file-name nil) (kill-buffer (current-buffer)) (message-do-actions actions)))) *************** *** 3020,3027 **** (defun message-disassociate-draft () "Disassociate the message buffer from the drafts directory." ! (nndraft-request-expire-articles ! (list message-draft-article) "drafts" nil t)) --- 3041,3049 ---- (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))) *** pub/qgnus/lisp/nnagent.el Sun Sep 14 21:25:52 1997 --- qgnus/lisp/nnagent.el Wed Sep 17 03:33:36 1997 *************** *** 105,111 **** nil) (deffoo nnagent-request-post (&optional server) ! (gnus-request-accept-article "nndraft:draft")) ;; Use nnml functions for just about everything. (nnoo-import nnagent --- 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 *** pub/qgnus/lisp/nndoc.el Sat Sep 13 15:43:23 1997 --- qgnus/lisp/nndoc.el Wed Sep 17 03:33:36 1997 *************** *** 334,340 **** (error "Document is not of any recognized type")) (if result (car entry) ! (cadar (sort results (lambda (r1 r2) (< (car r1) (car r2)))))))) ;;; ;;; Built-in type predicates and functions --- 334,340 ---- (error "Document is not of any recognized type")) (if result (car entry) ! (cadar (sort results 'car-less-than-car))))) ;;; ;;; Built-in type predicates and functions *** pub/qgnus/lisp/nndraft.el Mon Sep 15 00:48:29 1997 --- qgnus/lisp/nndraft.el Wed Sep 17 03:33:37 1997 *************** *** 35,41 **** (nnoo-declare nndraft nnmh) ! (defvoo nndraft-directory (nnheader-concat message-directory "drafts/") "Where nndraft will store its files." nnmh-current-directory) --- 35,41 ---- (nnoo-declare nndraft nnmh) ! (defvoo nndraft-directory (nnheader-concat message-directory "message-drafts/") "Where nndraft will store its files." nnmh-current-directory) *************** *** 135,141 **** (deffoo nndraft-request-update-info (group info &optional server) (gnus-info-set-read info ! (gnus-update-read-articles "nndraft:draft" (nndraft-articles) t)) (let (marks) (when (setq marks (nth 3 info)) (setcar (nthcdr 3 info) --- 135,141 ---- (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) *************** *** 219,228 **** (defun nndraft-articles () "Return the list of messages in the group." (sort ! (mapcar ! (lambda (file) ! (string-to-int file)) ! (directory-files nndraft-directory nil "^[0-9]+$" t)) '<)) (nnoo-map-functions nndraft --- 219,226 ---- (defun nndraft-articles () "Return the list of messages in the group." (sort ! (mapcar 'string-to-int ! (directory-files nndraft-directory nil "\\`[0-9]+\\'" t)) '<)) (nnoo-map-functions nndraft *** pub/qgnus/lisp/nnml.el Sun Sep 14 21:25:53 1997 --- qgnus/lisp/nnml.el Wed Sep 17 03:33:37 1997 *************** *** 632,638 **** (setq nnml-article-file-alist (sort (nnheader-article-to-file-alist nnml-current-directory) ! (lambda (a1 a2) (< (car a1) (car a2)))))) (setq active (if nnml-article-file-alist (cons (caar nnml-article-file-alist) --- 632,638 ---- (setq nnml-article-file-alist (sort (nnheader-article-to-file-alist nnml-current-directory) ! 'car-less-than-car))) (setq active (if nnml-article-file-alist (cons (caar nnml-article-file-alist) *************** *** 728,734 **** (nnml-generate-nov-databases-1 dir seen)))) ;; Do this directory. (let ((files (sort (nnheader-article-to-file-alist dir) ! (lambda (a b) (< (car a) (car b)))))) (when files (funcall nnml-generate-active-function dir) ;; Generate the nov file. --- 728,734 ---- (nnml-generate-nov-databases-1 dir seen)))) ;; Do this directory. (let ((files (sort (nnheader-article-to-file-alist dir) ! 'car-less-than-car))) (when files (funcall nnml-generate-active-function dir) ;; Generate the nov file. *** pub/qgnus/lisp/nnweb.el Sat Sep 13 15:43:23 1997 --- qgnus/lisp/nnweb.el Wed Sep 17 03:33:37 1997 *************** *** 424,431 **** (url-insert-file-contents more))) ;; Return the articles in the right order. (setq nnweb-articles ! (sort (nconc nnweb-articles map) ! (lambda (s1 s2) (< (car s1) (car s2))))))))) (defun nnweb-dejanews-wash-article () (let ((case-fold-search t)) --- 424,430 ---- (url-insert-file-contents more))) ;; Return the articles in the right order. (setq nnweb-articles ! (sort (nconc nnweb-articles map) 'car-less-than-car)))))) (defun nnweb-dejanews-wash-article () (let ((case-fold-search t)) *************** *** 524,531 **** (setq more nil)) ;; Return the articles in the right order. (setq nnweb-articles ! (sort (nconc nnweb-articles map) ! (lambda (s1 s2) (< (car s1) (car s2))))))))) (defun nnweb-reference-wash-article () (let ((case-fold-search t)) --- 523,529 ---- (setq more nil)) ;; Return the articles in the right order. (setq nnweb-articles ! (sort (nconc nnweb-articles map) 'car-less-than-car)))))) (defun nnweb-reference-wash-article () (let ((case-fold-search t)) *************** *** 651,658 **** (setq more nil))) ;; Return the articles in the right order. (setq nnweb-articles ! (sort (nconc nnweb-articles map) ! (lambda (s1 s2) (< (car s1) (car s2)))))))))) (defun nnweb-altavista-wash-article () (goto-char (point-min)) --- 649,655 ---- (setq more nil))) ;; Return the articles in the right order. (setq nnweb-articles ! (sort (nconc nnweb-articles map) 'car-less-than-car))))))) (defun nnweb-altavista-wash-article () (goto-char (point-min)) *** pub/qgnus/lisp/ChangeLog Tue Sep 16 00:22:06 1997 --- qgnus/lisp/ChangeLog Wed Sep 17 03:33:28 1997 *************** *** 2,7 **** --- 2,46 ---- * gnus.el: Quassia Gnus v0.1 is released. + Wed Sep 17 03:28:36 1997 Lars Magne Ingebrigtsen + + * gnus.el: Quassia Gnus v0.6 is released. + + 1997-08-17 SL Baur + + * dgnushack.el (dgnushack-compile): Ignore .el files beginning + with an `=' character. + + Wed Sep 17 02:30:04 1997 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-build-sparse-threads): Allow display of looped + References. + + * gnus-agent.el (gnus-agent-fetch-group-1): Separated out into + function. + + * message.el (message-delete-not-region): New command and + keystroke. + + Tue Sep 16 00:58:26 1997 Lars Magne Ingebrigtsen + + * nndraft.el (nndraft-directory): Changed value. + + * message.el (message-kill-buffer): Disassociate draft. + (message-mode): Use kill hook to disassociate. + (message-disassociate-draft): Double-check. + + * gnus-agent.el (gnus-agentize): Don't set twice. + + * gnus-art.el (gnus-article-prepare): Go to the right line before + marking. + + * gnus-start.el: Renamed the drafts group. + + * gnus-agent.el (gnus-agent-lib-file): Changed name of directory. + + * gnus-draft.el (gnus-draft-mode): Simplify. + Tue Sep 16 00:18:11 1997 Lars Magne Ingebrigtsen * gnus.el: Quassia Gnus v0.5 is released. *** pub/qgnus/texi/gnus.texi Tue Sep 16 00:22:15 1997 --- qgnus/texi/gnus.texi Wed Sep 17 03:33:41 1997 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename gnus ! @settitle Quassia Gnus 0.5 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename gnus ! @settitle Quassia Gnus 0.6 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 309,315 **** @tex @titlepage ! @title Quassia Gnus 0.5 Manual @author by Lars Magne Ingebrigtsen @page --- 309,315 ---- @tex @titlepage ! @title Quassia Gnus 0.6 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.5. @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.6. @end ifinfo *************** *** 4498,4542 **** @node Customizing Threading @subsection Customizing Threading @cindex customizing threading @cindex < @cindex > @table @code ! @item gnus-show-threads ! @vindex gnus-show-threads ! If this variable is @code{nil}, no threading will be done, and all of ! the rest of the variables here will have no effect. Turning threading ! off will speed group selection up a bit, but it is sure to make reading ! slower and more awkward. ! @item gnus-fetch-old-headers ! @vindex gnus-fetch-old-headers ! If non-@code{nil}, Gnus will attempt to build old threads by fetching ! more old headers---headers to articles marked as read. If you ! would like to display as few summary lines as possible, but still ! connect as many loose threads as possible, you should set this variable ! to @code{some} or a number. If you set it to a number, no more than ! that number of extra old headers will be fetched. In either case, ! fetching old headers only works if the backend you are using carries ! overview files---this would normally be @code{nntp}, @code{nnspool} and ! @code{nnml}. Also remember that if the root of the thread has been ! expired by the server, there's not much Gnus can do about that. ! @item gnus-build-sparse-threads ! @vindex gnus-build-sparse-threads ! Fetching old headers can be slow. A low-rent similar effect can be ! gotten by setting this variable to @code{some}. Gnus will then look at ! the complete @code{References} headers of all articles and try to string ! together articles that belong in the same thread. This will leave ! @dfn{gaps} in the threading display where Gnus guesses that an article ! is missing from the thread. (These gaps appear like normal summary ! lines. If you select a gap, Gnus will try to fetch the article in ! question.) If this variable is @code{t}, Gnus will display all these ! ``gaps'' without regard for whether they are useful for completing the ! thread or not. Finally, if this variable is @code{more}, Gnus won't cut ! off sparse leaf nodes that don't lead anywhere. This variable is ! @code{nil} by default. @item gnus-summary-gather-subject-limit @vindex gnus-summary-gather-subject-limit --- 4498,4573 ---- @node Customizing Threading @subsection Customizing Threading @cindex customizing threading + + @menu + * Loose Threads:: How Gnus gathers loose threads into bigger threads. + * Filling In Threads:: Making the threads displayed look fuller. + * More Threading:: Even more variables for fiddling with threads. + * Low-Level Threading:: You thought it was over... but you were wrong! + @end menu + + + @node Loose Threads + @subsubsection Loose Threads @cindex < @cindex > + @cindex loose threads @table @code + @item gnus-summary-make-false-root + @vindex gnus-summary-make-false-root + If non-@code{nil}, Gnus will gather all loose subtrees into one big tree + and create a dummy root at the top. (Wait a minute. Root at the top? + Yup.) Loose subtrees occur when the real root has expired, or you've + read or killed the root in a previous session. ! When there is no real root of a thread, Gnus will have to fudge ! something. This variable says what fudging method Gnus should use. ! There are four possible values: ! @iftex ! @iflatex ! \gnusfigure{The Summary Buffer}{390}{ ! \put(0,0){\epsfig{figure=tmp/summary-adopt.ps,width=7.5cm}} ! \put(445,0){\makebox(0,0)[br]{\epsfig{figure=tmp/summary-empty.ps,width=7.5cm}}} ! \put(0,400){\makebox(0,0)[tl]{\epsfig{figure=tmp/summary-none.ps,width=7.5cm}}} ! \put(445,400){\makebox(0,0)[tr]{\epsfig{figure=tmp/summary-dummy.ps,width=7.5cm}}} ! } ! @end iflatex ! @end iftex ! @cindex adopting articles ! ! @table @code ! ! @item adopt ! Gnus will make the first of the orphaned articles the parent. This ! parent will adopt all the other articles. The adopted articles will be ! marked as such by pointy brackets (@samp{<>}) instead of the standard ! square brackets (@samp{[]}). This is the default method. ! ! @item dummy ! @vindex gnus-summary-dummy-line-format ! Gnus will create a dummy summary line that will pretend to be the ! parent. This dummy line does not correspond to any real article, so ! selecting it will just select the first real article after the dummy ! article. @code{gnus-summary-dummy-line-format} is used to specify the ! format of the dummy roots. It accepts only one format spec: @samp{S}, ! which is the subject of the article. @xref{Formatting Variables}. ! ! @item empty ! Gnus won't actually make any article the parent, but simply leave the ! subject field of all orphans except the first empty. (Actually, it will ! use @code{gnus-summary-same-subject} as the subject (@pxref{Summary ! Buffer Format}).) ! ! @item none ! Don't make any article parent at all. Just gather the threads and ! display them after one another. ! ! @item nil ! Don't gather loose threads. ! @end table @item gnus-summary-gather-subject-limit @vindex gnus-summary-gather-subject-limit *************** *** 4630,4689 **** 'gnus-gather-threads-by-references) @end lisp ! @item gnus-summary-make-false-root ! @vindex gnus-summary-make-false-root ! If non-@code{nil}, Gnus will gather all loose subtrees into one big tree ! and create a dummy root at the top. (Wait a minute. Root at the top? ! Yup.) Loose subtrees occur when the real root has expired, or you've ! read or killed the root in a previous session. ! ! When there is no real root of a thread, Gnus will have to fudge ! something. This variable says what fudging method Gnus should use. ! There are four possible values: - @iftex - @iflatex - \gnusfigure{The Summary Buffer}{390}{ - \put(0,0){\epsfig{figure=tmp/summary-adopt.ps,width=7.5cm}} - \put(445,0){\makebox(0,0)[br]{\epsfig{figure=tmp/summary-empty.ps,width=7.5cm}}} - \put(0,400){\makebox(0,0)[tl]{\epsfig{figure=tmp/summary-none.ps,width=7.5cm}}} - \put(445,400){\makebox(0,0)[tr]{\epsfig{figure=tmp/summary-dummy.ps,width=7.5cm}}} - } - @end iflatex - @end iftex ! @cindex adopting articles @table @code ! @item adopt ! Gnus will make the first of the orphaned articles the parent. This ! parent will adopt all the other articles. The adopted articles will be ! marked as such by pointy brackets (@samp{<>}) instead of the standard ! square brackets (@samp{[]}). This is the default method. ! @item dummy ! @vindex gnus-summary-dummy-line-format ! Gnus will create a dummy summary line that will pretend to be the ! parent. This dummy line does not correspond to any real article, so ! selecting it will just select the first real article after the dummy ! article. @code{gnus-summary-dummy-line-format} is used to specify the ! format of the dummy roots. It accepts only one format spec: @samp{S}, ! which is the subject of the article. @xref{Formatting Variables}. - @item empty - Gnus won't actually make any article the parent, but simply leave the - subject field of all orphans except the first empty. (Actually, it will - use @code{gnus-summary-same-subject} as the subject (@pxref{Summary - Buffer Format}).) ! @item none ! Don't make any article parent at all. Just gather the threads and ! display them after one another. ! @item nil ! Don't gather loose threads. ! @end table @item gnus-thread-hide-subtree @vindex gnus-thread-hide-subtree --- 4661,4714 ---- 'gnus-gather-threads-by-references) @end lisp ! @end table ! @node Filling In Threads ! @subsubsection Filling In Threads @table @code + @item gnus-fetch-old-headers + @vindex gnus-fetch-old-headers + If non-@code{nil}, Gnus will attempt to build old threads by fetching + more old headers---headers to articles marked as read. If you + would like to display as few summary lines as possible, but still + connect as many loose threads as possible, you should set this variable + to @code{some} or a number. If you set it to a number, no more than + that number of extra old headers will be fetched. In either case, + fetching old headers only works if the backend you are using carries + overview files---this would normally be @code{nntp}, @code{nnspool} and + @code{nnml}. Also remember that if the root of the thread has been + expired by the server, there's not much Gnus can do about that. ! @item gnus-build-sparse-threads ! @vindex gnus-build-sparse-threads ! Fetching old headers can be slow. A low-rent similar effect can be ! gotten by setting this variable to @code{some}. Gnus will then look at ! the complete @code{References} headers of all articles and try to string ! together articles that belong in the same thread. This will leave ! @dfn{gaps} in the threading display where Gnus guesses that an article ! is missing from the thread. (These gaps appear like normal summary ! lines. If you select a gap, Gnus will try to fetch the article in ! question.) If this variable is @code{t}, Gnus will display all these ! ``gaps'' without regard for whether they are useful for completing the ! thread or not. Finally, if this variable is @code{more}, Gnus won't cut ! off sparse leaf nodes that don't lead anywhere. This variable is ! @code{nil} by default. ! @end table ! @node More Threading ! @subsubsection More Threading ! @table @code ! @item gnus-show-threads ! @vindex gnus-show-threads ! If this variable is @code{nil}, no threading will be done, and all of ! the rest of the variables here will have no effect. Turning threading ! off will speed group selection up a bit, but it is sure to make reading ! slower and more awkward. @item gnus-thread-hide-subtree @vindex gnus-thread-hide-subtree *************** *** 4714,4719 **** --- 4739,4752 ---- This is a number that says how much each sub-thread should be indented. The default is 4. + @end table + + + @node Low-Level Threading + @subsubsection Low-Level Threading + + @table @code + @item gnus-parse-headers-hook @vindex gnus-parse-headers-hook Hook run before parsing any headers. The default value is *************** *** 4737,4745 **** (defun my-alter-message-id (header) (let ((id (mail-header-id header))) (when (string-match ! "\\(<[^<>@]*\\)\\.?cygnus\\..*@\\([^<>@]*>\\)" id) (mail-header-set-id ! (concat (match-string 1 id) "@" (match-string 2 id)) header)))) @end lisp --- 4770,4778 ---- (defun my-alter-message-id (header) (let ((id (mail-header-id header))) (when (string-match ! "\\(<[^<>@@]*\\)\\.?cygnus\\..*@@\\([^<>@@]*>\\)" id) (mail-header-set-id ! (concat (match-string 1 id) "@@" (match-string 2 id)) header)))) @end lisp *************** *** 5100,5106 **** store them in the cache. You should only ever, ever ever ever, use this command if 1) your connection to the @sc{nntp} server is really, really, really slow and 2) you have a really, really, really huge disk. ! Seriously. @vindex gnus-uncacheable-groups It is likely that you do not want caching on some groups. For instance, --- 5133,5141 ---- store them in the cache. You should only ever, ever ever ever, use this command if 1) your connection to the @sc{nntp} server is really, really, really slow and 2) you have a really, really, really huge disk. ! Seriously. One way to cut down on the number of articles downloaded is ! to score unwanted articles down and have them marked as read. They will ! not then be downloaded by this command. @vindex gnus-uncacheable-groups It is likely that you do not want caching on some groups. For instance, *************** *** 6159,6164 **** --- 6194,6206 ---- @c @icon{gnus-summary-caesar-message} Do a Caesar rotate (rot13) on the article buffer (@code{gnus-summary-caesar-message}). + Unreadable articles that tell you to read them with Caesar rotate or rot13. + (Typically offensive jokes and such.) + + It's commonly called ``rot13'' because each letter is rotated 13 + positions in the alphabet, e. g. @samp{B} (letter #2) -> @sam{O} (letter + #15). It is sometimes referred to as ``Caesar rotate'' because Caesar + is rumoured to have employed this form of, uh, somewhat weak encryption. @item W t @kindex W t (Summary) *************** *** 10871,10876 **** --- 10913,10919 ---- * Agent Commands:: New commands for all the buffers. * Outgoing Messages:: What happens when you post/mail something? * Agent Variables:: Customizing is fun. + * Example Setup:: An example @file{.gnus.el} file for offline people. @end menu *************** *** 11286,11291 **** --- 11329,11380 ---- Hook run when disconnecting from the network. @end table + + + @node Example Setup + @subsection Example Setup + + If you don't want to read this manual, and you have a fairly standard + setup, you may be able to use something like the following as your + @file{.gnus.el} file to get started. + + @lisp + ;;; Define how Gnus is to fetch news. We do this over NNTP + ;;; from your ISP's server. + (setq gnus-select-method '(nntp "nntp.your-isp.com")) + + ;;; Define how Gnus is to read your mail. We read mail from + ;;; your ISP's POP server. + (setenv "MAILSERVER" "pop.your-isp.com") + (setq nnmail-spool-file "po:username") + + ;;; Say how Gnus is to store the mail. We use nnml groups. + (setq gnus-secondary-select-methods '((nnml ""))) + + ;;; Make Gnus into an offline newsreader. + (gnus-agentize) + @end lisp + + That should be it, basically. Put that in your @file{~/.gnus.el} file, + edit to suit your needs, start up PPP (or whatever), and type @kbd{M-x + gnus}. + + If this is the first time you've run Gnus, you will be subscribed + automatically to a few default newsgroups. You'll probably want to + subscribe to more groups, and to do that, you have to query the + @sc{nntp} server for a complete list of groups with the @kbd{A A} + command. This usually takes quite a while, but you only have to do it + once. + + After reading and parsing a while, you'll be presented with a list of + groups. Subscribe to the ones you want to read with the @kbd{u} + command. @kbd{l} to make all the killed groups disappear after you've + subscribe to all the groups you want to read. (@kbd{A k} will bring + back all the killed groups.) + + You can now read the groups at once, or you can download the articles + with the @kbd{J s} command. And then read the rest of this manual to + find out which of the other gazillion things you want to customize. @node Scoring *** pub/qgnus/texi/message.texi Tue Sep 16 00:22:15 1997 --- qgnus/texi/message.texi Wed Sep 17 03:33:41 1997 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Message 0.5 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Message 0.6 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 39,45 **** @tex @titlepage ! @title Message 0.5 Manual @author by Lars Magne Ingebrigtsen @page --- 39,45 ---- @tex @titlepage ! @title Message 0.6 Manual @author by Lars Magne Ingebrigtsen @page *************** *** 79,85 **** * Key Index:: List of Message mode keys. @end menu ! This manual corresponds to Message 0.5. 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.6. Message is distributed with the Gnus distribution bearing the same version number as this manual has. *************** *** 509,514 **** --- 509,520 ---- Elide the text between point and mark (@code{message-elide-region}). The text is killed and an ellipsis (@samp{[...]}) will be inserted in its place. + + @item C-c C-v + @kindex C-c C-v + @findex message-delete-not-region + Delete all text in the body of the message that is outside the region + (@code{message-delete-not-region}). @item C-c C-t @kindex C-c C-t *** pub/qgnus/texi/ChangeLog Tue Sep 16 00:22:15 1997 --- qgnus/texi/ChangeLog Wed Sep 17 03:33:42 1997 *************** *** 1,3 **** --- 1,14 ---- + Wed Sep 17 02:32:56 1997 Lars Magne Ingebrigtsen + + * gnus.texi (Customizing Threading): Broken up into five nodes. + (Article Washing): Addition. + + * message.texi (Various Commands): Add. + + Tue Sep 16 04:04:03 1997 Lars Magne Ingebrigtsen + + * gnus.texi (Example Setup): New. + Mon Sep 15 23:10:05 1997 Lars Magne Ingebrigtsen * gnus.texi (Customizing Threading): Addition. *** pub/qgnus/GNUS-NEWS Sun Jul 6 17:24:11 1997 --- qgnus/GNUS-NEWS Wed Sep 17 03:33:42 1997 *************** *** 1,108 **** ** Gnus changes. ! *** `gnus-select-method' now defaults to `(nntp "news")' instead ! of `(nntp "localhost")'. ! *** `gnus-read-active-file' now defaults to `some' instead of t. ! *** nntp.el has been totally rewritten in an asynchronous fashion. ! *** Article prefetching functionality has been moved up into ! Gnus. ! *** Scoring can now be performed with logical operators like ! `and', `or', `not', and parent redirection. ! ! *** Article washing status can be displayed in the ! article mode line. ! ! *** gnus.el has been split into many smaller files. ! ! *** Suppression of duplicate articles based on Message-ID. ! ! (setq gnus-suppress-duplicates t) ! ! *** New variables for specifying what score and adapt files ! are to be considered home score and adapt files. See ! `gnus-home-score-file' and `gnus-home-adapt-files'. ! ! *** Groups can inherit group parameters from parent topics. ! ! *** Article editing has been revamped and is now usable. ! ! *** Signatures can be recognized in more intelligent fashions. ! See `gnus-signature-separator' and `gnus-signature-limit'. ! ! *** Summary pick mode has been made to look more nn-like. ! Line numbers are displayed and the `.' command can be ! used to pick articles. ! ! *** Commands for moving the .newsrc.eld from one server to ! another have been added. ! ! `M-x gnus-change-server' ! ! *** A way to specify that "uninteresting" fields be suppressed when ! generating lines in buffers. ! ! *** Several commands in the group buffer can be undone with ! `M-C-_'. ! ! *** Scoring can be done on words using the new score type `w'. ! ! *** Adaptive scoring can be done on a Subject word-by-word basis: ! ! (setq gnus-use-adaptive-scoring '(word)) ! ! *** Scores can be decayed. ! ! (setq gnus-decay-scores t) ! ! *** Scoring can be performed using a regexp on the Date header. The ! Date is normalized to compact ISO 8601 format first. ! ! *** A new command has been added to remove all data on articles from ! the native server. ! ! `M-x gnus-group-clear-data-on-native-groups' ! ! *** A new command for reading collections of documents ! (nndoc with nnvirtual on top) has been added -- `M-C-d'. ! ! *** Process mark sets can be pushed and popped. ! ! *** A new mail-to-news backend makes it possible to post ! even when the NNTP server doesn't allow posting. ! ! *** A new backend for reading searches from Web search engines ! (DejaNews, Alta Vista, InReference) has been added. ! ! Use the `G w' command in the group buffer to create such ! a group. ! ! *** Groups inside topics can now be sorted using the standard ! sorting functions, and each topic can be sorted independently. ! ! See the commands under the `T S' submap. ! ! *** Subsets of the groups can be sorted independently. ! ! See the commands under the `G P' submap. ! ! *** Cached articles can be pulled into the groups. ! ! Use the `Y c' command. ! ! *** Score files are now applied in a more reliable order. ! ! *** Reports on where mail messages end up can be generated. ! ! `M-x nnmail-split-history' ! ! *** More hooks and functions have been added to remove junk ! from incoming mail before saving the mail. ! ! See `nnmail-prepare-incoming-header-hook'. ! ! *** The nnml mail backend now understands compressed article files. --- 1,18 ---- ** Gnus changes. ! *** 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. ! *** The nndraft backend has returned, but works differently than ! before. All Message buffers are now also articles in the nndraft ! group, which is created automatically. ! *** `gnus-alter-header-function' can now be used to alter header ! values. ! *** `gnus-summary-goto-article' now accept Message-ID's. ! *** A new Message command for deleting text in the body of a message ! outside the region: `C-c C-v'. *** 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.