* wl-addrmgr.el (wl-addrmgr-replace-field): Use `point-at-bol'.
[elisp/wanderlust.git] / wl / wl-action.el
index 1207002..223abe5 100644 (file)
@@ -53,7 +53,6 @@
 
 ;; Set mark
 (defun wl-summary-set-mark (&optional set-mark number interactive data)
-  (interactive)
   "Set temporary mark SET-MARK on the message with NUMBER.
 NUMBER is the message number to set the mark on.
 INTERACTIVE is set as t if it have to run interactively.
@@ -101,11 +100,14 @@ Return number if put mark succeed"
                (wl-highlight-summary-current-line))
              (when data
                (wl-summary-print-argument number data)))
+           (when (and (eq wl-summary-buffer-view 'thread)
+                      interactive)
+             (wl-thread-open-children number))
            (set-buffer-modified-p nil)
            ;; Return value.
            number))
       ;; Move the cursor.
-      (if (or interactive (interactive-p))
+      (if interactive
          (if (eq wl-summary-move-direction-downward nil)
              (wl-summary-prev)
            (wl-summary-next))))))
@@ -276,35 +278,30 @@ Return number if put mark succeed"
       (let ((start (point))
            (refiles (mapcar 'car mark-list))
            (refile-failures 0)
-           refile-len
            dst-msgs                    ; loop counter
            result)
        ;; begin refile...
-       (setq refile-len (length refiles))
        (goto-char start)               ; avoid moving cursor to
                                        ; the bottom line.
-       (message message)
-       (when (> refile-len elmo-display-progress-threshold)
-         (elmo-progress-set 'elmo-folder-move-messages
-                            refile-len message))
-       (setq result nil)
-       (condition-case nil
-           (setq result (elmo-folder-move-messages
-                         wl-summary-buffer-elmo-folder
-                         refiles
-                         (if (eq folder-name 'null)
-                             'null
-                           (wl-folder-get-elmo-folder folder-name))))
-         (error nil))
-       (when result            ; succeeded.
-         ;; update buffer.
-         (wl-summary-delete-messages-on-buffer refiles)
-         ;; update wl-summary-buffer-temp-mark-list.
-         (dolist (mark-info mark-list)
-           (setq wl-summary-buffer-temp-mark-list
-                 (delq mark-info wl-summary-buffer-temp-mark-list))))
-       (elmo-progress-clear 'elmo-folder-move-messages)
-       (message (concat message "done"))
+       (elmo-with-progress-display
+           (elmo-folder-move-messages (length refiles))
+           message
+         (setq result nil)
+         (condition-case nil
+             (setq result (elmo-folder-move-messages
+                           wl-summary-buffer-elmo-folder
+                           refiles
+                           (if (eq folder-name 'null)
+                               'null
+                             (wl-folder-get-elmo-folder folder-name))))
+           (error nil))
+         (when result          ; succeeded.
+           ;; update buffer.
+           (wl-summary-delete-messages-on-buffer refiles)
+           ;; update wl-summary-buffer-temp-mark-list.
+           (dolist (mark-info mark-list)
+             (setq wl-summary-buffer-temp-mark-list
+                   (delq mark-info wl-summary-buffer-temp-mark-list)))))
        (wl-summary-set-message-modified)
        ;; Return the operation failed message numbers.
        (if result
@@ -425,13 +422,13 @@ Return number if put mark succeed"
   (wl-summary-move-mark-list-messages mark-list
                                      (wl-summary-get-dispose-folder
                                       (wl-summary-buffer-folder-name))
-                                     "Disposing messages..."))
+                                     "Disposing messages"))
 
 ;; Delete action.
 (defun wl-summary-exec-action-delete (mark-list)
   (wl-summary-move-mark-list-messages mark-list
                                      'null
-                                     "Deleting messages..."))
+                                     "Deleting messages"))
 
 ;; Refile action
 (defun wl-summary-set-action-refile (number mark data)
@@ -448,32 +445,28 @@ Return number if put mark succeed"
   (save-excursion
     (let ((start (point))
          (failures 0)
-         (refile-len (length mark-list))
          dst-msgs)
       ;; begin refile...
       (setq dst-msgs (wl-summary-make-destination-numbers-list mark-list))
       (goto-char start)        ; avoid moving cursor to the bottom line.
-      (when (> refile-len elmo-display-progress-threshold)
-       (elmo-progress-set 'elmo-folder-move-messages
-                          refile-len "Refiling messages..."))
-      (dolist (pair dst-msgs)
-       (if (condition-case nil
-               (elmo-folder-move-messages
-                wl-summary-buffer-elmo-folder
-                (cdr pair)
-                (wl-folder-get-elmo-folder (car pair)))
-             (error nil))
-           (progn
-             ;; update buffer.
-             (wl-summary-delete-messages-on-buffer (cdr pair))
-             (setq wl-summary-buffer-temp-mark-list
-                   (wl-delete-associations
-                    (cdr pair)
-                    wl-summary-buffer-temp-mark-list)))
-         (setq failures (+ failures (length (cdr pair))))))
-      (elmo-progress-clear 'elmo-folder-move-messages)
-      (if (<= failures 0)
-         (message "Refiling messages...done"))
+      (elmo-with-progress-display
+         (elmo-folder-move-messages (length mark-list))
+         "Refiling messages"
+       (dolist (pair dst-msgs)
+         (if (condition-case nil
+                 (elmo-folder-move-messages
+                  wl-summary-buffer-elmo-folder
+                  (cdr pair)
+                  (wl-folder-get-elmo-folder (car pair)))
+               (error nil))
+             (progn
+               ;; update buffer.
+               (wl-summary-delete-messages-on-buffer (cdr pair))
+               (setq wl-summary-buffer-temp-mark-list
+                     (wl-delete-associations
+                      (cdr pair)
+                      wl-summary-buffer-temp-mark-list)))
+           (setq failures (+ failures (length (cdr pair)))))))
       failures)))
 
 ;; Copy action
@@ -484,34 +477,30 @@ Return number if put mark succeed"
   (save-excursion
     (let ((start (point))
          (failures 0)
-         (refile-len (length mark-list))
          dst-msgs)
       ;; begin refile...
       (setq dst-msgs
            (wl-summary-make-destination-numbers-list mark-list))
       (goto-char start)        ; avoid moving cursor to the bottom line.
-      (when (> refile-len elmo-display-progress-threshold)
-       (elmo-progress-set 'elmo-folder-move-messages
-                          refile-len "Copying messages..."))
-      (dolist (pair dst-msgs)
-       (if (condition-case nil
-               (elmo-folder-move-messages
-                wl-summary-buffer-elmo-folder
-                (cdr pair)
-                (wl-folder-get-elmo-folder (car pair))
-                'no-delete)
-             (error nil))
-           (progn
-             ;; update buffer.
-             (wl-summary-delete-copy-marks-on-buffer (cdr pair))
-             (setq wl-summary-buffer-temp-mark-list
-                   (wl-delete-associations
-                    (cdr pair)
-                    wl-summary-buffer-temp-mark-list)))
-         (setq failures (+ failures (length (cdr pair))))))
-      (elmo-progress-clear 'elmo-folder-move-messages)
-      (if (<= failures 0)
-         (message "Copying messages...done"))
+      (elmo-with-progress-display
+         (elmo-folder-move-messages (length mark-list))
+         "Copying messages"
+       (dolist (pair dst-msgs)
+         (if (condition-case nil
+                 (elmo-folder-move-messages
+                  wl-summary-buffer-elmo-folder
+                  (cdr pair)
+                  (wl-folder-get-elmo-folder (car pair))
+                  'no-delete)
+               (error nil))
+             (progn
+               ;; update buffer.
+               (wl-summary-delete-copy-marks-on-buffer (cdr pair))
+               (setq wl-summary-buffer-temp-mark-list
+                     (wl-delete-associations
+                      (cdr pair)
+                      wl-summary-buffer-temp-mark-list)))
+           (setq failures (+ failures (length (cdr pair)))))))
       failures)))
 
 ;; Prefetch.
@@ -555,9 +544,8 @@ Return number if put mark succeed"
   "Resend the message with NUMBER to ADDRESS."
   (message "Resending message to %s..." address)
   (let ((folder wl-summary-buffer-elmo-folder))
-    (save-excursion
+    (with-current-buffer (get-buffer-create " *wl-draft-resend*")
       ;; We first set up a normal mail buffer.
-      (set-buffer (get-buffer-create " *wl-draft-resend*"))
       (set-buffer-multibyte nil)
       (erase-buffer)
       (setq wl-sent-message-via nil)
@@ -615,8 +603,8 @@ Return number if put mark succeed"
          (buffer-read-only nil)
          (buf (current-buffer))
          sol eol rs re)
+      (setq sol (point-at-bol))
       (beginning-of-line)
-      (setq sol (point))
       (search-forward "\r")
       (forward-char -1)
       (setq eol (point))
@@ -722,16 +710,16 @@ Return number if put mark succeed"
                                      fld))))
     fld))
 
-(defun wl-summary-print-argument (msg-num folder)
+(defun wl-summary-print-argument (msg-num data)
   "Print action argument on line."
-  (when folder
+  (when data
     (wl-summary-remove-argument)
     (save-excursion
       (let ((inhibit-read-only t)
-           (folder (copy-sequence folder))
+           (data (copy-sequence data))
            (buffer-read-only nil)
            len rs re c)
-       (setq len (string-width folder))
+       (setq len (string-width data))
        (if (< len 1) ()
          ;;(end-of-line)
          (beginning-of-line)
@@ -744,7 +732,8 @@ Return number if put mark succeed"
                              (1- (window-width)))))
                (c (current-column))
                (padding 0))
-           (if (and width (> (+ c len) width))
+           (if (and width
+                    (> (+ c len) width))
                (progn
                  (move-to-column width)
                  (setq c (current-column))
@@ -752,18 +741,18 @@ Return number if put mark succeed"
                    (forward-char -1)
                    (setq c (current-column)))
                  (when (< (+ c len) width)
-                   (setq folder (concat " " folder)))
+                   (setq data (concat " " data)))
                  (setq rs (point))
                  (put-text-property rs re 'invisible t))
              (when (and width
                         (> (setq padding (- width len c)) 0))
-               (setq folder (concat (make-string padding ?\ )
-                                    folder)))
+               (setq data (concat (make-string padding (string-to-char " "))
+                                  data)))
              (setq rs (1- re))))
          (put-text-property rs re 'wl-summary-action-argument t)
          (goto-char re)
-         (wl-highlight-action-argument-string folder)
-         (insert folder)
+         (wl-highlight-action-argument-string data)
+         (insert data)
          (set-buffer-modified-p nil))))))
 
 (defsubst wl-summary-reserve-temp-mark-p (mark)
@@ -836,7 +825,7 @@ Return number if put mark succeed"
           checked-dsts
           (count 0)
           number dst thr-entity)
-      (goto-line 1)
+      (goto-char (point-min))
       (while (not (eobp))
        (setq number (wl-summary-message-number))
        (dolist (number (cons number