comparison lisp/gnus/nndraft.el @ 56927:55fd4f77387a after-merge-gnus-5_10

Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-523 Merge from emacs--gnus--5.10, gnus--rel--5.10 Patches applied: * miles@gnu.org--gnu-2004/emacs--gnus--5.10--base-0 tag of miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-464 * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-1 Import from CVS branch gnus-5_10-branch * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-2 Merge from lorentey@elte.hu--2004/emacs--multi-tty--0, emacs--cvs-trunk--0 * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-3 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-4 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-18 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-19 Remove autoconf-generated files from archive * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-20 Update from CVS
author Miles Bader <miles@gnu.org>
date Sat, 04 Sep 2004 13:13:48 +0000
parents 695cf19ef79e
children 88db2adda4b7 cce1c0ee76ee
comparison
equal deleted inserted replaced
56926:f8e248e9a717 56927:55fd4f77387a
1 ;;; nndraft.el --- draft article access for Gnus 1 ;;; nndraft.el --- draft article access for Gnus
2 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 2
3 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003
3 ;; Free Software Foundation, Inc. 4 ;; Free Software Foundation, Inc.
4 5
5 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org> 6 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
6 ;; Keywords: news 7 ;; Keywords: news
7 8
30 (require 'nnmail) 31 (require 'nnmail)
31 (require 'gnus-start) 32 (require 'gnus-start)
32 (require 'nnmh) 33 (require 'nnmh)
33 (require 'nnoo) 34 (require 'nnoo)
34 (require 'mm-util) 35 (require 'mm-util)
35 (eval-when-compile 36 (eval-when-compile (require 'cl))
36 (require 'cl)
37 ;; This is just to shut up the byte-compiler.
38 (fset 'nndraft-request-group 'ignore))
39 37
40 (nnoo-declare nndraft 38 (nnoo-declare nndraft
41 nnmh) 39 nnmh)
42 40
43 (defvoo nndraft-directory (nnheader-concat gnus-directory "drafts/") 41 (defvoo nndraft-directory (nnheader-concat gnus-directory "drafts/")
111 (newest (if (file-newer-than-file-p file auto) file auto)) 109 (newest (if (file-newer-than-file-p file auto) file auto))
112 (nntp-server-buffer (or buffer nntp-server-buffer))) 110 (nntp-server-buffer (or buffer nntp-server-buffer)))
113 (when (and (file-exists-p newest) 111 (when (and (file-exists-p newest)
114 (let ((nnmail-file-coding-system 112 (let ((nnmail-file-coding-system
115 (if (file-newer-than-file-p file auto) 113 (if (file-newer-than-file-p file auto)
116 (if (equal group "drafts") 114 (if (member group '("drafts" "delayed"))
117 message-draft-coding-system 115 message-draft-coding-system
118 mm-text-coding-system) 116 mm-text-coding-system)
119 mm-auto-save-coding-system))) 117 mm-auto-save-coding-system)))
120 (nnmail-find-file newest))) 118 (nnmail-find-file newest)))
121 (save-excursion 119 (save-excursion
122 (set-buffer nntp-server-buffer) 120 (set-buffer nntp-server-buffer)
123 (goto-char (point-min)) 121 (goto-char (point-min))
124 ;; If there's a mail header separator in this file, 122 ;; If there's a mail header separator in this file,
125 ;; we remove it. 123 ;; we remove it.
126 (when (re-search-forward 124 (when (re-search-forward
127 (concat "^" mail-header-separator "$") nil t) 125 (concat "^" (regexp-quote mail-header-separator) "$") nil t)
128 (replace-match "" t t))) 126 (replace-match "" t t)))
129 t)))) 127 t))))
130 128
131 (deffoo nndraft-request-restore-buffer (article &optional group server) 129 (deffoo nndraft-request-restore-buffer (article &optional group server)
132 "Request a new buffer that is restored to the state of ARTICLE." 130 "Request a new buffer that is restored to the state of ARTICLE."
133 (nndraft-possibly-change-group group) 131 (nndraft-possibly-change-group group)
134 (when (nndraft-request-article article group server (current-buffer)) 132 (when (nndraft-request-article article group server (current-buffer))
135 (message-remove-header "xref") 133 (message-remove-header "xref")
136 (message-remove-header "lines") 134 (message-remove-header "lines")
135 ;; Articles in nndraft:queue are considered as sent messages. The
136 ;; Date field should be the time when they are sent.
137 ;;(message-remove-header "date")
137 t)) 138 t))
138 139
139 (deffoo nndraft-request-update-info (group info &optional server) 140 (deffoo nndraft-request-update-info (group info &optional server)
140 (nndraft-possibly-change-group group) 141 (nndraft-possibly-change-group group)
141 (gnus-info-set-read 142 (gnus-info-set-read
149 (if (assq 'unsend marks) 150 (if (assq 'unsend marks)
150 (list (assq 'unsend marks)) 151 (list (assq 'unsend marks))
151 nil)))) 152 nil))))
152 t) 153 t)
153 154
155 (defun nndraft-generate-headers ()
156 (save-excursion
157 (message-generate-headers
158 (message-headers-to-generate
159 message-required-headers message-draft-headers nil))))
160
154 (deffoo nndraft-request-associate-buffer (group) 161 (deffoo nndraft-request-associate-buffer (group)
155 "Associate the current buffer with some article in the draft group." 162 "Associate the current buffer with some article in the draft group."
156 (nndraft-open-server "") 163 (nndraft-open-server "")
157 (nndraft-request-group group) 164 (nndraft-request-group group)
158 (nndraft-possibly-change-group group) 165 (nndraft-possibly-change-group group)
165 group (nnoo-current-server 'nndraft) t 'noinsert) 172 group (nnoo-current-server 'nndraft) t 'noinsert)
166 file (nndraft-article-filename article))) 173 file (nndraft-article-filename article)))
167 (setq buffer-file-name (expand-file-name file) 174 (setq buffer-file-name (expand-file-name file)
168 buffer-auto-save-file-name (make-auto-save-file-name)) 175 buffer-auto-save-file-name (make-auto-save-file-name))
169 (clear-visited-file-modtime) 176 (clear-visited-file-modtime)
177 (make-local-variable 'write-contents-hooks)
178 (push 'nndraft-generate-headers write-contents-hooks)
170 article)) 179 article))
180
181 (deffoo nndraft-request-group (group &optional server dont-check)
182 (nndraft-possibly-change-group group)
183 (unless dont-check
184 (let* ((pathname (nnmail-group-pathname group nndraft-directory))
185 (file-name-coding-system nnmail-pathname-coding-system)
186 dir file)
187 (nnheader-re-read-dir pathname)
188 (setq dir (mapcar (lambda (name) (string-to-int (substring name 1)))
189 (ignore-errors (directory-files
190 pathname nil "^#[0-9]+#$" t))))
191 (dolist (n dir)
192 (unless (file-exists-p
193 (setq file (expand-file-name (int-to-string n) pathname)))
194 (rename-file (nndraft-auto-save-file-name file) file)))))
195 (nnoo-parent-function 'nndraft
196 'nnmh-request-group
197 (list group server dont-check)))
198
199 (deffoo nndraft-request-move-article (article group server
200 accept-form &optional last)
201 (nndraft-possibly-change-group group)
202 (let ((buf (get-buffer-create " *nndraft move*"))
203 result)
204 (and
205 (nndraft-request-article article group server)
206 (save-excursion
207 (set-buffer buf)
208 (erase-buffer)
209 (insert-buffer-substring nntp-server-buffer)
210 (setq result (eval accept-form))
211 (kill-buffer (current-buffer))
212 result)
213 (null (nndraft-request-expire-articles (list article) group server 'force))
214 result)))
171 215
172 (deffoo nndraft-request-expire-articles (articles group &optional server force) 216 (deffoo nndraft-request-expire-articles (articles group &optional server force)
173 (nndraft-possibly-change-group group) 217 (nndraft-possibly-change-group group)
174 (let* ((nnmh-allow-delete-final t) 218 (let* ((nnmh-allow-delete-final t)
175 (res (nnoo-parent-function 'nndraft 219 (res (nnoo-parent-function 'nndraft
199 (list group server last noinsert)))) 243 (list group server last noinsert))))
200 244
201 (deffoo nndraft-request-replace-article (article group buffer) 245 (deffoo nndraft-request-replace-article (article group buffer)
202 (nndraft-possibly-change-group group) 246 (nndraft-possibly-change-group group)
203 (let ((nnmail-file-coding-system 247 (let ((nnmail-file-coding-system
204 (if (equal group "drafts") 248 (if (member group '("drafts" "delayed"))
205 mm-auto-save-coding-system 249 message-draft-coding-system
206 mm-text-coding-system))) 250 mm-text-coding-system)))
207 (nnoo-parent-function 'nndraft 'nnmh-request-replace-article 251 (nnoo-parent-function 'nndraft 'nnmh-request-replace-article
208 (list article group buffer)))) 252 (list article group buffer))))
209 253
210 (deffoo nndraft-request-create-group (group &optional server args) 254 (deffoo nndraft-request-create-group (group &optional server args)
257 (nnmh 301 (nnmh
258 nnmh-retrieve-headers 302 nnmh-retrieve-headers
259 nnmh-request-group 303 nnmh-request-group
260 nnmh-close-group 304 nnmh-close-group
261 nnmh-request-list 305 nnmh-request-list
262 nnmh-request-newsgroups 306 nnmh-request-newsgroups))
263 nnmh-request-move-article))
264 307
265 (provide 'nndraft) 308 (provide 'nndraft)
266 309
267 ;;; arch-tag: 3ce26ca0-41cb-48b1-8703-4dad35e188aa 310 ;;; arch-tag: 3ce26ca0-41cb-48b1-8703-4dad35e188aa
268 ;;; nndraft.el ends here 311 ;;; nndraft.el ends here