*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 08:40:29 +0000 (08:40 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 08:40:29 +0000 (08:40 +0000)
14 files changed:
lisp/ChangeLog
lisp/gnus-msg.el
lisp/gnus-score.el
lisp/gnus-topic.el
lisp/gnus-uu.el
lisp/gnus.el
lisp/message.el
lisp/nnbabyl.el
lisp/nndir.el
lisp/nndraft.el
lisp/nnfolder.el
lisp/nnmbox.el
lisp/nnmh.el
lisp/nnml.el

index fb87c76..9a4d26c 100644 (file)
@@ -1,5 +1,70 @@
+Wed Apr  3 18:23:35 1996  Lars Magne Ingebrigtsen  <larsi@aegir.ifi.uio.no>
+
+       * message.el (message-insert-newsgroups): Capitilize Newsgroups.
+
+       * gnus.el (gnus-make-hashtable-from-killed): Wouldn't use
+       `gnus-zombie-list'. 
+
+       * nnfolder.el (nnfolder-group-pathname): New function; return the
+       right folder.
+
+       * gnus-score.el (gnus-score-find-bnews): Recognize "++" groups. 
+
+       * gnus-topic.el (gnus-topic-yank-group): Remain in the topic.
+
+       * gnus.el (gnus-get-new-news-in-group): Removed function.
+       (gnus-group-get-new-news-this-group): Update all instances of the
+       group. 
+
+       * gnus-topic.el (gnus-topic-unindent): Insert at the right place. 
+       (gnus-topic-next-topic): New function.
+       (gnus-topic-unindent): Would swallow sub-topics.
+       (gnus-topic-indent): Ditto.
+
+Wed Apr  3 17:18:08 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus-msg.el (gnus-bug): Wouldn't restore window conf.
+
+       * gnus.el (gnus-buffer-configuration): `bug' configuration.
+
+Tue Apr  2 22:33:25 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus-scomo.el: New file.
+
+Tue Apr  2 12:31:48 1996  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * message.el (bold-region): New function.
+       (unbold-region): New function.
+       (message-face-alist): New variable.
+       (message-mode): Add facemenu support.
+
+Tue Apr  2 20:46:11 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * message.el (message-required-mail-headers): `To' isn't
+       required. 
+       (message-ignored-news-headers): Remove Fcc headers.
+       (message-ignored-mail-headers): Ditto.
+
+       * gnus.el (gnus-request-article-this-buffer): Would bug out on
+       backlogs. 
+
+       * message.el (message-send-and-exit): Bury buffer.
+
+       * gnus-uu.el (gnus-uu-digest-mail-forward): Use `message'.
+
+       * nnfolder.el (nnfolder-close-group): Would try to `set-buffer'
+       nil. 
+
+       * gnus.el (gnus-server-get-method): Would return extended servers
+       too often.
+
+       * nnml.el (nnml-request-accept-article): Accept a server
+       parameter. 
+
 Tue Apr  2 15:05:14 1996  Lars Magne Ingebrigtsen  <larsi@aegir.ifi.uio.no>
 
+       * gnus.el: September Gnus v0.62 is released.
+
        * nnfolder.el (nnfolder-possibly-change-group): Make sure the
        directory exists before writing file.
        (nnfolder-request-accept-article): Give a better error messae.
index 03a9b91..2560a46 100644 (file)
@@ -651,15 +651,14 @@ If YANK is non-nil, include the original article."
 (defun gnus-bug ()
   "Send a bug report to the Gnus maintainers."
   (interactive)
-  (let ((winconf (current-window-configuration)))
+  (gnus-setup-message 'bug
     (delete-other-windows)
     (switch-to-buffer "*Gnus Help Bug*")
     (erase-buffer)
     (insert gnus-bug-message)
     (goto-char (point-min))
-    (gnus-setup-message 'bug
-      (message-pop-to-buffer "*Gnus Bug*")
-      (message-setup `((To . ,gnus-maintainer) (Subject . ""))))
+    (message-pop-to-buffer "*Gnus Bug*")
+    (message-setup `((To . ,gnus-maintainer) (Subject . "")))
     (push `(gnus-bug-kill-buffer) message-send-actions)
     (goto-char (point-min))
     (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$"))
@@ -681,7 +680,8 @@ If YANK is non-nil, include the original article."
   "Attemps to go through the Gnus source file and report what variables have been changed.
 The source file has to be in the Emacs load path."
   (interactive)
-  (let ((files '("gnus.el" "gnus-msg.el" "gnus-score.el" "nnmail.el"))
+  (let ((files '("gnus.el" "gnus-msg.el" "gnus-score.el" "nnmail.el"
+                "message.el"))
        file dirs expr olist sym)
     (message "Please wait while we snoop your variables...")
     (sit-for 0)
index 681f4c6..892d28b 100644 (file)
@@ -2082,6 +2082,10 @@ GROUP using BNews sys file syntax."
                 (search-forward "+")
                 (forward-char -1)
                 (insert "\\")))
+         ;; Kludge to deal with "++" groups.
+         (while (search-forward "++" nil t)
+           (replace-match "\\+\\+" t t))
+         (goto-char (point-min))
          ;; Translate "all" to ".*".
          (while (search-forward "all" nil t)
            (replace-match ".*" t t))
index 04b57fe..248e3bc 100644 (file)
@@ -326,6 +326,20 @@ articles in the topic and its subtopics."
       (setq topology (cdr topology)))
     (or result (and found parent))))
 
+(defun gnus-topic-next-topic (topic &optional previous)
+  "Return the next sibling of TOPIC."
+  (let ((topology gnus-topic-topology)
+       (parentt (cddr (gnus-topic-find-topology 
+                       (gnus-topic-parent-topic topic))))
+       prev)
+    (while (and parentt
+               (not (equal (caaar parentt) topic)))
+      (setq prev (caaar parentt)
+           parentt (cdr parentt)))
+    (if previous
+       prev
+      (caaadr parentt))))
+
 (defun gnus-topic-find-topology (topic &optional topology level remove)
   "Return the topology of TOPIC."
   (unless topology
@@ -849,7 +863,8 @@ group."
            (item (cdr (pop gnus-topic-killed-topics))))
        (gnus-topic-create-topic
         (caar item) (gnus-topic-parent-topic previous) previous
-        item))
+        item)
+       (gnus-topic-goto-topic (caar item)))
     (let* ((prev (gnus-group-group-name))
           (gnus-topic-inhibit-change-level t)
           (gnus-group-indentation
@@ -982,8 +997,10 @@ If UNINDENT, remove an indentation."
       (when topic
        (gnus-topic-goto-topic topic)
        (gnus-topic-kill-group)
-       (gnus-topic-create-topic topic parent)
-       (gnus-topic-goto-topic topic)))))
+       (gnus-topic-create-topic
+        topic parent nil (cdr (pop gnus-topic-killed-topics)))
+       (or (gnus-topic-goto-topic topic)
+           (gnus-topic-goto-topic parent))))))
 
 (defun gnus-topic-unindent ()
   "Unindent a topic."
@@ -996,7 +1013,9 @@ If UNINDENT, remove an indentation."
     (when topic
       (gnus-topic-goto-topic topic)
       (gnus-topic-kill-group)
-      (gnus-topic-create-topic topic grandparent)
+      (gnus-topic-create-topic
+       topic grandparent (gnus-topic-next-topic parent)
+       (cdr (pop gnus-topic-killed-topics)))
       (gnus-topic-goto-topic topic))))
 
 (defun gnus-topic-list-active (&optional force)
index 0a8db90..8104d41 100644 (file)
@@ -476,9 +476,7 @@ The headers will be included in the sequence they are matched.")
         (progn
           (delete-region (point) (gnus-point-at-eol))
           (insert from)))
-    (if post
-       (gnus-forward-using-post)
-      (gnus-mail-forward))
+    (message-forward post)
     (delete-file file)
     (kill-buffer buf)
     (setq gnus-uu-digest-from-subject nil)))
index c672b39..95c0b76 100644 (file)
@@ -31,6 +31,7 @@
 (require 'mail-utils)
 (require 'timezone)
 (require 'nnheader)
+(require 'message)
 
 (eval-when-compile (require 'cl))
 
@@ -909,6 +910,10 @@ beginning of a line.")
               (summary 0.25 point)
               (if gnus-carpal '(summary-carpal 4))
               ("*Shell Command Output*" 1.0)))
+    (bug
+     (vertical 1.0
+              ("*Gnus Help Bug*" 0.5)
+              ("*Gnus Bug*" 1.0 point)))
     (compose-bounce
      (vertical 1.0
               (article 0.5)
@@ -1688,7 +1693,7 @@ variable (string, integer, character, etc).")
   "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
   "The mail address of the Gnus maintainers.")
 
-(defconst gnus-version "September Gnus v0.62"
+(defconst gnus-version "September Gnus v0.63"
   "Version number for this version of Gnus.")
 
 (defvar gnus-info-nodes
@@ -1966,6 +1971,7 @@ Thank you for your help in stamping out bugs.
       gnus-group-brew-soup gnus-brew-soup gnus-soup-add-article
       gnus-soup-send-replies gnus-soup-save-areas gnus-soup-pack-packet)
      ("nnsoup" nnsoup-pack-replies)
+     ("gnus-scomo" :interactive t gnus-score-mode)
      ("gnus-mh" gnus-mh-mail-setup gnus-summary-save-article-folder
       gnus-Folder-save-name gnus-folder-save-name)
      ("gnus-mh" :interactive t gnus-summary-save-in-folder)
@@ -4539,6 +4545,9 @@ If REGEXP, only list groups matching REGEXP."
         (gnus-server-to-method method))
        ((and (stringp (car method)) group)
         (gnus-server-extend-method group method))
+       ((and method (not group)
+             (equal (cadr method) ""))
+        method)
        (t
         (gnus-server-add-address method))))
 
@@ -6334,7 +6343,12 @@ If N is negative, this group and the N-1 previous groups will be checked."
       (setq group (car groups)
            groups (cdr groups))
       (gnus-group-remove-mark group)
-      (unless (gnus-get-new-news-in-group group)
+      (if (and group (gnus-activate-group group 'scan))
+         (progn
+           (gnus-get-unread-articles-in-group
+            (gnus-get-info group) (gnus-active group) t)
+           (gnus-close-group group)
+           (gnus-group-update-group group))
        (ding)
        (gnus-message 3 "%s error: %s" group (gnus-status-message group))))
     (when gnus-goto-next-group-when-activating
@@ -6342,15 +6356,6 @@ If N is negative, this group and the N-1 previous groups will be checked."
     (gnus-summary-position-point)
     ret))
 
-(defun gnus-get-new-news-in-group (group)
-  (when (and group (gnus-activate-group group 'scan))
-    (gnus-get-unread-articles-in-group
-     (gnus-get-info group) (gnus-active group) t)
-    (gnus-close-group group)
-    (when (gnus-group-goto-group group)
-      (gnus-group-update-group-line))
-    t))
-
 (defun gnus-group-fetch-faq (group &optional faq-dir)
   "Fetch the FAQ for the current group."
   (interactive
@@ -13333,6 +13338,7 @@ The following commands are available:
              (if (gnus-request-article article group (current-buffer))
                  (progn
                    (and gnus-keep-backlog
+                        (numberp article)
                         (gnus-backlog-enter-article
                          group article (current-buffer)))
                    'article))))
@@ -14880,6 +14886,9 @@ If GROUP is nil, all groups on METHOD are scanned."
   ;; Make sure there's a newline at the end of the article.
   (when (stringp method)
     (setq method (gnus-server-to-method method)))
+  (when (and (not method)
+            (stringp group))
+    (setq method (gnus-find-method-for-group group)))
   (goto-char (point-max))
   (unless (bolp)
     (insert "\n"))
@@ -14887,6 +14896,7 @@ If GROUP is nil, all groups on METHOD are scanned."
                (car (or method (gnus-find-method-for-group group))))))
     (funcall (intern (format "%s-request-accept-article" func))
             (if (stringp group) (gnus-group-real-name group) group)
+            (cadr method)
             last)))
 
 (defun gnus-request-replace-article (article group buffer)
@@ -15605,7 +15615,8 @@ newsgroup."
     (setq gnus-killed-hashtb
          (gnus-make-hashtable
           (+ (length gnus-killed-list) (length gnus-zombie-list))))
-    (while (setq list (symbol-value (pop lists)))
+    (while (setq list (pop lists))
+      (setq list (symbol-value list))
       (while list
        (gnus-sethash (car list) (pop list) gnus-killed-hashtb)))))
 
index bb8c9b1..9a7f2cd 100644 (file)
 ;; consists mainly of large chunks of code from the sendmail.el,
 ;; gnus-msg.el and rnewspost.el files.
 
+;;; underline.el
+
+;; This code should be moved to underline.el (from which it is stolen). 
+
+;;;###autoload
+(defun bold-region (start end)
+  "Bold all nonblank characters in the region.
+Works by overstriking characters.
+Called from program, takes two arguments START and END
+which specify the range to operate on."
+  (interactive "r")
+  (save-excursion
+   (let ((end1 (make-marker)))
+     (move-marker end1 (max start end))
+     (goto-char (min start end))
+     (while (< (point) end1)
+       (or (looking-at "[_\^@- ]")
+          (insert (following-char) "\b"))
+       (forward-char 1)))))
+
+;;;###autoload
+(defun unbold-region (start end)
+  "Remove all boldness (overstruck characters) in the region.
+Called from program, takes two arguments START and END
+which specify the range to operate on."
+  (interactive "r")
+  (save-excursion
+   (let ((end1 (make-marker)))
+     (move-marker end1 (max start end))
+     (goto-char (min start end)) 
+     (while (re-search-forward "\b" end1 t)
+       (if (eq (following-char) (char-after (- (point) 2)))
+          (delete-char -2))))))
+
 ;;; Code:
 
 (eval-when-compile 
@@ -87,7 +121,7 @@ header, remove it from this list.")
 
 ;;;###autoload
 (defvar message-required-mail-headers 
-  '(From Date To Subject (optional . In-Reply-To) Message-ID Lines
+  '(From Date Subject (optional . In-Reply-To) Message-ID Lines
         (optional . X-Mailer))
   "*Headers to be generated or prompted for when mailing a message.
 RFC822 required that From, Date, To, Subject and Message-ID be
@@ -99,11 +133,11 @@ included.  Organization, Lines and X-Mailer are optional.")
 
 ;;;###autoload
 (defvar message-ignored-news-headers 
-  "^NNTP-Posting-Host:\\|^Xref:\\|^Bcc:\\|^Gcc:"
+  "^NNTP-Posting-Host:\\|^Xref:\\|^Bcc:\\|^Gcc:\\|^Fcc:"
   "*Regexp of headers to be removed unconditionally before posting.")
 
 ;;;###autoload
-(defvar message-ignored-mail-headers "^Gcc:"
+(defvar message-ignored-mail-headers "^Gcc:\\|^Fcc:"
   "*Regexp of headers to be removed unconditionally before mailing.")
 
 ;;;###autoload
@@ -199,6 +233,8 @@ If nil, ignore the header. If it is t, use its value, but ignore
 ignore the \"poster\" value.  If it is the symbol `use', always use
 the value.")
 
+(defvar gnus-post-method)
+(defvar gnus-select-method)
 ;;;###autoload
 (defvar message-post-method 
   (cond ((boundp 'gnus-post-method)
@@ -372,6 +408,15 @@ actually occur.")
            . font-lock-string-face)))
   "Additional expressions to highlight in Message mode.")
 
+(defvar message-face-alist
+  '((bold . bold-region)
+    (underline . underline-region)
+    (default . (lambda (b e) 
+                (unbold-region b e)
+                (ununderline-region b e))))
+  "Alist of mail and news faces for facemenu.
+The cdr of ech entry is a function for applying the face to a region.")
+
 (defvar message-send-hook nil
   "Hook run before sending messages.")
 
@@ -617,6 +662,16 @@ C-c C-r  message-ceasar-buffer-body (rot13 the message body)."
   (setq buffer-offer-save t)
   (make-local-variable 'font-lock-defaults)
   (setq font-lock-defaults '(message-font-lock-keywords t))
+  (make-local-variable 'facemenu-add-face-function)
+  (make-local-variable 'facemenu-remove-face-function)
+  (setq facemenu-add-face-function
+       (lambda (face end)
+         (let ((face-fun (cdr (assq face message-face-alist))))
+           (if face-fun
+               (funcall face-fun (point) end)
+             (error "Face %s not configured for %s mode" face mode-name)))
+         "")
+       facemenu-remove-face-function t)
   (make-local-variable 'paragraph-separate)
   (make-local-variable 'paragraph-start)
   (setq paragraph-start (concat (regexp-quote mail-header-separator)
@@ -724,7 +779,7 @@ or the line sollowing `message-signature-separator'."
 (defun message-insert-newsgroups ()
   "Insert the Newsgroups header from the article being replied to."
   (interactive)
-  (message-position-on-field "newsgroups")
+  (message-position-on-field "Newsgroups")
   (insert (or (message-fetch-reply-field "newsgroups") "")))
 
 \f
@@ -927,8 +982,7 @@ prefix, and don't delete any headers."
 
 (defun message-remove-signature ()
   "Remove the signature from the text between point and mark.
-The text will also be indented the normal way.
-This function can be used in `message-citation-hook', for instance."
+The text will also be indented the normal way."
   (save-excursion
     (let ((start (point))
          mark)
@@ -954,25 +1008,24 @@ This function can be used in `message-citation-hook', for instance."
 ;;; Sending messages
 ;;;
 
-(defun message-send-and-exit (&optional arg)
-  "Send message like `message-send', then, if no errors, exit from mail buffer.
-Prefix arg means don't delete this window."
-  (interactive "P")
-  (message-send)
-  (bury-buffer (current-buffer))
-;  (message-bury arg)
-  )
-
-(defun message-dont-send (&optional arg)
-  "Don't send the message you have been editing.
-Prefix arg means don't delete this window."
-  (interactive "P")
-  (message-bury arg))
+(defun message-send-and-exit ()
+  "Send message like `message-send', then, if no errors, exit from mail buffer."
+  (interactive)
+  (let ((buf (current-buffer)))
+    (message-send)
+    (bury-buffer buf)
+    (when (eq buf (current-buffer))
+      (message-bury buf))))
+
+(defun message-dont-send ()
+  "Don't send the message you have been editing."
+  (interactive)
+  (message-bury (current-buffer)))
 
-(defun message-bury (arg)
+(defun message-bury (buffer)
   "Bury this mail buffer."
-  (let ((newbuf (other-buffer (current-buffer))))
-    (bury-buffer (current-buffer))
+  (let ((newbuf (other-buffer buffer)))
+    (bury-buffer buffer)
     (if (and (fboundp 'frame-parameters)
             (cdr (assq 'dedicated (frame-parameters)))
             (not (null (delq (selected-frame) (visible-frame-list)))))
index 6c75043..3a0508b 100644 (file)
@@ -88,7 +88,7 @@
     (let ((number (length sequence))
          (count 0)
          article art-string start stop)
-      (nnbabyl-possibly-change-newsgroup newsgroup)
+      (nnbabyl-possibly-change-newsgroup newsgroup server)
       (while sequence
        (setq article (car sequence))
        (setq art-string (nnbabyl-article-string article))
   nnbabyl-status-string)
 
 (defun nnbabyl-request-article (article &optional newsgroup server buffer)
-  (nnbabyl-possibly-change-newsgroup newsgroup)
+  (nnbabyl-possibly-change-newsgroup newsgroup server)
   (save-excursion
     (set-buffer nnbabyl-mbox-buffer)
     (goto-char (point-min))
       (cond 
        ((null active)
        (nnheader-report 'nnbabyl "No such group: %s" group))
-       ((null (nnbabyl-possibly-change-newsgroup group))
+       ((null (nnbabyl-possibly-change-newsgroup group server))
        (nnheader-report 'nnbabyl "No such group: %s" group))
        (dont-check
        (nnheader-report 'nnbabyl "Selected group %s" group)
 
 (defun nnbabyl-request-expire-articles
   (articles newsgroup &optional server force)
-  (nnbabyl-possibly-change-newsgroup newsgroup)
+  (nnbabyl-possibly-change-newsgroup newsgroup server)
   (let* ((is-old t)
         rest)
     (nnmail-activate 'nnbabyl)
 
 (defun nnbabyl-request-move-article 
   (article group server accept-form &optional last)
-  (nnbabyl-possibly-change-newsgroup group)
+  (nnbabyl-possibly-change-newsgroup group server)
   (let ((buf (get-buffer-create " *nnbabyl move*"))
        result)
     (and 
        (and last (save-buffer))))
     result))
 
-(defun nnbabyl-request-accept-article (group &optional last)
+(defun nnbabyl-request-accept-article (group &optional server last)
+  (nnbabyl-possibly-change-newsgroup group server)
   (let ((buf (current-buffer))
        result beg)
     (and 
       t)))
 
 (defun nnbabyl-request-delete-group (group &optional force server)
-  (nnbabyl-possibly-change-newsgroup group)
+  (nnbabyl-possibly-change-newsgroup group server)
   ;; Delete all articles in GROUP.
   (if (not force)
       ()                               ; Don't delete the articles.
   t)
 
 (defun nnbabyl-request-rename-group (group new-name &optional server)
-  (nnbabyl-possibly-change-newsgroup group)
+  (nnbabyl-possibly-change-newsgroup group server)
   (save-excursion
     (set-buffer nnbabyl-mbox-buffer)
     (goto-char (point-min))
       (if (or force (not (re-search-forward "^X-Gnus-Newsgroup: " nil t)))
          (delete-region (point-min) (point-max))))))
 
-(defun nnbabyl-possibly-change-newsgroup (newsgroup)
+(defun nnbabyl-possibly-change-newsgroup (newsgroup &optional server)
+  (when (and server 
+            (not (nnbabyl-server-opened server)))
+    (nnbabyl-open-server server))
   (if (or (not nnbabyl-mbox-buffer)
          (not (buffer-name nnbabyl-mbox-buffer)))
       (save-excursion (nnbabyl-read-mbox)))
index 091fc6c..f3424d0 100644 (file)
   (nndir-execute-nnmh-command
    `(nnmh-request-expire-articles ',articles nndir-group ,server ,force)))
 
-(defun nndir-request-accept-article (nndir-group &optional last)
+(defun nndir-request-accept-article (nndir-group &optional server last)
   (nndir-execute-nnmh-command
-   `(nnmh-request-accept-article nndir-group ,last)))
+   `(nnmh-request-accept-article nndir-group ,server ,last)))
 
 (defun nndir-close-group (nndir-group &optional server)
   t)
index e951bba..344fc4c 100644 (file)
 (defun nndraft-request-associate-buffer (group)
   "Associate the current buffer with some article in the draft group."
   (let* ((gnus-verbose-backends nil)
-        (article (cdr (nndraft-request-accept-article group t 'noinsert)))
+        (article (cdr (nndraft-request-accept-article
+                       group nndraft-current-server t 'noinsert)))
         (file (nndraft-article-filename article)))
     (setq buffer-file-name file)
     (setq buffer-auto-save-file-name (make-auto-save-file-name))
            (funcall nnmail-delete-file-function auto)))))
     res))
 
-(defun nndraft-request-accept-article (group &optional last noinsert)
+(defun nndraft-request-accept-article (group &optional server last noinsert)
   (let* ((point (point))
         (mode major-mode)
         (name (buffer-name))
         (gnus-verbose-backends nil)
         (gart (nndraft-execute-nnmh-command
-               `(nnmh-request-accept-article group ,last noinsert)))
+               `(nnmh-request-accept-article group ,server ,last noinsert)))
         (state
          (nndraft-article-filename (cdr gart) ".state")))
     ;; Write the "state" file.
index 7632309..e92a543 100644 (file)
@@ -104,43 +104,42 @@ it.")
 
 ;;; Interface functions
 
-(defun nnfolder-retrieve-headers (sequence &optional newsgroup server fetch-old)
+(defun nnfolder-retrieve-headers (articles &optional group server fetch-old)
   (save-excursion
     (set-buffer nntp-server-buffer)
     (erase-buffer)
     (let ((delim-string (concat "^" rmail-unix-mail-delimiter))
          article art-string start stop)
-      (when nnfolder-current-buffer
-       (nnfolder-possibly-change-group newsgroup server)
-       (set-buffer nnfolder-current-buffer)
-       (goto-char (point-min))
-       (if (stringp (car sequence))
-           'headers
-         (while sequence
-           (setq article (car sequence))
-           (setq art-string (nnfolder-article-string article))
-           (set-buffer nnfolder-current-buffer)
-           (if (or (search-forward art-string nil t)
-                   ;; Don't search the whole file twice!  Also, articles
-                   ;; probably have some locality by number, so searching
-                   ;; backwards will be faster.  Especially if we're at the
-                   ;; beginning of the buffer :-). -SLB
-                   (search-backward art-string nil t))
-               (progn
-                 (setq start (or (re-search-backward delim-string nil t)
-                                 (point)))
-                 (search-forward "\n\n" nil t)
-                 (setq stop (1- (point)))
-                 (set-buffer nntp-server-buffer)
-                 (insert (format "221 %d Article retrieved.\n" article))
-                 (insert-buffer-substring nnfolder-current-buffer start stop)
-                 (goto-char (point-max))
-                 (insert ".\n")))
-           (setq sequence (cdr sequence)))
-
-         (set-buffer nntp-server-buffer)
-         (nnheader-fold-continuation-lines)
-         'headers)))))
+      (nnfolder-possibly-change-group group server)
+      (set-buffer nnfolder-current-buffer)
+      (goto-char (point-min))
+      (if (stringp (car articles))
+         'headers
+       (while articles
+         (setq article (car articles))
+         (setq art-string (nnfolder-article-string article))
+         (set-buffer nnfolder-current-buffer)
+         (if (or (search-forward art-string nil t)
+                 ;; Don't search the whole file twice!  Also, articles
+                 ;; probably have some locality by number, so searching
+                 ;; backwards will be faster.  Especially if we're at the
+                 ;; beginning of the buffer :-). -SLB
+                 (search-backward art-string nil t))
+             (progn
+               (setq start (or (re-search-backward delim-string nil t)
+                               (point)))
+               (search-forward "\n\n" nil t)
+               (setq stop (1- (point)))
+               (set-buffer nntp-server-buffer)
+               (insert (format "221 %d Article retrieved.\n" article))
+               (insert-buffer-substring nnfolder-current-buffer start stop)
+               (goto-char (point-max))
+               (insert ".\n")))
+         (setq articles (cdr articles)))
+
+       (set-buffer nntp-server-buffer)
+       (nnheader-fold-continuation-lines)
+       'headers))))
 
 (defun nnfolder-open-server (server &optional defs)
   (nnheader-change-server 'nnfolder server defs)
@@ -185,8 +184,8 @@ it.")
   (nnfolder-possibly-change-group nil server)
   nnfolder-status-string)
 
-(defun nnfolder-request-article (article &optional newsgroup server buffer)
-  (nnfolder-possibly-change-group newsgroup server)
+(defun nnfolder-request-article (article &optional group server buffer)
+  (nnfolder-possibly-change-group group server)
   (save-excursion
     (set-buffer nnfolder-current-buffer)
     (goto-char (point-min))
@@ -230,17 +229,15 @@ it.")
            t)
        (let* ((active (assoc group nnfolder-group-alist))
               (group (car active))
-              (range (cadr active))
-              (minactive (car range))
-              (maxactive (cdr range)))
+              (range (cadr active)))
          (cond 
           ((null active)
            (nnheader-report 'nnfolder "No such group: %s" group))
           (t
            (nnheader-report 'nnfolder "Selected group %s" group)
            (nnheader-insert "211 %d %d %d %s\n" 
-                            (1+ (- maxactive minactive))
-                            minactive maxactive group))))))))
+                            (1+ (- (cdr range) (car range)))
+                            (car range) (cdr range) group))))))))
 
 (defun nnfolder-request-scan (&optional group server)
   (nnfolder-possibly-change-group group server)
@@ -270,16 +267,17 @@ it.")
   (when (or (assoc group nnfolder-buffer-alist)
            (equal group nnfolder-current-group))
     (nnfolder-possibly-change-group group server)
-    (save-excursion
-      (set-buffer nnfolder-current-buffer)
-      ;; If the buffer was modified, write the file out now.
-      (and (buffer-modified-p) (save-buffer))
-      ;; If we're shutting the server down, we need to kill the
-      ;; buffer and remove it from the open buffer list.  Or, of
-      ;; course, if we're trying to minimize our space impact.
-      (kill-buffer (current-buffer))
-      (setq nnfolder-buffer-alist (delq (assoc group nnfolder-buffer-alist)
-                                       nnfolder-buffer-alist))))
+    (when nnfolder-current-buffer
+      (save-excursion
+       (set-buffer nnfolder-current-buffer)
+       ;; If the buffer was modified, write the file out now.
+       (and (buffer-modified-p) (save-buffer))
+       ;; If we're shutting the server down, we need to kill the
+       ;; buffer and remove it from the open buffer list.  Or, of
+       ;; course, if we're trying to minimize our space impact.
+       (kill-buffer (current-buffer))
+       (setq nnfolder-buffer-alist (delq (assoc group nnfolder-buffer-alist)
+                                         nnfolder-buffer-alist)))))
   (setq nnfolder-current-group nil
        nnfolder-current-buffer nil)
   t)
@@ -381,7 +379,8 @@ it.")
            (save-buffer))))
     result))
 
-(defun nnfolder-request-accept-article (group &optional last)
+(defun nnfolder-request-accept-article (group &optional server last)
+  (nnfolder-possibly-change-group group server)
   (and (stringp group) (nnfolder-possibly-change-group group))
   (let ((buf (current-buffer))
        result)
@@ -425,8 +424,7 @@ it.")
       ()                               ; Don't delete the articles.
     ;; Delete the file that holds the group.
     (condition-case nil
-       (delete-file (directory-file-name 
-                     (nnmail-group-pathname group nnfolder-directory)))
+       (delete-file (nnfolder-group-pathname group))
       (error nil)))
   ;; Remove the group from all structures.
   (setq nnfolder-group-alist 
@@ -446,8 +444,7 @@ it.")
             (progn
               (rename-file 
                buffer-file-name
-               (directory-file-name
-                (nnmail-group-pathname new-name nnfolder-directory)))
+               (nnfolder-group-pathname new-name))
               t)
           (error nil))
         ;; That went ok, so we change the internal structures.
@@ -498,8 +495,7 @@ it.")
     (nnfolder-possibly-activate-groups nil)
     (or (assoc group nnfolder-group-alist)
        (not (file-exists-p
-             (directory-file-name
-              (nnmail-group-pathname group nnfolder-directory))))
+             (nnfolder-group-pathname group)))
        (progn
          (setq nnfolder-group-alist 
                (cons (list group (cons 1 0)) nnfolder-group-alist))
@@ -536,8 +532,7 @@ it.")
        (if inf
            ()
          (save-excursion
-           (setq file (directory-file-name
-                       (nnmail-group-pathname group nnfolder-directory)))
+           (setq file (nnfolder-group-pathname group))
            (if (file-directory-p (file-truename file))
                ()
              (unless (file-exists-p file)
@@ -733,6 +728,16 @@ it.")
        (nnfolder-close-group file))
       (message ""))))
 
+(defun nnfolder-group-pathname (group)
+  "Make pathname for GROUP."
+  (let ((dir (file-name-as-directory (expand-file-name nnfolder-directory))))
+    ;; If this file exists, we use it directly.
+    (if (or nnmail-use-long-file-names 
+           (file-exists-p (concat dir group)))
+       (concat dir group)
+      ;; If not, we translate dots into slashes.
+      (concat dir (nnheader-replace-chars-in-string group ?. ?/)))))
+
 (provide 'nnfolder)
 
 ;;; nnfolder.el ends here
index a60a9ca..21d4446 100644 (file)
@@ -86,7 +86,7 @@
     (let ((number (length sequence))
          (count 0)
          article art-string start stop)
-      (nnmbox-possibly-change-newsgroup newsgroup)
+      (nnmbox-possibly-change-newsgroup newsgroup server)
       (while sequence
        (setq article (car sequence))
        (setq art-string (nnmbox-article-string article))
   nnmbox-status-string)
 
 (defun nnmbox-request-article (article &optional newsgroup server buffer)
-  (nnmbox-possibly-change-newsgroup newsgroup)
+  (nnmbox-possibly-change-newsgroup newsgroup server)
   (save-excursion
     (set-buffer nnmbox-mbox-buffer)
     (goto-char (point-min))
     (cond 
      ((null active)
       (nnheader-report 'nnmbox "No such group: %s" group))
-     ((null (nnmbox-possibly-change-newsgroup group))
+     ((null (nnmbox-possibly-change-newsgroup group server))
       (nnheader-report 'nnmbox "No such group: %s" group))
      (dont-check
       (nnheader-report 'nnmbox "Selected group %s" group)
 
 (defun nnmbox-request-expire-articles 
   (articles newsgroup &optional server force)
-  (nnmbox-possibly-change-newsgroup newsgroup)
+  (nnmbox-possibly-change-newsgroup newsgroup server)
   (let* ((is-old t)
         rest)
     (nnmail-activate 'nnmbox)
 
 (defun nnmbox-request-move-article
   (article group server accept-form &optional last)
-  (nnmbox-possibly-change-newsgroup group)
+  (nnmbox-possibly-change-newsgroup group server)
   (let ((buf (get-buffer-create " *nnmbox move*"))
        result)
     (and 
        (and last (save-buffer))))
     result))
 
-(defun nnmbox-request-accept-article (group &optional last)
+(defun nnmbox-request-accept-article (group &optional server last)
+  (nnmbox-possibly-change-newsgroup group server)
   (let ((buf (current-buffer))
        result)
     (goto-char (point-min))
       t)))
 
 (defun nnmbox-request-delete-group (group &optional force server)
-  (nnmbox-possibly-change-newsgroup group)
+  (nnmbox-possibly-change-newsgroup group server)
   ;; Delete all articles in GROUP.
   (if (not force)
       ()                               ; Don't delete the articles.
   t)
 
 (defun nnmbox-request-rename-group (group new-name &optional server)
-  (nnmbox-possibly-change-newsgroup group)
+  (nnmbox-possibly-change-newsgroup group server)
   (save-excursion
     (set-buffer nnmbox-mbox-buffer)
     (goto-char (point-min))
       (if (or force (not (re-search-forward "^X-Gnus-Newsgroup: " nil t)))
          (delete-region (point-min) (point-max))))))
 
-(defun nnmbox-possibly-change-newsgroup (newsgroup)
+(defun nnmbox-possibly-change-newsgroup (newsgroup &optional server)
+  (when (and server 
+            (not (nnmbox-server-opened server)))
+    (nnmbox-open-server server))
   (if (or (not nnmbox-mbox-buffer)
          (not (buffer-name nnmbox-mbox-buffer)))
       (save-excursion
index c5e354b..c3617ec 100644 (file)
@@ -86,7 +86,7 @@
                       (> number nnmail-large-newsgroup)))
           (count 0)
           beg article)
-      (nnmh-possibly-change-directory newsgroup)
+      (nnmh-possibly-change-directory newsgroup server)
       ;; We don't support fetching by Message-ID.
       (if (stringp (car articles))
          'headers
   nnmh-status-string)
 
 (defun nnmh-request-article (id &optional newsgroup server buffer)
-  (nnmh-possibly-change-directory newsgroup)
+  (nnmh-possibly-change-directory newsgroup server)
   (let ((file (if (stringp id)
                  nil
                (concat nnmh-current-directory (int-to-string id))))
   (nnmh-request-list server))
 
 (defun nnmh-request-expire-articles (articles newsgroup &optional server force)
-  (nnmh-possibly-change-directory newsgroup)
+  (nnmh-possibly-change-directory newsgroup server)
   (let* ((active-articles 
          (mapcar
           (function
        (file-error nil)))
     result))
 
-(defun nnmh-request-accept-article (group &optional last noinsert)
+(defun nnmh-request-accept-article (group &optional server last noinsert)
+  (nnmh-possibly-change-directory group server)
   (if (stringp group)
       (and 
        (nnmail-activate 'nnmh)
        (setq nnmh-group-alist (cons (list group (setq active (cons 1 0)))
                                     nnmh-group-alist))
        (nnmh-possibly-create-directory group)
-       (nnmh-possibly-change-directory group)
+       (nnmh-possibly-change-directory group server)
        (let ((articles (mapcar
                         (lambda (file)
                           (string-to-int file))
   t)
 
 (defun nnmh-request-delete-group (group &optional force server)
-  (nnmh-possibly-change-directory group)
+  (nnmh-possibly-change-directory group server)
   ;; Delete all articles in GROUP.
   (if (not force)
       ()                               ; Don't delete the articles.
   t)
 
 (defun nnmh-request-rename-group (group new-name &optional server)
-  (nnmh-possibly-change-directory group)
+  (nnmh-possibly-change-directory group server)
   ;; Rename directory.
   (and (file-writable-p nnmh-current-directory)
        (condition-case ()
 \f
 ;;; Internal functions.
 
-(defun nnmh-possibly-change-directory (newsgroup)
+(defun nnmh-possibly-change-directory (newsgroup &optional server)
+  (when (and server 
+            (not (nnmh-server-opened server)))
+    (nnmh-open-server server))
   (if newsgroup
       (let ((pathname (nnmail-group-pathname newsgroup nnmh-directory)))
        (if (file-directory-p pathname)
index 51ebb7c..5bfba0d 100644 (file)
@@ -351,7 +351,8 @@ all. This may very well take some time.")
        (and last (nnml-save-nov))))
     result))
 
-(defun nnml-request-accept-article (group &optional last)
+(defun nnml-request-accept-article (group &optional server last)
+  (nnml-possibly-change-directory group server)
   (let (result)
     (if (stringp group)
        (and