(defun wl-summary-target-mark-set-action (action)
(unless (eq (wl-summary-action-symbol action) 'target-mark)
+ (unless wl-summary-buffer-target-mark-list (error "no target"))
(save-excursion
(goto-char (point-min))
(let ((numlist wl-summary-buffer-number-list)
(delq elem wl-summary-buffer-temp-mark-list))))
(defun wl-summary-registered-temp-mark (number)
- (assq number wl-summary-buffer-temp-mark-list))
+ (and wl-summary-buffer-temp-mark-list
+ (assq number wl-summary-buffer-temp-mark-list)))
(defun wl-summary-collect-temp-mark (mark &optional begin end)
(if (or begin end)
mark-list)))
;; Unset mark
-(defun wl-summary-unset-mark (&optional number interactive)
+(defun wl-summary-unset-mark (&optional number interactive force)
"Unset temporary mark of the message with NUMBER.
NUMBER is the message number to unset the mark.
If not specified, the message on the cursor position is treated.
Optional INTERACTIVE is non-nil when it should be called interactively.
+If optional FORCE is non-nil, remove scored mark too.
Return number if put mark succeed"
(interactive)
(save-excursion
(when visible
(unless (string= mark " ")
(wl-summary-put-temp-mark
- (or (wl-summary-get-score-mark number)
+ (or (unless force (wl-summary-get-score-mark number))
" "))
(setq action (assoc mark wl-summary-mark-action-list))
(when wl-summary-highlight
refiles
(if (eq folder-name 'null)
'null
- (wl-folder-get-elmo-folder folder-name))
- (wl-summary-buffer-msgdb)
- (not (null (cdr dst-msgs)))
- nil ; no-delete
- nil ; same-number
- t))
+ (wl-folder-get-elmo-folder folder-name))))
(error nil))
(when result ; succeeded.
;; update buffer.
;; Refile action
(defun wl-summary-set-action-refile (number mark data)
- (let ((policy (wl-get-assoc-list-value wl-refile-policy-alist
- (wl-summary-buffer-folder-name)))
- (elem wl-summary-mark-action-list))
- (if (eq policy 'copy)
- (while elem
- (when (eq (wl-summary-action-symbol (car elem)) 'copy)
- (wl-summary-register-temp-mark number
- (wl-summary-action-mark (car elem))
- data)
- (setq elem nil))
- (setq elem (cdr elem)))
- (wl-summary-register-temp-mark number mark data)
- (setq wl-summary-buffer-prev-refile-destination data))))
+ (when (null data)
+ (error "Destination folder is empty"))
+ (wl-summary-register-temp-mark number mark data)
+ (setq wl-summary-buffer-prev-refile-destination data))
(defun wl-summary-get-refile-destination (action number)
"Decide refile destination."
(setq result (elmo-folder-move-messages
wl-summary-buffer-elmo-folder
(cdr (car dst-msgs))
- (wl-folder-get-elmo-folder
- (car (car dst-msgs)))
- (wl-summary-buffer-msgdb)
- (not (null (cdr dst-msgs)))
- nil ; no-delete
- nil ; same-number
- t))
+ (wl-folder-get-elmo-folder (car (car dst-msgs)))))
(error nil))
(if result ; succeeded.
(progn
;; update buffer.
(wl-summary-delete-messages-on-buffer (cdr (car dst-msgs)))
(setq wl-summary-buffer-temp-mark-list
- (wl-delete-associations
+ (wl-delete-associations
(cdr (car dst-msgs))
wl-summary-buffer-temp-mark-list)))
(setq failures
(+ failures (length (cdr (car dst-msgs))))))
(setq dst-msgs (cdr dst-msgs)))
(elmo-progress-clear 'elmo-folder-move-messages)
+ (if (<= failures 0)
+ (message "Refiling messages...done"))
failures)))
;; Copy action
(setq result nil)
(condition-case nil
(setq result (elmo-folder-move-messages
- wl-summary-buffer-elmo-folder
- (cdr (car dst-msgs))
- (wl-folder-get-elmo-folder
- (car (car dst-msgs)))
- (wl-summary-buffer-msgdb)
- (not (null (cdr dst-msgs)))
- t ; t is no-delete (copy)
- nil ; same-number
- t))
+ wl-summary-buffer-elmo-folder
+ (cdr (car dst-msgs))
+ (wl-folder-get-elmo-folder (car (car dst-msgs)))
+ 'no-delete))
(error nil))
(if result ; succeeded.
(progn
;; update buffer.
(wl-summary-delete-copy-marks-on-buffer (cdr (car dst-msgs)))
(setq wl-summary-buffer-temp-mark-list
- (wl-delete-associations
+ (wl-delete-associations
(cdr (car dst-msgs))
wl-summary-buffer-temp-mark-list)))
(setq failures
(+ failures (length (cdr (car dst-msgs))))))
(setq dst-msgs (cdr dst-msgs)))
(elmo-progress-clear 'elmo-folder-move-messages)
+ (if (<= failures 0)
+ (message "Copying messages...done"))
failures)))
;; Prefetch.
;; Resend.
(defun wl-summary-get-resend-address (action number)
"Decide resend address."
- (completing-read "Resend message to: " 'wl-complete-address))
+ (wl-address-read-from-minibuffer "Resend message to: "))
(defun wl-summary-exec-action-resend (mark-list)
(let ((failure 0))
(goto-char beg)
(when (looking-at "From ")
(replace-match "X-From-Line: ")))
+ (run-hooks 'wl-summary-resend-hook)
;; Send it.
(wl-draft-dispatch-message)
(kill-buffer (current-buffer)))
(save-excursion
(save-restriction
(let (numbers)
- (narrow-to-region (or begin (point-min))(or end (point-max)))
+ (wl-summary-narrow-to-region (or begin (point-min))(or end (point-max)))
(goto-char (point-min))
;; for thread...
(if (eq wl-summary-buffer-view 'thread)
- (let (number entity mark-info)
+ (let (number entity)
(while (not (eobp))
(setq numbers (cons (wl-summary-message-number) numbers)
entity (wl-thread-get-entity number))
(dolist (msg (wl-thread-get-children-msgs number))
(setq numbers (cons msg numbers))))
(forward-line 1)))
- (let (number mark-info)
+ (let (number)
(while (not (eobp))
(setq numbers (cons (wl-summary-message-number) numbers))
(forward-line 1))))
- numbers))))
+ (nreverse (delq nil numbers))))))
(defun wl-summary-exec (&optional numbers)
(interactive)
(let ((failures 0)
collected pair action modified)
(dolist (action wl-summary-mark-action-list)
- (setq collected (cons (cons
+ (setq collected (cons (cons
(wl-summary-action-mark action)
nil) collected)))
(dolist (mark-info wl-summary-buffer-temp-mark-list)
- (if numbers
- (when (memq (nth 0 mark-info) numbers)
- (setq pair (assoc (nth 1 mark-info) collected)))
- (setq pair (assoc (nth 1 mark-info) collected)))
- (setq pair (assoc (nth 1 mark-info) collected))
- (setcdr pair (cons mark-info (cdr pair))))
+ (setq pair
+ (when (or (null numbers)
+ (memq (nth 0 mark-info) numbers))
+ (assoc (nth 1 mark-info) collected)))
+ (if pair
+ (setcdr pair (cons mark-info (cdr pair)))))
;; collected is a pair of
;; mark-string and a list of mark-info
(dolist (pair collected)
(setq wl-message-buffer nil))
(set-buffer-modified-p nil)
(when (> failures 0)
- (format "%d execution(s) were failed" failures))))
+ (message "%d execution(s) were failed" failures))))
(defun wl-summary-exec-region (beg end)
(interactive "r")
default)
'wl-folder-complete-folder
nil nil (or init wl-default-spec)
- 'wl-read-folder-hist)))
+ 'wl-read-folder-history)))
(if (or (string= fld wl-default-spec)
(string= fld ""))
(setq fld default))
"Return t if temporal MARK should be reserved."
(member mark wl-summary-reserve-mark-list))
+;; Refile prev destination
(defun wl-summary-refile-prev-destination ()
"Refile message to previously refiled destination."
(interactive)
(funcall (symbol-function 'wl-summary-refile)
+ (wl-summary-message-number)
wl-summary-buffer-prev-refile-destination)
- (if (eq wl-summary-move-direction-downward nil)
+ (if (and (interactive-p)
+ (eq wl-summary-move-direction-downward nil))
(wl-summary-prev)
(wl-summary-next)))
-(defsubst wl-summary-no-auto-refile-message-p (msg)
- (member (elmo-msgdb-get-mark (wl-summary-buffer-msgdb) msg)
+(defun wl-summary-refile-prev-destination-region (beg end)
+ "Refile messages in the region to previously refiled destination."
+ (interactive "r")
+ (wl-summary-mark-region-subr 'wl-summary-refile
+ beg end
+ wl-summary-buffer-prev-refile-destination))
+
+(defun wl-thread-refile-prev-destination (arg)
+ "Refile messages in the thread to previously refiled destination."
+ (interactive "P")
+ (wl-thread-call-region-func
+ 'wl-summary-refile-prev-destination-region
+ arg))
+
+(defun wl-summary-target-mark-refile-prev-destination ()
+ "Refile messages with target mark to previously refiled destination."
+ (interactive)
+ (let ((elem wl-summary-mark-action-list)
+ action)
+ (while elem
+ (when (eq (wl-summary-action-symbol (car elem)) 'refile)
+ (setq action (car elem))
+ (setq elem nil))
+ (setq elem (cdr elem)))
+ (wl-summary-target-mark-set-action
+ (list
+ (car action)
+ 'refile-prev-destination
+ (lambda (&rest args) wl-summary-buffer-prev-refile-destination)
+ (nth 2 action)
+ (nth 3 action)
+ (nth 4 action)
+ (nth 6 action)))))
+
+(defsubst wl-summary-no-auto-refile-message-p (number)
+ (member (wl-summary-message-mark wl-summary-buffer-elmo-folder number)
wl-summary-auto-refile-skip-marks))
+(defvar wl-auto-refile-guess-functions
+ '(wl-refile-guess-by-rule)
+ "*List of functions which is used for guessing refile destination folder.")
+
(defun wl-summary-auto-refile (&optional open-all)
"Set refile mark automatically according to 'wl-refile-guess-by-rule'."
(interactive "P")
number))
(setq dst
(wl-folder-get-realname
- (wl-refile-guess-by-rule
- (elmo-msgdb-overview-get-entity
- number (wl-summary-buffer-msgdb)))))
+ (wl-refile-guess
+ (elmo-message-entity wl-summary-buffer-elmo-folder
+ number)
+ wl-auto-refile-guess-functions)))
(not (equal dst spec))
(let ((pair (assoc dst checked-dsts))
ret)
(interactive "r")
(save-excursion
(save-restriction
- (narrow-to-region beg end)
+ (wl-summary-narrow-to-region beg end)
(goto-char (point-min))
(if (eq wl-summary-buffer-view 'thread)
(progn
(defun wl-summary-mark-region-subr (function beg end data)
(save-excursion
(save-restriction
- (narrow-to-region beg end)
+ (wl-summary-narrow-to-region beg end)
(goto-char (point-min))
(if (eq wl-summary-buffer-view 'thread)
(progn
(defun wl-summary-target-mark-all ()
(interactive)
- (wl-summary-target-mark-region (point-min) (point-max))
- (setq wl-summary-buffer-target-mark-list
- (elmo-folder-list-messages wl-summary-buffer-elmo-folder
- nil 'in-msgdb)))
+ (wl-summary-target-mark-region (point-min) (point-max)))
(defun wl-summary-delete-all-mark (mark)
(goto-char (point-min))
(when (string= (wl-summary-temp-mark) mark)
(wl-summary-unmark))
(forward-line 1))
- (let (deleted)
- (dolist (mark-info wl-summary-buffer-temp-mark-list)
- (when (string= (nth 1 mark-info) mark)
- (setq deleted (cons mark-info deleted))))
- (dolist (delete deleted)
- (setq wl-summary-buffer-temp-mark-list
- (delq delete wl-summary-buffer-temp-mark-list)))))
+ (if (string= mark "*")
+ (setq wl-summary-buffer-target-mark-list nil)
+ (let (deleted)
+ (dolist (mark-info wl-summary-buffer-temp-mark-list)
+ (when (string= (nth 1 mark-info) mark)
+ (setq deleted (cons mark-info deleted))))
+ (dolist (delete deleted)
+ (setq wl-summary-buffer-temp-mark-list
+ (delq delete wl-summary-buffer-temp-mark-list))))))
(defun wl-summary-unmark-all ()
"Unmark all according to what you input."