*** empty log message ***
[gnus] / lisp / gnus-vm.el
index f3c55fb..65b94f4 100644 (file)
@@ -1,4 +1,4 @@
-;;; gnus-vm: vm interface for Gnus
+;;; gnus-vm.el --- vm interface for Gnus
 ;; Copyright (C) 1994,95 Free Software Foundation, Inc.
 
 ;; Author: Per Persson <pp@solace.mh.se>
 ;; Some code stolen from: 
 ;;     Rick Sladkey <jrs@world.std.com>
 
+;;; Code:
+
+(require 'sendmail)
+(require 'gnus)
+(require 'gnus-msg)
+
 (eval-when-compile
   (autoload 'vm-mode "vm")
   (autoload 'vm-save-message "vm")
@@ -47,8 +53,6 @@ Has to be set before gnus-vm is loaded.")
 (if (not (featurep 'vm))
     (load "vm"))
 
-(require 'gnus)
-
 (defun gnus-vm-make-folder (&optional buffer)
   (let ((article (or buffer (current-buffer)))
        (tmp-folder (generate-new-buffer " *tmp-folder*"))
@@ -69,24 +73,36 @@ Has to be set before gnus-vm is loaded.")
     (vm-mode)
     tmp-folder))
   
+(defun gnus-summary-save-article-vm (&optional arg)
+  "Append the current article to a vm folder.
+If N is a positive number, save the N next articles.
+If N is a negative number, save the N previous articles.
+If N is nil and any articles have been marked with the process mark,
+save those articles instead."
+  (interactive "P")
+  (let ((gnus-default-article-saver 'gnus-summary-save-in-vm))
+    (gnus-summary-save-article arg)))
+
 (defun gnus-summary-save-in-vm (&optional folder)
   (interactive)
   (let ((default-name
          (funcall gnus-mail-save-name gnus-newsgroup-name
                   gnus-current-headers gnus-newsgroup-last-mail)))
-    (or folder
-       (setq folder
-             (read-file-name
-              (concat "Save article in VM folder: (default "
-                      (file-name-nondirectory default-name) ") ")
-              (file-name-directory default-name)
-              default-name)))
+    (setq folder
+         (cond ((eq folder 'default)
+                default-name)
+               (folder folder)
+               (t (read-file-name 
+                   (concat "Save article in VM folder: (default "
+                           (file-name-nondirectory default-name) ") ")
+                   (file-name-directory default-name)
+                   default-name))))
     (setq folder
          (expand-file-name folder
                            (and default-name
                                 (file-name-directory default-name))))
     (gnus-make-directory (file-name-directory folder))
-    (set-buffer gnus-article-buffer)
+    (set-buffer gnus-original-article-buffer)
     (save-excursion
       (save-restriction
        (widen)
@@ -95,17 +111,21 @@ Has to be set before gnus-vm is loaded.")
          (kill-buffer vm-folder))))
     ;; Remember the directory name to save articles.
     (setq gnus-newsgroup-last-mail folder)))
-  
-(defun gnus-mail-forward-using-vm ()
+
+(defun gnus-vm-mail-setup (to subject in-reply-to cc replybuffer actions)
+  (gnus-sendmail-mail-setup to subject in-reply-to cc replybuffer actions)
+  )
+
+(defun gnus-mail-forward-using-vm (&optional buffer)
   "Forward the current message to another user using vm."
-  (let ((gnus-buffer (current-buffer))
-       (subject (concat "[" gnus-newsgroup-name "] "
-                        (or (gnus-fetch-field "Subject") ""))))
+  (let* ((gnus-buffer (or buffer (current-buffer)))
+        (subject (gnus-forward-make-subject gnus-buffer)))
     (or (featurep 'win-vm)
        (if gnus-use-full-window
            (pop-to-buffer gnus-article-buffer)
          (switch-to-buffer gnus-article-buffer)))
-    (set-buffer gnus-article-buffer)
+    (gnus-copy-article-buffer)
+    (set-buffer gnus-article-copy)
     (save-excursion
       (save-restriction
        (widen)
@@ -120,6 +140,7 @@ Has to be set before gnus-vm is loaded.")
                             (replace-match (concat "\\1" subject))))))))
          (vm-forward-message)
          (gnus-vm-init-reply-buffer gnus-buffer)
+         (run-hooks 'gnus-mail-hook)
          (kill-buffer vm-folder))))))
 
 (defun gnus-vm-init-reply-buffer (buffer)
@@ -134,11 +155,12 @@ Has to be set before gnus-vm is loaded.")
 Optional argument YANK means yank original article.
 The command \\[vm-yank-message] yank the original message into current buffer."
   (let ((gnus-buffer (current-buffer)))
-    (set-buffer gnus-article-buffer)
+    (gnus-copy-article-buffer)
+    (set-buffer gnus-article-copy)
     (save-excursion
       (save-restriction
        (widen)
-       (let ((vm-folder (gnus-vm-make-folder gnus-article-buffer)))
+       (let ((vm-folder (gnus-vm-make-folder gnus-article-copy)))
          (vm-reply 1)
          (gnus-vm-init-reply-buffer gnus-buffer)
          (setq gnus-buffer (current-buffer))
@@ -147,14 +169,16 @@ The command \\[vm-yank-message] yank the original message into current buffer."
               (gnus-yank-article nil))
          (kill-buffer vm-folder))))
     (if (featurep 'win-vm) nil
-      (pop-to-buffer gnus-buffer))))
+      (pop-to-buffer gnus-buffer))
+    (run-hooks 'gnus-mail-hook)))
 
 (defun gnus-mail-other-window-using-vm ()
   "Compose mail in the other window using VM."
   (interactive)
   (let ((gnus-buffer (current-buffer)))
     (vm-mail)
-    (gnus-vm-init-reply-buffer gnus-buffer)))
+    (gnus-vm-init-reply-buffer gnus-buffer))
+  (run-hooks 'gnus-mail-hook))
 
 (defun gnus-yank-article (article &optional prefix)
   ;; Based on vm-yank-message by Kyle Jones.
@@ -204,7 +228,7 @@ action is taken."
          (or (gnus-server-opened (gnus-find-method-for-group
                                   gnus-newsgroup-name))
              (progn
-               (gnus-check-news-server 
+               (gnus-check-server 
                 (gnus-find-method-for-group gnus-newsgroup-name))
                (gnus-request-group gnus-newsgroup-name t)))
          (and (stringp article)