X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=wl%2Fwl-summary.el;h=f724f55ff6f293a1ebaad98c36a8e75d7bd59cf7;hb=37e57871fb83ded86962e741e3561bceafb065e2;hp=9ff6b2047aa4170078cf94efa0a0e62e0b4036bb;hpb=2691a76408932d6b0b1c5bd99aa3a2a20831b86d;p=elisp%2Fwanderlust.git diff --git a/wl/wl-summary.el b/wl/wl-summary.el index 9ff6b20..f724f55 100644 --- a/wl/wl-summary.el +++ b/wl/wl-summary.el @@ -345,6 +345,7 @@ "----" ("Writing Messages" ["Write a message" wl-summary-write t] + ["Write for current folder" wl-summary-write-current-folder t] ["Reply" wl-summary-reply t] ["Reply with citation" wl-summary-reply-with-citation t] ["Forward" wl-summary-forward t]) @@ -387,6 +388,7 @@ (define-key wl-summary-mode-map "-" 'wl-summary-prev-line-content) (define-key wl-summary-mode-map "\e\r" 'wl-summary-prev-line-content) (define-key wl-summary-mode-map "g" 'wl-summary-goto-folder) + (define-key wl-summary-mode-map "G" 'wl-summary-goto-folder-sticky) (define-key wl-summary-mode-map "c" 'wl-summary-mark-as-read-all) ; (define-key wl-summary-mode-map "D" 'wl-summary-drop-unsync) @@ -411,6 +413,8 @@ (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) (define-key wl-summary-mode-map "\C-c\C-a" 'wl-addrmgr) + (define-key wl-summary-mode-map "\C-c\C-p" 'wl-summary-next-buffer) + (define-key wl-summary-mode-map "\C-c\C-n" 'wl-summary-previous-buffer) (define-key wl-summary-mode-map "H" 'wl-summary-redisplay-all-header) (define-key wl-summary-mode-map "M" 'wl-summary-redisplay-no-mime) (define-key wl-summary-mode-map "B" 'wl-summary-burst) @@ -521,6 +525,7 @@ (define-key wl-summary-mode-map "\M-t" 'wl-toggle-plugged) (define-key wl-summary-mode-map "\C-t" 'wl-plugged-change) ;; + (define-key wl-summary-mode-map "\C-x\C-s" 'wl-summary-save-status) (wl-summary-setup-mouse) (easy-menu-define wl-summary-mode-menu @@ -562,7 +567,7 @@ (if (eq major-mode 'wl-summary-mode) (setq wl-summary-buffer-new-count new wl-summary-buffer-unread-count unread)) - (+ new unread))) + (cons new unread))) (defun wl-summary-message-string (&optional use-cache) "Return full body string of current message. @@ -595,8 +600,8 @@ If ARG is non-nil, Supersedes message" (wl-summary-supersedes-message) (if (string= (wl-summary-buffer-folder-name) wl-draft-folder) (if (wl-summary-message-number) - (unwind-protect - (wl-draft-reedit (wl-summary-message-number)) + (progn + (wl-draft-reedit (wl-summary-message-number)) (if (wl-message-news-p) (mail-position-on-field "Newsgroups") (mail-position-on-field "To")) @@ -996,7 +1001,7 @@ Entering Folder mode calls the value of `wl-summary-mode-hook'." ;; a subroutine for wl-summary-exit/wl-save-status ;; Note that folder is not commited here. -(defun wl-summary-save-view (&optional sticky) +(defun wl-summary-save-view () ;; already in summary buffer. (when wl-summary-buffer-persistent ;; save the current summary buffer view. @@ -1006,6 +1011,16 @@ Entering Folder mode calls the value of `wl-summary-mode-hook'." (wl-summary-thread-modified-p))) (wl-summary-save-view-cache)))) +(defun wl-summary-save-status () + "Save summary view and msgdb." + (interactive) + (if (interactive-p) (message "Saving summary status...")) + (wl-summary-save-view) + (elmo-folder-commit wl-summary-buffer-elmo-folder) + (elmo-folder-check wl-summary-buffer-elmo-folder) + (if wl-use-scoring (wl-score-save)) + (if (interactive-p) (message "Saving summary status...done."))) + (defun wl-summary-force-exit () "Exit current summary. Buffer is deleted even the buffer is sticky." (interactive) @@ -1022,16 +1037,16 @@ Entering Folder mode calls the value of `wl-summary-mode-hook'." (run-hooks 'wl-summary-exit-pre-hook) (if wl-summary-buffer-exit-function (funcall wl-summary-buffer-exit-function) - (wl-summary-cleanup-temp-marks sticky) + (if (or force-exit (not sticky)) + (wl-summary-cleanup-temp-marks sticky)) (unwind-protect ;; save summary status (progn - (if (or force-exit - (not sticky)) + (wl-summary-save-view) + (if (or force-exit (not sticky)) (elmo-folder-close wl-summary-buffer-elmo-folder) (elmo-folder-commit wl-summary-buffer-elmo-folder) (elmo-folder-check wl-summary-buffer-elmo-folder)) - (wl-summary-save-view sticky) (if wl-use-scoring (wl-score-save))) ;; for sticky summary (wl-delete-all-overlays) @@ -1117,12 +1132,15 @@ Entering Folder mode calls the value of `wl-summary-mode-hook'." wl-use-scoring) (wl-summary-rescan) (and msg (wl-summary-jump-to-msg msg)))) + ((string= range "cache-status") + (let ((msg (wl-summary-message-number))) + (wl-summary-resume-cache-status) + (and msg (wl-summary-jump-to-msg msg)))) ((or (string-match "last:" range) (string-match "first:" range)) - (wl-summary-goto-folder-subr - (wl-folder-get-elmo-folder (concat "/" range "/" - (elmo-folder-name-internal - folder))) + (wl-summary-goto-folder-subr (concat "/" range "/" + (elmo-folder-name-internal + folder)) 'force-update nil nil t)) (t (wl-summary-sync-update unset-cursor @@ -1162,8 +1180,8 @@ Entering Folder mode calls the value of `wl-summary-mode-hook'." ;; returns nil if there's no change. (if (elmo-get-hash-val (downcase the-email) wl-address-petname-hash) (let (char) - (message (format "'%s' already exists. (e)dit/(d)elete/(c)ancel?" - the-email)) + (message "'%s' already exists. (e)dit/(d)elete/(c)ancel?" + the-email) (while (not (or (eq (setq char (read-char)) ?\r) (eq char ?\n) (eq char ? ) @@ -1269,68 +1287,69 @@ If ARG is non-nil, checking is omitted." (size (elmo-msgdb-overview-entity-get-size ov)) (inhibit-read-only t) (buffer-read-only nil) + (file-cached (elmo-file-cache-exists-p message-id)) (force-read (and size (or (null wl-prefetch-threshold) (< size wl-prefetch-threshold)))) mark new-mark) - (if (or arg - (null (elmo-file-cache-exists-p message-id))) - (unwind-protect - (progn - (when (and size (not force-read) wl-prefetch-confirm) - (setq force-read - (save-restriction - (widen) - (y-or-n-p - (format - "Message from %s has %d bytes. Prefetch it? " - (concat - "[ " - (save-match-data - (wl-set-string-width - wl-summary-from-width - (wl-summary-from-func-internal - (eword-decode-string - (elmo-delete-char - ?\" - (or - (elmo-msgdb-overview-entity-get-from ov) - "??")))))) " ]") - size)))) - (message "")) ; flush. - (setq mark (cadr (assq number mark-alist))) - (if force-read - (save-excursion - (save-match-data - ;; online + (unwind-protect + (progn + (when (and (or arg (not file-cached)) + size (not force-read) wl-prefetch-confirm) + (setq force-read + (save-restriction + (widen) + (y-or-n-p + (format + "Message from %s has %d bytes. Prefetch it? " + (concat + "[ " + (save-match-data + (wl-set-string-width + wl-summary-from-width + (wl-summary-from-func-internal + (eword-decode-string + (elmo-delete-char + ?\" + (or + (elmo-msgdb-overview-entity-get-from ov) + "??")))))) " ]") + size)))) + (message "")) ; flush. + (setq mark (cadr (assq number mark-alist))) + (if force-read + (save-excursion + (save-match-data + ;; online + (if (or arg (not file-cached)) (elmo-message-encache wl-summary-buffer-elmo-folder - number) - (setq new-mark - (cond - ((string= mark - wl-summary-unread-uncached-mark) - wl-summary-unread-cached-mark) - ((string= mark wl-summary-new-mark) - (setq wl-summary-buffer-new-count - (- wl-summary-buffer-new-count 1)) - (setq wl-summary-buffer-unread-count - (+ wl-summary-buffer-unread-count 1)) - wl-summary-unread-cached-mark) - ((string= mark wl-summary-read-uncached-mark) - nil) - (t mark))) - (setq mark-alist (elmo-msgdb-mark-set - mark-alist number new-mark)) - (or new-mark (setq new-mark " ")) - (elmo-msgdb-set-mark-alist msgdb mark-alist) - (wl-summary-set-mark-modified) - (wl-summary-update-modeline) - (wl-folder-update-unread - (wl-summary-buffer-folder-name) - (+ wl-summary-buffer-unread-count - wl-summary-buffer-new-count))) - new-mark)))))))) + number)) + (setq new-mark + (cond + ((string= mark + wl-summary-unread-uncached-mark) + wl-summary-unread-cached-mark) + ((string= mark wl-summary-new-mark) + (setq wl-summary-buffer-new-count + (- wl-summary-buffer-new-count 1)) + (setq wl-summary-buffer-unread-count + (+ wl-summary-buffer-unread-count 1)) + wl-summary-unread-cached-mark) + ((string= mark wl-summary-read-uncached-mark) + nil) + (t mark))) + (setq mark-alist (elmo-msgdb-mark-set + mark-alist number new-mark)) + (or new-mark (setq new-mark " ")) + (elmo-msgdb-set-mark-alist msgdb mark-alist) + (wl-summary-set-mark-modified) + (wl-summary-update-modeline) + (wl-folder-update-unread + (wl-summary-buffer-folder-name) + (+ wl-summary-buffer-unread-count + wl-summary-buffer-new-count))) + new-mark))))))) ;;(defvar wl-summary-message-uncached-marks ;; (list wl-summary-new-mark @@ -2017,27 +2036,6 @@ If ARG is non-nil, checking is omitted." (setq diffs (cdr diffs))) (if (interactive-p) (message mes))))) -(defun wl-summary-confirm-appends (appends) - (let ((len (length appends)) - in) - (if (and wl-summary-update-confirm-threshold - (> len wl-summary-update-confirm-threshold)) - (if (y-or-n-p (format "Too many messages(%d). Continue? " len)) - appends - (setq in wl-summary-update-confirm-threshold) - (catch 'end - (while t - (setq in (read-from-minibuffer "Update number: " - (int-to-string in)) - in (string-to-int in)) - (if (< len in) - (throw 'end len)) - (if (y-or-n-p (format "%d messages are disappeared. OK? " - (max (- len in) 0))) - (throw 'end in)))) - (nthcdr (max (- len in) 0) appends)) - appends))) - (defun wl-summary-sync-update (&optional unset-cursor sync-all no-check) "Update the summary view to the newest folder status." (interactive) @@ -2046,7 +2044,6 @@ If ARG is non-nil, checking is omitted." (elmo-mime-charset wl-summary-buffer-mime-charset) (inhibit-read-only t) (buffer-read-only nil) - (elmo-folder-update-threshold wl-summary-update-confirm-threshold) gc-message overview number-alist mark-alist curp num i new-msgdb @@ -2192,9 +2189,10 @@ If ARG is non-nil, checking is omitted." (wl-folder-set-folder-updated (elmo-folder-name-internal folder) (list 0 - (wl-summary-count-unread - (elmo-msgdb-get-mark-alist - (elmo-folder-msgdb folder))) + (let ((pair (wl-summary-count-unread + (elmo-msgdb-get-mark-alist + (elmo-folder-msgdb folder))))) + (+ (car pair) (cdr pair))) (elmo-folder-messages folder))) (wl-summary-update-modeline) (wl-summary-buffer-number-column-detect t) @@ -2371,7 +2369,11 @@ If ARG, without confirm." (defun wl-summary-goto-folder (&optional arg) (interactive "P") - (wl-summary-goto-folder-subr nil nil nil arg t)) + (wl-summary-goto-folder-subr nil nil nil nil t nil arg)) + +(defun wl-summary-goto-folder-sticky () + (interactive) + (wl-summary-goto-folder-subr nil nil nil t t)) (defun wl-summary-goto-last-visited-folder () (interactive) @@ -2496,14 +2498,17 @@ If ARG, without confirm." (defsubst wl-summary-open-folder (folder) ;; Select folder - (unwind-protect - (elmo-folder-open folder 'load-msgdb) - ;; For compatibility - (setq wl-summary-buffer-msgdb (elmo-folder-msgdb folder)) - (setq wl-summary-buffer-folder-name (elmo-folder-name-internal folder)))) + (let ((elmo-mime-charset wl-summary-buffer-mime-charset)) + (unwind-protect + (elmo-folder-open folder 'load-msgdb) + ;; For compatibility + (setq wl-summary-buffer-msgdb (elmo-folder-msgdb folder)) + (setq wl-summary-buffer-folder-name (elmo-folder-name-internal + folder))))) (defun wl-summary-goto-folder-subr (&optional name scan-type other-window - sticky interactive scoring) + sticky interactive scoring + force-exit) "Display target folder on summary." (interactive) (let* ((keep-cursor (memq this-command @@ -2516,15 +2521,17 @@ If ARG, without confirm." (setq name wl-default-folder)) (setq folder (wl-folder-get-elmo-folder name)) (when (and (not (string= - (and cur-fld - (elmo-folder-name-internal cur-fld)) + (and cur-fld (elmo-folder-name-internal cur-fld)) (elmo-folder-name-internal folder))) ; folder is moved. (eq major-mode 'wl-summary-mode)) ; called in summary. (setq wl-summary-last-visited-folder (wl-summary-buffer-folder-name)) (run-hooks 'wl-summary-exit-pre-hook) - (wl-summary-cleanup-temp-marks (wl-summary-sticky-p)) - (wl-summary-save-view 'keep) ; keep current buffer, anyway. - (elmo-folder-commit wl-summary-buffer-elmo-folder)) + (if (or force-exit (not (wl-summary-sticky-p))) + (wl-summary-cleanup-temp-marks (wl-summary-sticky-p))) + (wl-summary-save-view) + (elmo-folder-commit wl-summary-buffer-elmo-folder) + (if (and (wl-summary-sticky-p) force-exit) + (kill-buffer (current-buffer)))) (setq buf (wl-summary-get-buffer-create (elmo-folder-name-internal folder) sticky)) (setq reuse-buf @@ -2618,6 +2625,11 @@ If ARG, without confirm." ;; wl-auto-select-first is non-nil and ;; unreadp is non-nil but not important (setq retval 'disp-msg)) + ((and wl-auto-prefetch-first + (wl-summary-auto-select-msg-p unreadp)) + ;; wl-auto-select-first is non-nil and + ;; unreadp is non-nil but not important + (setq retval 'prefetch-msg)) ((not (wl-summary-auto-select-msg-p unreadp)) ;; unreadp is nil or important (setq retval 'more-next)))) @@ -2643,6 +2655,13 @@ If ARG, without confirm." (wl-highlight-summary (point-min) (point-max)))) (if (eq retval 'disp-msg) (wl-summary-redisplay)) + (if (eq retval 'prefetch-msg) + (wl-message-buffer-prefetch + folder + (wl-summary-message-number) + wl-message-buffer-prefetch-depth + (current-buffer) + wl-summary-buffer-mime-charset)) (if mes (message "%s" mes)) (if (and interactive wl-summary-recenter) (recenter (/ (- (window-height) 2) 2)))))) @@ -3306,7 +3325,6 @@ If optional argument NUMBER is specified, mark message specified by NUMBER." (wl-summary-refile-subr 'copy (interactive-p) dst number)) (defun wl-summary-refile-subr (copy-or-refile interactive &optional dst number) - (interactive) (let* ((buffer-num (wl-summary-message-number)) (msg-num (or number buffer-num)) (msgid (and msg-num @@ -3684,32 +3702,44 @@ If optional argument NUMBER is specified, mark message specified by NUMBER." (wl-summary-target-mark-region beg end))) (defun wl-summary-target-mark-msgs (msgs) - (while msgs - (if (eq wl-summary-buffer-view 'thread) - (wl-thread-jump-to-msg (car msgs)) - (wl-summary-jump-to-msg (car msgs))) - (wl-summary-target-mark (wl-summary-message-number)) - (setq msgs (cdr msgs)))) + "Return the number of marked messages." + (let ((i 0) num) + (while msgs + (if (eq wl-summary-buffer-view 'thread) + (wl-thread-jump-to-msg (car msgs)) + (wl-summary-jump-to-msg (car msgs))) + (setq num (wl-summary-message-number)) + (when (eq num (car msgs)) + (wl-summary-target-mark num) + (setq i (1+ i))) + (setq msgs (cdr msgs))) + i)) (defun wl-summary-pick (&optional from-list delete-marks) (interactive) - (let ((result (elmo-msgdb-search - wl-summary-buffer-elmo-folder - (elmo-read-search-condition wl-summary-pick-field-default) - (wl-summary-buffer-msgdb)))) - (if delete-marks - (let ((mlist wl-summary-buffer-target-mark-list)) - (while mlist - (when (wl-summary-jump-to-msg (car mlist)) - (wl-summary-unmark)) - (setq mlist (cdr mlist))) - (setq wl-summary-buffer-target-mark-list nil))) - (if from-list - (setq result (elmo-list-filter from-list result))) - (message "%d message(s) are picked." (length result)) - (if (null result) - (message "No message was picked.") - (wl-summary-target-mark-msgs result)))) + (save-excursion + (let* ((condition (car (elmo-parse-search-condition + (elmo-read-search-condition + wl-summary-pick-field-default)))) + (result (elmo-folder-search wl-summary-buffer-elmo-folder + condition + from-list)) + num) + (if delete-marks + (let ((mlist wl-summary-buffer-target-mark-list)) + (while mlist + (when (wl-summary-jump-to-msg (car mlist)) + (wl-summary-unmark)) + (setq mlist (cdr mlist))) + (setq wl-summary-buffer-target-mark-list nil))) + (if (and result + (setq num (wl-summary-target-mark-msgs result)) + (> num 0)) + (if (= num (length result)) + (message "%d message(s) are picked." num) + (message "%d(%d) message(s) are picked." num + (- (length result) num))) + (message "No message was picked."))))) (defun wl-summary-unvirtual () "Exit from current virtual folder." @@ -3736,19 +3766,26 @@ If ARG, exit virtual folder." (wl-summary-buffer-folder-name)) 'update nil nil t))) -(defun wl-summary-delete-all-temp-marks () +(defun wl-summary-delete-all-temp-marks (&optional no-msg) + "Erase all temp marks from buffer." (interactive) - (save-excursion - (goto-char (point-min)) - (message "Unmarking...") - (while (not (eobp)) - (wl-summary-unmark) - (forward-line)) - (message "Unmarking...done") - (setq wl-summary-buffer-target-mark-list nil) - (setq wl-summary-buffer-delete-list nil) - (setq wl-summary-buffer-refile-list nil) - (setq wl-summary-buffer-copy-list nil))) + (when (or wl-summary-buffer-target-mark-list + wl-summary-buffer-delete-list + wl-summary-buffer-refile-list + wl-summary-buffer-copy-list) + (save-excursion + (goto-char (point-min)) + (unless no-msg + (message "Unmarking...")) + (while (not (eobp)) + (wl-summary-unmark) + (forward-line)) + (unless no-msg + (message "Unmarking...done")) + (setq wl-summary-buffer-target-mark-list nil) + (setq wl-summary-buffer-delete-list nil) + (setq wl-summary-buffer-refile-list nil) + (setq wl-summary-buffer-copy-list nil)))) (defun wl-summary-delete-mark (number) "Delete temporary mark of the message specified by NUMBER." @@ -3886,6 +3923,28 @@ If ARG, exit virtual folder." (delq (car mlist) wl-summary-buffer-target-mark-list)) (setq mlist (cdr mlist))))))) +(defun wl-summary-next-buffer () + "Switch to next summary buffer." + (interactive) + (let ((buffers (sort (wl-collect-summary) + (lambda (buffer1 buffer2) + (string-lessp (buffer-name buffer1) + (buffer-name buffer2)))))) + (switch-to-buffer + (or (cadr (memq (current-buffer) buffers)) + (car buffers))))) + +(defun wl-summary-previous-buffer () + "Switch to previous summary buffer." + (interactive) + (let ((buffers (sort (wl-collect-summary) + (lambda (buffer1 buffer2) + (not (string-lessp (buffer-name buffer1) + (buffer-name buffer2))))))) + (switch-to-buffer + (or (cadr (memq (current-buffer) buffers)) + (car buffers))))) + (defun wl-summary-target-mark-copy () (interactive) (wl-summary-target-mark-refile-subr "copy")) @@ -3988,7 +4047,8 @@ If ARG, exit virtual folder." (save-excursion (goto-char (point-min)) (let ((wl-save-dir - (wl-read-directory-name "Save to directory: " wl-tmp-dir)) + (wl-read-directory-name "Save to directory: " + wl-temporary-file-directory)) (regexp (concat "^" wl-summary-buffer-number-regexp "\\(\\*\\)")) number mlist) (if (null (file-exists-p wl-save-dir)) @@ -4167,7 +4227,7 @@ If ARG, exit virtual folder." (elmo-msgdb-mark-set mark-alist number wl-summary-important-mark)) - (if (elmo-file-cache-exists-p message-id) + (if (eq (elmo-file-cache-exists-p message-id) 'entire) (elmo-folder-mark-as-read folder (list number)) ;; Force cache message. (elmo-message-encache folder number 'read)) @@ -4393,6 +4453,10 @@ If ARG, exit virtual folder." (cache (expand-file-name wl-summary-cache-file dir)) (view (expand-file-name wl-summary-view-file dir)) (save-view wl-summary-buffer-view) + (mark-list (copy-sequence wl-summary-buffer-target-mark-list)) + (refile-list (copy-sequence wl-summary-buffer-refile-list)) + (copy-list (copy-sequence wl-summary-buffer-copy-list)) + (delete-list (copy-sequence wl-summary-buffer-delete-list)) (tmp-buffer (get-buffer-create " *wl-summary-save-view-cache*")) (charset wl-summary-buffer-mime-charset)) (if (file-directory-p dir) @@ -4408,6 +4472,11 @@ If ARG, exit virtual folder." (copy-to-buffer tmp-buffer (point-min) (point-max)) (with-current-buffer tmp-buffer (widen) + (setq wl-summary-buffer-target-mark-list mark-list + wl-summary-buffer-refile-list refile-list + wl-summary-buffer-copy-list copy-list + wl-summary-buffer-delete-list delete-list) + (wl-summary-delete-all-temp-marks 'no-msg) (encode-mime-charset-region (point-min) (point-max) charset) (write-region-as-binary (point-min)(point-max) @@ -4435,6 +4504,7 @@ If ARG, exit virtual folder." "returns update or all or rescan." ;; for the case when parts are expanded in the bottom of the folder (let ((input-range-list '("update" "all" "rescan" "first:" "last:" + "cache-status" "no-sync" "rescan-noscore" "all-visible")) (default (or (wl-get-assoc-list-value wl-folder-sync-range-alist @@ -4600,11 +4670,19 @@ If ARG, exit virtual folder." (defun wl-summary-next-page () (interactive) - (wl-message-next-page)) + (let ((cur-buf (current-buffer))) + (wl-summary-toggle-disp-msg 'on) + (when (wl-summary-set-message-buffer-or-redisplay 'ignore-original) + (set-buffer cur-buf) + (wl-message-next-page)))) (defun wl-summary-prev-page () (interactive) - (wl-message-prev-page)) + (let ((cur-buf (current-buffer))) + (wl-summary-toggle-disp-msg 'on) + (when (wl-summary-set-message-buffer-or-redisplay 'ignore-original) + (set-buffer cur-buf) + (wl-message-prev-page)))) (defsubst wl-summary-no-mime-p (folder) (wl-string-match-member (elmo-folder-name-internal folder) @@ -4628,7 +4706,7 @@ Return t if message exists." (set-buffer wl-message-buffer) t) (if (wl-summary-no-mime-p folder) - (wl-summary-redisplay-no-mime folder number) + (wl-summary-redisplay-no-mime-internal folder number) (wl-summary-redisplay-internal folder number)) (when (buffer-live-p wl-message-buffer) (set-buffer wl-message-buffer)) @@ -4910,7 +4988,7 @@ Reply to author if invoked with ARG." "Write a new draft from Summary." (interactive) (wl-draft nil nil nil nil nil - nil nil nil nil nil nil (current-buffer) + nil nil nil nil nil nil nil (wl-summary-buffer-folder-name)) (run-hooks 'wl-mail-setup-hook) (mail-position-on-field "To")) @@ -4937,20 +5015,20 @@ Use function list is `wl-summary-write-current-folder-functions'." (setq func-list (cdr func-list)) (setq guess-func (car func-list)) (setq func-list nil))) - (when (null guess-func) - (error "Can't guess by folder %s" folder)) - (unless (or (stringp (nth 0 guess-list)) - (stringp (nth 1 guess-list)) - (stringp (nth 2 guess-list))) - (error "Invalid value return guess function `%s'" - (symbol-name guess-func))) - (wl-draft (nth 0 guess-list) nil nil ; To: - (nth 1 guess-list) nil ; Cc: - (nth 2 guess-list) ; Newsgroups: - nil nil nil nil nil nil nil - folder) - (run-hooks 'wl-mail-setup-hook) - (mail-position-on-field "Subject"))) + (if (null guess-func) + (wl-draft) + (unless (or (stringp (nth 0 guess-list)) + (stringp (nth 1 guess-list)) + (stringp (nth 2 guess-list))) + (error "Invalid value return guess function `%s'" + (symbol-name guess-func))) + (wl-draft (nth 0 guess-list) nil nil ; To: + (nth 1 guess-list) nil ; Cc: + (nth 2 guess-list) ; Newsgroups: + nil nil nil nil nil nil + folder) + (run-hooks 'wl-mail-setup-hook) + (mail-position-on-field "Subject")))) (defun wl-summary-forward (&optional without-setup-hook) "" @@ -5236,13 +5314,25 @@ Use function list is `wl-summary-write-current-folder-functions'." (if (not wl-summary-indent-length-limit) (wl-horizontal-recenter))) (wl-highlight-summary-displaying) - (wl-message-buffer-prefetch-next folder num (current-buffer) + (wl-message-buffer-prefetch-next folder num + wl-message-buffer-prefetch-depth + (current-buffer) wl-summary-buffer-mime-charset) (run-hooks 'wl-summary-redisplay-hook)) (message "No message to display.")))) -(defun wl-summary-redisplay-no-mime (&optional folder number) - (interactive) +(defun wl-summary-redisplay-no-mime (&optional ask-coding) + "Display message without MIME decoding. +If ASK-CODING is non-nil, coding-system for the message is asked." + (interactive "P") + (let ((elmo-mime-display-as-is-coding-system + (if ask-coding + (or (read-coding-system "Coding system: ") + elmo-mime-display-as-is-coding-system) + elmo-mime-display-as-is-coding-system))) + (wl-summary-redisplay-no-mime-internal))) + +(defun wl-summary-redisplay-no-mime-internal (&optional folder number) (let* ((fld (or folder wl-summary-buffer-elmo-folder)) (num (or number (wl-summary-message-number))) wl-break-pages) @@ -5383,7 +5473,7 @@ Use function list is `wl-summary-write-current-folder-functions'." "Supersedes: " message-id "\n" (and followup-to (concat "Followup-To: " followup-to "\n"))))) - (if message-buf (set-buffer message-buf)) + (if message-buf (set-buffer message-buf)) (wl-draft-edit-string (buffer-substring (point-min) (point-max))))))) (defun wl-summary-save (&optional arg wl-save-dir) @@ -5391,7 +5481,7 @@ Use function list is `wl-summary-write-current-folder-functions'." (let ((filename) (num (wl-summary-message-number))) (if (null wl-save-dir) - (setq wl-save-dir wl-tmp-dir)) + (setq wl-save-dir wl-temporary-file-directory)) (if num (save-excursion (setq filename (expand-file-name @@ -5418,7 +5508,8 @@ Use function list is `wl-summary-write-current-folder-functions'." (narrow-to-region beg end) (goto-char (point-min)) (let ((wl-save-dir - (wl-read-directory-name "Save to directory: " wl-tmp-dir))) + (wl-read-directory-name "Save to directory: " + wl-temporary-file-directory))) (if (null (file-exists-p wl-save-dir)) (make-directory wl-save-dir)) (if (eq wl-summary-buffer-view 'thread) @@ -5575,15 +5666,15 @@ Use function list is `wl-summary-write-current-folder-functions'." (set-buffer tmp-buf) (message "Exec %s..." wl-prog-uudecode) (unwind-protect - (let ((decode-dir wl-tmp-dir)) + (let ((decode-dir wl-temporary-file-directory)) (if (not wl-prog-uudecode-no-stdout-option) (setq filename (read-file-name "Save to file: " (expand-file-name (elmo-safe-filename filename) - wl-tmp-dir))) + wl-temporary-file-directory))) (setq decode-dir (wl-read-directory-name "Save to directory: " - wl-tmp-dir)) + wl-temporary-file-directory)) (setq filename (expand-file-name filename decode-dir))) (if (file-exists-p filename) (or (yes-or-no-p (format "File %s exists. Save anyway? "