+Sun Feb 4 16:22:20 1996 Lars Magne Ingebrigtsen <larsi@aegir.ifi.uio.no>
+
+ * gnus.el (gnus-summary-edit-article): Make sure we're in the
+ summary buffer.
+
+Sun Feb 4 14:05:20 1996 Lars Magne Ingebrigtsen <larsi@eistla.ifi.uio.no>
+
+ * nndoc.el (nndoc-guess-digest-type): Too strict body-begin for
+ MIME digests.
+
+ * gnus-msg.el (gnus-removable-headers): Don't remove Bcc header.
+ (gnus-mail-send): Accept a parameter.
+ (gnus-inews-send-mail-copy): Use it.
+
+ * gnus-salt.el (gnus-tree-close): Don't kill the tree buffer.
+
+ * gnus.el (gnus-summary-select-article): Changed return value.
+ (gnus-summary-scroll-up): Use it.
+
+Sat Feb 3 20:39:59 1996 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.el (gnus-summary-dummy-line-format): Included tabs.
+ (gnus-summary-prepare-threads): Insert dummy lines properly.
+ (gnus-summary-hide-thread): Hide dummies better.
+
+ * gnus-uu.el (gnus-uu-get-actions): Escape special characters.
+
+ * gnus-soup.el (gnus-soup-group-brew): Add articles in right
+ order; don't generate display.
+
+ * gnus.el (gnus-summary-sort): Allow sorting in reverse order.
+ (gnus-summary-pop-limit): Don't pop if there isn't anything to
+ pop.
+ (gnus-sort-articles): Would destroy the newsgroup data.
+
+ * gnus-soup.el (gnus-soup-unpack-packet): Return the process value.
+
+ * gnus.el (gnus-summary-exit): Don't bury buffers that don't exist.
+ (gnus-summary-exit-no-update): Ditto.
+
+Sat Feb 3 14:37:31 1996 Lars Magne Ingebrigtsen <larsi@aegir.ifi.uio.no>
+
+ * gnus-soup.el (gnus-soup-add-article): Would bug out on
+ non-existent articles.
+
+ * gnus.el (gnus-configure-windows): Delete windows on all frames.
+
+Sat Feb 3 15:07:38 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.el (gnus-summary-read-group): Wouldn't score anything.
+
+ * gnus.el: 0.34 is released.
+
+Sat Feb 3 13:08:48 1996 Lars Magne Ingebrigtsen <larsi@aegir.ifi.uio.no>
+
+ * gnus-msg.el (gnus-summary-resend-bounced-mail): Strip more
+ gruft.
+
+ * gnus.el: 0.33 is released.
+
+Fri Feb 2 20:19:07 1996 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.el (gnus-summary-exit): Bury the article buffer.
+
+ * gnus-score.el (gnus-score-followup-article): Don't do
+ `score-effect'.
+
+Fri Feb 2 20:07:31 1996 Jason L. Tibbitts, III <tibbs@uh.edu>
+
+ * nnmail.el (nnmail-process-babyl-mail-format): Allow many spaces
+ after ":".
+
+Fri Feb 2 20:05:02 1996 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.el (gnus-summary-select-article): Return t on success.
+
+Thu Feb 1 00:50:54 1996 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * nnfolder.el (nnfolder-request-group): Give a better error
+ message.
+
+ * nnfolder.el: Really use virtual servers.
+
+ * gnus.el (gnus-select-newsgroup): Moved score file processing to
+ an earlier point.
+
+ * gnus-msg.el (gnus-post-method): Use `gnus-post-method' from the
+ group buffer.
+
+ * nnsoup.el (nnsoup-request-expire-articles): Bombed.
+ (nnsoup-delete-unreferenced-message-files): New command.
+
+ * gnus-cache.el (gnus-cache-possibly-enter-article): Update cache
+ mark.
+ (gnus-cache-possibly-remove-article): Ditto.
+
+ * gnus-srvr.el (gnus-server-prepare): Weed out nil servers.
+
+ * gnus-msg.el (gnus-mail-reply): Respect
+ `rmail-dont-reply-to-names'.
+
+Wed Jan 31 19:25:50 1996 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * gnus-msg.el (gnus-inews-insert-mime-headers): `(widen)' before
+ searching for 8-bit characters.
+
+ * gnus-vis.el (gnus-article-highlight-headers): Make it ignore
+ the `intangible' text property.
+
+Thu Feb 1 00:33:37 1996 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.el (gnus-summary-limit-to-unread): Remove sparse articles.
+
+Wed Jan 31 15:54:38 1996 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus-score.el (gnus-summary-score-map): Recursive map.
+
+ * gnus-msg.el (gnus-dissociate-buffer-from-draft): Didn't run hook
+ properly.
+
+ * gnus-kill.el (gnus-execute): Don't use `gnus-header-*'.
+
+ * gnus-msg.el (gnus-kill-message-buffer): New command and
+ keystroke.
+ (gnus-mail-setup): Use the gnus-mail-*-method variables.
+
+ * gnus-topic.el (gnus-topic-rename): Default to current topic.
+ (gnus-topic-create-topic): Ditto.
+
+ * gnus-vis.el (gnus-group-highlight-line): Offer ticked number.
+
+ * gnus-uu.el (gnus-uu-grab-articles): Remove the message.
+
+ * gnus-vis.el (gnus-group-highlight): New default for dark
+ backgrounds.
+
+ * gnus-topic.el (gnus-group-prepare-topics): Don't do anything
+ about dead groups.
+
+ * gnus.el (gnus-summary-mode-map): Clobbered "D".
+
+Mon Jan 29 19:06:00 1996 Kim-Minh Kaplan <kkaplan@cdfhp3.in2p3.fr>
+
+ * gnus.el (gnus-simplify-subject-fuzzy): Fold case.
+
+Mon Jan 29 17:48:12 1996 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.el (gnus-summary-limit): Hide any threads, possibly.
+
+ * gnus-msg.el (gnus-forward-insert-buffer): Really delete unwanted
+ headers.
+
+ * gnus-vis.el (gnus-insert-prev-page-button): Allow clicking.
+ (gnus-insert-next-page-button): Ditto.
+
+ * nntp.el (nntp-send-region-to-server): Copy text to a temp buffer
+ before sending.
+
+Sun Jan 28 10:28:39 1996 Lars Magne Ingebrigtsen <larsi@eistla.ifi.uio.no>
+
+ * gnus-cite.el (gnus-dissect-cited-text): Don't push a nil on the
+ list.
+
+Sat Jan 27 20:32:29 1996 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus-topic.el (gnus-group-topic-topics-only): Removed variable.
+
+ * nnbabyl.el (nnbabyl-request-group): Don't report failures on
+ empty groups.
+ * nnmbox.el (nnmbox-request-group): Ditto.
+
+ * gnus.el (gnus-simplify-buffer-fuzzy): Simplify [x/x].
+
+ * gnus-score.el (gnus-score-default-header): Duplicate defvars.
+ (gnus-summary-increase-score): Default variables should be
+ symbols, not chars.
+
+ * gnus.el (gnus-summary-mode-map): Wrong name for `t' keystroke.
+
+Sat Jan 27 20:29:45 1996 Marc Auslander <marc@watson.ibm.com>
+
+ * gnus-score.el (gnus-summary-increase-score): Didn't work for
+ non-temporary score entries.
+
+Fri Jan 26 17:24:00 1996 David K}gedal <davidk@lysator.liu.se>
+
+ * nnmail.el (nnmail-check-duplication): Don't tread 'delete as a
+ function
+
+Sat Jan 27 19:51:08 1996 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus-topic.el (gnus-topic-prepare-topic): Number of groups would
+ be 0.
+ (gnus-topic-update-topic-line): Ditto.
+
+Fri Jan 26 15:10:09 1996 Steven L. Baur <steve@miranova.com>
+
+ * gnus-vis.el (gnus-article-add-buttons): Need to reset point to top
+ of article before trying the next regexp in the gnus-button-alist.
+
+Sat Jan 27 19:22:24 1996 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus-vis.el (gnus-button-alist): Allow space after "<URL: ".
+
+Fri Jan 26 20:20:25 1996 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus-topic.el (gnus-topic-indent-level): New variable.
+ (gnus-topic-yank-group): Use it.
+ (gnus-topic-insert-topic-line): Ditto.
+ (gnus-topic-prepare-topic): Ditto.
+
+Fri Jan 26 17:18:25 1996 ISO-2022-JP <yamaoka@ga.sony.co.jp>
+
+ * gnus-vis.el (gnus-article-highlight-headers): Would infloop.
+
+Fri Jan 26 14:10:19 1996 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.el (gnus-dribble-read-file): Set file modes on the dribble
+ file.
+ (gnus-article-check-hidden-text): Only checked signature.
+ (gnus-article-check-hidden-text): Do things in the article
+ buffer.
+ (gnus-group-line-format-alist): Let N have its old definition.
+ (gnus-group-catchup-group-hook): New variable.
+ (gnus-group-catchup): Use it.
+ (gnus-group-remove-mark): Give a useful return value.
+ (gnus-group-kill-group): Would bug out when killing lots of dead
+ groups.
+
+Thu Jan 25 09:32:19 1996 Jack Vinson <jvinson@cheux.ecs.umass.edu>
+
+ * gnus.el (gnus-group-insert-group-line) : Changed "header" to
+ "gnus-tmp-header" for parameter that gets passed to user
+ functions. Set to the group name, but may not necessarily want
+ this.
+ (gnus-group-set-mode-line) : ditto, gnus-tmp-header set to nil.
+ (gnus-set-mode-line) : ditto, gnus-tmp-header set to nil.
+
Fri Jan 26 07:47:59 1996 Lars Magne Ingebrigtsen <larsi@eistla.ifi.uio.no>
* gnus.el (gnus): Goto the first unread group.
+ * gnus.el: 0.32 is released.
+
Thu Jan 25 18:27:03 1996 Lars Ingebrigtsen <lars@eyesore.no>
* gnus.el: Autoload `gnus-group-highlight-line'.
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(setq load-path (cons "." load-path))
(defun dgnushack-compile ()
+ ;(setq byte-compile-dynamic t)
(let ((files (directory-files "." nil ".el$"))
(xemacs (string-match "XEmacs" emacs-version))
byte-compile-warnings file)
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; Update the active info.
(set-buffer gnus-summary-buffer)
(gnus-cache-update-active group number)
- (push number gnus-newsgroup-cached))
+ (push number gnus-newsgroup-cached)
+ (gnus-summary-update-secondary-mark article))
t))))))
(defun gnus-cache-enter-remove-article (article)
(progn (forward-line 1) (point)))))
(setq gnus-newsgroup-cached
(delq article gnus-newsgroup-cached))
+ (gnus-summary-update-secondary-mark article)
t)))
(defun gnus-cache-articles-in-group (group)
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(setq omarks (cdr omarks)))
(push (car omarks) marks))
(setq omarks (cdr omarks)))
- (push (car omarks) marks)
+ (when (car omarks)
+ (push (car omarks) marks))
(nreverse marks)))))
(defun gnus-article-fill-cited-article (&optional force)
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(save-excursion
(let ((killed-no 0)
function article header)
- (if (or (null field) (string-equal field ""))
- (setq function nil)
+ (if (or (null field)
+ (string-equal field "")
+ (not (fboundp
+ (setq function
+ (intern-soft
+ (concat "mail-header-" (downcase field)))))))
+ (error "Unknown header field: \"%s\"" field)
;; Get access function of header filed.
- (setq function (intern-soft (concat "gnus-header-" (downcase field))))
- (if (and function (fboundp function))
- (setq function (symbol-function function))
- (error "Unknown header field: \"%s\"" field))
- ;; Make FORM funcallable.
- (if (and (listp form) (not (eq (car form) 'lambda)))
- (setq form (list 'lambda nil form))))
- ;; Starting from the current article.
- (while (or (and (not article)
- (setq article (gnus-summary-article-number))
- t)
- (setq article
- (gnus-summary-search-forward
- (not ignore-marked) nil backward)))
- (and (or (null gnus-newsgroup-kill-headers)
- (memq article gnus-newsgroup-kill-headers))
- (vectorp (setq header (gnus-summary-article-header article)))
- (gnus-execute-1 function regexp form header)
- (setq killed-no (1+ killed-no))))
- killed-no)))
+ (setq function `(lambda (h) (,function h)))
+ ;; Starting from the current article.
+ (while (or (and (not article)
+ (setq article (gnus-summary-article-number))
+ t)
+ (setq article
+ (gnus-summary-search-forward
+ (not ignore-marked) nil backward)))
+ (and (or (null gnus-newsgroup-kill-headers)
+ (memq article gnus-newsgroup-kill-headers))
+ (vectorp (setq header (gnus-summary-article-header article)))
+ (gnus-execute-1 function regexp form header)
+ (setq killed-no (1+ killed-no))))
+ killed-no))))
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(defvar gnus-deletable-headers '(Message-ID Date)
"*Headers to be deleted if they already exists and were generated by Gnus previously.")
-(defvar gnus-removable-headers '(NNTP-Posting-Host Bcc Xref)
+(defvar gnus-removable-headers '(NNTP-Posting-Host Xref)
"*Headers to be removed unconditionally before posting.")
(defvar gnus-article-expires 14
(defvar gnus-in-reply-to nil)
(defvar gnus-last-posting-server nil)
-
(eval-and-compile
(autoload 'gnus-uu-post-news "gnus-uu" nil t)
(autoload 'news-setup "rnewspost")
(autoload 'news-reply-mode "rnewspost")
+ (autoload 'rmail-dont-reply-to "mail-utils")
(autoload 'rmail-output "rmailout"))
\f
;; If the group-method is nil (which shouldn't happen) we use
;; the default method.
((null group-method)
- gnus-select-method)
+ (or gnus-post-method gnus-select-method))
;; We want this group's method.
((and query-method (not (eq query-method 0)))
group-method)
(forward-line 1)
(insert gnus-mail-courtesy-message)))
- (gnus-mail-send)
+ (gnus-mail-send t)
(kill-buffer (current-buffer))
(gnus-message 5 "Sending via mail...done"))))))
""))))
(or (mail-position-on-field "Mime-Version")
(insert "1.0")
- (cond ((progn
+ (cond ((save-restriction
+ (widen)
(goto-char (point-min))
(re-search-forward "[\200-\377]" nil t))
(or (mail-position-on-field "Content-Type")
(gnus-set-work-buffer)
(unless (equal mct "never")
(insert (or reply-to from "")))
- (insert (if (bolp) "" ", ")
- (or to "")
- (if (or (not mct) (not mctdo)) ""
- (concat (if (bolp) "" ", ") mct))
- (if cc (concat (if (bolp) "" ", ") cc) ""))
+ (insert
+ (if (bolp) "" ", ") (or to "")
+ (if (or (not mct) (not mctdo)) ""
+ (concat (if (bolp) "" ", ") mct))
+ (if cc (concat (if (bolp) "" ", ") cc) ""))
+ ;; Remove addresses that match `rmail-dont-reply-to-names'.
+ (insert (prog1 (rmail-dont-reply-to (buffer-string))
+ (erase-buffer)))
(goto-char (point-min))
(setq ccalist
(mapcar
(cdr reply)))))
(and winconf (set-window-configuration winconf))))))
+(defun gnus-kill-message-buffer ()
+ "Kill the current buffer after dissociating it from the draft group."
+ (interactive)
+ (when (gnus-y-or-n-p "Dissociate and kill the current buffer? ")
+ (gnus-dissociate-buffer-from-draft)
+ (kill-buffer (current-buffer))))
+
(defun gnus-put-message ()
"Put the current message in some group and return to Gnus."
(interactive)
(insert gnus-forward-end-separator)
;; Remove all unwanted headers.
(goto-char (point-min))
+ (forward-line 1)
(save-restriction
(narrow-to-region (point) (if (search-forward "\n\n" nil t)
(1- (point))
(point)))
+ (goto-char (point-min))
(delete-non-matching-lines gnus-forward-included-headers))
;; Delete any invisible text.
(goto-char (point-min))
(erase-buffer)
(insert-buffer-substring gnus-article-buffer)
(goto-char (point-min))
- (search-forward "\n\n")
+ (or (re-search-forward "--- *Original message.*\n" nil t)
+ (and (search-forward "\n\n" nil t)
+ (re-search-forward "^Return-Path:.*\n" nil t)))
;; We remove everything before the bounced mail.
(delete-region
(point-min)
;;; Sending mail.
-(defun gnus-mail-send ()
+(defun gnus-mail-send (&optional no-generated-headers)
"Send the current buffer as mail.
Headers will be generated before sending."
(interactive)
- (save-excursion
- (save-restriction
- (widen)
- (gnus-inews-narrow-to-headers)
- (gnus-inews-insert-headers gnus-required-mail-headers)
- (gnus-inews-remove-empty-headers)))
+ (unless no-generated-headers
+ (save-excursion
+ (save-restriction
+ (widen)
+ (gnus-inews-narrow-to-headers)
+ (gnus-inews-insert-headers gnus-required-mail-headers)
+ (gnus-inews-remove-empty-headers))))
(widen)
;; Remove the header separator.
(goto-char (point-min))
(use-local-map (copy-keymap (current-local-map)))
(local-set-key "\C-c\C-c" 'gnus-mail-send-and-exit)
(local-set-key "\C-c\C-p" 'gnus-put-message)
+ (local-set-key "\C-c\C-k" 'gnus-kill-message-buffer)
(local-set-key "\C-c\M-d" 'gnus-dissociate-buffer-from-draft)
(local-set-key "\C-c\C-d" 'gnus-associate-buffer-with-draft))
(eq gnus-mail-other-window-method
'gnus-mail-other-window-using-vm)))
'gnus-vm-mail-setup)
- (t 'gnus-sendmail-mail-setup))
+ ((or
+ (eq gnus-mail-method 'sendmail)
+ (and (or (eq type 'reply) (eq type 'followup))
+ (eq gnus-mail-reply-method 'gnus-mail-reply-using-mail))
+ (and (eq type 'forward)
+ (eq gnus-mail-forward-method 'gnus-mail-forward-using-mail))
+ (and (eq type 'new)
+ (eq gnus-mail-other-window-method
+ 'gnus-mail-other-window-using-mail)))
+ 'gnus-sendmail-mail-setup)
+ (t
+ (cond ((or (eq type 'reply) (eq type 'followup))
+ gnus-mail-reply-method)
+ ((eq type 'forward)
+ gnus-mail-forward-method)
+ ((eq type 'new)
+ gnus-mail-other-window-method))))
to subject in-reply-to cc replybuffer actions)
;; Associate this mail buffer with the draft group.
(gnus-enter-buffer-into-draft))
(defun gnus-dissociate-buffer-from-draft ()
"Disable auto-saving and association to the draft group of the current buffer."
(interactive)
- (run-hooks gnus-message-sent-hook)
+ (run-hooks 'gnus-message-sent-hook)
(setq buffer-file-name nil)
(setq buffer-auto-save-file-name nil))
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(gnus-get-tree-buffer))
(defun gnus-tree-close (group)
- (gnus-kill-buffer gnus-tree-buffer))
+ ;(gnus-kill-buffer gnus-tree-buffer)
+ )
(defun gnus-highlight-selected-tree (article)
"Highlight the selected article in the tree."
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(defvar gnus-score-uncacheable-files "ADAPT$"
"*All score files that match this regexp will not be cached.")
+(defvar gnus-score-default-header nil
+ "Default header when entering new scores.
+
+Should be one of the following symbols.
+
+ a: from
+ s: subject
+ b: body
+ h: head
+ i: message-id
+ t: references
+ x: xref
+ l: lines
+ d: date
+ f: followup
+
+If nil, the user will be asked for a header.")
+
+(defvar gnus-score-default-type nil
+ "Default match type when entering new scores.
+
+Should be one of the following symbols.
+
+ s: substring
+ e: exact string
+ f: fuzzy string
+ r: regexp string
+ b: before date
+ a: at date
+ n: this date
+ <: less than number
+ >: greater than number
+ =: equal to number
+
+If nil, the user will be asked for a match type.")
+
+(defvar gnus-score-default-fold nil
+ "Use case folding for new score file entries iff not nil.")
+
+(defvar gnus-score-default-duration nil
+ "Default duration of effect when entering new scores.
+
+Should be one of the following symbols.
+
+ t: temporary
+ p: permanent
+ i: immediate
+
+If nil, the user will be asked for a duration.")
+
\f
;; Internal variables.
(gnus-define-keys
(gnus-summary-score-map "V" gnus-summary-mode-map)
- "V" gnus-summary-score-map
"s" gnus-summary-set-score
"a" gnus-summary-score-entry
"S" gnus-summary-current-score
(list (list ?t (current-time-string) "temporary")
'(?p perm "permanent") '(?i now "immediate")))
(mimic gnus-score-mimic-keymap)
- (hchar gnus-score-default-header)
- (tchar gnus-score-default-type)
- (pchar gnus-score-default-duration)
+ (hchar (and gnus-score-default-header
+ (aref (symbol-name gnus-score-default-header) 0)))
+ (tchar (and gnus-score-default-type
+ (aref (symbol-name gnus-score-default-type) 0)))
+ (pchar (and gnus-score-default-duration
+ (aref (symbol-name gnus-score-default-duration) 0)))
entry temporary end type match)
;; First we read the header to score.
(if (eq 's score) nil score) ; Score
(if (eq 'perm temporary) ; Temp
nil
- (nth 1 temporary))
+ temporary)
(not (nth 3 entry))) ; Prompt
))
(when id
(gnus-summary-score-entry
"references" (concat id "[ \t]*$") 'r
- score (current-time-string)))))))
+ score (current-time-string) nil t))))))
(defun gnus-score-followup-thread (&optional score)
"Add SCORE to all later articles in the thread the current buffer is part of."
(setq files (cdr files)))
(setq gnus-internal-global-score-files out)))
+(defun gnus-score-default-fold-toggle ()
+ "Toggle folding for new score file entries."
+ (interactive)
+ (setq gnus-score-default-fold (not gnus-score-default-fold))
+ (if gnus-score-default-fold
+ (message "New score file entries will be case insensitive.")
+ (message "New score file entries will be case sensitive.")))
+
(provide 'gnus-score)
;;; gnus-score.el ends here
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; My head is starting to spin with all the different mail/news packages.
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(while articles
;; Find the header of the article.
(set-buffer gnus-summary-buffer)
- (setq headers (gnus-summary-article-header (car articles)))
- ;; Put the article in a buffer.
- (set-buffer tmp-buf)
- (when (gnus-request-article-this-buffer
- (car articles) gnus-newsgroup-name)
- (gnus-soup-store gnus-soup-directory prefix headers
- gnus-soup-encoding-type
- gnus-soup-index-type)
- (gnus-soup-area-set-number
- area (1+ (or (gnus-soup-area-number area) 0))))
+ (when (setq headers (gnus-summary-article-header (car articles)))
+ ;; Put the article in a buffer.
+ (set-buffer tmp-buf)
+ (when (gnus-request-article-this-buffer
+ (car articles) gnus-newsgroup-name)
+ (gnus-soup-store gnus-soup-directory prefix headers
+ gnus-soup-encoding-type
+ gnus-soup-index-type)
+ (gnus-soup-area-set-number
+ area (1+ (or (gnus-soup-area-number area) 0)))))
;; Mark article as read.
(set-buffer gnus-summary-buffer)
(gnus-summary-remove-process-mark (car articles))
msg-buf)))
(defun gnus-soup-group-brew (group)
+ "Enter GROUP and add all articles to a SOUP package."
(let ((gnus-expert-user t)
(gnus-large-newsgroup nil))
- (and (gnus-summary-read-group group)
- (let ((gnus-newsgroup-processable
- (gnus-sorted-complement
- gnus-newsgroup-unreads
- (append gnus-newsgroup-dormant gnus-newsgroup-marked))))
- (gnus-soup-add-article nil)))
+ (when (gnus-summary-read-group group nil nil nil t)
+ (let ((gnus-newsgroup-processable
+ (nreverse
+ (gnus-sorted-complement
+ gnus-newsgroup-unreads
+ (append gnus-newsgroup-dormant gnus-newsgroup-marked)))))
+ (gnus-soup-add-article nil)))
(gnus-summary-exit)))
(defun gnus-soup-insert-idx (offset header)
(int-to-string (cdr entry))))
(defun gnus-soup-unpack-packet (dir unpacker packet)
+ "Unpack PACKET into DIR using UNPACKER.
+Return whether the unpacking was successful."
(gnus-make-directory dir)
(message "Unpacking: %s" (format unpacker packet))
- (call-process
- "sh" nil nil nil "-c"
- (format "cd %s ; %s" (expand-file-name dir) (format unpacker packet)))
- (message "Unpacking...done"))
+ (prog1
+ (zerop (call-process
+ "sh" nil nil nil "-c"
+ (format "cd %s ; %s" (expand-file-name dir)
+ (format unpacker packet))))
+ (message "Unpacking...done")))
(defun gnus-soup-send-packet (packet)
(gnus-soup-unpack-packet
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; First we do the real list of servers.
(while alist
(push (cdr (setq server (pop alist))) done)
- (when server
+ (when (and server (car server))
(gnus-server-insert-server-line (car server) (cdr server))))
;; Then we insert the list of servers that have been opened in
;; this session.
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
%A Number of unread articles in the groups in the topic and its subtopics.
")
-(defvar gnus-group-topic-topics-only nil
- "*If non-nil, only the topics will be shown when typing `l' or `L'.")
-
(defvar gnus-topic-unique t
"*If non-nil, each group will only belong to one topic.")
+(defvar gnus-topic-indent-level 2
+ "*How much each subtopic should be indented.")
+
;; Internal variables.
(defvar gnus-topic-killed-topics nil)
(erase-buffer))
;; List dead groups?
+ (when nil
(when (and (>= level gnus-level-zombie) (<= lowest gnus-level-zombie))
(gnus-group-prepare-flat-list-dead
(setq gnus-zombie-list (sort gnus-zombie-list 'string<))
(gnus-group-prepare-flat-list-dead
(setq gnus-killed-list (sort gnus-killed-list 'string<))
gnus-level-killed ?K
- regexp))
+ regexp)))
;; Use topics.
(when (< lowest gnus-level-zombie)
(let* ((type (pop topic))
(entries (gnus-topic-find-groups (car type) list-level all))
(visiblep (and (eq (nth 1 type) 'visible) (not silent)))
- (gnus-group-indentation (make-string (* 2 level) ? ))
+ (gnus-group-indentation
+ (make-string (* gnus-topic-indent-level level) ? ))
(beg (progn (beginning-of-line) (point)))
(topic (reverse topic))
+ (all-entries entries)
(unread 0)
info entry end)
;; Insert any sub-topics.
(gnus-topic-insert-topic-line
(car type) visiblep
(not (eq (nth 2 type) 'hidden))
- level entries unread))
+ level all-entries unread))
(goto-char end)
unread))
(defun gnus-topic-insert-topic-line (name visiblep shownp level entries
&optional unread)
(let* ((visible (if visiblep "" "..."))
- (indentation (make-string (* 2 level) ? ))
+ (indentation (make-string (* gnus-topic-indent-level level) ? ))
(total-number-of-articles unread)
(number-of-groups (length entries))
(active-topic (eq gnus-topic-alist gnus-topic-active-alist)))
(car type) (car gnus-group-list-mode)
(cdr gnus-group-list-mode)))
(visiblep (eq (nth 1 type) 'visible))
+ (all-entries entries)
(unread 0)
info entry end)
;; Tally any sub-topics.
(gnus-topic-insert-topic-line
(car type) visiblep
(not (eq (nth 2 type) 'hidden))
- level entries unread)
+ level all-entries unread)
(gnus-delete-line))
unread))
(push (cons 'gnus-topic-mode gnus-topic-mode-map)
minor-mode-map-alist))
(add-hook 'gnus-summary-exit-hook 'gnus-topic-update-topic)
+ (add-hook 'gnus-group-catchup-group-hook 'gnus-topic-update-topic)
(make-local-variable 'gnus-group-prepare-function)
(setq gnus-group-prepare-function 'gnus-group-prepare-topics)
(make-local-variable 'gnus-group-goto-next-group-function)
(interactive
(list
(read-string "Create topic: ")
- (completing-read "Parent topic: " gnus-topic-alist nil t)))
+ (completing-read "Parent topic: " gnus-topic-alist nil t
+ (cons (gnus-group-parent-topic) 0))))
;; Check whether this topic already exists.
(when (gnus-topic-find-topology topic)
(error "Topic aleady exists"))
(gnus-topic-inhibit-change-level t)
(gnus-group-indentation
(make-string
- (* 2 (or (save-excursion
- (gnus-topic-goto-topic (gnus-group-parent-topic))
- (gnus-group-topic-level)) 0)) ? ))
+ (* gnus-topic-indent-level
+ (or (save-excursion
+ (gnus-topic-goto-topic (gnus-group-parent-topic))
+ (gnus-group-topic-level)) 0)) ? ))
yanked group alist)
;; We first yank the groups the normal way...
(setq yanked (gnus-group-yank-group arg))
(interactive
(let (topic)
(list
- (setq topic (completing-read "Rename topic: " gnus-topic-alist nil t))
+ (setq topic (completing-read "Rename topic: " gnus-topic-alist nil t
+ (cons (gnus-group-parent-topic) 0)))
(read-string (format "Rename %s to: " topic)))))
(let ((top (gnus-topic-find-topology old-name))
(entry (assoc old-name gnus-topic-alist)))
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(setcar files (nconc (list (if (string= action "gnus-uu-archive")
(cons 'action "file")
(cons 'action action))
- (cons 'execute (if (string-match "%" action)
- (format action name)
- (concat action " " name))))
+ (cons 'execute (gnus-uu-command
+ action name)))
(car files))))
(setq files (cdr files)))
ofiles))
(setq state 'middle)))
;; When there are no result-files, then something must be wrong.
- (unless result-files
+ (if result-files
+ (message "")
(cond
((not has-been-begin)
(message "Wrong type file"))
(or (looking-at gnus-uu-body-line)
(gnus-delete-line))
- ; Replace any slashes and spaces in file names before decoding
+ ;; Replace any slashes and spaces in file names before decoding
(goto-char name-beg)
(while (re-search-forward "/" name-end t)
(replace-match ","))
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
`(("\\bin\\( +article\\)? +\\(<\\([^\n @<>]+@[^\n @<>]+\\)>\\)" 2
t gnus-button-message-id 3)
;; This is how URLs _should_ be embedded in text...
- ("<URL:\\([^\n\r>]*\\)>" 0 t gnus-button-url 1)
+ ("<URL: *\\([^\n\r>]*\\)>" 0 t gnus-button-url 1)
;; Next regexp stolen from highlight-headers.el.
;; Modified by Vladimir Alexiev.
(,gnus-button-url-regexp 0 t gnus-button-url 0)
'((mailp . bold)
((= unread 0) . italic)))
((eq gnus-background-mode 'dark)
- `(((not mailp) .
- ,(custom-face-lookup "ForestGreen" nil nil t nil nil))
- ((zerop unread) .
- ,(custom-face-lookup "Blue" nil nil t nil nil))))
+ `(((> unread 200) . ,(custom-face-lookup "Red" nil nil t nil nil))
+ ((and (< level 3) (zerop unread)) .
+ ,(custom-face-lookup "SeaGreen" nil nil t nil nil))
+ ((< level 3) . ,(custom-face-lookup "SpringGreen" nil nil t nil nil))
+ ((zerop unread) . ,(custom-face-lookup "SteelBlue" nil nil t nil nil))
+ (t . ,(custom-face-lookup "SkyBlue" nil nil t nil nil))
+ ))
(t
`(((not mailp) .
,(custom-face-lookup "ForestGreen" nil nil t nil nil))
mailp: Whether the select method is a mail method.
level: The level of the group.
score: The score of the group.
+ticked: The number of ticked articles in the group.
")
:selected (null gnus-score-default-header)]
["From" (gnus-score-set-default 'gnus-score-default-header 'a)
:style radio
- :selected (eq gnus-score-default-header 'a )]
+ :selected (eq gnus-score-default-header 'a)]
["Subject" (gnus-score-set-default 'gnus-score-default-header 's)
:style radio
- :selected (eq gnus-score-default-header 's )]
+ :selected (eq gnus-score-default-header 's)]
["Article body"
(gnus-score-set-default 'gnus-score-default-header 'b)
:style radio
;; It is the message that forces the active status to be updated.
(message ""))
-(defvar gnus-score-default-header nil
- "Default header when entering new scores.
-
-Should be one of the following symbols.
-
- a: from
- s: subject
- b: body
- h: head
- i: message-id
- t: references
- x: xref
- l: lines
- d: date
- f: followup
-
-If nil, the user will be asked for a header.")
-
-(defvar gnus-score-default-type nil
- "Default match type when entering new scores.
-
-Should be one of the following symbols.
-
- s: substring
- e: exact string
- f: fuzzy string
- r: regexp string
- b: before date
- a: at date
- n: this date
- <: less than number
- >: greater than number
- =: equal to number
-
-If nil, the user will be asked for a match type.")
-
-(defvar gnus-score-default-fold nil
- "Use case folding for new score file entries iff not nil.")
-
-
-(defun gnus-score-default-fold-toggle ()
- "Toggle folding for new score file entries."
- (interactive)
- (setq gnus-score-default-fold (not gnus-score-default-fold))
- (if gnus-score-default-fold
- (message "New score file entries will be case insensitive.")
- (message "New score file entries will be case sensitive.")))
-
-(defvar gnus-score-default-duration nil
- "Default duration of effect when entering new scores.
-
-Should be one of the following symbols.
-
- t: temporary
- p: permanent
- i: immediate
-
-If nil, the user will be asked for a duration.")
-
(defun gnus-visual-score-map (type)
(if t
nil
(unread (if (numberp (car entry)) (car entry) 0))
(info (nth 2 entry))
(method (gnus-server-get-method group (gnus-info-method info)))
+ (marked (gnus-info-marks info))
(mailp (memq 'mail (assoc (symbol-name
(car (or method gnus-select-method)))
gnus-valid-select-methods)))
(level (gnus-info-level info))
(score (gnus-info-score info))
+ (ticked (gnus-range-length (cdr (assq 'tick marked))))
(inhibit-read-only t))
;; Eval the cars of the lists until we find a match.
(while (and list
(save-excursion
(set-buffer gnus-article-buffer)
(save-restriction
- (goto-char (point-min))
- (when (search-forward "\n\n" nil t)
- (narrow-to-region (1- (point)) (point-min))
- (let ((alist gnus-header-face-alist)
- (buffer-read-only nil)
- (case-fold-search t)
- (inhibit-point-motion-hooks t)
- entry regexp header-face field-face from hpoints fpoints)
+ (let ((alist gnus-header-face-alist)
+ (buffer-read-only nil)
+ (case-fold-search t)
+ (inhibit-point-motion-hooks t)
+ entry regexp header-face field-face from hpoints fpoints)
+ (goto-char (point-min))
+ (when (search-forward "\n\n" nil t)
+ (narrow-to-region (1- (point)) (point-min))
(while (setq entry (pop alist))
(goto-char (point-min))
- (setq regexp (concat "^\\(" (nth 0 entry) "\\)")
+ (setq regexp (concat "^\\("
+ (if (string-equal "" (nth 0 entry))
+ "[^\t ]"
+ (nth 0 entry))
+ "\\)")
header-face (nth 1 entry)
field-face (nth 2 entry))
(while (and (re-search-forward regexp nil t)
(not (memq (setq from (point)) fpoints)))
(push from fpoints)
(if (re-search-forward "^[^ \t]" nil t)
- (forward-char -1)
+ (forward-char -2)
(goto-char (point-max)))
(put-text-property from (point) 'face field-face)))))))))
(setq beg (point))
(while (setq entry (pop alist))
(setq regexp (car entry))
+ (goto-char beg)
(while (re-search-forward regexp nil t)
(let* ((start (and entry (match-beginning (nth 1 entry))))
(end (and entry (match-end (nth 1 entry))))
(defun gnus-insert-prev-page-button ()
(let ((buffer-read-only nil))
- (gnus-eval-format gnus-prev-page-line-format nil
- `(gnus-prev t local-map ,gnus-prev-page-map))))
+ (gnus-eval-format
+ gnus-prev-page-line-format nil
+ `(gnus-prev t local-map ,gnus-prev-page-map
+ gnus-callback gnus-article-prev-page))))
(defvar gnus-next-page-map nil)
(unless gnus-next-page-map
(defun gnus-insert-next-page-button ()
(let ((buffer-read-only nil))
(gnus-eval-format gnus-next-page-line-format nil
- `(gnus-next t local-map ,gnus-next-page-map))))
+ `(gnus-next t local-map ,gnus-next-page-map
+ gnus-callback gnus-article-prev-page))))
;;; Compatibility Functions:
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
This restriction may disappear in later versions of Gnus.")
(defvar gnus-summary-dummy-line-format
- "* %(: :%) %S\n"
+ "* %(: :%) %S\n"
"*The format specification for the dummy roots in the summary buffer.
It works along the same lines as a normal formatting string,
with some simple extensions.
(defvar gnus-summary-exit-hook nil
"*A hook called on exit from the summary buffer.")
+(defvar gnus-group-catchup-group-hook nil
+ "*A hook run when catching up a group from the group buffer.")
+
(defvar gnus-open-server-hook nil
"*A hook called just before opening connection to the news server.")
`((?M gnus-tmp-marked-mark ?c)
(?S gnus-tmp-subscribed ?c)
(?L gnus-tmp-level ?d)
- (?N gnus-tmp-number ?s)
+ (?N (cond ((eq number t) "*" )
+ ((numberp number)
+ (int-to-string
+ (+ number
+ (gnus-range-length (cdr (assq 'dormant gnus-tmp-marked)))
+ (gnus-range-length (cdr (assq 'tick gnus-tmp-marked))))))
+ (t number)) ?s)
(?R gnus-tmp-number-of-read ?s)
- (?t gnus-tmp-number-total ?s)
+ (?t gnus-tmp-number-total ?d)
(?y gnus-tmp-number-of-unread ?s)
(?I (gnus-range-length (cdr (assq 'dormant gnus-tmp-marked))) ?d)
(?T (gnus-range-length (cdr (assq 'tick gnus-tmp-marked))) ?d)
"gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
"The mail address of the Gnus maintainers.")
-(defconst gnus-version "September Gnus v0.32"
+(defconst gnus-version "September Gnus v0.35"
"Version number for this version of Gnus.")
(defvar gnus-info-nodes
(progn (goto-char (match-beginning 0)))
(re-search-forward ":"))))
(goto-char (point-min))
- (while (re-search-forward "[ \t\n]*([^()]*)[ \t]*$" nil t)
+ (while (re-search-forward "[ \t\n]*[[{(][^()]*[]})][ \t]*$" nil t)
(replace-match "" t t))
(goto-char (point-min))
(while (re-search-forward "[ \t]+" nil t)
(defun gnus-simplify-subject-fuzzy (subject)
"Siplify a subject string fuzzily."
- (let ((case-fold-search t))
- (save-excursion
- (gnus-set-work-buffer)
+ (save-excursion
+ (gnus-set-work-buffer)
+ (let ((case-fold-search t))
(insert subject)
(inline (gnus-simplify-buffer-fuzzy))
(buffer-string))))
;; Either remove all windows or just remove all Gnus windows.
(if gnus-use-full-window
- (delete-other-windows)
+ (mapcar (lambda (frame)
+ (select-frame frame)
+ (delete-other-windows))
+ (frame-list))
(gnus-remove-some-windows)
(switch-to-buffer nntp-server-buffer))
(zerop number)
(cdr (assq 'tick gnus-tmp-marked)))
?* ? ))
- (gnus-tmp-number
- (cond ((eq number t) "*" )
- ((numberp number) (int-to-string number))
- (t number)))
(gnus-tmp-process-marked
(if (member gnus-tmp-group gnus-group-marked)
gnus-process-mark ? ))
(gnus-tmp-news-server (car (cdr gnus-select-method)))
(gnus-tmp-news-method (car gnus-select-method))
(max-len 60)
- header ;Dummy binding for user-defined formats
+ gnus-tmp-header ;Dummy binding for user-defined formats
;; Get the resulting string.
(mode-string (eval gformat)))
;; If the line is too long, we chop it off.
(gnus-group-position-point))
(defun gnus-group-remove-mark (group)
+ "Remove the process mark from GROUP and move point there.
+Return nil if the group isn't displayed."
(if (gnus-group-goto-group group)
(save-excursion
- (gnus-group-mark-group 1 'unmark t))
+ (gnus-group-mark-group 1 'unmark t)
+ t)
(setq gnus-group-marked
- (delete group gnus-group-marked))))
+ (delete group gnus-group-marked))
+ nil))
(defun gnus-group-set-mark (group)
"Set the process mark on GROUP."
(when all
(gnus-add-marked-articles group 'tick nil nil 'force)
(gnus-add-marked-articles group 'dormant nil nil 'force))
+ (run-hooks 'gnus-group-catchup-group-hook)
num))))
(defun gnus-group-expire-articles (&optional n)
(while groups
(gnus-group-remove-mark (car groups))
(gnus-delete-line)
- (setq entry (gnus-gethash (pop groups) gnus-newsrc-hashtb))
- (push (cons (car entry) (nth 2 entry))
- gnus-list-of-killed-groups)
- (setcdr (cdr entry) (cdr (cdr (cdr entry)))))
+ (when (setq entry (gnus-gethash (pop groups) gnus-newsrc-hashtb))
+ (push (cons (car entry) (nth 2 entry))
+ gnus-list-of-killed-groups)
+ (setcdr (cdr entry) (cdr (cdr (cdr entry))))))
(gnus-make-hashtable-from-newsrc-alist)))
(gnus-group-position-point)
"a" gnus-summary-post-news
"x" gnus-summary-limit-to-unread
"s" gnus-summary-isearch-article
- "t" gnus-summary-toggle-header
+ "t" gnus-article-hide-headers
"g" gnus-summary-show-article
"l" gnus-summary-goto-last-article
"\C-c\C-v\C-v" gnus-uu-decode-uu-view
"\M-*" gnus-cache-remove-article
"\M-&" gnus-summary-universal-argument
"\C-l" gnus-recenter
- "D" gnus-summary-enter-digest-group
"I" gnus-summary-increase-score
"L" gnus-summary-lower-score
(run-hooks 'gnus-select-group-hook)
;; Set any local variables in the group parameters.
(gnus-summary-set-local-parameters gnus-newsgroup-name)
+ (gnus-update-format-specifications)
;; Do score processing.
(when gnus-use-scoring
(gnus-possibly-score-headers))
- (gnus-update-format-specifications)
;; Check whether to fill in the gaps in the threads.
(when gnus-build-sparse-threads
(gnus-build-sparse-threads))
(reverse gnus-article-sort-functions))))))
(gnus-message 7 "Sorting articles...")
(prog1
- (sort articles func)
+ (setq gnus-newsgroup-headers (sort articles func))
(gnus-message 7 "Sorting articles...done")))))
(defun gnus-make-sort-function (funs)
gnus-tmp-header nil))
;; If the article lies outside the current limit,
;; then we do not display it.
- ((not (memq number gnus-newsgroup-limit))
+ ((and (not (memq number gnus-newsgroup-limit))
+ (not gnus-tmp-dummy-line))
(setq gnus-tmp-gathered
(nconc (mapcar
(lambda (h) (mail-header-number (car h)))
(when gnus-tmp-header
;; We may have an old dummy line to output before this
;; article.
- (when gnus-tmp-dummy-line
- (gnus-summary-insert-dummy-line
- gnus-tmp-dummy-line (mail-header-number gnus-tmp-header))
- (setq gnus-tmp-dummy-line nil))
-
- ;; Compute the mark.
- (setq
- gnus-tmp-unread
- (cond
- ((memq number gnus-newsgroup-unreads) gnus-unread-mark)
- ((memq number gnus-newsgroup-marked) gnus-ticked-mark)
- ((memq number gnus-newsgroup-dormant) gnus-dormant-mark)
- ((memq number gnus-newsgroup-expirable) gnus-expirable-mark)
- (t (or (cdr (assq number gnus-newsgroup-reads))
- gnus-ancient-mark))))
-
- (push (gnus-data-make number gnus-tmp-unread (1+ (point))
- gnus-tmp-header gnus-tmp-level)
- gnus-newsgroup-data)
-
- ;; Actually insert the line.
- (setq
- gnus-tmp-subject-or-nil
- (cond
- ((and gnus-thread-ignore-subject
- gnus-tmp-prev-subject
- (not (inline (gnus-subject-equal
- gnus-tmp-prev-subject subject))))
- subject)
- ((zerop gnus-tmp-level)
- (if (and (eq gnus-summary-make-false-root 'empty)
- (memq number gnus-tmp-gathered)
- gnus-tmp-prev-subject
- (inline (gnus-subject-equal
- gnus-tmp-prev-subject subject)))
- gnus-summary-same-subject
- subject))
- (t gnus-summary-same-subject)))
- (if (and (eq gnus-summary-make-false-root 'adopt)
- (= gnus-tmp-level 1)
- (memq number gnus-tmp-gathered))
- (setq gnus-tmp-opening-bracket ?\<
- gnus-tmp-closing-bracket ?\>)
- (setq gnus-tmp-opening-bracket ?\[
- gnus-tmp-closing-bracket ?\]))
- (setq
- gnus-tmp-indentation
- (aref gnus-thread-indent-array gnus-tmp-level)
- gnus-tmp-lines (mail-header-lines gnus-tmp-header)
- gnus-tmp-score (or (cdr (assq number gnus-newsgroup-scored))
- gnus-summary-default-score 0)
- gnus-tmp-score-char
- (if (or (null gnus-summary-default-score)
- (<= (abs (- gnus-tmp-score gnus-summary-default-score))
- gnus-summary-zcore-fuzz)) ?
- (if (< gnus-tmp-score gnus-summary-default-score)
- gnus-score-below-mark gnus-score-over-mark))
- gnus-tmp-replied
- (cond ((memq number gnus-newsgroup-processable)
- gnus-process-mark)
- ((memq number gnus-newsgroup-cached)
- gnus-cached-mark)
- ((memq number gnus-newsgroup-replied)
- gnus-replied-mark)
- (t gnus-unread-mark))
- gnus-tmp-from (mail-header-from gnus-tmp-header)
- gnus-tmp-name
- (cond
- ((string-match "(.+)" gnus-tmp-from)
- (substring gnus-tmp-from
- (1+ (match-beginning 0)) (1- (match-end 0))))
- ((string-match "<[^>]+> *$" gnus-tmp-from)
- (setq beg-match (match-beginning 0))
- (or (and (string-match "^\"[^\"]*\"" gnus-tmp-from)
- (substring gnus-tmp-from (1+ (match-beginning 0))
- (1- (match-end 0))))
- (substring gnus-tmp-from 0 beg-match)))
- (t gnus-tmp-from)))
- (when (string= gnus-tmp-name "")
- (setq gnus-tmp-name gnus-tmp-from))
- (or (numberp gnus-tmp-lines) (setq gnus-tmp-lines 0))
- (put-text-property
- (point)
- (progn (eval gnus-summary-line-format-spec) (point))
- 'gnus-number number)
- (when gnus-visual-p
- (forward-line -1)
- (run-hooks 'gnus-summary-update-hook)
- (forward-line 1))
+ (if gnus-tmp-dummy-line
+ (progn
+ (gnus-summary-insert-dummy-line
+ gnus-tmp-dummy-line (mail-header-number gnus-tmp-header))
+ (setq gnus-tmp-dummy-line nil))
+
+ ;; Compute the mark.
+ (setq
+ gnus-tmp-unread
+ (cond
+ ((memq number gnus-newsgroup-unreads) gnus-unread-mark)
+ ((memq number gnus-newsgroup-marked) gnus-ticked-mark)
+ ((memq number gnus-newsgroup-dormant) gnus-dormant-mark)
+ ((memq number gnus-newsgroup-expirable) gnus-expirable-mark)
+ (t (or (cdr (assq number gnus-newsgroup-reads))
+ gnus-ancient-mark))))
+
+ (push (gnus-data-make number gnus-tmp-unread (1+ (point))
+ gnus-tmp-header gnus-tmp-level)
+ gnus-newsgroup-data)
+
+ ;; Actually insert the line.
+ (setq
+ gnus-tmp-subject-or-nil
+ (cond
+ ((and gnus-thread-ignore-subject
+ gnus-tmp-prev-subject
+ (not (inline (gnus-subject-equal
+ gnus-tmp-prev-subject subject))))
+ subject)
+ ((zerop gnus-tmp-level)
+ (if (and (eq gnus-summary-make-false-root 'empty)
+ (memq number gnus-tmp-gathered)
+ gnus-tmp-prev-subject
+ (inline (gnus-subject-equal
+ gnus-tmp-prev-subject subject)))
+ gnus-summary-same-subject
+ subject))
+ (t gnus-summary-same-subject)))
+ (if (and (eq gnus-summary-make-false-root 'adopt)
+ (= gnus-tmp-level 1)
+ (memq number gnus-tmp-gathered))
+ (setq gnus-tmp-opening-bracket ?\<
+ gnus-tmp-closing-bracket ?\>)
+ (setq gnus-tmp-opening-bracket ?\[
+ gnus-tmp-closing-bracket ?\]))
+ (setq
+ gnus-tmp-indentation
+ (aref gnus-thread-indent-array gnus-tmp-level)
+ gnus-tmp-lines (mail-header-lines gnus-tmp-header)
+ gnus-tmp-score (or (cdr (assq number gnus-newsgroup-scored))
+ gnus-summary-default-score 0)
+ gnus-tmp-score-char
+ (if (or (null gnus-summary-default-score)
+ (<= (abs (- gnus-tmp-score gnus-summary-default-score))
+ gnus-summary-zcore-fuzz)) ?
+ (if (< gnus-tmp-score gnus-summary-default-score)
+ gnus-score-below-mark gnus-score-over-mark))
+ gnus-tmp-replied
+ (cond ((memq number gnus-newsgroup-processable)
+ gnus-process-mark)
+ ((memq number gnus-newsgroup-cached)
+ gnus-cached-mark)
+ ((memq number gnus-newsgroup-replied)
+ gnus-replied-mark)
+ (t gnus-unread-mark))
+ gnus-tmp-from (mail-header-from gnus-tmp-header)
+ gnus-tmp-name
+ (cond
+ ((string-match "(.+)" gnus-tmp-from)
+ (substring gnus-tmp-from
+ (1+ (match-beginning 0)) (1- (match-end 0))))
+ ((string-match "<[^>]+> *$" gnus-tmp-from)
+ (setq beg-match (match-beginning 0))
+ (or (and (string-match "^\"[^\"]*\"" gnus-tmp-from)
+ (substring gnus-tmp-from (1+ (match-beginning 0))
+ (1- (match-end 0))))
+ (substring gnus-tmp-from 0 beg-match)))
+ (t gnus-tmp-from)))
+ (when (string= gnus-tmp-name "")
+ (setq gnus-tmp-name gnus-tmp-from))
+ (or (numberp gnus-tmp-lines) (setq gnus-tmp-lines 0))
+ (put-text-property
+ (point)
+ (progn (eval gnus-summary-line-format-spec) (point))
+ 'gnus-number number)
+ (when gnus-visual-p
+ (forward-line -1)
+ (run-hooks 'gnus-summary-update-hook)
+ (forward-line 1))
+
+ )
(setq gnus-tmp-prev-subject subject)))
(vectorp gnus-current-headers))
(mail-header-subject gnus-current-headers) ""))
max-len
- header);; passed as argument to any user-format-funcs
+ gnus-tmp-header);; passed as argument to any user-format-funcs
(setq mode-string (eval mformat))
(setq max-len (max 4 (if gnus-mode-non-string-length
(- (frame-width)
;; not garbage-collected, it seems. This would the lead to en
;; ever-growing Emacs.
(gnus-summary-clear-local-variables)
+ (when (get-buffer gnus-article-buffer)
+ (bury-buffer gnus-article-buffer))
;; We clear the global counterparts of the buffer-local
;; variables as well, just to be on the safe side.
(gnus-configure-windows 'group 'force)
(kill-buffer gnus-summary-buffer)))
(when gnus-use-trees
(gnus-tree-close group))
+ (when (get-buffer gnus-article-buffer)
+ (bury-buffer gnus-article-buffer))
;; Return to the group buffer.
(gnus-configure-windows 'group 'force)
;; Clear the current group name.
(setq did article))
(if (or all-headers gnus-show-all-headers)
(gnus-article-show-all-headers))
- nil))
+ 'old))
(if did
(gnus-article-set-window-start
(cdr (assq article gnus-newsgroup-bookmarks)))))))
(gnus-summary-search-group backward gnus-keep-same-level))))
(while (not ended)
(gnus-message
- 7 "No more%s articles%s" (if unread " unread" "")
+ 5 "No more%s articles%s" (if unread " unread" "")
(if (and group
(not (gnus-ephemeral-group-p gnus-newsgroup-name)))
(format " (Type %s for %s [%s])"
(interactive "p")
(gnus-set-global-variables)
(gnus-configure-windows 'article)
- (or (gnus-summary-select-article nil nil 'pseudo)
- (gnus-eval-in-buffer-window
- gnus-article-buffer
- (cond ((> lines 0)
- (if (gnus-article-next-page lines)
- (gnus-message 3 "End of message")))
- ((< lines 0)
- (gnus-article-prev-page (- lines))))))
+ (when (eq (gnus-summary-select-article nil nil 'pseudo) 'old)
+ (gnus-eval-in-buffer-window
+ gnus-article-buffer
+ (cond ((> lines 0)
+ (if (gnus-article-next-page lines)
+ (gnus-message 3 "End of message")))
+ ((< lines 0)
+ (gnus-article-prev-page (- lines))))))
(gnus-summary-recenter)
(gnus-summary-position-point))
If given a prefix, remove all limits."
(interactive "P")
(gnus-set-global-variables)
- (prog2
- (if total (setq gnus-newsgroup-limits
- (list (mapcar (lambda (h) (mail-header-number h))
- gnus-newsgroup-headers))))
+ (when total
+ (setq gnus-newsgroup-limits
+ (list (mapcar (lambda (h) (mail-header-number h))
+ gnus-newsgroup-headers))))
+ (unless gnus-newsgroup-limits
+ (error "No limit to pop"))
+ (prog1
(gnus-summary-limit nil 'pop)
(gnus-summary-position-point)))
(list gnus-del-mark gnus-read-mark gnus-ancient-mark
gnus-killed-mark gnus-kill-file-mark
gnus-low-score-mark gnus-expirable-mark
- gnus-canceled-mark gnus-catchup-mark)
+ gnus-canceled-mark gnus-catchup-mark gnus-sparse-mark)
'reverse)))
(defalias 'gnus-summary-delete-marked-with 'gnus-summary-limit-to-marks)
;; This will do all the work of generating the new summary buffer
;; according to the new limit.
(gnus-summary-prepare)
- ;; Try to return to the article you were at, or on in the
+ ;; Hide any threads, possibly.
+ (and gnus-show-threads
+ gnus-thread-hide-subtree
+ (gnus-summary-hide-all-threads))
+ ;; Try to return to the article you were at, or one in the
;; neighborhood.
(if data
;; We try to find some article after the current one.
gnus-newsgroup-name (list 'nndoc ""))
gnus-current-article))
(ogroup gnus-newsgroup-name)
- (buf (current-buffer)))
+ (case-fold-search t)
+ (buf (current-buffer))
+ dig)
(save-excursion
- (set-buffer gnus-original-article-buffer)
+ (setq dig (nnheader-set-temp-buffer " *gnus digest buffer*"))
+ (insert-buffer-substring gnus-original-article-buffer)
+ (narrow-to-region
+ (goto-char (point-min))
+ (or (search-forward "\n\n" nil t) (point)))
(goto-char (point-min))
- (search-forward "\n\n" nil t)
- (narrow-to-region (point) (point-max)))
+ (delete-matching-lines "^\\(Path\\):")
+ (widen))
(unwind-protect
(if (gnus-group-read-ephemeral-group
name `(nndoc ,name (nndoc-address
- ,(get-buffer gnus-original-article-buffer))
+ ,(get-buffer dig))
(nndoc-article-type ,(if force 'digest 'guess))) t)
;; Make all postings to this group go to the parent group.
(setcdr (nthcdr 4 (gnus-get-info name))
(gnus-set-global-variables)
(gnus-configure-windows 'summary)
(gnus-message 3 "Article couldn't be entered?"))
- (save-excursion
- (set-buffer gnus-original-article-buffer)
- (widen)))))
+ (kill-buffer dig))))
(defun gnus-summary-isearch-article (&optional regexp-p)
"Do incremental search forward on the current article.
If FORCE is non-nil, allow editing of articles even in read-only
groups."
(interactive "P")
- (gnus-set-global-variables)
- (when (and (not force)
- (gnus-group-read-only-p))
- (error "The current newsgroup does not support article editing."))
- (gnus-summary-select-article t nil t)
- (gnus-configure-windows 'article)
- (select-window (get-buffer-window gnus-article-buffer))
- (gnus-message 6 "C-c C-c to end edits")
- (setq buffer-read-only nil)
- (text-mode)
- (use-local-map (copy-keymap (current-local-map)))
- (local-set-key "\C-c\C-c" 'gnus-summary-edit-article-done)
- (buffer-enable-undo)
- (widen)
- (goto-char (point-min))
- (search-forward "\n\n" nil t))
+ (save-excursion
+ (set-buffer gnus-summary-buffer)
+ (gnus-set-global-variables)
+ (when (and (not force)
+ (gnus-group-read-only-p))
+ (error "The current newsgroup does not support article editing."))
+ (gnus-summary-select-article t nil t)
+ (gnus-configure-windows 'article)
+ (select-window (get-buffer-window gnus-article-buffer))
+ (gnus-message 6 "C-c C-c to end edits")
+ (setq buffer-read-only nil)
+ (text-mode)
+ (use-local-map (copy-keymap (current-local-map)))
+ (local-set-key "\C-c\C-c" 'gnus-summary-edit-article-done)
+ (buffer-enable-undo)
+ (widen)
+ (goto-char (point-min))
+ (search-forward "\n\n" nil t)))
(defun gnus-summary-edit-article-done ()
"Make edits to the current article permanent."
;; Go forward until either the buffer ends or the subthread
;; ends.
(when (and (not (eobp))
- (or (and (zerop (gnus-summary-next-thread 1 t))
- (gnus-summary-find-prev))
+ (or (zerop (gnus-summary-next-thread 1 t))
(goto-char (gnus-data-pos (car (gnus-data-list 'rev))))))
(setq end (point))
(prog1
(if (and (> (point) start)
(search-backward "\n" start t))
(progn
- (subst-char-in-region start end ?\n ?\^M)
+ (subst-char-in-region start (point) ?\n ?\^M)
(gnus-summary-goto-subject article))
(goto-char start)
nil)
(defun gnus-summary-sort (predicate reverse)
"Sort summary buffer by PREDICATE. REVERSE means reverse order."
(gnus-set-global-variables)
- (let* ((gnus-thread-sort-functions
- (list (intern (format "gnus-thread-sort-by-%s" predicate))))
+ (let* ((thread (intern (format "gnus-thread-sort-by-%s" predicate)))
+ (article (intern (format "gnus-article-sort-by-%s" predicate)))
+ (gnus-thread-sort-functions
+ (list
+ (if (not reverse)
+ thread
+ `(lambda (t1 t2)
+ (,thread t2 t1)))))
(gnus-article-sort-functions
- (list (intern (format "gnus-article-sort-by-%s" predicate))))
+ (list
+ (if (not reverse)
+ article
+ `(lambda (t1 t2)
+ (,article t2 t1)))))
(buffer-read-only)
(gnus-summary-prepare-hook nil))
;; We do the sorting by regenerating the threads.
((listp gnus-ignored-headers)
(mapconcat 'identity gnus-ignored-headers
"\\|")))))
- (visible (cond ((stringp gnus-visible-headers)
- gnus-visible-headers)
- ((listp gnus-visible-headers)
- (mapconcat 'identity gnus-visible-headers
- "\\|"))))
+ (visible
+ (cond ((stringp gnus-visible-headers)
+ gnus-visible-headers)
+ ((listp gnus-visible-headers)
+ (mapconcat 'identity gnus-visible-headers "\\|"))))
want-list beg want-l)
;; First we narrow to just the headers.
(widen)
(defun gnus-article-check-hidden-text (type arg)
"Return nil if hiding is necessary."
- (let ((hide (gnus-article-hidden-text-p 'signature)))
- (cond ((or (and (null arg) (eq hide 'hidden))
- (and arg (< 0 (prefix-numeric-value arg))))
- (gnus-article-show-hidden-text 'signature))
- ((eq hide 'shown)
- (gnus-article-show-hidden-text 'signature t))
- (t nil))))
+ (save-excursion
+ (set-buffer gnus-article-buffer)
+ (let ((hide (gnus-article-hidden-text-p type)))
+ (cond ((or (and (null arg) (eq hide 'hidden))
+ (and arg (< 0 (prefix-numeric-value arg))))
+ (gnus-article-show-hidden-text type))
+ ((eq hide 'shown)
+ (gnus-article-show-hidden-text type t))
+ (t nil)))))
(defun gnus-article-hidden-text-p (type)
"Say whether the current buffer contains hidden text of type TYPE."
(defvar gnus-dribble-eval-file nil)
(defun gnus-dribble-file-name ()
+ "Return the dribble file for the current .newsrc."
(concat
(if gnus-dribble-directory
(concat (file-name-as-directory gnus-dribble-directory)
"-dribble"))
(defun gnus-dribble-enter (string)
+ "Enter STRING into the dribble buffer."
(if (and (not gnus-dribble-ignore)
gnus-dribble-buffer
(buffer-name gnus-dribble-buffer))
(set-buffer obuf))))
(defun gnus-dribble-read-file ()
+ "Read the dribble file from disk."
(let ((dribble-file (gnus-dribble-file-name)))
(save-excursion
(set-buffer (setq gnus-dribble-buffer
(set-buffer-modified-p nil)
(let ((auto (make-auto-save-file-name))
(gnus-dribble-ignore t))
- (if (or (file-exists-p auto) (file-exists-p dribble-file))
- (progn
- (if (file-newer-than-file-p auto dribble-file)
- (setq dribble-file auto))
- (insert-file-contents dribble-file)
- (if (not (zerop (buffer-size)))
- (set-buffer-modified-p t))
- (if (gnus-y-or-n-p
- "Auto-save file exists. Do you want to read it? ")
- (setq gnus-dribble-eval-file t))))))))
+ (when (or (file-exists-p auto) (file-exists-p dribble-file))
+ ;; Load whichever file is newest -- the auto save file
+ ;; or the "real" file.
+ (if (file-newer-than-file-p auto dribble-file)
+ (insert-file-contents auto)
+ (insert-file-contents dribble-file))
+ (unless (zerop (buffer-size))
+ (set-buffer-modified-p t))
+ ;; Set the file modes to reflect the .newsrc file modes.
+ (save-buffer)
+ (when (file-exists-p gnus-current-startup-file)
+ (set-file-modes dribble-file
+ (file-modes gnus-current-startup-file)))
+ ;; Possibly eval the file later.
+ (when (gnus-y-or-n-p
+ "Auto-save file exists. Do you want to read it? ")
+ (setq gnus-dribble-eval-file t)))))))
(defun gnus-dribble-eval-file ()
(if (not gnus-dribble-eval-file)
(dont-check
(nnheader-report 'nnbabyl "Selected group %s" group)
t)
- ((> (car active) (cdr active))
- (nnheader-report 'nnbabyl "Empty group %s" group))
(t
(nnheader-report 'nnbabyl "Selected group %s" group)
(nnheader-insert "211 %d %d %d %s\n"
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(setcdr entry
(list
(cons 'head-end "^ ?$")
- (cons 'body-begin "^ \n")
+ (cons 'body-begin "^ ?\n")
(cons 'article-begin b-delimiter)
(cons 'body-end-function 'nndoc-digest-body-end)
; (cons 'body-end
(and (re-search-backward nndoc-article-begin nil t)
(setq end (point))
(search-forward "\n\n" beg t)
- (re-search-backward "^Content-Length: \\([0-9]+\\) *$" end t)
+ (re-search-backward "^Content-Length:[ \t]*\\([0-9]+\\) *$" end t)
(setq len (string-to-int (match-string 1)))
(search-forward "\n\n" beg t)
(or (= (setq len (+ (point) len)) (point-max))
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(erase-buffer)
(let ((delim-string (concat "^" rmail-unix-mail-delimiter))
article art-string start stop)
- (nnfolder-possibly-change-group newsgroup)
+ (nnfolder-possibly-change-group newsgroup server)
(set-buffer nnfolder-current-buffer)
(goto-char (point-min))
(if (stringp (car sequence))
nnfolder-status-string)
(defun nnfolder-request-article (article &optional newsgroup server buffer)
- (nnfolder-possibly-change-group newsgroup)
+ (nnfolder-possibly-change-group newsgroup server)
(save-excursion
(set-buffer nnfolder-current-buffer)
(goto-char (point-min))
(defun nnfolder-request-group (group &optional server dont-check)
(save-excursion
(nnmail-activate 'nnfolder)
- (when (assoc group nnfolder-group-alist)
- (nnfolder-possibly-change-group group)
- (cond
- (dont-check
- (nnheader-report 'nnfolder "Selected group %s" group)
- t)
- (t
+ (if (not (assoc group nnfolder-group-alist))
+ (nnheader-report 'nnfolder "No such group: %s" group)
+ (nnfolder-possibly-change-group group server)
+ (if dont-check
+ (progn
+ (nnheader-report 'nnfolder "Selected group %s" group)
+ t)
(let* ((active (assoc group nnfolder-group-alist))
(group (car active))
(range (car (cdr active)))
(minactive (car range))
(maxactive (cdr range)))
- (set-buffer nntp-server-buffer)
- (erase-buffer)
(cond
((null active)
(nnheader-report 'nnfolder "No such group: %s" group))
(t
(nnheader-report 'nnfolder "Selected group %s" group)
- (insert (format "211 %d %d %d %s\n"
- (1+ (- maxactive minactive))
- minactive maxactive group))
- t))))))))
+ (nnheader-insert "211 %d %d %d %s\n"
+ (1+ (- maxactive minactive))
+ minactive maxactive group))))))))
(defun nnfolder-request-scan (&optional group server)
(nnmail-get-new-mail
(if (or (assoc group nnfolder-buffer-alist)
(equal group nnfolder-current-group))
(progn
- (nnfolder-possibly-change-group group)
+ (nnfolder-possibly-change-group group server)
(save-excursion
(set-buffer nnfolder-current-buffer)
;; If the buffer was modified, write the file out now.
(defun nnfolder-request-create-group (group &optional server)
(nnmail-activate 'nnfolder)
- (or (assoc group nnfolder-group-alist)
- (let (active)
- (setq nnfolder-group-alist
- (cons (list group (setq active (cons 1 0)))
- nnfolder-group-alist))
- (nnmail-save-active nnfolder-group-alist nnfolder-active-file)))
+ (unless (assoc group nnfolder-group-alist)
+ (push (list group (cons 1 0)) nnfolder-group-alist)
+ (nnmail-save-active nnfolder-group-alist nnfolder-active-file))
t)
(defun nnfolder-request-list (&optional server)
(defun nnfolder-request-expire-articles
(articles newsgroup &optional server force)
- (nnfolder-possibly-change-group newsgroup)
+ (nnfolder-possibly-change-group newsgroup server)
(let* ((is-old t)
rest)
(nnmail-activate 'nnfolder)
(defun nnfolder-request-move-article
(article group server accept-form &optional last)
- (nnfolder-possibly-change-group group)
+ (nnfolder-possibly-change-group group server)
(let ((buf (get-buffer-create " *nnfolder move*"))
result)
(and
(kill-buffer buf)
result)
(save-excursion
- (nnfolder-possibly-change-group group)
+ (nnfolder-possibly-change-group group server)
(set-buffer nnfolder-current-buffer)
(goto-char (point-min))
(if (search-forward (nnfolder-article-string article) nil t)
t)
(defun nnfolder-request-rename-group (group new-name &optional server)
- (nnfolder-possibly-change-group group)
+ (nnfolder-possibly-change-group group server)
(save-excursion
(set-buffer nnfolder-current-buffer)
(and (file-writable-p buffer-file-name)
(point-max))))
(delete-region (point-min) (point-max)))))
-(defun nnfolder-possibly-change-group (group)
- (or (file-exists-p nnfolder-directory)
- (make-directory (directory-file-name nnfolder-directory) t))
+(defun nnfolder-possibly-change-group (group &optional server)
+ (when (and server
+ (not (nnfolder-server-opened server)))
+ (nnfolder-open-server server))
+ (unless (file-exists-p nnfolder-directory)
+ (make-directory (directory-file-name nnfolder-directory) t))
(nnfolder-possibly-activate-groups nil)
(or (assoc group nnfolder-group-alist)
(not (file-exists-p (concat (file-name-as-directory nnfolder-directory)
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(concat dir group "/")
;; If not, we translate dots into slashes.
(concat dir (nnheader-replace-chars-in-string group ?. ?/) "/")))
- (if file file "")))
+ (or file "")))
(defun nnmail-date-to-time (date)
"Convert DATE into time."
;; Look for a Content-Length header.
(if (not (save-excursion
(and (re-search-backward
- "^Content-Length: \\([0-9]+\\)" start t)
+ "^Content-Length:[ \t]*\\([0-9]+\\)" start t)
(setq content-length (string-to-int
(buffer-substring
(match-beginning 1)
(insert "Message-ID: " (setq message-id (nnmail-message-id)) "\n"))
;; Look for a Content-Length header.
(goto-char (point-min))
- (if (not (re-search-forward "^Content-Length: \\([0-9]+\\)" nil t))
+ (if (not (re-search-forward "^Content-Length:[ \t]*\\([0-9]+\\)" nil t))
(setq content-length nil)
(setq content-length (string-to-int (match-string 1)))
;; We destroy the header, since none of the backends ever
;; If this is a duplicate message, then we do not save it.
(let* ((duplication (nnmail-cache-id-exists-p message-id))
(action (when duplication
- (if (nnheader-functionp nnmail-treat-duplicates)
- (funcall nnmail-treat-duplicates message-id)
- nnmail-treat-duplicates))))
+ (cond
+ ((memq nnmail-treat-duplicates '(warn delete))
+ nnmail-treat-duplicates)
+ ((nnheader-functionp nnmail-treat-duplicates)
+ (funcall nnmail-treat-duplicates message-id))
+ (t
+ nnmail-treat-duplicates)))))
(cond
((not duplication)
(nnmail-cache-insert message-id)
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(dont-check
(nnheader-report 'nnmbox "Selected group %s" group)
(nnheader-insert ""))
- ((> (car active) (cdr active))
- (nnheader-report 'nnmbox "Empty group %s" group)
- (nnheader-insert "211 0 0 0 %s\n" group))
(t
(nnheader-report 'nnmbox "Selected group %s" group)
(nnheader-insert "211 %d %d %d %s\n"
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(article group server accept-form &optional last)
(let ((buf (get-buffer-create " *nnml move*"))
result)
+ (nnml-possibly-change-directory group)
+ (unless nnml-article-file-alist
+ (setq nnml-article-file-alist
+ (nnheader-article-to-file-alist nnml-current-directory)))
(and
(nnml-deletable-article-p group article)
(nnml-request-article article group server)
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(when (not mod-time)
(setcdr (cdr total-infolist) (delq info (cddr total-infolist)))))
(if (cddr total-infolist)
- (setcar active (car (car (cdr (car (cdr (cdr total-infolist)))))))
+ (setcar active (car (car (car (cdr (cdr total-infolist))))))
(setcar active (1+ (cdr active))))
(nnsoup-write-active-file)
;; Return the articles that weren't expired.
(setq active (cdr active)))
(nnsoup-write-active-file)))
+(defun nnsoup-delete-unreferenced-message-files ()
+ "Delete any *.MSG and *.IDX files that aren't known by nnsoup."
+ (interactive)
+ (let* ((known (apply 'nconc (mapcar
+ (lambda (ga)
+ (mapcar
+ (lambda (area)
+ (gnus-soup-area-prefix (cadr area)))
+ (cddr ga)))
+ nnsoup-group-alist)))
+ (regexp "\\.MSG$\\|\\.IDX$")
+ (files (directory-files nnsoup-directory nil regexp))
+ non-files file)
+ ;; Find all files that aren't known by nnsoup.
+ (while (setq file (pop files))
+ (string-match regexp file)
+ (unless (member (substring file 0 (match-beginning 0)) known)
+ (push file non-files)))
+ ;; Sort and delete the files.
+ (setq non-files (sort non-files 'string<))
+ (map-y-or-n-p "Delete file %s? "
+ (lambda (file) (delete-file (concat nnsoup-directory file)))
+ non-files)))
+
(provide 'nnsoup)
;;; nnsoup.el ends here
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(defun nntp-send-region-to-server (begin end)
"Send the current buffer region (from BEGIN to END) to the server."
(save-excursion
- ;; If we're not the the nntp server buffer, we copy the region
- ;; over to that buffer.
- (if (eq (get-buffer nntp-server-buffer) (current-buffer))
- (let ((orig (current-buffer)))
- (set-buffer nntp-server-buffer)
- (erase-buffer)
- (insert-buffer-substring orig begin end))
- ;; We are in the nntp buffer, so we just narrow it.
- (narrow-to-region begin end))
- ;; `process-send-region' does not work if the text to be sent is very
- ;; large, so we send it piecemeal.
- (let ((last (point-min))
- (size 100)) ;Size of text sent at once.
- (while (/= last (point-max))
- (process-send-region
- nntp-server-process last (setq last (min (+ last size) (point-max))))
- ;; Read any output from the server. May be unnecessary.
- (accept-process-output)))
- ;; Delete the area we sent.
- (delete-region (point-min) (point-max))
- (widen)))
+ (let ((cur (current-buffer)))
+ ;; Copy the buffer over to the send buffer.
+ (nnheader-set-temp-buffer " *nntp send*")
+ (insert-buffer-substring cur begin end)
+ (save-excursion
+ (set-buffer cur)
+ (erase-buffer))
+ ;; `process-send-region' does not work if the text to be sent is very
+ ;; large, so we send it piecemeal.
+ (let ((last (point-min))
+ (size 100)) ;Size of text sent at once.
+ (while (/= last (point-max))
+ (process-send-region
+ nntp-server-process
+ last (setq last (min (+ last size) (point-max))))
+ ;; Read any output from the server. May be unnecessary.
+ (accept-process-output)))
+ (kill-buffer (current-buffer)))))
(defun nntp-open-server-semi-internal (server &optional service)
"Open SERVER.
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
+Fri Feb 2 20:41:56 1996 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.texi (Reading Mail): Addition.
+
+Wed Jan 31 20:20:43 1996 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.texi (Mail): Addition.
+
+Sat Jan 27 21:13:34 1996 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.texi (Topic Variables): Deletia.
+
+Fri Jan 26 13:50:23 1996 Lars Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.texi (Customizing Threading): Addition.
+ (Topic Commands): Addition.
+ (Topic Variables): Addition.
+
Thu Jan 25 18:35:12 1996 Lars Ingebrigtsen <lars@eyesore.no>
* gnus.texi (Summary Maneuvering): Addition.
MAKEINFO=$(EMACS) -batch -q -no-site-file gnus.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
# MAKEINFO=makeinfo -o gnus.info gnus.texi
LATEX=latex
+DVIPS=dvips
all: gnus.info refcard.dvi
makeinfo:
makeinfo -o gnus.info gnus.texi
+
+latex: gnus.texi
+ $(EMACS) -batch -q -no-site-file gnus.texi -l ./texi2latex.elc -f latexi-translate
+
+latexps: gnus.latexi
+ $(LATEX) gnus.latexi ; $(DVIPS) -f gnus.dvi > gnus.ps
+
+latexboth: gnus.latexi
+ rm -f gnus-manual-a4.ps.gz gnus-manual-standard.ps.gz ; $(LATEX) gnus.latexi ; $(DVIPS) -f gnus.dvi > gnus-manual-a4.ps ; gzip gnus-manual-a4.ps ; sed 's/,a4paper//' gnus.latexi > gnus-standard.latexi ; $(LATEX) gnus.latexi ; $(DVIPS) -f gnus.dvi > gnus-manual-standard.ps ; gzip gnus-manual-standard.ps
@iftex
@iflatex
-\documentstyle[a4,pagestyle]{book}
-\input{epsf}
-%\addtolength{\oddsidemargin}{2cm}
-%\addtolength{\evensidemargin}{2cm}
+\documentclass[twoside,a4paper,openright]{book}
+\usepackage[latin1]{inputenc}
+% \usepackage{fontenc}
+% \usepackage{babel}
+\usepackage{pagestyle}
+\usepackage{epsfig}
+\fontfamily{bembo}\selectfont
+
\makeindex
\begin{document}
-\newcommand{\gnuscode}[1]{{\tt #1}}
-\newcommand{\gnussamp}[1]{{\tt #1}}
-\newcommand{\gnuslisp}[1]{{\tt #1}}
-\newcommand{\gnuskbd}[1]{{`\tt #1'}}
-\newcommand{\gnusfile}[1]{{`\tt #1'}}
-\newcommand{\gnusdfn}[1]{{\em #1}}
-\newcommand{\gnusstrong}[1]{{\bf #1}}
-\newcommand{\gnusemph}[1]{{\em #1}}
-\newcommand{\gnusvar}[1]{{\sl #1}}
-\newcommand{\gnussc}[1]{{\sc #1}}
-\newcommand{\gnustitle}[1]{{\huge #1}}
-\newcommand{\gnusauthor}[1]{{\huge #1}}
-\newcommand{\gnusbullet}{{.}}
+\newcommand{\gnuschaptername}{}
+\newcommand{\gnussectionname}{}
+
+\newcommand{\gnusbackslash}{/}
+
+\newcommand{\gnusxref}[1]{See ``#1'' on page \pageref{#1}}
+\newcommand{\gnuspxref}[1]{see ``#1'' on page \pageref{#1}}
+
+\newcommand{\gnuskindex}[1]{\index{#1}}
+\newcommand{\gnusindex}[1]{\index{#1}}
+
+\newcommand{\gnustt}[1]{{\textbf{\textsf{#1}}}}
+\newcommand{\gnuscode}[1]{\gnustt{#1}}
+\newcommand{\gnussamp}[1]{`\gnustt{#1}'}
+\newcommand{\gnuslisp}[1]{\gnustt{#1}}
+\newcommand{\gnuskbd}[1]{`\gnustt{#1}'}
+\newcommand{\gnusfile}[1]{`\gnustt{#1}'}
+\newcommand{\gnusdfn}[1]{\textit{#1}}
+\newcommand{\gnusi}[1]{\textit{#1}}
+\newcommand{\gnusstrong}[1]{\textbf{#1}}
+\newcommand{\gnusemph}[1]{\textit{#1}}
+\newcommand{\gnusvar}[1]{\textsl{\textsf{#1}}}
+\newcommand{\gnussc}[1]{\textsc{#1}}
+\newcommand{\gnustitle}[1]{{\huge\textbf{#1}}}
+\newcommand{\gnusauthor}[1]{{\large\textbf{#1}}}
+
+\newcommand{\gnusbullet}{{${\bullet}$}}
+\newcommand{\gnusdollar}{\$}
+\newcommand{\gnusampersand}{\&}
+\newcommand{\gnuspercent}{\%}
+\newcommand{\gnushash}{\#}
+\newcommand{\gnushat}{\%}
+\newcommand{\gnustilde}{\%}
+\newcommand{\gnusless}{{$<$}}
+\newcommand{\gnusgreater}{{$>$}}
+
+\newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=gnus-head.eps,height=1cm}}}
+\newcommand{\gnusinteresting}{
+\marginpar[\hspace{2.5cm}\gnushead]{\gnushead}
+}
+
+\newcommand{\gnuschapter}[1]{
+\chapter{#1}
+\renewcommand{\gnuschaptername}{#1}
+\thispagestyle{empty}
+% \epsfig{figure=gnus-herd-\arabic{chapter}.eps,height=15cm}
+\clearpage
+}
+
+\newcommand{\gnusitemx}[1]{{\itemsep=0pt\item#1}}
+
+\newcommand{\gnussection}[1]{
+\renewcommand{\gnussectionname}{#1}
+\section{#1}
+}
\newenvironment{codelist}%
{\begin{list}{}{
\newenvironment{kbdlist}%
{\begin{list}{}{
+\labelwidth=0cm
}
}{\end{list}}
}
}{\end{list}}
+\newlength{\headrulewidth}
+\setlength{\headrulewidth}{\headtextwidth}
+\addtolength{\headrulewidth}{-2.6ex}
+\newlength{\headwrule}
+\setlength{\headwrule}{\headrulewidth}
+\addtolength{\headwrule}{-0ex}
+
\newpagestyle{gnus}%
{
-{\underline{\makebox{\hfill}}}
+{
+\ifodd\count0
+{
+\hspace*{-2ex}
+\underline{
+\makebox[\headtextwidth]{
+\hspace*{-2.1ex}
+%\ifnum chapter=0\else
+\textbf{\arabic{chapter}.\arabic{section}}
+%\fi
+\textbf{\gnussectionname\hfill\arabic{page}}
+}}
+%\hspace*{-\headrulewidth}
+%\raisebox{-3pt}{\rule{\headwrule}{0.5pt}}
+}
+\else
+{
+\hspace*{-2.1cm}
+\underline{
+\hspace*{-2ex}
+\makebox[\headtextwidth]{
+\textbf{\arabic{page}\hfill\gnuschaptername}
+%\hspace*{-\headrulewidth}
+%\raisebox{-3pt}{\rule{\headwrule}{0.5pt}}
+}}
+}
+\fi
+}
}
{
\ifodd\count0
-% \epsfbox{foot-gnus.ps} hei \hfill \arabic{page}
+\mbox{} \hfill
+\raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
\else
-\arabic{page} \hfill hei % \epsfbox{foot-gnus}
+\raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
+\hfill \mbox{}
\fi
}
\pagestyle{gnus}
@end iflatex
@end iftex
+@iftex
+@iflatex
+\begin{titlepage}
+{
+
+%\addtolength{\oddsidemargin}{-5cm}
+%\addtolength{\evensidemargin}{-5cm}
+\parindent=0cm
+\addtolength{\textheight}{2cm}
+
+\gnustitle{\gnustitlename}\\
+\rule{15cm}{1mm}\\
+\vfill
+\hspace*{-1cm}\epsfig{figure=gnus-big-logo.eps,height=15cm}
+\vfill
+\rule{15cm}{1mm}\\
+\gnusauthor{by Lars Magne Ingebrigtsen}
+\newpage
+}
+
+\mbox{}
+\vfill
+
+\thispagestyle{empty}
+
+Copyright \copyright{} 1995 Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the
+entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+
+\newpage
+\end{titlepage}
+@end iflatex
+@end iftex
+
@ifinfo
This file documents Gnus, the GNU Emacs newsreader.
into another language, under the above conditions for modified versions.
@end ifinfo
-@iftex
+@tex
@titlepage
@title September Gnus Manual
@end titlepage
@page
-@end iftex
+@end tex
@node Top
highlighting (as well as the @sc{soup} support) was written
by Per Abrahamsen.
@item
+Design and graphics were done by Luis Fernandes.
+@item
Innumerable bug fixes were written by Sudish Joseph.
@item
@code{gnus-topic} was written by Ilja Weis.
@section Finding the News
@vindex gnus-select-method
-The @code{gnus-select-method} variable controls how Gnus finds news.
+@c @head
+The @code{gnus-select-method} variable controls how Gnus finds news.
This variable should be a list where the first element says @dfn{how}
and the second element says @dfn{where}. This method is your native
method. All groups that are not fetched with this method are foreign
@xref{Foreign Groups}.
@vindex gnus-secondary-select-methods
+@c @head
A slightly different approach to foreign groups is to set the
@code{gnus-secondary-select-methods} variable. The select methods
listed in this variable are in many ways just as native as the
hey, that's your problem. Blllrph!
@findex gnus-no-server
+@c @head
If you know that the server is definitely down, or you just want to read
your mail without bothering with the server at all, you can use the
@code{gnus-no-server} command to start Gnus. That might come in handy
@c if you set it to anything else.
@vindex gnus-read-active-file
+@c @head
The active file can be rather Huge, so if you have a slow network, you
can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
reading the active file. This variable is @code{t} by default.
Newsgroup description.
@item o
-Moderated.
+@samp{m} if moderated.
@item O
-Moderated.
+@samp{(m)} if moderated.
@item s
Select method.
@node SOUP
-@subsection @sc{soup}
-@cindex @sc{SOUP}
+@subsection SOUP
+@cindex SOUP
@cindex offline
In the PC world people often talk about ``offline'' newsreaders. These
@node SOUP Commands
-@subsubsection @sc{soup} Commands
+@subsubsection SOUP Commands
@table @kbd
@item G s b
@node SOUP Replies
-@subsubsection @sc{SOUP} Replies
+@subsubsection SOUP Replies
Just using @code{nnsoup} won't mean that your postings and mailings end
up in @sc{soup} reply packets automagically. You have to work a bit
You can turn this feature off completely by setting the variable to
@code{nil}.
+If you want all the duplicate mails to be put into a special
+@dfn{duplicates} group, you could do that using the normal mail split
+methods:
+
+@lisp
+(setq nnmail-split-fancy
+ '(| ;; Messages duplicates go to a separate group.
+ ("gnus-warning" "duplication of message" "duplicate")
+ ;; Message from deamons, postmaster, and the like to another.
+ (any mail "mail.misc")
+ ;; Other rules.
+ [ ... ] ))
+@end lisp
+
+Or something like:
+@lisp
+(setq nnmail-split-methods
+ '(("duplicates" "^Gnus-Warning:")
+ ;; Other rules.
+ [...]))
+@end lisp
+
Here's a neat feature: If you know that the recipient reads her mail
with Gnus, and that she has @code{nnmail-treat-duplicates} set to
@code{delete}, you can send her as many insults as you like, just by
@cindex topic variables
-@vindex gnus-group-topic-topics-only
-Whoo, this is complicated. If @code{gnus-group-topic-topics-only} is
-@code{nil}, all groups and topics will be listed, as you would expect.
-If this variable is non-@code{nil}, only the topics will be listed, and
-the groups will not be listed. This makes the group buffer much shorter,
-I'm sure you'll agree. This is all modified on a topic-by-topic basis
-by the @var{show} parameter. It makes perfect sense, really.
-
@vindex gnus-topic-unique
If @code{gnus-topic-unique} is non-@code{nil}, each group will be member
of (tops) one topic each. If this is @code{nil}, each group might end
Number of unread articles in the topic and all its subtopics.
@end table
+@vindex gnus-topic-indent-level
+Each sub-topic (and the groups in the sub-topics) will be indented with
+@code{gnus-topic-indent-level} times the topic level number of spaces.
+The default is @samp{2}.
+
@node Topic Commands
@subsection Topic Commands
toggling command on topics. In addition, if you give a numerical
prefix, group on that level (and lower) will be displayed.
+@item TAB
+@kindex TAB (Group)
+@findex gnus-topic-indent
+``Indent'' the current topic so that it becomes a sub-topic of the
+previous topic (@code{gnus-topic-indent}). If given a prefix,
+``un-indent'' the topic instead.
+
@item C-k
@kindex C-k (Group)
@findex gnus-topic-kill-group
thing, you will be prompted for a mail group, and then the article will
be put there. This means that the article is @dfn{not} mailed.
+@findex gnus-kill-message-buffer
+@cindex kill mail buffer
+@kindex C-x k (Mail)
+@kindex C-x k (Post)
+If enter a mail (or post) buffer and then decide not to compose a
+message after all, you'd normally just kill the buffer with @kbd{C-x k}.
+However, since the mail and post buffers are associated with articles in
+the draft group, this will leave lots of rubbish articles in the draft
+group. To avoid that problem, kill mail and post buffer with @kbd{C-c
+C-k} (@code{gnus-kill-message-buffer}) instead. This will make sure
+that everything is properly cleaned up before the buffer is killed.
+
There are three ``methods'' for handling all mail. The default is
@code{sendmail}. Some people like what @code{mh} does better, and some
people prefer @code{vm}.
"\\)?\\]?:?[ \t]*"))
@end lisp
+All words that match this regexp will be removed before comparing two
+subjects.
+
@item gnus-summary-gather-exclude-subject
@vindex gnus-summary-gather-exclude-subject
Since loose thread gathering is done on subjects only, that might lead