(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)
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
(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
(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)
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
(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)))
+ t 'in-msgdb)))
(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."