Mercurial > emacs
view lisp/gnus/nndraft.el @ 82975:590114f9753d gnus-5_10-pre-merge-josefsson
2004-08-31 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote.
* gnus-sum.el (gnus-newsgroup-variables): Doc fix (tiny change).
From Helmut Waitzmann <Helmut.Waitzmann@web.de>.
* gnus-agent.el (gnus-agent-regenerate-group): Activate the group
when the group's active is not available.
* gnus-art.el (article-hide-headers): Refer to the values for
gnus-ignored-headers and gnus-visible-headers in the summary
buffer since a user may have set them as group parameters.
(gnus-article-next-page): Fix the way to find a real end-of-buffer
(tiny change). From YAGI Tatsuya <ynyaaa@ybb.ne.jp>.
(gnus-article-read-summary-keys): Restore new window-start and
hscroll to summary window.
(gnus-prev-page-map): Remove duplicated one.
* gnus-cite.el (gnus-cite-ignore-quoted-from): New user option.
(gnus-cite-parse): Ignore quoted envelope From_. Suggested by
Karl Chen <quarl@nospam.quarl.org> and Reiner Steib
<Reiner.Steib@gmx.de>.
* gnus-cus.el (gnus-agent-cat-prepare-category-field): Replace
pp-to-string with gnus-pp-to-string.
* gnus-eform.el (gnus-edit-form): Replace pp with gnus-pp.
* gnus-group.el (gnus-group-make-kiboze-group): Replace pp with
gnus-pp.
* gnus-msg.el (gnus-setup-message): Ignore an article copy while
parsing gnus-posting-styles when the message is not for replying.
(gnus-summary-resend-message-edit): Call mime-to-mml. Suggested
by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>.
(gnus-debug): Replace pp with gnus-pp.
* gnus-score.el (gnus-score-save): Replace pp with gnus-pp.
* gnus-spec.el (gnus-update-format): Replace pp-to-string with
gnus-pp-to-string.
* gnus-sum.el (gnus-read-header): Don't remove a header for the
parent article of a sparse article in the thread hashtb. From
Stefan Wiens <s.wi@gmx.net>.
* gnus-util.el (gnus-bind-print-variables): New macro.
(gnus-prin1): Use it.
(gnus-prin1-to-string): Use it.
(gnus-pp): New function.
(gnus-pp-to-string): New function.
* gnus.el: Don't make unnecessary *Group* buffer when loading.
* mail-source.el (mail-source-touch-pop): Doc fix.
* message.el (message-mode): Don't modify paragraph-separate there.
(message-setup-fill-variables): Add mml tags to paragraph-start
and paragraph-separate. Suggested by Andrew Korty <ajk@iu.edu>.
(message-smtpmail-send-it): Doc fix.
(message-exchange-point-and-mark): Don't activate region if it was
inactive. Suggested by Hiroshi Fujishima
<pooh@nature.tsukuba.ac.jp> and Jesper Harder <harder@ifa.au.dk>.
* mm-decode.el (mm-save-part): Bind enable-multibyte-characters to
t while entering a file name using the mm-with-multibyte macro.
Suggested by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>.
* mm-encode.el (mm-content-transfer-encoding-defaults): Use
qp-or-base64 for the application/* types.
(mm-safer-encoding): Consider 7bit is safe.
* mm-util.el (mm-with-multibyte-buffer): New macro.
(mm-with-multibyte): New macro.
* mm-view.el (mm-inline-render-with-function): Use multibyte
buffer; decode html source by charset.
* nndoc.el (nndoc-type-alist): Improve regexp for article-begin,
add generate-head-function and generate-article-function to the
rfc822-forward entry.
(nndoc-forward-type-p): Recognize envelope From_.
(nndoc-rfc822-forward-generate-article): New function.
(nndoc-rfc822-forward-generate-head): New function.
From David Hedbor <dhedbor@real.com>.
* nnmail.el (nnmail-split-lowercase-expanded): New user option.
(nnmail-expand-newtext): Lowercase expanded entries if
nnmail-split-lowercase-expanded is non-nil.
* score-mode.el (gnus-score-pretty-print): Replace pp with gnus-pp.
* webmail.el (webmail-debug): Replace pp with gnus-pp.
* gnus-art.el (gnus-article-wash-html-with-w3m): Bind
w3m-safe-url-regexp as the value for mm-w3m-safe-url-regexp; use
w3m-minor-mode-map instead of mm-w3m-local-map-property.
(gnus-mime-save-part-and-strip): Use mm-complicated-handles
instead of mm-multiple-handles.
(gnus-mime-delete-part): Ditto.
* mm-decode.el (mm-multiple-handles): Recognize a string as a mime
handle, as well as a list.
(mm-complicated-handles): Former definition of mm-multiple-handles.
* mm-view.el (mm-w3m-mode-map): Remove.
(mm-w3m-local-map-property): Remove.
(mm-w3m-cid-retrieve-1): Call itself recursively. Suggested by
ARISAWA Akihiro <ari@mbf.sphere.ne.jp>.
(mm-w3m-cid-retrieve): Simplify.
(mm-inline-text-html-render-with-w3m): Decode html source by
charset; check META tags only when charsets are not specified in
headers; specify charset to w3m-region; use w3m-minor-mode-map
instead of mm-w3m-local-map-property.
author | Reiner Steib <Reiner.Steib@gmx.de> |
---|---|
date | Tue, 31 Aug 2004 14:47:59 +0000 |
parents | 0fde48feb604 |
children | 88db2adda4b7 cce1c0ee76ee |
line wrap: on
line source
;;; nndraft.el --- draft article access for Gnus ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003 ;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org> ;; Keywords: news ;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; 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, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;;; Code: (require 'nnheader) (require 'nnmail) (require 'gnus-start) (require 'nnmh) (require 'nnoo) (require 'mm-util) (eval-when-compile (require 'cl)) (nnoo-declare nndraft nnmh) (defvoo nndraft-directory (nnheader-concat gnus-directory "drafts/") "Where nndraft will store its files." nnmh-directory) (defvoo nndraft-current-group "" nil nnmh-current-group) (defvoo nndraft-get-new-mail nil nil nnmh-get-new-mail) (defvoo nndraft-current-directory nil nil nnmh-current-directory) (defconst nndraft-version "nndraft 1.0") (defvoo nndraft-status-string "" nil nnmh-status-string) ;;; Interface functions. (nnoo-define-basics nndraft) (deffoo nndraft-open-server (server &optional defs) (nnoo-change-server 'nndraft server defs) (cond ((not (file-exists-p nndraft-directory)) (nndraft-close-server) (nnheader-report 'nndraft "No such file or directory: %s" nndraft-directory)) ((not (file-directory-p (file-truename nndraft-directory))) (nndraft-close-server) (nnheader-report 'nndraft "Not a directory: %s" nndraft-directory)) (t (nnheader-report 'nndraft "Opened server %s using directory %s" server nndraft-directory) t))) (deffoo nndraft-retrieve-headers (articles &optional group server fetch-old) (nndraft-possibly-change-group group) (save-excursion (set-buffer nntp-server-buffer) (erase-buffer) (let* (article) ;; We don't support fetching by Message-ID. (if (stringp (car articles)) 'headers (while articles (narrow-to-region (point) (point)) (when (nndraft-request-article (setq article (pop articles)) group server (current-buffer)) (goto-char (point-min)) (if (search-forward "\n\n" nil t) (forward-line -1) (goto-char (point-max))) (delete-region (point) (point-max)) (goto-char (point-min)) (insert (format "221 %d Article retrieved.\n" article)) (widen) (goto-char (point-max)) (insert ".\n"))) (nnheader-fold-continuation-lines) 'headers)))) (deffoo nndraft-request-article (id &optional group server buffer) (nndraft-possibly-change-group group) (when (numberp id) ;; We get the newest file of the auto-saved file and the ;; "real" file. (let* ((file (nndraft-article-filename id)) (auto (nndraft-auto-save-file-name file)) (newest (if (file-newer-than-file-p file auto) file auto)) (nntp-server-buffer (or buffer nntp-server-buffer))) (when (and (file-exists-p newest) (let ((nnmail-file-coding-system (if (file-newer-than-file-p file auto) (if (member group '("drafts" "delayed")) message-draft-coding-system mm-text-coding-system) mm-auto-save-coding-system))) (nnmail-find-file newest))) (save-excursion (set-buffer nntp-server-buffer) (goto-char (point-min)) ;; If there's a mail header separator in this file, ;; we remove it. (when (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$") nil t) (replace-match "" t t))) t)))) (deffoo nndraft-request-restore-buffer (article &optional group server) "Request a new buffer that is restored to the state of ARTICLE." (nndraft-possibly-change-group group) (when (nndraft-request-article article group server (current-buffer)) (message-remove-header "xref") (message-remove-header "lines") ;; Articles in nndraft:queue are considered as sent messages. The ;; Date field should be the time when they are sent. ;;(message-remove-header "date") t)) (deffoo nndraft-request-update-info (group info &optional server) (nndraft-possibly-change-group group) (gnus-info-set-read info (gnus-update-read-articles (gnus-group-prefixed-name group '(nndraft "")) (nndraft-articles) t)) (let ((marks (nth 3 info))) (when marks ;; Nix out all marks except the `unsend'-able article marks. (setcar (nthcdr 3 info) (if (assq 'unsend marks) (list (assq 'unsend marks)) nil)))) t) (defun nndraft-generate-headers () (save-excursion (message-generate-headers (message-headers-to-generate message-required-headers message-draft-headers nil)))) (deffoo nndraft-request-associate-buffer (group) "Associate the current buffer with some article in the draft group." (nndraft-open-server "") (nndraft-request-group group) (nndraft-possibly-change-group group) (let ((gnus-verbose-backends nil) (buf (current-buffer)) article file) (with-temp-buffer (insert-buffer-substring buf) (setq article (nndraft-request-accept-article group (nnoo-current-server 'nndraft) t 'noinsert) file (nndraft-article-filename article))) (setq buffer-file-name (expand-file-name file) buffer-auto-save-file-name (make-auto-save-file-name)) (clear-visited-file-modtime) (make-local-variable 'write-contents-hooks) (push 'nndraft-generate-headers write-contents-hooks) article)) (deffoo nndraft-request-group (group &optional server dont-check) (nndraft-possibly-change-group group) (unless dont-check (let* ((pathname (nnmail-group-pathname group nndraft-directory)) (file-name-coding-system nnmail-pathname-coding-system) dir file) (nnheader-re-read-dir pathname) (setq dir (mapcar (lambda (name) (string-to-int (substring name 1))) (ignore-errors (directory-files pathname nil "^#[0-9]+#$" t)))) (dolist (n dir) (unless (file-exists-p (setq file (expand-file-name (int-to-string n) pathname))) (rename-file (nndraft-auto-save-file-name file) file))))) (nnoo-parent-function 'nndraft 'nnmh-request-group (list group server dont-check))) (deffoo nndraft-request-move-article (article group server accept-form &optional last) (nndraft-possibly-change-group group) (let ((buf (get-buffer-create " *nndraft move*")) result) (and (nndraft-request-article article group server) (save-excursion (set-buffer buf) (erase-buffer) (insert-buffer-substring nntp-server-buffer) (setq result (eval accept-form)) (kill-buffer (current-buffer)) result) (null (nndraft-request-expire-articles (list article) group server 'force)) result))) (deffoo nndraft-request-expire-articles (articles group &optional server force) (nndraft-possibly-change-group group) (let* ((nnmh-allow-delete-final t) (res (nnoo-parent-function 'nndraft 'nnmh-request-expire-articles (list articles group server force))) article) ;; Delete all the "state" files of articles that have been expired. (while articles (unless (memq (setq article (pop articles)) res) (let ((auto (nndraft-auto-save-file-name (nndraft-article-filename article)))) (when (file-exists-p auto) (funcall nnmail-delete-file-function auto))) (dolist (backup (let ((kept-new-versions 1) (kept-old-versions 0)) (find-backup-file-name (nndraft-article-filename article)))) (when (file-exists-p backup) (funcall nnmail-delete-file-function backup))))) res)) (deffoo nndraft-request-accept-article (group &optional server last noinsert) (nndraft-possibly-change-group group) (let ((gnus-verbose-backends nil)) (nnoo-parent-function 'nndraft 'nnmh-request-accept-article (list group server last noinsert)))) (deffoo nndraft-request-replace-article (article group buffer) (nndraft-possibly-change-group group) (let ((nnmail-file-coding-system (if (member group '("drafts" "delayed")) message-draft-coding-system mm-text-coding-system))) (nnoo-parent-function 'nndraft 'nnmh-request-replace-article (list article group buffer)))) (deffoo nndraft-request-create-group (group &optional server args) (nndraft-possibly-change-group group) (if (file-exists-p nndraft-current-directory) (if (file-directory-p nndraft-current-directory) t nil) (condition-case () (progn (gnus-make-directory nndraft-current-directory) t) (file-error nil)))) ;;; Low-Level Interface (defun nndraft-possibly-change-group (group) (when (and group (not (equal group nndraft-current-group))) (nndraft-open-server "") (setq nndraft-current-group group) (setq nndraft-current-directory (nnheader-concat nndraft-directory group)))) (defun nndraft-article-filename (article &rest args) (apply 'concat (file-name-as-directory nndraft-current-directory) (int-to-string article) args)) (defun nndraft-auto-save-file-name (file) (save-excursion (prog1 (progn (set-buffer (get-buffer-create " *draft tmp*")) (setq buffer-file-name file) (make-auto-save-file-name)) (kill-buffer (current-buffer))))) (defun nndraft-articles () "Return the list of messages in the group." (gnus-make-directory nndraft-current-directory) (sort (mapcar 'string-to-int (directory-files nndraft-current-directory nil "\\`[0-9]+\\'" t)) '<)) (nnoo-import nndraft (nnmh nnmh-retrieve-headers nnmh-request-group nnmh-close-group nnmh-request-list nnmh-request-newsgroups)) (provide 'nndraft) ;;; arch-tag: 3ce26ca0-41cb-48b1-8703-4dad35e188aa ;;; nndraft.el ends here