*** pub/qgnus/lisp/gnus-agent.el Sun Sep 14 21:25:46 1997 --- qgnus/lisp/gnus-agent.el Mon Sep 15 00:48:24 1997 *************** *** 155,160 **** --- 155,161 ---- "Jc" gnus-enter-category-buffer "Jj" gnus-agent-toggle-plugged "Js" gnus-agent-fetch-session + "JS" gnus-group-send-drafts "Ja" gnus-agent-add-group) (defun gnus-agent-group-make-menu-bar () *** pub/qgnus/lisp/gnus-draft.el Sun Sep 14 21:25:46 1997 --- qgnus/lisp/gnus-draft.el Mon Sep 15 00:48:24 1997 *************** *** 122,134 **** (gnus-uu-mark-buffer) (gnus-draft-send-message)) ;;; Utility functions ! (defun gnus-draft-setup (article) (gnus-setup-message 'forward (message-mail) (erase-buffer) ! (if (not (gnus-request-restore-buffer article gnus-newsgroup-name)) (error "Couldn't restore the article") ;; Insert the separator. (goto-char (point-min)) --- 122,149 ---- (gnus-uu-mark-buffer) (gnus-draft-send-message)) + (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) + (gnus-draft-send article)))))) + ;;; Utility functions ! (defun gnus-draft-setup (article &optional group) (gnus-setup-message 'forward (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)) *** pub/qgnus/lisp/gnus-group.el Sat Sep 13 21:56:43 1997 --- qgnus/lisp/gnus-group.el Mon Sep 15 00:48:25 1997 *************** *** 1508,1514 **** "Select the current group \"quickly\". This means that no highlighting or scoring will be performed. If ALL (the prefix argument) is 0, don't even generate the summary ! buffer." (interactive "P") (require 'gnus-score) (let (gnus-visual --- 1508,1517 ---- "Select the current group \"quickly\". This means that no highlighting or scoring will be performed. If ALL (the prefix argument) is 0, don't even generate the summary ! buffer. ! ! This might be useful if you want to toggle threading ! before entering the group." (interactive "P") (require 'gnus-score) (let (gnus-visual *** pub/qgnus/lisp/gnus-sum.el Sun Sep 14 21:25:50 1997 --- qgnus/lisp/gnus-sum.el Mon Sep 15 00:48:27 1997 *************** *** 4079,4091 **** (gnus-group-make-articles-read name idlist)))) xref-hashtb))))) ! (defun gnus-group-make-articles-read (group articles) ! "Update the info of GROUP to say that ARTICLES are read." ! (let* ((num 0) ! (entry (gnus-gethash group gnus-newsrc-hashtb)) (info (nth 2 entry)) ! (active (gnus-active group)) ! range) (when entry ;; First peel off all illegal article numbers. (when active --- 4079,4088 ---- (gnus-group-make-articles-read name idlist)))) xref-hashtb))))) ! (defun gnus-compute-read-articles (group articles) ! (let* ((entry (gnus-gethash group gnus-newsrc-hashtb)) (info (nth 2 entry)) ! (active (gnus-active group))) (when entry ;; First peel off all illegal article numbers. (when active *************** *** 4106,4111 **** --- 4103,4127 ---- (when (or (> id (cdr active)) (< id (car active))) (setq articles (delq id articles)))))) + ;; If the read list is nil, we init it. + (if (and active + (null (gnus-info-read info)) + (> (car active) 1)) + (setq ninfo (cons 1 (1- (car active)))) + (setq ninfo (gnus-info-read info))) + ;; Then we add the read articles to the range. + (gnus-add-to-range + ninfo (setq articles (sort articles '<)))))) + + (defun gnus-group-make-articles-read (group articles) + "Update the info of GROUP to say that ARTICLES are read." + (let* ((num 0) + (entry (gnus-gethash group gnus-newsrc-hashtb)) + (info (nth 2 entry)) + (active (gnus-active group)) + range) + (when entry + (setq range (gnus-compute-read-articles group articles)) (save-excursion (set-buffer gnus-group-buffer) (gnus-undo-register *************** *** 4114,4130 **** (gnus-info-set-read ',info ',(gnus-info-read info)) (gnus-get-unread-articles-in-group ',info (gnus-active ,group)) (gnus-group-update-group ,group t)))) ! ;; If the read list is nil, we init it. ! (and active ! (null (gnus-info-read info)) ! (> (car active) 1) ! (gnus-info-set-read info (cons 1 (1- (car active))))) ! ;; Then we add the read articles to the range. ! (gnus-info-set-read ! info ! (setq range ! (gnus-add-to-range ! (gnus-info-read info) (setq articles (sort articles '<))))) ;; Then we have to re-compute how many unread ;; articles there are in this group. (when active --- 4130,4137 ---- (gnus-info-set-read ',info ',(gnus-info-read info)) (gnus-get-unread-articles-in-group ',info (gnus-active ,group)) (gnus-group-update-group ,group t)))) ! ;; Add the read articles to the range. ! (gnus-info-set-read info range) ;; Then we have to re-compute how many unread ;; articles there are in this group. (when active *************** *** 5693,5713 **** (gnus-summary-goto-subject article)))) (defun gnus-summary-goto-article (article &optional all-headers force) ! "Fetch ARTICLE and display it if it exists. If ALL-HEADERS is non-nil, no header lines are hidden." (interactive (list ! (string-to-int ! (completing-read ! "Article number: " ! (mapcar (lambda (number) (list (int-to-string number))) ! gnus-newsgroup-limit))) current-prefix-arg t)) (prog1 ! (if (gnus-summary-goto-subject article force) ! (gnus-summary-display-article article all-headers) ! (gnus-message 4 "Couldn't go to article %s" article) nil) (gnus-summary-position-point))) (defun gnus-summary-goto-last-article () --- 5700,5724 ---- (gnus-summary-goto-subject article)))) (defun gnus-summary-goto-article (article &optional all-headers force) ! "Fetch ARTICLE (article number or Message-ID) and display it if it exists. If ALL-HEADERS is non-nil, no header lines are hidden." (interactive (list ! (completing-read ! "Article number or Message-ID: " ! (mapcar (lambda (number) (list (int-to-string number))) ! gnus-newsgroup-limit)) current-prefix-arg t)) (prog1 ! (if (and (stringp article) ! (string-match "@" article)) ! (gnus-summary-refer-article article) ! (when (stringp article) ! (setq article (string-to-number article))) ! (if (gnus-summary-goto-subject article force) ! (gnus-summary-display-article article all-headers) ! (gnus-message 4 "Couldn't go to article %s" article) nil)) (gnus-summary-position-point))) (defun gnus-summary-goto-last-article () *************** *** 8692,8698 **** (funcall gnus-summary-highlight-line-function article face)))) (goto-char p))) ! (defun gnus-update-read-articles (group unread) "Update the list of read articles in GROUP." (let* ((active (or gnus-newsgroup-active (gnus-active group))) (entry (gnus-gethash group gnus-newsrc-hashtb)) --- 8703,8709 ---- (funcall gnus-summary-highlight-line-function article face)))) (goto-char p))) ! (defun gnus-update-read-articles (group unread &optional compute) "Update the list of read articles in GROUP." (let* ((active (or gnus-newsgroup-active (gnus-active group))) (entry (gnus-gethash group gnus-newsrc-hashtb)) *************** *** 8724,8743 **** (setq unread (cdr unread))) (when (<= prev (cdr active)) (push (cons prev (cdr active)) read)) ! (save-excursion ! (set-buffer gnus-group-buffer) ! (gnus-undo-register ! `(progn ! (gnus-info-set-marks ',info ',(gnus-info-marks info) t) ! (gnus-info-set-read ',info ',(gnus-info-read info)) ! (gnus-get-unread-articles-in-group ',info (gnus-active ,group)) ! (gnus-group-update-group ,group t)))) ! ;; Enter this list into the group info. ! (gnus-info-set-read ! info (if (> (length read) 1) (nreverse read) read)) ! ;; Set the number of unread articles in gnus-newsrc-hashtb. ! (gnus-get-unread-articles-in-group info (gnus-active group)) ! t))) (defun gnus-offer-save-summaries () "Offer to save all active summary buffers." --- 8735,8756 ---- (setq unread (cdr unread))) (when (<= prev (cdr active)) (push (cons prev (cdr active)) read)) ! (if compute ! (if (> (length read) 1) (nreverse read) read) ! (save-excursion ! (set-buffer gnus-group-buffer) ! (gnus-undo-register ! `(progn ! (gnus-info-set-marks ',info ',(gnus-info-marks info) t) ! (gnus-info-set-read ',info ',(gnus-info-read info)) ! (gnus-get-unread-articles-in-group ',info (gnus-active ,group)) ! (gnus-group-update-group ,group t)))) ! ;; Enter this list into the group info. ! (gnus-info-set-read ! info (if (> (length read) 1) (nreverse read) read)) ! ;; Set the number of unread articles in gnus-newsrc-hashtb. ! (gnus-get-unread-articles-in-group info (gnus-active group)) ! t)))) (defun gnus-offer-save-summaries () "Offer to save all active summary buffers." *** pub/qgnus/lisp/gnus.el Sun Sep 14 21:25:51 1997 --- qgnus/lisp/gnus.el Mon Sep 15 00:48:28 1997 *************** *** 244,250 **** :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) ! (defconst gnus-version-number "0.3" "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.4" "Version number for this version of Gnus.") (defconst gnus-version (format "Quassia Gnus v%s" gnus-version-number) *************** *** 1699,1708 **** ("gnus-agent" gnus-open-agent gnus-agent-get-function gnus-agent-save-groups gnus-agent-save-active gnus-agent-method-p) ("gnus-agent" :interactive t ! gnus-unplugged) ("gnus-vm" :interactive t gnus-summary-save-in-vm gnus-summary-save-article-vm) ! ("gnus-draft" :interactive t gnus-draft-mode)))) ;;; gnus-sum.el thingies --- 1699,1708 ---- ("gnus-agent" gnus-open-agent gnus-agent-get-function gnus-agent-save-groups gnus-agent-save-active gnus-agent-method-p) ("gnus-agent" :interactive t ! gnus-unplugged gnus-agentize) ("gnus-vm" :interactive t gnus-summary-save-in-vm gnus-summary-save-article-vm) ! ("gnus-draft" :interactive t gnus-draft-mode gnus-group-send-drafts)))) ;;; gnus-sum.el thingies *** pub/qgnus/lisp/message.el Sun Sep 14 21:25:52 1997 --- qgnus/lisp/message.el Mon Sep 15 00:48:29 1997 *************** *** 1746,1752 **** Otherwise any failure is reported in a message back to the user from the mailer." (interactive "P") ! (when (if buffer-file-name (y-or-n-p (format "Send buffer contents as %s message? " (if (message-mail-p) (if (message-news-p) "mail and news" "mail") --- 1746,1753 ---- Otherwise any failure is reported in a message back to the user from the mailer." (interactive "P") ! ;; Disabled test. ! (when (if (and nil buffer-file-name) (y-or-n-p (format "Send buffer contents as %s message? " (if (message-mail-p) (if (message-news-p) "mail and news" "mail") *** pub/qgnus/lisp/nndraft.el Sun Sep 14 21:25:52 1997 --- qgnus/lisp/nndraft.el Mon Sep 15 00:48:29 1997 *************** *** 46,52 **** (defvoo nndraft-get-new-mail nil nil nnmh-get-new-mail) (defconst nndraft-version "nndraft 1.0") ! (defvoo nndraft-status-string "" nnmh-status-string) --- 46,52 ---- (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) *************** *** 133,139 **** t)) (deffoo nndraft-request-update-info (group info &optional server) ! (setcar (cddr info) nil) (let (marks) (when (setq marks (nth 3 info)) (setcar (nthcdr 3 info) --- 133,141 ---- t)) (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) *************** *** 213,218 **** --- 215,229 ---- (setq buffer-file-name file) (make-auto-save-file-name)) (kill-buffer (current-buffer))))) + + (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 (nnmh-retrieve-headers 0 nndraft-current-group 0 0) *** pub/qgnus/lisp/ChangeLog Sun Sep 14 21:25:45 1997 --- qgnus/lisp/ChangeLog Mon Sep 15 00:48:23 1997 *************** *** 2,7 **** --- 2,30 ---- * gnus.el: Quassia Gnus v0.1 is released. + Mon Sep 15 00:40:09 1997 Lars Magne Ingebrigtsen + + * gnus.el: Quassia Gnus v0.4 is released. + + Mon Sep 15 00:19:07 1997 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-goto-article): Accept Message-ID's. + + Sun Sep 14 21:41:35 1997 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-group-make-articles-read): No params. + + * nndraft.el (nndraft-status-string): Fix. + + * gnus-draft.el (gnus-group-send-drafts): New command. + + * gnus-sum.el (gnus-compute-read-articles): Separated. + (gnus-update-read-articles): Allow computation. + + * nndraft.el (nndraft-articles): New function. + + * message.el (message-send): Disabled test. + Sun Sep 14 21:17:34 1997 Lars Magne Ingebrigtsen * gnus.el: Quassia Gnus v0.3 is released. *** pub/qgnus/texi/gnus.texi Sun Sep 14 21:25:56 1997 --- qgnus/texi/gnus.texi Mon Sep 15 00:48:36 1997 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename gnus ! @settitle Quassia Gnus 0.3 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename gnus ! @settitle Quassia Gnus 0.4 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 309,315 **** @tex @titlepage ! @title Quassia Gnus 0.3 Manual @author by Lars Magne Ingebrigtsen @page --- 309,315 ---- @tex @titlepage ! @title Quassia Gnus 0.4 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.3. @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.4. @end ifinfo *************** *** 408,414 **** @kbd{M-x gnus-other-frame} instead. If things do not go smoothly at startup, you have to twiddle some ! variables. @menu * Finding the News:: Choosing a method for getting news. --- 408,415 ---- @kbd{M-x gnus-other-frame} instead. If things do not go smoothly at startup, you have to twiddle some ! variables in your @file{~/.gnus} file. This file is similar to ! @file{~/.emacs}, but is read when gnus starts. @menu * Finding the News:: Choosing a method for getting news. *************** *** 677,687 **** @item gnus-subscribe-randomly @vindex gnus-subscribe-randomly ! Subscribe all new groups randomly. @item gnus-subscribe-alphabetically @vindex gnus-subscribe-alphabetically ! Subscribe all new groups alphabetically. @item gnus-subscribe-hierarchically @vindex gnus-subscribe-hierarchically --- 678,689 ---- @item gnus-subscribe-randomly @vindex gnus-subscribe-randomly ! Subscribe all new groups in arbitrary order. This really means that all ! new groups will be added at ``the top'' of the grop buffer. @item gnus-subscribe-alphabetically @vindex gnus-subscribe-alphabetically ! Subscribe all new groups in alphabetical order. @item gnus-subscribe-hierarchically @vindex gnus-subscribe-hierarchically *************** *** 696,702 **** @item gnus-subscribe-interactively @vindex gnus-subscribe-interactively Subscribe new groups interactively. This means that Gnus will ask ! you about @strong{all} new groups. @item gnus-subscribe-killed @vindex gnus-subscribe-killed --- 698,705 ---- @item gnus-subscribe-interactively @vindex gnus-subscribe-interactively Subscribe new groups interactively. This means that Gnus will ask ! you about @strong{all} new groups. The groups you choose to subscribe ! to will be subscribed hierarchically. @item gnus-subscribe-killed @vindex gnus-subscribe-killed *************** *** 1412,1420 **** scoring/killing will be performed, there will be no highlights and no expunging. This might be useful if you're in a real hurry and have to enter some humongous group. If you give a 0 prefix to this command ! (i.e., @kbd{0 M-RET}), Gnus won't even generate the summary buffer. ! This might be useful if you want to toggle threading before entering the ! group. @item M-SPACE @kindex M-SPACE (Group) --- 1415,1423 ---- scoring/killing will be performed, there will be no highlights and no expunging. This might be useful if you're in a real hurry and have to enter some humongous group. If you give a 0 prefix to this command ! (i.e., @kbd{0 M-RET}), Gnus won't even generate the summary buffer, ! which is useful if you want to toggle threading before generating the ! summary buffer (@pxref{Summary Generation Commands}). @item M-SPACE @kindex M-SPACE (Group) *************** *** 1660,1669 **** use this level as the ``work'' level. @vindex gnus-activate-level ! Gnus will normally just activate groups on level ! @code{gnus-activate-level} or less. If you don't want to activate ! unsubscribed groups, for instance, you might set this variable to ! 5. The default is 6. @node Group Score --- 1663,1672 ---- use this level as the ``work'' level. @vindex gnus-activate-level ! Gnus will normally just activate (i. e., query the server about) groups ! on level @code{gnus-activate-level} or less. If you don't want to ! activate unsubscribed groups, for instance, you might set this variable ! to 5. The default is 6. @node Group Score *************** *** 1886,1892 **** (@code{gnus-group-delete-group}). If given a prefix, this function will actually delete all the articles in the group, and forcibly remove the group itself from the face of the Earth. Use a prefix only if you are ! absolutely sure of what you are doing. @item G V @kindex G V (Group) --- 1889,1896 ---- (@code{gnus-group-delete-group}). If given a prefix, this function will actually delete all the articles in the group, and forcibly remove the group itself from the face of the Earth. Use a prefix only if you are ! absolutely sure of what you are doing. This command can't be used on ! read-only groups (like @code{nntp} group), though. @item G V @kindex G V (Group) *************** *** 1979,1986 **** @code{t}, newly composed messages will be @code{Gcc}'d to the current group. If it is present and set to @code{none}, no @code{Gcc:} header will be generated, if it is present and a string, this string will be ! inserted literally as a @code{gcc} header (this symbol takes precedence over ! any default @code{Gcc} rules as described later). @item auto-expire @cindex auto-expire --- 1983,1991 ---- @code{t}, newly composed messages will be @code{Gcc}'d to the current group. If it is present and set to @code{none}, no @code{Gcc:} header will be generated, if it is present and a string, this string will be ! inserted literally as a @code{gcc} header (this symbol takes precedence ! over any default @code{Gcc} rules as described later). @xref{Archived ! Messages} @item auto-expire @cindex auto-expire *************** *** 2852,2859 **** @item a @kindex a (Group) @findex gnus-group-post-news ! Post an article to a group (@code{gnus-group-post-news}). The current ! group name will be used as the default. @item m @kindex m (Group) --- 2857,2864 ---- @item a @kindex a (Group) @findex gnus-group-post-news ! Post an article to a group (@code{gnus-group-post-news}). If given a ! prefix, the current group name will be used as the default. @item m @kindex m (Group) *************** *** 3169,3176 **** @item S Subject string. @item s ! Subject if the article is the root or the previous article had a ! different subject, @code{gnus-summary-same-subject} otherwise. (@code{gnus-summary-same-subject} defaults to @samp{}.) @item F Full @code{From} header. --- 3174,3181 ---- @item S Subject string. @item s ! Subject if the article is the root of the thread or the previous article ! had a different subject, @code{gnus-summary-same-subject} otherwise. (@code{gnus-summary-same-subject} defaults to @samp{}.) @item F Full @code{From} header. *************** *** 3208,3214 **** @item R Replied. @item i ! Score as a number. @item z @vindex gnus-summary-zcore-fuzz Zcore, @samp{+} if above the default level and @samp{-} if below the --- 3213,3219 ---- @item R Replied. @item i ! Score as a number (@pxref{Scoring}). @item z @vindex gnus-summary-zcore-fuzz Zcore, @samp{+} if above the default level and @samp{-} if below the *************** *** 3283,3289 **** @item U Number of unread articles in this group. @item e ! Number of unselected articles in this group. @item Z A string with the number of unread and unselected articles represented either as @samp{<%U(+%e) more>} if there are both unread and unselected --- 3288,3295 ---- @item U Number of unread articles in this group. @item e ! Number of unread articles in this group that aren't displayed in the ! summary buffer. @item Z A string with the number of unread and unselected articles represented either as @samp{<%U(+%e) more>} if there are both unread and unselected *************** *** 3295,3307 **** @item S Subject of the current article. @item u ! User-defined spec. @item s ! Name of the current score file. @item d ! Number of dormant articles. @item t ! Number of ticked articles. @item r Number of articles that have been marked as read in this session. @item E --- 3301,3313 ---- @item S Subject of the current article. @item u ! User-defined spec (@pxref{User-Defined Specs}). @item s ! Name of the current score file (@pxref{Scoring}). @item d ! Number of dormant articles (@pxref{Unread Articles}). @item t ! Number of ticked articles (@pxref{Unread Articles}). @item r Number of articles that have been marked as read in this session. @item E *************** *** 3376,3383 **** @kindex j (Summary) @kindex G j (Summary) @findex gnus-summary-goto-article ! Ask for an article number and then go to that article ! (@code{gnus-summary-goto-article}). @item G g @kindex G g (Summary) --- 3382,3389 ---- @kindex j (Summary) @kindex G j (Summary) @findex gnus-summary-goto-article ! Ask for an article number or @code{Message-ID}, and then go to that ! article (@code{gnus-summary-goto-article}). @item G g @kindex G g (Summary) *************** *** 3527,3536 **** @item G o @kindex G o (Summary) @findex gnus-summary-pop-article Pop an article off the summary history and go to this article (@code{gnus-summary-pop-article}). This command differs from the command above in that you can pop as many previous articles off the ! history as you like. @end table --- 3533,3545 ---- @item G o @kindex G o (Summary) @findex gnus-summary-pop-article + @cindex history + @cindex article history Pop an article off the summary history and go to this article (@code{gnus-summary-pop-article}). This command differs from the command above in that you can pop as many previous articles off the ! history as you like. For a somewhat related issue (if you use this ! command a lot), @pxref{Article Backlog}. @end table *************** *** 3737,3745 **** @item S O m @kindex S O m (Summary) @findex gnus-uu-digest-mail-forward ! Digest the current series and forward the result using mail ! (@code{gnus-uu-digest-mail-forward}). This command uses the ! process/prefix convention (@pxref{Process/Prefix}). @item S M-c @kindex S M-c (Summary) --- 3746,3754 ---- @item S O m @kindex S O m (Summary) @findex gnus-uu-digest-mail-forward ! Digest the current series (@pxref{Decoding Articles}) and forward the ! result using mail (@code{gnus-uu-digest-mail-forward}). This command ! uses the process/prefix convention (@pxref{Process/Prefix}). @item S M-c @kindex S M-c (Summary) *************** *** 3937,3943 **** Marked as dormant (@code{gnus-dormant-mark}). @dfn{Dormant articles} will only appear in the summary buffer if there ! are followups to it. @item SPACE @vindex gnus-unread-mark --- 3946,3953 ---- Marked as dormant (@code{gnus-dormant-mark}). @dfn{Dormant articles} will only appear in the summary buffer if there ! are followups to it. If you want to see them even if they don't have ! followups, you can use the @kbd{/ D} command (@pxref{Limiting}). @item SPACE @vindex gnus-unread-mark *************** *** 4048,4055 **** @item @vindex gnus-cached-mark ! Articles stored in the article cache will be marked with an ! @samp{*} in the second column (@code{gnus-cached-mark}). @item @vindex gnus-saved-mark --- 4058,4065 ---- @item @vindex gnus-cached-mark ! Articles stored in the article cache will be marked with an @samp{*} in ! the second column (@code{gnus-cached-mark}). @xref{Article Caching} @item @vindex gnus-saved-mark *************** *** 4090,4101 **** --- 4100,4122 ---- All the marking commands understand the numeric prefix. @table @kbd + @item M c + @itemx M-u + @kindex M c (Summary) + @kindex M-u (Summary) + @findex gnus-summary-clear-mark-forward + @cindex mark as unread + Clear all readedness-marks from the current article + (@code{gnus-summary-clear-mark-forward}). In other words, mark the + article as unread. + @item M t @itemx ! @kindex ! (Summary) @kindex M t (Summary) @findex gnus-summary-tick-article-forward Tick the current article (@code{gnus-summary-tick-article-forward}). + @xref{Article Caching} @item M ? @itemx ? *************** *** 4103,4109 **** @kindex M ? (Summary) @findex gnus-summary-mark-as-dormant Mark the current article as dormant ! (@code{gnus-summary-mark-as-dormant}). @item M d @itemx d --- 4124,4130 ---- @kindex M ? (Summary) @findex gnus-summary-mark-as-dormant Mark the current article as dormant ! (@code{gnus-summary-mark-as-dormant}). @xref{Article Caching} @item M d @itemx d *************** *** 4166,4180 **** Kill all articles with scores below the default score (or below the numeric prefix) (@code{gnus-summary-kill-below}). - @item M c - @itemx M-u - @kindex M c (Summary) - @kindex M-u (Summary) - @findex gnus-summary-clear-mark-forward - @cindex mark as unread - Clear all readedness-marks from the current article - (@code{gnus-summary-clear-mark-forward}). - @item M e @itemx E @kindex M e (Summary) --- 4187,4192 ---- *************** *** 4440,4445 **** --- 4452,4494 ---- to articles directly after the articles they respond to---in a hierarchical fashion. + Threading is done by looking at the @code{References} headers of the + articles. In a perfect world, this would be enough to build pretty + trees, but unfortunately, the @code{References} header is often broken + or simply missing. Weird news propagration excarcerbates the problem, + so one has to employ other heuristics to get pleasing results. A + plethora of approaches exists, as detailed in horrible detail in + @pxref{Customizing Threading}. + + First, a quick overview of the concepts: + + @table @dfn + @item root + The top-most article in a thread; the first article in the thread. + + @item thread + A tree-like article structure. + + @item sub-thread + A small(er) section of this tree-like structure. + + @item loose threads + Threads often lose their roots due to article expiry, or due to the root + already having been read in a previous session, and not displayed in the + summary buffer. We then typicall have many sub-threads that really + belong to one thread, but are without connecting roots. These are + called loose threads. + + @item thread gathering + An attempt to gather loose threads into bigger threads. + + @item sparse threads + A thread where the missing articles have been ``guessed'' at, and are + displayed as empty lines in the summary buffer. + + @end table + + @menu * Customizing Threading:: Variables you can change to affect the threading. * Thread Commands:: Thread based commands in the summary buffer. *************** *** 5025,5034 **** @findex gnus-jog-cache So where does the massive article-fetching and storing come into the picture? The @code{gnus-jog-cache} command will go through all ! subscribed newsgroups, request all unread articles, and 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, --- 5074,5084 ---- @findex gnus-jog-cache So where does the massive article-fetching and storing come into the picture? The @code{gnus-jog-cache} command will go through all ! subscribed newsgroups, request all unread articles, score them, and ! 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, *************** *** 5392,5404 **** @menu * Uuencoded Articles:: Uudecode articles. ! * Shared Articles:: Unshar articles. * PostScript Files:: Split PostScript. * Other Files:: Plain save and binhex. * Decoding Variables:: Variables for a happy decoding. * Viewing Files:: You want to look at the result of the decoding? @end menu All these functions use the process/prefix convention (@pxref{Process/Prefix}) for finding out what articles to work on, with the extension that a ``single article'' means ``a single series''. Gnus --- 5442,5456 ---- @menu * Uuencoded Articles:: Uudecode articles. ! * Shell Archives:: Unshar articles. * PostScript Files:: Split PostScript. * Other Files:: Plain save and binhex. * Decoding Variables:: Variables for a happy decoding. * Viewing Files:: You want to look at the result of the decoding? @end menu + @cindex series + @cindex article series All these functions use the process/prefix convention (@pxref{Process/Prefix}) for finding out what articles to work on, with the extension that a ``single article'' means ``a single series''. Gnus *************** *** 5471,5481 **** off. ! @node Shared Articles ! @subsection Shared Articles @cindex unshar @cindex shared articles @table @kbd @item X s --- 5523,5538 ---- off. ! @node Shell Archives ! @subsection Shell Archives @cindex unshar + @cindex shell archives @cindex shared articles + Shell archives (``shar files'') used to be a popular way to distribute + sources, but it isn't used all that much today. In any case, we have + some commands to deal with these: + @table @kbd @item X s *************** *** 6117,6128 **** @item W c @kindex W c (Summary) @findex gnus-article-remove-cr ! Remove CR (@code{gnus-article-remove-cr}). @item W q @kindex W q (Summary) @findex gnus-article-de-quoted-unreadable Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}). @item W f @kindex W f (Summary) --- 6174,6190 ---- @item W c @kindex W c (Summary) @findex gnus-article-remove-cr ! Remove CR (i. e., @samp{^M}s on the end of the lines) ! (@code{gnus-article-remove-cr}). @item W q @kindex W q (Summary) @findex gnus-article-de-quoted-unreadable Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}). + Quoted-Printable is one common @sc{mime} encoding employed when sending + non-ASCII (i. e., 8-bit) articles. It typically makes strings like + @samp{déjà vu} look like @samp{d=E9j=E0 vu}, which doesn't look very + readable to me. @item W f @kindex W f (Summary) *************** *** 6157,6163 **** @item W b @kindex W b (Summary) @findex gnus-article-add-buttons ! Add clickable buttons to the article (@code{gnus-article-add-buttons}). @item W B @kindex W B (Summary) --- 6219,6226 ---- @item W b @kindex W b (Summary) @findex gnus-article-add-buttons ! Add clickable buttons to the article (@code{gnus-article-add-buttons}). ! @xref{Article Buttons} @item W B @kindex W B (Summary) *************** *** 6205,6211 **** People often include references to other stuff in articles, and it would be nice if Gnus could just fetch whatever it is that people talk about ! with the minimum of fuzz. Gnus adds @dfn{buttons} to certain standard references by default: Well-formed URLs, mail addresses and Message-IDs. This is controlled by --- 6268,6275 ---- People often include references to other stuff in articles, and it would be nice if Gnus could just fetch whatever it is that people talk about ! with the minimum of fuzz when you hit @kbd{RET} or use the middle mouse ! button on these references. Gnus adds @dfn{buttons} to certain standard references by default: Well-formed URLs, mail addresses and Message-IDs. This is controlled by *************** *** 6380,6386 **** @end enumerate This variable can also be a list where the elements may be of the types ! listed above. @node Article Commands --- 6444,6460 ---- @end enumerate This variable can also be a list where the elements may be of the types ! listed above. Here's an example: ! ! @lisp ! (setq gnus-signature-limit ! '(200.0 "^---*Forwarded article")) ! @end lisp ! ! This means that if there are more than 200 lines after the signature ! separator, or the text after the signature separator is matched by ! the regular expression @samp{^---*Forwarded article}, then it isn't a ! signature after all. @node Article Commands *************** *** 8020,8028 **** If you are writing a message (mail or news) and suddenly remember that you have a steak in the oven (or some pesto in the food processor, you ! craazy vegetarians), you'll probably wish there was a method to save the ! message you are writing so that you can continue editing it some other ! day, and send it when you feel its finished. Well, don't worry about it. Whenever you start composing a message of some sort using the Gnus mail and post commands, the buffer you get will --- 8094,8102 ---- If you are writing a message (mail or news) and suddenly remember that you have a steak in the oven (or some pesto in the food processor, you ! craaazy vegetarians), you'll probably wish there was a method to save ! the message you are writing so that you can continue editing it some ! other day, and send it when you feel its finished. Well, don't worry about it. Whenever you start composing a message of some sort using the Gnus mail and post commands, the buffer you get will *************** *** 8032,8082 **** group.) @cindex nndraft ! @vindex gnus-draft-group-directory The draft group is a special group (which is implemented as an @code{nndraft} group, if you absolutely have to know) called ! @samp{nndraft:drafts}. The variable @code{gnus-draft-group-directory} ! controls both the name of the group and the location---the leaf element ! in the path will be used as the name of the group. What makes this ! group special is that you can't tick any articles in it or mark any ! articles as read---all articles in the group are permanently unread. If the group doesn't exist, it will be created and you'll be subscribed ! to it. ! @findex gnus-dissociate-buffer-from-draft ! @kindex C-c M-d (Mail) ! @kindex C-c M-d (Post) ! @findex gnus-associate-buffer-with-draft ! @kindex C-c C-d (Mail) ! @kindex C-c C-d (Post) ! If you're writing some super-secret message that you later want to ! encode with PGP before sending, you may wish to turn the auto-saving ! (and association with the draft group) off. You never know who might be ! interested in reading all your extremely valuable and terribly horrible ! and interesting secrets. The @kbd{C-c M-d} ! (@code{gnus-dissociate-buffer-from-draft}) command does that for you. ! If you change your mind and want to turn the auto-saving back on again, ! @kbd{C-c C-d} (@code{gnus-associate-buffer-with-draft} does that. ! ! @vindex gnus-use-draft ! To leave association with the draft group off by default, set ! @code{gnus-use-draft} to @code{nil}. It is @code{t} by default. ! @findex gnus-summary-send-draft ! @kindex S D c (Summary) When you want to continue editing the article, you simply enter the ! draft group and push @kbd{S D c} (@code{gnus-summary-send-draft}) to do that. You will be placed in a buffer where you left off. Rejected articles will also be put in this draft group (@pxref{Rejected Articles}). ! @findex gnus-summary-send-all-drafts If you have lots of rejected messages you want to post (or mail) without ! doing further editing, you can use the @kbd{S D a} command ! (@code{gnus-summary-send-all-drafts}). This command understands the ! process/prefix convention (@pxref{Process/Prefix}). @node Rejected Articles --- 8106,8163 ---- group.) @cindex nndraft ! @vindex nndraft-directory The draft group is a special group (which is implemented as an @code{nndraft} group, if you absolutely have to know) called ! @samp{nndraft:drafts}. The variable @code{nndraft-directory} says where ! @code{nndraft} is to store its files. What makes this group special is ! that you can't tick any articles in it or mark any articles as ! read---all articles in the group are permanently unread. If the group doesn't exist, it will be created and you'll be subscribed ! to it. The only way to make it disappear from the Group buffer is to ! unsubscribe it. ! @c @findex gnus-dissociate-buffer-from-draft ! @c @kindex C-c M-d (Mail) ! @c @kindex C-c M-d (Post) ! @c @findex gnus-associate-buffer-with-draft ! @c @kindex C-c C-d (Mail) ! @c @kindex C-c C-d (Post) ! @c If you're writing some super-secret message that you later want to ! @c encode with PGP before sending, you may wish to turn the auto-saving ! @c (and association with the draft group) off. You never know who might be ! @c interested in reading all your extremely valuable and terribly horrible ! @c and interesting secrets. The @kbd{C-c M-d} ! @c (@code{gnus-dissociate-buffer-from-draft}) command does that for you. ! @c If you change your mind and want to turn the auto-saving back on again, ! @c @kbd{C-c C-d} (@code{gnus-associate-buffer-with-draft} does that. ! @c ! @c @vindex gnus-use-draft ! @c To leave association with the draft group off by default, set ! @c @code{gnus-use-draft} to @code{nil}. It is @code{t} by default. ! @findex gnus-draft-edit-message ! @kindex D e (Draft) When you want to continue editing the article, you simply enter the ! draft group and push @kbd{D e} (@code{gnus-draft-edit-message}) to do that. You will be placed in a buffer where you left off. Rejected articles will also be put in this draft group (@pxref{Rejected Articles}). ! @findex gnus-draft-send-all-messages ! @findex gnus-draft-send-message If you have lots of rejected messages you want to post (or mail) without ! doing further editing, you can use the @kbd{D s} command ! (@code{gnus-draft-send-message}). This command understands the ! process/prefix convention (@pxref{Process/Prefix}). The @kbd{D S} ! command (@code{gnus-draft-send-all-messages}) will ship off all messages ! in the buffer. ! ! If you have some messages that you wish not to send, you can use the ! @kbd{D t} (@code{gnus-draft-toggle-sending}) command to mark the message ! as unsendable. This is a toggling command. @node Rejected Articles *************** *** 10766,10771 **** --- 10847,10853 ---- * Agent Basics:: How it all is supposed to work. * Agent Categories:: How to tell the Gnus Agent what to download. * Agent Commands:: New commands for all the buffers. + * Outgoing Messages:: What happens when you post/mail something? * Agent Variables:: Customizing is fun. @end menu *************** *** 10815,10820 **** --- 10897,10922 ---- And then you go to step 2. @end itemize + Here are some things you should do the first time (or so) that you use + the Agent. + + @itemize @bullet + + @item + Decide which servers should be covered by the Agent. If you have a mail + backend, it would probably be nonsensical to have it covered by the + Agent. Go to the server buffer (@kbd{^} in the group buffer) and press + @kbd{J a} the server (or servers) that you wish to have covered by the + Agent (@pxref{Server Agent Commands}). This will typically be only the + primary select method, which is listed on the bottom in the buffer. + + @item + Decide on download policy. @xref{Agent Categories} + + @item + Uhm... that's it. + @end itemize + @node Agent Categories @subsection Agent Categories *************** *** 11068,11073 **** --- 11170,11181 ---- Fetch all eligible articles in all groups (@code{gnus-agent-fetch-session}). + @item J S + @kindex J S (Agent Group) + @findex gnus-group-send-drafts + Send all sendable messages in the draft group + (@code{gnus-agent-fetch-session}). @xref{Drafts} + @item J a @kindex J a (Agent Group) @findex gnus-agent-add-group *************** *** 11124,11129 **** --- 11232,11251 ---- @end table + @node Outgoing Messages + @subsection Outgoing Messages + + When Gnus is unplugged, all outgoing messages (both mail and news) are + stored in the draft groups (@pxref{Drafts}). You can view them there + after posting, and edit them at will. + + When Gnus is plugged again, you can send the messages either from the + draft group with the special commands available there, or you can use + the @kbd{J S} command in the group buffer to send all the sendable + messages in the draft group. + + + @node Agent Variables @subsection Agent Variables *************** *** 11610,11616 **** (files "/hom/larsi/News/gnu.SCORE") (exclude-files "all.SCORE") (local (gnus-newsgroup-auto-expire t) ! (gnus-summary-make-false-root 'empty)) (eval (ding))) @end lisp --- 11732,11738 ---- (files "/hom/larsi/News/gnu.SCORE") (exclude-files "all.SCORE") (local (gnus-newsgroup-auto-expire t) ! (gnus-summary-make-false-root empty)) (eval (ding))) @end lisp *************** *** 11826,11832 **** Each @var{var} will be made buffer-local to the current summary buffer, and set to the value specified. This is a convenient, if somewhat strange, way of setting variables in some groups if you don't like hooks ! much. @end table --- 11948,11954 ---- Each @var{var} will be made buffer-local to the current summary buffer, and set to the value specified. This is a convenient, if somewhat strange, way of setting variables in some groups if you don't like hooks ! much. Note that the @var{value} won't be evaluated. @end table *************** *** 15675,15680 **** --- 15797,15826 ---- @cindex sparse articles These are article placeholders shown in the summary buffer when @code{gnus-build-sparse-threads} has been switched on. + + @item threading + @cindex threading + To put responses to articles directly after the articles they respond + to---in a hierarchical fashion. + + @item root + @cindex root + @cindex thread root + The first article in a thread is the root. It is the ancestor of all + articles in the thread. + + @item parent + @cindex parent + An article that has responses. + + @item child + @cindex child + An article that responds to a different article---its parent. + + @item digest + @cindex digest + A collection of messages in one file. The most common digest format is + specified by RFC1153. @end table *** pub/qgnus/texi/message.texi Sun Sep 14 21:25:57 1997 --- qgnus/texi/message.texi Mon Sep 15 00:48:37 1997 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Message 0.3 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Message 0.4 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 39,45 **** @tex @titlepage ! @title Message 0.3 Manual @author by Lars Magne Ingebrigtsen @page --- 39,45 ---- @tex @titlepage ! @title Message 0.4 Manual @author by Lars Magne Ingebrigtsen @page *************** *** 79,85 **** * Key Index:: List of Message mode keys. @end menu ! This manual corresponds to Message 0.3. 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.4. Message is distributed with the Gnus distribution bearing the same version number as this manual has. *** pub/qgnus/texi/ChangeLog Sat Aug 16 20:47:27 1997 --- qgnus/texi/ChangeLog Mon Sep 15 00:48:37 1997 *************** *** 1,3 **** --- 1,11 ---- + Sun Sep 14 21:59:07 1997 Lars Magne Ingebrigtsen + + * gnus.texi (Outgoing Messages): New. + (Score File Format): Note. + (Subscription Methods): Fix. + (Starting Up): Fix. + (Threading): Add. + Sat Jul 19 23:02:03 1997 Lars Magne Ingebrigtsen * gnus.texi (Followups To Yourself): \\(_-_\\)? *** 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.