+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.
(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) "$"))
"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)
(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))
(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
(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
(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."
(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)
(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)))
(require 'mail-utils)
(require 'timezone)
(require 'nnheader)
+(require 'message)
(eval-when-compile (require 'cl))
(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)
"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
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)
(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))))
(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
(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
(if (gnus-request-article article group (current-buffer))
(progn
(and gnus-keep-backlog
+ (numberp article)
(gnus-backlog-enter-article
group article (current-buffer)))
'article))))
;; 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"))
(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)
(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)))))
;; 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
;;;###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
;;;###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
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)
. 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.")
(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)
(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
(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)
;;; 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)))))
(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)))
(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)
(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.
;;; 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)
(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))
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)
(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)
(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)
() ; 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
(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.
(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))
(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)
(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
(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
(> 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)
(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