A new branch wl-2_4 is created.
[elisp/wanderlust.git] / wl / wl-summary.el
index 5f465fe..729cb7f 100644 (file)
@@ -1,14 +1,14 @@
 ;;; wl-summary.el -- Summary mode for Wanderlust.
 
-;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
-;;                          Masahiro MURATA  <muse@ba2.so-net.ne.jp>
-;; Copyright 1999,2000      TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
-;; Copyright 1999,2000      Kenichi OKADA  <okada@opaopa.org>
+;; Copyright (C) 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+;; Copyright (C) 1998,1999,2000 Masahiro MURATA <muse@ba2.so-net.ne.jp>
+;; Copyright (C) 1999,2000      TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+;; Copyright (C) 1999,2000      Kenichi OKADA <okada@opaopa.org>
 
 ;; Author: Yuuichi Teranishi <teranisi@gohome.org>
-;;     Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+;;     Masahiro MURATA <muse@ba2.so-net.ne.jp>
 ;;     TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
-;;     Kenichi OKADA  <okada@opaopa.org>
+;;     Kenichi OKADA <okada@opaopa.org>
 ;; Keywords: mail, net news
 
 ;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
   (define-key wl-summary-mode-map "P"    'wl-summary-up)
 ;;;(define-key wl-summary-mode-map "w"    'wl-draft)
   (define-key wl-summary-mode-map "w"    'wl-summary-write)
-  (define-key wl-summary-mode-map "W"    'wl-summary-write-current-newsgroup)
+  (define-key wl-summary-mode-map "W"    'wl-summary-write-current-folder)
 ;;;(define-key wl-summary-mode-map "e"     'wl-draft-open-file)
   (define-key wl-summary-mode-map "e"     'wl-summary-save)
   (define-key wl-summary-mode-map "\C-c\C-o" 'wl-jump-to-draft-buffer)
@@ -3410,12 +3410,12 @@ If optional argument NUMBER is specified, mark message specified by NUMBER."
                    wl-folder-entity-hashtb))
              nil nil (or init wl-default-spec)
              'wl-read-folder-hist)))
-    (setq fld (elmo-string (wl-folder-get-realname fld)))
-    (if (string-match "\n" fld)
-       (error "Not supported folder name: %s" fld))
     (if (or (string= fld wl-default-spec)
            (string= fld ""))
        (setq fld default))
+    (setq fld (elmo-string (wl-folder-get-realname fld)))
+    (if (string-match "\n" fld)
+       (error "Not supported folder name: %s" fld))    
     (unless no-create
       (if ignore-error
          (ignore-errors (wl-folder-confirm-existence fld))
@@ -3456,7 +3456,7 @@ If optional argument NUMBER is specified, mark message specified by NUMBER."
   (or (and (memq number wl-summary-buffer-delete-list) "D")
       (and (assq number wl-summary-buffer-copy-list) "O")
       (and (assq number wl-summary-buffer-refile-list) "o")
-      (and (assq number wl-summary-buffer-target-mark-list) "*")))
+      (and (memq number wl-summary-buffer-target-mark-list) "*")))
 
 (defsubst wl-summary-reserve-temp-mark-p (mark)
   "Return t if temporal MARK should be reserved."
@@ -3606,9 +3606,10 @@ If optional argument NUMBER is specified, mark message specified by NUMBER."
        (when (and (not (wl-summary-no-auto-refile-message-p number
                                                             mark-alist))
                   (setq dst
-                        (wl-refile-guess-by-rule
-                         (elmo-msgdb-overview-get-entity
-                          number wl-summary-buffer-msgdb)))
+                        (wl-folder-get-realname
+                         (wl-refile-guess-by-rule
+                          (elmo-msgdb-overview-get-entity
+                           number wl-summary-buffer-msgdb))))
                   (not (equal dst spec)))
          (when (not (member dst checked-dsts))
            (wl-folder-confirm-existence dst)
@@ -5116,28 +5117,39 @@ Reply to author if invoked with ARG."
   (run-hooks 'wl-mail-setup-hook)
   (mail-position-on-field "To"))
 
-(defun wl-summary-write-current-newsgroup (&optional folder)
-  ""
+(defvar wl-summary-write-current-folder-functions
+  '(wl-folder-get-newsgroups
+;;; wl-folder-guess-mailing-list-by-refile-rule
+    )
+  "Newsgroups or Mailing List address guess functions list.
+Call from `wl-summary-write-current-folder'")
+
+(defun wl-summary-write-current-folder (&optional folder)
+  "Write message to current FOLDER's newsgroup or mailing-list.
+Use function list is `wl-summary-write-current-folder-functions'."
   (interactive)
-  (let* ((folder (or folder wl-summary-buffer-folder-name))
-        (flist (elmo-folder-get-primitive-folder-list folder))
-        newsgroups fld ret)
-    (while (setq fld (car flist))
-      (if (setq ret
-               (cond ((eq 'nntp (elmo-folder-get-type fld))
-                      (nth 1 (elmo-folder-get-spec fld)))
-                     ((eq 'localnews (elmo-folder-get-type fld))
-                      (elmo-replace-in-string
-                       (nth 1 (elmo-folder-get-spec fld)) "/" "\\."))))
-         (setq newsgroups (cond (newsgroups
-                                 (concat newsgroups "," ret))
-                                (t ret))))
-      (setq flist (cdr flist)))
-    (if newsgroups
-       (progn
-         (wl-draft nil nil nil nil nil newsgroups)
-         (run-hooks 'wl-mail-setup-hook))
-      (error "%s is not newsgroup" folder))))
+  (let (newsgroups to cc)
+    ;; default FOLDER is current buffer folder
+    (setq folder (or folder wl-summary-buffer-folder-name))
+    (let ((flist wl-summary-write-current-folder-functions)
+         guess-list)
+      (while flist
+       (setq guess-list (funcall (car flist) folder))
+       (if (or (nth 0 guess-list)      ; To:
+;;;            (nth 1 guess-list)      ; Cc:
+               (nth 2 guess-list))     ; Newsgroups:
+           (setq flist nil)
+         (setq flist (cdr flist))))
+      (if guess-list
+         (progn
+           (wl-draft (nth 0 guess-list) ; To:
+                     nil nil
+                     (nth 1 guess-list) ; Cc:
+                     nil               
+                     (nth 2 guess-list)) ; Newsgroups:
+           (run-hooks 'wl-mail-setup-hook))
+;;;    (error "%s is not newsgroup" folder)
+       (error "Can't guess by folder %s" folder)))))
 
 (defun wl-summary-forward (&optional without-setup-hook)
   ""
@@ -5521,7 +5533,14 @@ Reply to author if invoked with ARG."
       (if (setq message-buf (wl-message-get-original-buffer))
          (set-buffer message-buf))
       (unless (wl-message-news-p)
-       (error "This is not a news article; canceling is impossible"))
+       (set-buffer summary-buf)
+       (if (and (eq (elmo-folder-get-type wl-summary-buffer-folder-name)
+                    'nntp)
+                (y-or-n-p "Cannot get Newsgroups. Fetch again? "))
+           (progn
+             (wl-summary-redisplay t)
+             (wl-summary-supersedes-message))
+         (error "This is not a news article; supersedes is impossible")))
       (when (yes-or-no-p "Do you really want to cancel this article? ")
        (let (from newsgroups message-id distribution buf)
          (save-excursion
@@ -5563,7 +5582,14 @@ Reply to author if invoked with ARG."
     (if (setq message-buf (wl-message-get-original-buffer))
        (set-buffer message-buf))
     (unless (wl-message-news-p)
-      (error "This is not a news article; supersedes is impossible"))
+      (set-buffer summary-buf)
+      (if (and (eq (elmo-folder-get-type wl-summary-buffer-folder-name)
+                  'nntp)
+              (y-or-n-p "Cannot get Newsgroups. Fetch again? "))
+         (progn
+           (wl-summary-redisplay t)
+           (wl-summary-supersedes-message))
+       (error "This is not a news article; supersedes is impossible")))
     (save-excursion
       (setq from (std11-field-body "from"))
       ;; Make sure that this article was written by the user.