(defvar dragdrop-drop-functions)
(defvar scrollbar-height)
(defvar mail-reply-buffer)
+(defvar elmo-global-flag-list)
(defvar wl-summary-buffer-name "Summary")
(defvar wl-summary-mode-map nil)
(` (and wl-summary-buffer-elmo-folder
(elmo-folder-name-internal wl-summary-buffer-elmo-folder))))
-(defmacro wl-summary-buffer-msgdb ()
- (` (and wl-summary-buffer-elmo-folder
- (elmo-folder-msgdb wl-summary-buffer-elmo-folder))))
-
(defvar wl-summary-buffer-disp-msg nil)
(defvar wl-summary-buffer-disp-folder nil)
(defvar wl-summary-buffer-temp-mark-list nil)
(defvar wl-summary-buffer-temp-mark-column nil)
(defvar wl-summary-buffer-persistent-mark-column nil)
+(defvar wl-summary-buffer-unsync-mark-number-list nil)
+
(defvar wl-summary-buffer-persistent nil)
(defvar wl-summary-buffer-thread-nodes nil)
(defvar wl-summary-buffer-target-mark-list nil)
(defvar wl-summary-buffer-prev-refile-destination nil)
-(defvar wl-summary-buffer-prev-copy-destination nil)
(defvar wl-summary-buffer-saved-message nil)
(defvar wl-summary-buffer-prev-folder-function nil)
(defvar wl-summary-buffer-next-folder-function nil)
(defvar wl-summary-buffer-exit-function nil)
(defvar wl-summary-buffer-next-message-function nil)
+(defvar wl-summary-buffer-window-scroll-functions nil)
(defvar wl-summary-buffer-number-list nil)
-(defvar wl-summary-buffer-msgdb nil)
(defvar wl-summary-buffer-folder-name nil)
(defvar wl-summary-buffer-line-formatter nil)
(defvar wl-summary-buffer-line-format nil)
(defvar wl-thread-horizontal-str-internal nil)
(defvar wl-thread-space-str-internal nil)
(defvar wl-summary-last-visited-folder nil)
-(defvar wl-read-folder-hist nil)
+(defvar wl-read-folder-history nil)
(defvar wl-summary-scored nil)
(defvar wl-crosspost-alist-modified nil)
(defvar wl-summary-alike-hashtb nil)
(defvar wl-ps-preprint-hook nil)
(defvar wl-ps-print-hook nil)
+(defvar wl-thread-saved-entity-hashtb-internal nil)
+
(make-variable-buffer-local 'wl-summary-buffer-elmo-folder)
(make-variable-buffer-local 'wl-summary-search-buf-folder-name)
(make-variable-buffer-local 'wl-summary-buffer-disp-msg)
(make-variable-buffer-local 'wl-summary-buffer-number-column)
(make-variable-buffer-local 'wl-summary-buffer-temp-mark-column)
(make-variable-buffer-local 'wl-summary-buffer-persistent-mark-column)
+(make-variable-buffer-local 'wl-summary-buffer-unsync-mark-number-list)
(make-variable-buffer-local 'wl-summary-buffer-persistent)
(make-variable-buffer-local 'wl-summary-buffer-thread-nodes)
(make-variable-buffer-local 'wl-summary-buffer-prev-refile-destination)
(make-variable-buffer-local 'wl-summary-buffer-next-folder-function)
(make-variable-buffer-local 'wl-summary-buffer-exit-function)
(make-variable-buffer-local 'wl-summary-buffer-next-message-function)
+(make-variable-buffer-local 'wl-summary-buffer-window-scroll-functions)
(make-variable-buffer-local 'wl-summary-buffer-number-list)
-(make-variable-buffer-local 'wl-summary-buffer-msgdb)
(make-variable-buffer-local 'wl-summary-buffer-folder-name)
(make-variable-buffer-local 'wl-summary-buffer-line-formatter)
(make-variable-buffer-local 'wl-summary-buffer-line-format)
string)
string))
-(defvar wl-summary-sort-specs '(number date subject from list-info))
+(defvar wl-summary-sort-specs '(number date subject from list-info size))
(defvar wl-summary-default-sort-spec 'date)
(defvar wl-summary-mode-menu-spec
["Stick" wl-summary-stick t]
("Sort"
["By Number" wl-summary-sort-by-number t]
+ ["By Size" wl-summary-sort-by-size t]
["By Date" wl-summary-sort-by-date t]
["By From" wl-summary-sort-by-from t]
["By Subject" wl-summary-sort-by-subject t]
"----"
("Message Operation"
["Mark as read" wl-summary-mark-as-read t]
- ["Mark as important" wl-summary-mark-as-important t]
+ ["Set flags" wl-summary-set-flags t]
["Mark as unread" wl-summary-mark-as-unread t]
+ ["Mark as answered" wl-summary-mark-as-answered t]
["Set dispose mark" wl-summary-dispose t]
["Set refile mark" wl-summary-refile t]
["Set copy mark" wl-summary-copy t]
["Set resend mark" wl-summary-resend t]
- ["Prefetch" wl-summary-prefetch t]
+ ["Prefetch" wl-summary-prefetch t]
["Set target mark" wl-summary-target-mark t]
- ["Unmark" wl-summary-unmark t]
+ ["Unmark" wl-summary-unmark t]
["Save" wl-summary-save t]
["Cancel posted news" wl-summary-cancel-message t]
["Supersedes message" wl-summary-supersedes-message t]
["Open all" wl-thread-open-all (eq wl-summary-buffer-view 'thread)]
["Close all" wl-thread-close-all (eq wl-summary-buffer-view 'thread)]
["Mark as read" wl-thread-mark-as-read (eq wl-summary-buffer-view 'thread)]
- ["Mark as important" wl-thread-mark-as-important (eq wl-summary-buffer-view 'thread)]
+ ["Set flags" wl-thread-set-flags (eq wl-summary-buffer-view 'thread)]
["Mark as unread" wl-thread-mark-as-unread (eq wl-summary-buffer-view 'thread)]
+ ["Mark as answered" wl-thread-mark-as-answered (eq wl-summary-buffer-view 'thread)]
["Set delete mark" wl-thread-delete (eq wl-summary-buffer-view 'thread)]
["Set refile mark" wl-thread-refile (eq wl-summary-buffer-view 'thread)]
["Set copy mark" wl-thread-copy (eq wl-summary-buffer-view 'thread)]
["Execute" wl-thread-exec (eq wl-summary-buffer-view 'thread)])
("Region Operation"
["Mark as read" wl-summary-mark-as-read-region t]
- ["Mark as important" wl-summary-mark-as-important-region t]
+ ["Set flags" wl-summary-set-flags-region t]
["Mark as unread" wl-summary-mark-as-unread-region t]
+ ["Mark as answered" wl-summary-mark-as-answered-region t]
["Set dispose mark" wl-summary-dispose-region t]
["Set refile mark" wl-summary-refile-region t]
["Set copy mark" wl-summary-copy-region t]
["Execute" wl-summary-exec-region t])
("Mark Operation"
["Mark as read" wl-summary-target-mark-mark-as-read t]
- ["Mark as important" wl-summary-target-mark-mark-as-important t]
+ ["Set flags" wl-summary-target-mark-set-flags t]
["Mark as unread" wl-summary-target-mark-mark-as-unread t]
["Set delete mark" wl-summary-target-mark-delete t]
["Set refile mark" wl-summary-target-mark-refile t]
(define-key wl-summary-mode-map [mouse-5] 'wl-summary-next)
(define-key wl-summary-mode-map [S-mouse-4] 'wl-summary-up)
(define-key wl-summary-mode-map [S-mouse-5] 'wl-summary-down)
+ ;; For Meadow2
+ (define-key wl-summary-mode-map [mouse-wheel1]
+ 'wl-summary-wheel-dispatcher)
+ (define-key wl-summary-mode-map [S-mouse-wheel1]
+ 'wl-summary-wheel-dispatcher)
(define-key wl-summary-mode-map [mouse-2] 'wl-summary-click)))
(if wl-summary-mode-map
(define-key wl-summary-mode-map "E" 'wl-summary-reedit)
(define-key wl-summary-mode-map "\eE" 'wl-summary-resend-bounced-mail)
(define-key wl-summary-mode-map "f" 'wl-summary-forward)
- (define-key wl-summary-mode-map "$" 'wl-summary-mark-as-important)
+ (define-key wl-summary-mode-map "$" 'wl-summary-set-flags)
(define-key wl-summary-mode-map "&" 'wl-summary-mark-as-answered)
(define-key wl-summary-mode-map "@" 'wl-summary-edit-addresses)
(define-key wl-summary-mode-map "t*" 'wl-thread-target-mark)
(define-key wl-summary-mode-map "to" 'wl-thread-refile)
(define-key wl-summary-mode-map "tO" 'wl-thread-copy)
+ (define-key wl-summary-mode-map "t\M-o" 'wl-thread-refile-prev-destination)
(define-key wl-summary-mode-map "td" 'wl-thread-dispose)
(define-key wl-summary-mode-map "tD" 'wl-thread-delete)
(define-key wl-summary-mode-map "t~" 'wl-thread-resend)
(define-key wl-summary-mode-map "tu" 'wl-thread-unmark)
(define-key wl-summary-mode-map "t!" 'wl-thread-mark-as-unread)
- (define-key wl-summary-mode-map "t$" 'wl-thread-mark-as-important)
+ (define-key wl-summary-mode-map "t$" 'wl-thread-set-flags)
+ (define-key wl-summary-mode-map "t&" 'wl-thread-mark-as-answered)
(define-key wl-summary-mode-map "ty" 'wl-thread-save)
(define-key wl-summary-mode-map "ts" 'wl-thread-set-parent)
(define-key wl-summary-mode-map "mi" 'wl-summary-target-mark-prefetch)
(define-key wl-summary-mode-map "mo" 'wl-summary-target-mark-refile)
(define-key wl-summary-mode-map "mO" 'wl-summary-target-mark-copy)
+ (define-key wl-summary-mode-map "m\M-o" 'wl-summary-target-mark-refile-prev-destination)
(define-key wl-summary-mode-map "md" 'wl-summary-target-mark-dispose)
(define-key wl-summary-mode-map "mD" 'wl-summary-target-mark-delete)
(define-key wl-summary-mode-map "m~" 'wl-summary-target-mark-resend)
(define-key wl-summary-mode-map "my" 'wl-summary-target-mark-save)
(define-key wl-summary-mode-map "mR" 'wl-summary-target-mark-mark-as-read)
(define-key wl-summary-mode-map "m!" 'wl-summary-target-mark-mark-as-unread)
- (define-key wl-summary-mode-map "m$" 'wl-summary-target-mark-mark-as-important)
+ (define-key wl-summary-mode-map "m$" 'wl-summary-target-mark-set-flags)
(define-key wl-summary-mode-map "mU" 'wl-summary-target-mark-uudecode)
(define-key wl-summary-mode-map "ma" 'wl-summary-target-mark-all)
(define-key wl-summary-mode-map "mt" 'wl-summary-target-mark-thread)
(define-key wl-summary-mode-map "r*" 'wl-summary-target-mark-region)
(define-key wl-summary-mode-map "ro" 'wl-summary-refile-region)
(define-key wl-summary-mode-map "rO" 'wl-summary-copy-region)
+ (define-key wl-summary-mode-map "r\M-o" 'wl-summary-refile-prev-destination-region)
(define-key wl-summary-mode-map "rd" 'wl-summary-dispose-region)
(define-key wl-summary-mode-map "rD" 'wl-summary-delete-region)
(define-key wl-summary-mode-map "r~" 'wl-summary-resend-region)
(define-key wl-summary-mode-map "ru" 'wl-summary-unmark-region)
(define-key wl-summary-mode-map "r!" 'wl-summary-mark-as-unread-region)
- (define-key wl-summary-mode-map "r$" 'wl-summary-mark-as-important-region)
+ (define-key wl-summary-mode-map "r$" 'wl-summary-set-flags-region)
+ (define-key wl-summary-mode-map "r&" 'wl-summary-mark-as-answered-region)
(define-key wl-summary-mode-map "ry" 'wl-summary-save-region)
;; score commands
(define-key wl-summary-mode-map "hm" 'wl-score-set-mark-below)
(define-key wl-summary-mode-map "hx" 'wl-score-set-expunge-below)
+ ;; misc
+ (define-key wl-summary-mode-map "\C-c\C-f" 'wl-summary-toggle-header-narrowing)
(define-key wl-summary-mode-map "\M-t" 'wl-toggle-plugged)
(define-key wl-summary-mode-map "\C-t" 'wl-plugged-change)
;;
(not (wl-thread-entity-parent-invisible-p
(wl-thread-get-entity number)))))
+(defun wl-summary-update-mark-and-highlight-window (&optional win beg)
+ "A function to be called as window-scroll-functions."
+ (with-current-buffer (window-buffer win)
+ (when (eq major-mode 'wl-summary-mode)
+ (let ((beg (or beg (window-start win)))
+ (end (condition-case nil
+ (window-end win t) ; old emacsen doesn't support 2nd arg.
+ (error (window-end win))))
+ number flags
+ wl-summary-highlight)
+ (save-excursion
+ (goto-char beg)
+ (while (and (< (point) end) (not (eobp)))
+ (when (null (get-text-property (point) 'face))
+ (setq number (wl-summary-message-number)
+ flags (elmo-message-flags wl-summary-buffer-elmo-folder
+ number))
+ (setq wl-summary-highlight nil)
+ (wl-summary-update-persistent-mark number flags)
+ (setq wl-summary-highlight t)
+ (wl-highlight-summary-current-line number flags))
+ (forward-line 1)))))
+ (set-buffer-modified-p nil)))
+
+(defun wl-summary-window-scroll-functions ()
+ (cond ((and wl-summary-lazy-highlight
+ wl-summary-lazy-update-mark)
+ (list 'wl-summary-update-mark-and-highlight-window))
+ (wl-summary-lazy-highlight
+ (list 'wl-highlight-summary-window))
+ (wl-summary-lazy-update-mark
+ (list 'wl-summary-update-mark-window))))
+
(defun wl-status-update ()
(interactive)
(wl-address-init))
(defun wl-summary-display-top ()
(interactive)
(goto-char (point-min))
- (when wl-summary-lazy-highlight
- (wl-highlight-summary-window))
+ (run-hooks 'wl-summary-buffer-window-scroll-functions)
(if wl-summary-buffer-disp-msg
(wl-summary-redisplay)))
(interactive)
(goto-char (point-max))
(forward-line -1)
- (when wl-summary-lazy-highlight
- (wl-highlight-summary-window))
+ (run-hooks 'wl-summary-buffer-window-scroll-functions)
(if wl-summary-buffer-disp-msg
(wl-summary-redisplay)))
(let ((column wl-summary-buffer-number-column)
(formatter wl-summary-buffer-line-formatter)
(dummy-temp (char-to-string 200))
- (dummy-persistent (char-to-string 201))
+ ;; bind only for the check.
+ (wl-summary-new-uncached-mark (char-to-string 201))
+ (wl-summary-persistent-mark-priority-list '(new)) ; ditto.
+ (lang wl-summary-buffer-weekday-name-lang)
+ wl-summary-highlight
temp persistent)
(with-temp-buffer
(setq wl-summary-buffer-number-column column
- wl-summary-buffer-line-formatter formatter)
+ wl-summary-buffer-line-formatter formatter
+ wl-summary-buffer-weekday-name-lang lang)
(insert
(wl-summary-create-line
(elmo-msgdb-make-message-entity
+ (luna-make-entity 'modb-entity-handler)
:number 10000
:from "foo"
:subject "bar"
:size 100)
nil
dummy-temp
- dummy-persistent))
+ '(new)
+ nil))
(goto-char (point-min))
(setq temp (save-excursion
(when (search-forward dummy-temp nil t)
(current-column)))
- persistent (save-excursion
- (when (search-forward dummy-persistent nil t)
- (current-column)))))
+ persistent
+ (save-excursion
+ (when (search-forward wl-summary-new-uncached-mark nil t)
+ (current-column)))))
(setq wl-summary-buffer-temp-mark-column temp
wl-summary-buffer-persistent-mark-column persistent)))
wl-summary-buffer-mode-line-formatter
wl-summary-mode-line-format
wl-summary-mode-line-format-spec-alist)
- (wl-summary-detect-mark-position)
(setq wl-summary-buffer-persistent
(wl-folder-persistent-p (elmo-folder-name-internal folder)))
(elmo-folder-set-persistent-internal folder wl-summary-buffer-persistent)
selective-display-ellipses nil)
(wl-mode-line-buffer-identification '(wl-summary-buffer-mode-line))
(easy-menu-add wl-summary-mode-menu)
- (when wl-summary-lazy-highlight
- (if wl-on-xemacs
- (progn
- (make-local-variable 'pre-idle-hook)
- (add-hook 'pre-idle-hook 'wl-highlight-summary-window))
- (make-local-variable 'window-scroll-functions)
- (add-hook 'window-scroll-functions 'wl-highlight-summary-window)))
+ (setq wl-summary-buffer-window-scroll-functions
+ (wl-summary-window-scroll-functions))
+ (when wl-summary-buffer-window-scroll-functions
+ (let ((hook (if wl-on-xemacs 'pre-idle-hook 'window-scroll-functions)))
+ (make-local-hook hook)
+ (dolist (function wl-summary-buffer-window-scroll-functions)
+ (add-hook hook function nil t))))
;; This hook may contain the function `wl-setup-summary' for reasons
;; of system internal to accord facilities for the Emacs variants.
(run-hooks 'wl-summary-mode-hook))
;;;
+(defun wl-summary-overview-entity-compare-by-size (x y)
+ "Compare entity X and Y by size."
+ (< (elmo-message-entity-field x 'size)
+ (elmo-message-entity-field y 'size)))
+
+
(defun wl-summary-overview-entity-compare-by-date (x y)
"Compare entity X and Y by date."
(condition-case nil
"Compare entity X and Y by from."
(string<
(wl-address-header-extract-address
- (or (elmo-message-entity-field x 'from)
+ (or (elmo-message-entity-field x 'from t)
wl-summary-no-from-message))
(wl-address-header-extract-address
- (or (elmo-message-entity-field y 'from)
+ (or (elmo-message-entity-field y 'from t)
wl-summary-no-from-message))))
(defun wl-summary-overview-entity-compare-by-subject (x y)
(interactive)
(wl-summary-rescan "list-info"))
-(defun wl-summary-rescan (&optional sort-by disable-killed)
+(defun wl-summary-rescan (&optional sort-by disable-killed disable-thread)
"Rescan current folder without updating."
(interactive)
(let ((elmo-mime-charset wl-summary-buffer-mime-charset)
(buffer-read-only nil)
(numbers (elmo-folder-list-messages wl-summary-buffer-elmo-folder
(not disable-killed) t)) ; in-msgdb
+ (wl-thread-saved-entity-hashtb-internal (and (not disable-thread)
+ wl-thread-entity-hashtb))
+ (wl-summary-search-parent-by-subject-regexp
+ (and disable-thread wl-summary-search-parent-by-subject-regexp))
+ (wl-summary-divide-thread-when-subject-changed
+ (and disable-thread wl-summary-divide-thread-when-subject-changed))
expunged)
(erase-buffer)
(message "Re-scanning...")
wl-thread-entities nil
wl-summary-scored nil
wl-summary-buffer-number-list nil
+ wl-summary-buffer-unsync-mark-number-list nil
wl-summary-buffer-target-mark-list nil
wl-summary-buffer-temp-mark-list nil
wl-summary-delayed-update nil)
(while wl-summary-delayed-update
(message "Parent (%d) of message %d is no entity"
(caar wl-summary-delayed-update)
- (elmo-msgdb-overview-entity-get-number
+ (elmo-message-entity-number
(cdar wl-summary-delayed-update)))
(wl-summary-insert-message
(cdar wl-summary-delayed-update)
"folder mode"))
(defun wl-summary-set-message-modified ()
- (elmo-folder-set-message-modified
- wl-summary-buffer-elmo-folder t)
- (setq wl-summary-buffer-message-modified t)
- (wl-summary-set-mark-modified))
+ (setq wl-summary-buffer-message-modified t))
(defun wl-summary-message-modified-p ()
wl-summary-buffer-message-modified)
-(defun wl-summary-set-mark-modified ()
- (elmo-folder-set-mark-modified-internal
- wl-summary-buffer-elmo-folder t))
-(defun wl-summary-mark-modified-p ()
- (elmo-folder-mark-modified-internal
- wl-summary-buffer-elmo-folder))
(defun wl-summary-set-thread-modified ()
(setq wl-summary-buffer-thread-modified t))
(defun wl-summary-thread-modified-p ()
;; save the current summary buffer view.
(if (and wl-summary-cache-use
(or (wl-summary-message-modified-p)
- (wl-summary-mark-modified-p)
(wl-summary-thread-modified-p)))
(wl-summary-save-view-cache))))
wl-folder-buffer-cur-point
(goto-char wl-folder-buffer-cur-point))
(setq wl-folder-buffer-cur-path nil)
+ (setq wl-folder-buffer-last-visited-entity-id wl-folder-buffer-cur-entity-id)
(setq wl-folder-buffer-cur-entity-id nil)
(wl-delete-all-overlays)
(if wl-summary-exit-next-move
nil
wl-use-scoring)))
(wl-summary-rescan nil
- (string-match "noscore" range))
+ (string-match "noscore" range)
+ (string-match "thread" range))
(and msg (wl-summary-jump-to-msg msg))))
((string= range "mark")
(let ((msg (wl-summary-message-number)))
(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))
+ ((string= range "no-sync"))
+ ((or (string-match "^last:" range)
+ (string-match "^first:" range))
(wl-summary-goto-folder-subr (concat "/" range "/"
(elmo-folder-name-internal
folder))
(null wl-prefetch-threshold)
(< size wl-prefetch-threshold))))
mark new-mark)
- (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
- 17
- (funcall wl-summary-from-function
- (eword-decode-string
- (elmo-delete-char
- ?\"
- (or
- (elmo-message-field
- wl-summary-buffer-elmo-folder
- number 'from)
- "??")))))) " ]")
- size))))
- (message "")) ; flush.
- (if force-read
- (save-excursion
- (save-match-data
- ;; online
- (if (or arg (not file-cached))
- (elmo-message-encache
- wl-summary-buffer-elmo-folder
- number))
- (elmo-message-set-cached wl-summary-buffer-elmo-folder
- number t)
- (when (and (wl-summary-jump-to-msg number)
- (wl-summary-update-persistent-mark))
- (sit-for 0)
- (wl-summary-count-unread)
- (wl-summary-update-modeline)
- (wl-folder-update-unread
- (wl-summary-buffer-folder-name)
- (+ wl-summary-buffer-unread-count
- wl-summary-buffer-new-count))))
- t)
- nil))))))
+ (ignore-errors
+ (when (and (or arg (not file-cached))
+ size (not force-read) wl-prefetch-confirm)
+ (let ((wl-message-entity (elmo-message-entity
+ wl-summary-buffer-elmo-folder
+ number)))
+ (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
+ 17
+ (funcall
+ wl-summary-from-function
+ (elmo-delete-char
+ ?\"
+ (or
+ (elmo-message-entity-field
+ wl-message-entity
+ 'from t)
+ "??")))))
+ " ]")
+ size))))
+ (message ""))) ; flush.
+ (if force-read
+ (save-excursion
+ (save-match-data
+ ;; online
+ (if (or arg (not file-cached))
+ (elmo-message-encache
+ wl-summary-buffer-elmo-folder
+ number))
+ (elmo-message-set-cached wl-summary-buffer-elmo-folder
+ number t)
+ (when (and (wl-summary-jump-to-msg number)
+ (wl-summary-update-persistent-mark))
+ (sit-for 0)
+ (wl-summary-count-unread)
+ (wl-summary-update-modeline)
+ (wl-folder-update-unread
+ (wl-summary-buffer-folder-name)
+ (+ wl-summary-buffer-unread-count
+ wl-summary-buffer-new-count))))
+ t)
+ nil)))))
+
+(defsubst wl-summary-narrow-to-region (beg end)
+ (narrow-to-region
+ (save-excursion
+ (goto-char beg)
+ (beginning-of-line)
+ (point))
+ (save-excursion
+ (goto-char end)
+ (if (eq (current-column) 0) (beginning-of-line) (end-of-line))
+ (point))))
(defun wl-summary-prefetch-region-no-mark (beg end &optional prefetch-marks)
(interactive "r")
(save-excursion
(setq start-pos (point))
(save-restriction
- (narrow-to-region beg end)
+ (wl-summary-narrow-to-region beg end)
;; collect prefetch targets.
(message "Collecting marks...")
(goto-char (point-min))
(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)
(let (number-list)
(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)
(let (number-list)
(forward-line 1))
(wl-summary-mark-as-unread number-list))))))
-(defun wl-summary-mark-as-important-region (beg end)
+(defun wl-summary-set-flags-region (beg end)
(interactive "r")
(save-excursion
(save-restriction
- (narrow-to-region beg end);(save-excursion (goto-char end)
- ; (end-of-line) (point)))
+ (wl-summary-narrow-to-region beg end)
(goto-char (point-min))
- (if (eq wl-summary-buffer-view 'thread)
- (progn
+ (let (flags)
+ (if (eq wl-summary-buffer-view 'thread)
(while (not (eobp))
(let* ((number (wl-summary-message-number))
(entity (wl-thread-get-entity number))
(if (wl-thread-entity-get-opened entity)
;; opened...mark line.
;; Crossposts are not processed
- (wl-summary-mark-as-important)
+ (setq flags (wl-summary-set-flags-internal
+ number
+ flags))
;; closed
- (wl-summary-mark-as-important) ; mark itself.
- (setq children
- (delq number (wl-thread-get-children-msgs number)))
- (while children
- (wl-summary-mark-as-important (car children))
- (setq children (cdr children))))
- (forward-line 1))))
- (while (not (eobp))
- (wl-summary-mark-as-important)
- (forward-line 1)))))
+ (setq flags (wl-summary-set-flags-internal
+ (wl-thread-get-children-msgs number)
+ flags)))
+ (forward-line 1)))
+ (while (not (eobp))
+ (setq flags (wl-summary-set-flags-internal
+ (wl-summary-message-number) flags))
+ (forward-line 1))))))
+ (wl-summary-count-unread)
+ (wl-summary-update-modeline))
+
+(defun wl-summary-mark-as-answered-region (beg end)
+ (interactive "r")
+ (save-excursion
+ (save-restriction
+ (wl-summary-narrow-to-region beg end)
+ (goto-char (point-min))
+ (let ((inverse (elmo-message-flagged-p wl-summary-buffer-elmo-folder
+ (wl-summary-message-number)
+ 'answered)))
+ (if (eq wl-summary-buffer-view 'thread)
+ (while (not (eobp))
+ (let* ((number (wl-summary-message-number))
+ (entity (wl-thread-get-entity number))
+ children)
+ (if (wl-thread-entity-get-opened entity)
+ ;; opened...mark line.
+ ;; Crossposts are not processed
+ (wl-summary-mark-as-answered-internal inverse)
+ ;; closed
+ (wl-summary-mark-as-answered-internal
+ inverse
+ (wl-thread-get-children-msgs number)))
+ (forward-line 1)))
+ (while (not (eobp))
+ (wl-summary-mark-as-answered-internal inverse)
+ (forward-line 1))))))
(wl-summary-count-unread)
(wl-summary-update-modeline))
(let ((folder wl-summary-buffer-elmo-folder)
(cur-buf (current-buffer)))
(message "Setting all msgs as read...")
- (elmo-folder-mark-as-read folder
- (elmo-folder-list-unreads
- folder))
+ (elmo-folder-set-flag
+ folder
+ (elmo-folder-list-flagged folder 'unread 'in-msgdb)
+ 'read)
(save-excursion
(goto-char (point-min))
(while (not (eobp))
;;(message (concat deleting-info "done"))
(wl-summary-count-unread)
(wl-summary-update-modeline)
- (wl-folder-set-folder-updated
- (elmo-folder-name-internal wl-summary-buffer-elmo-folder)
- (list 0
- (+ wl-summary-buffer-unread-count wl-summary-buffer-new-count)
- (elmo-folder-length wl-summary-buffer-elmo-folder))))))
+ (wl-summary-folder-info-update))))
-(defun wl-summary-update-status-marks ()
+(defun wl-summary-update-status-marks (beg end &optional check)
"Synchronize status marks on current buffer to the msgdb."
- (interactive)
+ (interactive "r")
(save-excursion
- (goto-char (point-min))
- (while (not (eobp))
- (wl-summary-update-persistent-mark)
+ (goto-char beg)
+ (while (and (< (point) end) (not (eobp)))
+ (when (or (not check)
+ (let ((number (wl-summary-message-number)))
+ (when (memq number wl-summary-buffer-unsync-mark-number-list)
+ (setq wl-summary-buffer-unsync-mark-number-list
+ (delq number
+ wl-summary-buffer-unsync-mark-number-list))
+ t)))
+ (wl-summary-update-persistent-mark))
(forward-line 1))))
+(defun wl-summary-update-mark-window (&optional win beg)
+ "Update persistent mark in visible summary window.
+This function is defined for `window-scroll-functions'"
+ (with-current-buffer (window-buffer win)
+ (when (eq major-mode 'wl-summary-mode)
+ (let ((start (window-start win))
+ (end (condition-case nil
+ (window-end win t) ; old emacsen doesn't support 2nd arg.
+ (error (window-end win)))))
+ (wl-summary-update-status-marks start end 'check)))))
+
(defun wl-summary-insert-message (&rest args)
(if (eq wl-summary-buffer-view 'thread)
(apply 'wl-summary-insert-thread args)
(defun wl-summary-sync-marks ()
"Update persistent marks in summary."
(interactive)
- (let ((last-progress 0)
- (folder wl-summary-buffer-elmo-folder)
- (i 0)
- answereds importants unreads diff diffs
- mes progress)
+ (let ((mes "Updated ")
+ diff diffs)
;; synchronize marks.
(when (not (eq (elmo-folder-type-internal
wl-summary-buffer-elmo-folder)
'internal))
+
(message "Updating marks...")
- (setq importants (elmo-uniq-list
- (nconc
- (elmo-folder-list-importants
- wl-summary-buffer-elmo-folder)
- (elmo-folder-list-messages-with-global-mark
- wl-summary-buffer-elmo-folder
- elmo-msgdb-important-mark)))
- unreads (elmo-folder-list-unreads
- wl-summary-buffer-elmo-folder)
- answereds (elmo-folder-list-answereds
- wl-summary-buffer-elmo-folder))
- (setq diff (elmo-list-diff importants
- (elmo-folder-list-flagged
+ (dolist (flag elmo-global-flag-list)
+ (unless (memq flag '(answered cached new unread))
+ (setq diff (elmo-list-diff (elmo-folder-list-flagged
+ wl-summary-buffer-elmo-folder
+ flag)
+ (elmo-folder-list-flagged
+ wl-summary-buffer-elmo-folder
+ flag 'in-msgdb)))
+ (setq diffs (cadr diff)) ; deletes
+ (setq mes (concat mes (format "-%d" (length diffs))))
+ (while diffs
+ (wl-summary-remove-flags-internal (car diffs)
+ (list flag) 'no-server)
+ (setq diffs (cdr diffs)))
+ (setq diffs (car diff)) ; appends
+ (setq mes (concat mes (format "/+%d %s," (length diffs) flag)))
+ (while diffs
+ (wl-summary-add-flags-internal (car diffs)
+ (list flag) 'no-server)
+ (setq diffs (cdr diffs)))))
+
+ (setq diff (elmo-list-diff (elmo-folder-list-flagged
wl-summary-buffer-elmo-folder
- 'important 'in-msgdb)))
- (setq diffs (cadr diff)) ; important-deletes
- (setq mes (format "Updated (-%d" (length diffs)))
- (while diffs
- (wl-summary-mark-as-important (car diffs)
- elmo-msgdb-important-mark
- 'no-server)
- (setq diffs (cdr diffs)))
- (setq diffs (car diff)) ; important-appends
- (setq mes (concat mes (format "/+%d) important," (length diffs))))
- (while diffs
- (wl-summary-mark-as-important (car diffs) " " 'no-server)
- (setq diffs (cdr diffs)))
-
- (setq diff (elmo-list-diff answereds
+ 'answered)
(elmo-folder-list-flagged
wl-summary-buffer-elmo-folder
'answered 'in-msgdb)))
(setq diffs (cadr diff))
- (setq mes (concat mes (format "(-%d" (length diffs))))
+ (setq mes (concat mes (format "-%d" (length diffs))))
(while diffs
(wl-summary-mark-as-unanswered (car diffs) 'no-modeline)
(setq diffs (cdr diffs)))
(setq diffs (car diff)) ; unread-appends
- (setq mes (concat mes (format "/+%d) answered mark(s)," (length diffs))))
+ (setq mes (concat mes (format "/+%d answered," (length diffs))))
(while diffs
(wl-summary-mark-as-answered (car diffs) 'no-modeline)
(setq diffs (cdr diffs)))
- (setq diff (elmo-list-diff unreads
+ (setq diff (elmo-list-diff (elmo-folder-list-flagged
+ wl-summary-buffer-elmo-folder
+ 'unread)
(elmo-folder-list-flagged
wl-summary-buffer-elmo-folder
'unread 'in-msgdb)))
(setq diffs (cadr diff))
- (setq mes (concat mes (format "(-%d" (length diffs))))
+ (setq mes (concat mes (format "-%d" (length diffs))))
(while diffs
(wl-summary-mark-as-read (car diffs) 'no-folder 'no-modeline)
(setq diffs (cdr diffs)))
(setq diffs (car diff)) ; unread-appends
- (setq mes (concat mes (format "/+%d) unread mark(s)." (length diffs))))
+ (setq mes (concat mes (format "/+%d unread." (length diffs))))
(while diffs
(wl-summary-mark-as-unread (car diffs) 'no-folder 'no-modeline)
(setq diffs (cdr diffs)))
(when delete-list
(wl-summary-delete-messages-on-buffer delete-list))
- (wl-summary-update-status-marks)
+ (unless wl-summary-lazy-update-mark
+ (wl-summary-update-status-marks (point-min) (point-max)))
+ (when (and wl-summary-lazy-highlight
+ wl-summary-lazy-update-mark)
+ (let (buffer-read-only)
+ (put-text-property (point-min) (point-max) 'face nil))
+ (run-hooks 'wl-summary-buffer-window-scroll-functions))
(setq num (length append-list))
(setq i 0)
(setq wl-summary-delayed-update nil)
(if elmo-use-database
(elmo-database-msgid-put
(car entity) (elmo-folder-name-internal folder)
- (elmo-msgdb-overview-entity-get-number entity)))
+ (elmo-message-entity-number entity)))
(when (> num elmo-display-progress-threshold)
(setq i (+ i 1))
(if (or (zerop (% i 5)) (= i num))
(while wl-summary-delayed-update
(message "Parent (%d) of message %d is no entity"
(caar wl-summary-delayed-update)
- (elmo-msgdb-overview-entity-get-number
+ (elmo-message-entity-number
(cdar wl-summary-delayed-update)))
(when (setq update-thread
(wl-summary-insert-message
wl-summary-partial-highlight-above-lines
wl-summary-highlight-partial-threshold)))
(wl-highlight-summary (point) (point-max))))))
- (setq wl-summary-buffer-msgdb (elmo-folder-msgdb folder))
(wl-delete-all-overlays)
(set-buffer-modified-p nil)
(if mes (message "%s" mes)))))
(length dels)))
(progn
(message "Deleting...")
- (elmo-folder-delete-messages wl-summary-buffer-elmo-folder dels)
- (elmo-folder-detach-messages wl-summary-buffer-elmo-folder dels)
+ (elmo-folder-move-messages wl-summary-buffer-elmo-folder dels
+ 'null)
(wl-summary-set-message-modified)
(wl-folder-set-folder-updated (wl-summary-buffer-folder-name)
(list 0 0 0))
(setq wl-summary-buffer-view 'thread))
(wl-summary-update-modeline)
(force-mode-line-update)
- (wl-summary-rescan)))
+ (wl-summary-rescan nil nil t)))
(defun wl-summary-load-file-object (filename)
"Load lisp object from dir."
wl-summary-buffer-message-modified
wl-summary-buffer-thread-modified
wl-summary-buffer-number-list
- wl-summary-buffer-msgdb
+ wl-summary-buffer-unsync-mark-number-list
wl-summary-buffer-folder-name
wl-summary-buffer-line-formatter)
(and (eq wl-summary-buffer-view 'thread)
(defun wl-summary-auto-select-msg-p (unread-msg)
(and unread-msg
- (not (string=
- (elmo-message-mark
- wl-summary-buffer-elmo-folder
- unread-msg)
- elmo-msgdb-important-mark))))
+ (not (elmo-message-has-global-flag-p
+ wl-summary-buffer-elmo-folder unread-msg))))
(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)))))
(elmo-folder-name-internal folder))
wl-summary-default-view)))
(wl-thread-resume-entity folder)
- (wl-summary-open-folder folder))
+ (wl-summary-open-folder folder)
+ (wl-summary-detect-mark-position))
(setq wl-summary-buffer-view
(wl-summary-load-file-object
(expand-file-name wl-summary-view-file
(elmo-folder-msgdb-path folder))))
(wl-summary-open-folder folder)
+ (wl-summary-detect-mark-position)
(wl-summary-rescan))
(wl-summary-count-unread)
(wl-summary-update-modeline)))
(unless (eq wl-summary-buffer-view 'thread)
(wl-summary-make-number-list))
+ (setq wl-summary-buffer-unsync-mark-number-list
+ (copy-sequence wl-summary-buffer-number-list))
(when (and wl-summary-cache-use
(or (and wl-summary-check-line-format
(wl-summary-line-format-changed-p))
((eq scan-type 'all)
(wl-summary-sync 'unset-cursor "all"))
((eq scan-type 'no-sync))
+ ((eq scan-type 'rescan)
+ (wl-summary-rescan))
((or (eq scan-type 'force-update)
(eq scan-type 'update))
(setq mes (wl-summary-sync-force-update
(cond ((and wl-auto-select-first
(wl-summary-auto-select-msg-p unreadp))
;; wl-auto-select-first is non-nil and
- ;; unreadp is non-nil but not important
+ ;; unreadp is non-nil but not flagged
(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
+ ;; unreadp is non-nil but not flagged
(setq retval 'prefetch-msg))
((not (wl-summary-auto-select-msg-p unreadp))
- ;; unreadp is nil or important
+ ;; unreadp is nil or flagged
(setq retval 'more-next))))
(goto-char (point-max))
(if (elmo-folder-plugged-p folder)
;; entity-id is unknown.
(wl-folder-set-current-entity-id
(wl-folder-get-entity-id entity)))
- (when (and wl-summary-lazy-highlight
+ (when (and wl-summary-buffer-window-scroll-functions
wl-on-xemacs)
(sit-for 0))
(unwind-protect
(run-hooks 'wl-summary-line-inserted-hook)))
(defun wl-summary-insert-sequential (entity folder &rest args)
- (let ((inhibit-read-only t)
- buffer-read-only)
- (goto-char (point-max))
- (wl-summary-insert-line
- (wl-summary-create-line entity nil nil
- (elmo-message-mark
- folder
- (elmo-message-entity-number
- entity))))
- (setq wl-summary-buffer-number-list
- (wl-append wl-summary-buffer-number-list
- (list (elmo-message-entity-number entity))))
- nil))
+ (when entity
+ (let ((inhibit-read-only t)
+ (number (elmo-message-entity-number entity))
+ buffer-read-only)
+ (goto-char (point-max))
+ (wl-summary-insert-line
+ (wl-summary-create-line entity nil nil
+ (elmo-message-flags
+ wl-summary-buffer-elmo-folder
+ number)
+ (elmo-message-cached-p
+ wl-summary-buffer-elmo-folder
+ number)))
+ (setq wl-summary-buffer-number-list
+ (wl-append wl-summary-buffer-number-list
+ (list (elmo-message-entity-number entity))))
+ nil)))
(defun wl-summary-default-subject-filter (subject)
(setq subject (elmo-replace-in-string subject "[ \t]*\\(re\\|was\\)[:>]" ""))
wl-summary-alike-hashtb)))
(defun wl-summary-insert-headers (folder func mime-decode)
- (let ((numbers (elmo-folder-list-messages folder nil t))
+ (let ((numbers (elmo-folder-list-messages folder 'visible t))
ov this last alike)
(buffer-disable-undo (current-buffer))
(make-local-variable 'wl-summary-alike-hashtb)
(let ((summary-buf (current-buffer))
(buf (get-buffer-create wl-summary-search-buf-name))
(folder-name (wl-summary-buffer-folder-name))
- match founds cur result)
+ match founds result)
(with-current-buffer buf
(let ((case-fold-search t))
(when (or (not (string= wl-summary-search-buf-folder-name folder-name))
(defun wl-summary-insert-thread (entity folder update
&optional force-insert)
(let ((depth 0)
- this-id parent-entity parent-number relatives anumber
- cur number cur-entity linked retval delayed-entity
- update-list entity-stack)
+ this-id parent-entity parent-number
+ number cur-entity linked retval delayed-entity
+ update-list entity-stack thread-entity)
(while entity
(setq this-id (elmo-message-entity-field entity 'message-id)
- parent-entity
- (elmo-message-entity-parent folder entity)
- parent-number (elmo-message-entity-number parent-entity))
- (setq number (elmo-message-entity-number entity))
- (setq cur entity)
+ number (elmo-message-entity-number entity))
+ (if (and wl-thread-saved-entity-hashtb-internal
+ (setq thread-entity
+ (elmo-get-hash-val
+ (format "#%d" (elmo-message-entity-number entity))
+ wl-thread-saved-entity-hashtb-internal)))
+ (setq parent-entity
+ (elmo-message-entity
+ folder
+ (wl-thread-entity-get-parent thread-entity))
+ linked (wl-thread-entity-get-linked thread-entity))
+ (setq parent-entity (elmo-message-entity-parent folder entity)
+ linked nil))
+ (setq parent-number (and parent-entity
+ (elmo-message-entity-number parent-entity)))
;; If thread loop detected, set parent as nil.
- (while cur
- (setq anumber
- (elmo-message-entity-number
- (setq cur (elmo-message-entity-parent folder cur))))
- (if (memq anumber relatives)
- (setq parent-number nil
- cur nil))
- (setq relatives (cons
- (elmo-message-entity-number cur)
- relatives)))
+ (let ((cur entity)
+ anumber relatives)
+ (while cur
+ (when (setq anumber
+ (elmo-message-entity-number
+ (setq cur (elmo-message-entity-parent folder cur))))
+ (if (memq anumber relatives)
+ (setq parent-number nil
+ cur nil))
+ (setq relatives (cons anumber relatives)))))
(if (and parent-number
(not (wl-thread-get-entity parent-number))
(not force-insert))
wl-summary-search-parent-by-subject-regexp
(string-match
wl-summary-search-parent-by-subject-regexp
- (elmo-msgdb-overview-entity-get-subject entity)))
+ (elmo-message-entity-field entity 'subject)))
(let ((found (wl-summary-search-by-subject entity folder)))
(when (and found
(not (member found wl-summary-delayed-update)))
(defun wl-summary-update-thread (entity
thr-entity
parent-entity)
- (let* ((this-id (elmo-msgdb-overview-entity-get-id entity))
+ (let* ((this-id (elmo-message-entity-field entity 'message-id))
(overview-entity entity)
- (parent-id (elmo-msgdb-overview-entity-get-id parent-entity))
- (number (elmo-msgdb-overview-entity-get-number entity))
- (parent-number (elmo-msgdb-overview-entity-get-number parent-entity))
+ (parent-id (elmo-message-entity-field parent-entity 'message-id))
+ (number (elmo-message-entity-number entity))
+ (parent-number (elmo-message-entity-number parent-entity))
insert-line)
(cond
((or (not parent-id)
entity
parent-entity
nil
- (elmo-message-mark wl-summary-buffer-elmo-folder number)
+ (elmo-message-flags wl-summary-buffer-elmo-folder number)
+ (elmo-message-cached-p wl-summary-buffer-elmo-folder number)
(wl-thread-maybe-get-children-num number)
(wl-thread-make-indent-string thr-entity)
(wl-thread-entity-get-linked thr-entity)))))))
'update nil nil t)
(run-hooks 'wl-summary-virtual-hook)))
-(defun wl-summary-delete-all-temp-marks (&optional no-msg)
+(defun wl-summary-delete-all-temp-marks (&optional no-msg force)
"Erase all temp marks from buffer."
(interactive)
(when (or wl-summary-buffer-target-mark-list
- wl-summary-buffer-temp-mark-list)
+ wl-summary-buffer-temp-mark-list
+ wl-summary-scored)
(save-excursion
(goto-char (point-min))
(unless no-msg
(message "Unmarking..."))
(while (not (eobp))
- (wl-summary-unset-mark)
+ (wl-summary-unset-mark nil nil force)
(forward-line 1))
(unless no-msg
(message "Unmarking...done"))
(setq wl-summary-buffer-target-mark-list nil)
(setq wl-summary-buffer-temp-mark-list nil))))
-(defsubst wl-summary-temp-mark ()
+(defsubst wl-summary-temp-mark (&optional number)
"Return temp-mark string of current line."
- (let ((number (wl-summary-message-number))
+ (let ((number (or number (wl-summary-message-number)))
info)
(or (and (wl-summary-have-target-mark-p number)
"*")
(wl-summary-get-score-mark number)
" ")))
-(defsubst wl-summary-persistent-mark ()
+(defsubst wl-summary-persistent-mark-string (folder flags cached)
+ "Return the persistent mark string.
+The mark is decided according to the FOLDER, FLAGS and CACHED."
+ (let ((priorities wl-summary-persistent-mark-priority-list)
+ mark)
+ (while (and (null mark) priorities)
+ (if (and (eq (car priorities) 'flag)
+ (elmo-get-global-flags flags 'ignore-preserved))
+ (setq mark wl-summary-flag-mark)
+ (when (memq (car priorities) flags)
+ (setq mark
+ (or (case (car priorities)
+ (new
+ (if cached
+ wl-summary-new-cached-mark
+ wl-summary-new-uncached-mark))
+ (answered
+ (if cached
+ wl-summary-answered-cached-mark
+ wl-summary-answered-uncached-mark))
+ (unread
+ (if cached
+ wl-summary-unread-cached-mark
+ wl-summary-unread-uncached-mark)))))))
+ (setq priorities (cdr priorities)))
+ (or mark
+ (if (or cached (elmo-folder-local-p folder))
+ nil
+ wl-summary-read-uncached-mark))))
+
+(defsubst wl-summary-message-mark (folder number &optional flags)
+ "Return mark of the message."
+ (ignore-errors
+ (wl-summary-persistent-mark-string
+ folder
+ (or flags (setq flags (elmo-message-flags folder number)))
+ (memq 'cached flags) ; XXX for speed-up.
+ )))
+
+(defsubst wl-summary-persistent-mark (&optional number flags)
"Return persistent-mark string of current line."
- (or (ignore-errors
- (elmo-message-mark wl-summary-buffer-elmo-folder
- (wl-summary-message-number)))
+ (or (wl-summary-message-mark wl-summary-buffer-elmo-folder
+ (or number (wl-summary-message-number))
+ flags)
" "))
(defun wl-summary-put-temp-mark (mark)
(goto-char (point-min))
(let ((inhibit-read-only t)
(buffer-read-only nil)
- wl-summary-buffer-disp-msg
- number mlist)
- (while (not (eobp))
- (when (string= (wl-summary-temp-mark) "*")
- ;; delete target-mark from buffer.
- (wl-summary-put-temp-mark " ")
- (setq number (wl-summary-message-number))
- (setq mlist (append mlist (list number)))
- (if wl-summary-highlight
- (wl-highlight-summary-current-line))
- (if number
- (setq wl-summary-buffer-target-mark-list
- (delq number wl-summary-buffer-target-mark-list))))
- (forward-line 1))
- (wl-summary-mark-as-read mlist)
- ;; closed
- (when (setq mlist wl-summary-buffer-target-mark-list)
- (wl-summary-mark-as-read mlist)
- (while mlist
- (setq wl-summary-buffer-target-mark-list
- (delq (car mlist) wl-summary-buffer-target-mark-list))
- (setq mlist (cdr mlist)))))))
+ wl-summary-buffer-disp-msg)
+ (wl-summary-mark-as-read wl-summary-buffer-target-mark-list)
+ (dolist (number wl-summary-buffer-target-mark-list)
+ (wl-summary-unset-mark number)))))
(defun wl-summary-target-mark-mark-as-unread ()
(interactive)
(goto-char (point-min))
(let ((inhibit-read-only t)
(buffer-read-only nil)
- wl-summary-buffer-disp-msg
- number mlist)
- (while (not (eobp))
- (when (string= (wl-summary-temp-mark) "*")
- (wl-summary-put-temp-mark " ")
- (setq number (wl-summary-message-number))
- (setq mlist (append mlist (list number)))
- (if wl-summary-highlight
- (wl-highlight-summary-current-line))
- (if number
- (setq wl-summary-buffer-target-mark-list
- (delq number wl-summary-buffer-target-mark-list))))
- (forward-line 1))
- (wl-summary-mark-as-unread mlist)
- ;; closed
- (when (setq mlist wl-summary-buffer-target-mark-list)
- (wl-summary-mark-as-unread mlist)
- (while mlist
- (setq wl-summary-buffer-target-mark-list
- (delq (car mlist) wl-summary-buffer-target-mark-list))
- (setq mlist (cdr mlist)))))))
+ wl-summary-buffer-disp-msg)
+ (wl-summary-mark-as-unread wl-summary-buffer-target-mark-list)
+ (dolist (number wl-summary-buffer-target-mark-list)
+ (wl-summary-unset-mark number)))))
-(defun wl-summary-target-mark-mark-as-important ()
+(defun wl-summary-target-mark-set-flags ()
(interactive)
(save-excursion
(goto-char (point-min))
(let ((inhibit-read-only t)
(buffer-read-only nil)
wl-summary-buffer-disp-msg
- number
- (mlist wl-summary-buffer-target-mark-list))
- (while mlist
- (if (wl-summary-jump-to-msg (car mlist))
- (progn
- (wl-summary-put-temp-mark " ")
- (wl-summary-mark-as-important (car mlist))
- (when wl-summary-highlight
- (wl-highlight-summary-current-line)))
- (wl-summary-mark-as-important (car mlist)))
- (setq wl-summary-buffer-target-mark-list
- (delq (car mlist) wl-summary-buffer-target-mark-list))
- (setq mlist (cdr mlist)))
+ flags)
+ (dolist (number wl-summary-buffer-target-mark-list)
+ (wl-summary-unset-mark number)
+ (setq flags (wl-summary-set-flags-internal number flags)))
(wl-summary-count-unread)
(wl-summary-update-modeline))))
(interactive)
(wl-summary-pick wl-summary-buffer-target-mark-list 'delete))
-(defun wl-summary-update-persistent-mark ()
+(defun wl-summary-update-persistent-mark (&optional number flags)
"Synch up persistent mark of current line with msgdb's.
Return non-nil if the mark is updated"
- (if wl-summary-buffer-persistent-mark-column
- (save-excursion
- (move-to-column wl-summary-buffer-persistent-mark-column)
- (let ((inhibit-read-only t)
- (buffer-read-only nil)
- (mark (buffer-substring (- (point) 1) (point)))
- (new-mark (wl-summary-persistent-mark)))
- (unless (string= new-mark mark)
- (delete-backward-char 1)
- (insert new-mark)
- (when wl-summary-highlight
- (wl-highlight-summary-current-line))
- (set-buffer-modified-p nil)
- t)))
+ (prog1
+ (when wl-summary-buffer-persistent-mark-column
+ (save-excursion
+ (move-to-column wl-summary-buffer-persistent-mark-column)
+ (let ((inhibit-read-only t)
+ (buffer-read-only nil)
+ (mark (buffer-substring (- (point) 1) (point)))
+ (new-mark (wl-summary-persistent-mark number flags)))
+ (unless (string= new-mark mark)
+ (delete-backward-char 1)
+ (insert new-mark)
+ (wl-summary-set-message-modified)
+ t))))
(when wl-summary-highlight
(wl-highlight-summary-current-line))
(set-buffer-modified-p nil)))
number-list visible)
(setq number-list (cond ((numberp number-or-numbers)
(setq unread-message
- (member (elmo-message-mark
- folder
- number-or-numbers)
- (elmo-msgdb-unread-marks)))
+ (elmo-message-flagged-p
+ folder
+ number-or-numbers
+ 'unread))
(list number-or-numbers))
((and (not (null number-or-numbers))
(listp number-or-numbers))
((setq number (wl-summary-message-number))
;; interactive
(setq unread-message
- (member (elmo-message-mark folder number)
- (elmo-msgdb-unread-marks)))
+ (elmo-message-flagged-p
+ folder
+ number
+ 'unread))
(list number))))
(if (null number-list)
(message "No message.")
(if inverse
- (elmo-folder-unmark-read folder number-list no-folder-mark)
- (elmo-folder-mark-as-read folder number-list no-folder-mark))
+ (elmo-folder-unset-flag folder number-list 'read no-folder-mark)
+ (elmo-folder-set-flag folder number-list 'read no-folder-mark))
(dolist (number number-list)
(setq visible (wl-summary-jump-to-msg number))
(unless inverse
(wl-summary-update-persistent-mark)))
(unless no-modeline-update
;; Update unread numbers.
- ;; should elmo-folder-mark-as-read return unread numbers?
(wl-summary-count-unread)
(wl-summary-update-modeline)
(wl-folder-update-unread
no-modeline-update))
(defsubst wl-summary-mark-as-answered-internal (inverse
+ &optional
number-or-numbers
no-modeline-update)
(save-excursion
(if (null number-list)
(message "No message.")
(if inverse
- (elmo-folder-unmark-answered folder number-list)
- (elmo-folder-mark-as-answered folder number-list))
+ (elmo-folder-unset-flag folder number-list 'answered)
+ (elmo-folder-set-flag folder number-list 'answered))
(dolist (number number-list)
(setq visible (wl-summary-jump-to-msg number))
;; set mark on buffer
(wl-summary-update-persistent-mark)))
(unless no-modeline-update
;; Update unread numbers.
- ;; should elmo-folder-mark-as-read return unread numbers?
+ ;; should elmo-flag-mark-as-read return unread numbers?
(wl-summary-count-unread)
(wl-summary-update-modeline)
(wl-folder-update-unread
(interactive)
(wl-summary-mark-as-answered-internal
(and (interactive-p)
- (member (elmo-message-mark wl-summary-buffer-elmo-folder
- (wl-summary-message-number))
- (elmo-msgdb-answered-marks)))
+ (elmo-message-flagged-p wl-summary-buffer-elmo-folder
+ (wl-summary-message-number)
+ 'answered))
number-or-numbers
no-modeline-update))
(defun wl-summary-mark-as-unanswered (&optional number-or-numbers
- no-modeline-update)
+ no-modeline-update)
(wl-summary-mark-as-answered-internal 'inverse
number-or-numbers
no-modeline-update))
-(defun wl-summary-mark-as-important (&optional number
- mark
- no-server-update)
- (interactive)
- (if (eq (elmo-folder-type-internal wl-summary-buffer-elmo-folder)
- 'internal)
- (error "Cannot process mark in this folder"))
+(defun wl-summary-decide-flag (folder number)
+ (let ((flags (elmo-get-global-flags (elmo-message-flags
+ folder number)))
+ (completion-ignore-case t)
+ new-flags)
+ (setq new-flags
+ (delq nil
+ (mapcar
+ (lambda (flag)
+ (and (> (length flag) 0)
+ (intern (downcase flag))))
+ (wl-completing-read-multiple
+ "Flags: "
+ (mapcar (lambda (flag)
+ (list (capitalize (symbol-name flag))))
+ elmo-global-flag-list)
+ nil nil (mapconcat (lambda (flag)
+ (capitalize (symbol-name flag)))
+ (or flags '(important))
+ ",")))))
+ (dolist (flag new-flags)
+ (unless (memq flag elmo-global-flag-list)
+ (if (y-or-n-p (format "Flag `%s' does not exist yet. Create?"
+ (capitalize (symbol-name flag))))
+ (setq elmo-global-flag-list (append
+ elmo-global-flag-list
+ (list flag)))
+ (error "Stopped"))))
+ new-flags))
+
+(defsubst wl-summary-set-flags-internal (&optional
+ number-or-numbers
+ flags
+ local
+ remove-all)
(save-excursion
- (let* (eol
- (folder wl-summary-buffer-elmo-folder)
- message-id visible cur-mark)
- (cond (number
- (setq visible (wl-summary-jump-to-msg number))
- (setq cur-mark (or mark
- (elmo-message-mark
- wl-summary-buffer-elmo-folder number)
- " ")))
- ((setq number (wl-summary-message-number))
- (setq visible t)
- (setq cur-mark (or mark (wl-summary-persistent-mark))))
- (t
- (error "No message")))
- (when (or visible
- ;; already exists in msgdb.
- (elmo-message-entity wl-summary-buffer-elmo-folder
- number))
- (setq message-id (elmo-message-field
- wl-summary-buffer-elmo-folder
- number
- 'message-id))
- (if (string= cur-mark elmo-msgdb-important-mark)
- (progn
- ;; server side mark
- (save-match-data
- (elmo-folder-unmark-important folder (list number)
- no-server-update)
- (unless no-server-update
- (elmo-msgdb-global-mark-delete message-id))
- ;; Remove cache if local folder.
- (if (and (elmo-folder-local-p folder)
- (not (eq 'mark
- (elmo-folder-type-internal folder))))
- (elmo-file-cache-delete
- (elmo-file-cache-get-path message-id)))))
- ;; server side mark
- (elmo-folder-mark-as-important folder (list number)
- no-server-update)
- (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))
- (unless no-server-update
- (elmo-msgdb-global-mark-set message-id
- elmo-msgdb-important-mark))))
- (when visible
- (wl-summary-update-persistent-mark))))
- number)
+ (let ((folder wl-summary-buffer-elmo-folder)
+ number number-list visible)
+ (setq number-list (cond ((numberp number-or-numbers)
+ (list number-or-numbers))
+ ((and (not (null number-or-numbers))
+ (listp number-or-numbers))
+ number-or-numbers)
+ ((setq number (wl-summary-message-number))
+ ;; interactive
+ (list number))))
+ (if remove-all
+ (setq flags nil)
+ (unless flags
+ (setq flags (wl-summary-decide-flag folder (car number-list)))))
+ (if (null number-list)
+ (message "No message.")
+ (dolist (number number-list)
+ (elmo-message-set-global-flags folder number flags local)
+ (setq visible (wl-summary-jump-to-msg number))
+ ;; set mark on buffer
+ (when visible
+ (wl-summary-update-persistent-mark))))
+ flags)))
+
+(defsubst wl-summary-add-flags-internal (&optional
+ number-or-numbers
+ flags
+ local)
+ (save-excursion
+ (let ((folder wl-summary-buffer-elmo-folder)
+ set-flags msg number-list visible)
+ (setq number-list (cond ((numberp number-or-numbers)
+ (list number-or-numbers))
+ ((and (not (null number-or-numbers))
+ (listp number-or-numbers))
+ number-or-numbers)
+ ((setq msg (wl-summary-message-number))
+ ;; interactive
+ (list msg))))
+ (if (null number-list)
+ (message "No message.")
+ (dolist (number number-list)
+ (setq set-flags
+ (elmo-get-global-flags
+ (elmo-message-flags folder number)))
+ (setq set-flags (nconc flags set-flags))
+ (elmo-message-set-global-flags folder number set-flags local)
+ (setq visible (wl-summary-jump-to-msg number))
+ ;; set mark on buffer
+ (when visible
+ (wl-summary-update-persistent-mark)))))))
+
+(defsubst wl-summary-remove-flags-internal (&optional
+ number-or-numbers
+ flags
+ local)
+ (save-excursion
+ (let ((folder wl-summary-buffer-elmo-folder)
+ set-flags msg number-list visible)
+ (setq number-list (cond ((numberp number-or-numbers)
+ (list number-or-numbers))
+ ((and (not (null number-or-numbers))
+ (listp number-or-numbers))
+ number-or-numbers)
+ ((setq msg (wl-summary-message-number))
+ ;; interactive
+ (list msg))))
+ (if (null number-list)
+ (message "No message.")
+ (dolist (number number-list)
+ (setq set-flags (elmo-get-global-flags
+ (elmo-message-flags folder number)))
+ (dolist (flag flags)
+ (setq set-flags (delq flag set-flags)))
+ (elmo-message-set-global-flags folder number set-flags local)
+ (setq visible (wl-summary-jump-to-msg number))
+ ;; set mark on buffer
+ (when visible
+ (wl-summary-update-persistent-mark)))))))
+
+(defun wl-summary-set-flags (&optional remove)
+ (interactive "P")
+ (if (eq 'flag (elmo-folder-type-internal wl-summary-buffer-elmo-folder))
+ (error "Cannot process flags in this folder"))
+ (wl-summary-set-flags-internal nil nil nil remove))
;;; Summary line.
(defvar wl-summary-line-formatter nil)
(wl-set-string-width
(- wl-summary-buffer-number-column)
(number-to-string
- (elmo-msgdb-overview-entity-get-number wl-message-entity))))
+ (elmo-message-entity-number wl-message-entity))))
(defun wl-summary-line-year ()
(aref wl-datevec 0))
(format "%02d" (aref wl-datevec 4)))
(defun wl-summary-line-size ()
- (let ((size (elmo-msgdb-overview-entity-get-size wl-message-entity)))
+ (let ((size (elmo-message-entity-field wl-message-entity 'size)))
(if size
(cond
((<= 1 (/ size 1048576))
(setq no-parent t)) ; no parent
(setq subject
(elmo-delete-char ?\n
- (or (elmo-msgdb-overview-entity-get-subject
- wl-message-entity)
+ (or (elmo-message-entity-field
+ wl-message-entity
+ 'subject t)
wl-summary-no-subject-message)))
(setq parent-raw-subject
- (elmo-msgdb-overview-entity-get-subject wl-parent-message-entity))
+ (elmo-message-entity-field wl-parent-message-entity
+ 'subject t))
(setq parent-subject
(if parent-raw-subject
(elmo-delete-char ?\n parent-raw-subject)))
(defun wl-summary-line-from ()
(elmo-delete-char ?\n
(funcall wl-summary-from-function
- (elmo-msgdb-overview-entity-get-from
- wl-message-entity))))
+ (elmo-message-entity-field
+ wl-message-entity
+ 'from t))))
(defun wl-summary-line-list-info ()
(let ((list-info (wl-summary-get-list-info wl-message-entity)))
"")))
(defun wl-summary-line-attached ()
- (let ((content-type (elmo-msgdb-overview-entity-get-extra-field
- wl-message-entity "content-type"))
+ (let ((content-type (elmo-message-entity-field
+ wl-message-entity 'content-type))
(case-fold-search t))
(if (and content-type
(string-match "multipart/mixed" content-type))
"@"
"")))
+;;; For future use.
+;;(defun wl-summary-line-cached ()
+;; (if (elmo-message-cached-p wl-summary-buffer-elmo-folder
+;; (elmo-message-entity-number wl-message-entity))
+;; " "
+;; "u"))
+
(defun wl-summary-create-line (wl-message-entity
wl-parent-message-entity
wl-temp-mark
- wl-persistent-mark
+ wl-flags
+ wl-cached
&optional
wl-thr-children-number
wl-thr-indent-string
wl-thr-linked)
"Create a summary line."
(let ((wl-mime-charset wl-summary-buffer-mime-charset)
+ (wl-persistent-mark (wl-summary-persistent-mark-string
+ wl-summary-buffer-elmo-folder
+ wl-flags
+ wl-cached))
(elmo-mime-charset wl-summary-buffer-mime-charset)
(elmo-lang wl-summary-buffer-weekday-name-lang)
(wl-datevec (or (ignore-errors (timezone-fix-time
- (elmo-msgdb-overview-entity-get-date
- wl-message-entity)
+ (elmo-message-entity-field
+ wl-message-entity
+ 'date)
nil
wl-summary-fix-timezone))
(make-vector 5 0)))
(setq line (concat line
"\r"
(number-to-string
- (elmo-msgdb-overview-entity-get-number
+ (elmo-message-entity-number
wl-message-entity))))
(if wl-summary-highlight
- (wl-highlight-summary-line-string line
- wl-persistent-mark
- wl-temp-mark
- wl-thr-indent-string))
+ (wl-highlight-summary-line-string
+ (elmo-message-entity-number wl-message-entity)
+ line
+ wl-flags
+ wl-temp-mark
+ wl-thr-indent-string))
line))
(defsubst wl-summary-proc-wday (wday-str year month mday)
'((new . ((t . nil)
(p . new)
(p . unread)
- (p . important)))
+ (p . digest)))
(unread . ((t . nil)
(p . unread)
- (p . important)))))
+ (p . digest)))))
(defsubst wl-summary-next-message (num direction hereto)
(if wl-summary-buffer-next-message-function
(if (setq flagged-list
(elmo-folder-list-flagged
wl-summary-buffer-elmo-folder
- (cdr (car cur-spec))))
+ (cdr (car cur-spec)) t))
(while nums
(if (and (memq (car nums) flagged-list)
(elmo-message-accessible-p
(wl-thread-jump-to-msg num))
t)))
;;
-;; Goto unread or important
+;; Goto unread or global flag message
;; returns t if next message exists in this folder.
(defun wl-summary-cursor-down (&optional hereto)
(interactive "P")
(tmp-buffer (get-buffer-create " *wl-summary-save-view-cache*"))
(temp-column wl-summary-buffer-temp-mark-column)
(charset wl-summary-buffer-mime-charset))
- (if (file-directory-p dir)
- (); ok.
- (if (file-exists-p dir)
- (error "File %s already exists" dir)
- (elmo-make-directory dir)))
- (if (eq save-view 'thread)
- (wl-thread-save-entity dir))
- (when wl-summary-check-line-format
- (wl-summary-line-format-save))
- (unwind-protect
- (progn
- (when (file-writable-p cache)
- (copy-to-buffer tmp-buffer (point-min) (point-max))
- (with-current-buffer tmp-buffer
- (widen)
- (make-local-variable 'wl-summary-highlight)
- (setq wl-summary-highlight nil
- wl-summary-buffer-target-mark-list mark-list
- wl-summary-buffer-temp-mark-list temp-list
- wl-summary-buffer-temp-mark-column temp-column)
- (wl-summary-delete-all-temp-marks 'no-msg)
- (encode-coding-region
- (point-min) (point-max)
- (or (and wl-on-mule ; one in mcs-ltn1(apel<10.4) cannot take 2 arg.
- (mime-charset-to-coding-system charset 'LF))
- ;; Mule 2 doesn't have `*ctext*unix'.
- (mime-charset-to-coding-system charset)))
- (write-region-as-binary (point-min)(point-max)
- cache nil 'no-msg)))
- (when (file-writable-p view) ; 'thread or 'sequence
- (save-excursion
- (set-buffer tmp-buffer)
- (erase-buffer)
- (prin1 save-view tmp-buffer)
- (princ "\n" tmp-buffer)
- (write-region (point-min) (point-max) view nil 'no-msg))))
- ;; kill tmp buffer.
- (kill-buffer tmp-buffer)))))
+ (when dir
+ (if (file-directory-p dir)
+ (); ok.
+ (if (file-exists-p dir)
+ (error "File %s already exists" dir)
+ (elmo-make-directory dir)))
+ (if (eq save-view 'thread)
+ (wl-thread-save-entity dir))
+ (when wl-summary-check-line-format
+ (wl-summary-line-format-save))
+ (unwind-protect
+ (progn
+ (when (file-writable-p cache)
+ (copy-to-buffer tmp-buffer (point-min) (point-max))
+ (with-current-buffer tmp-buffer
+ (widen)
+ (make-local-variable 'wl-summary-highlight)
+ (setq wl-summary-highlight nil
+ wl-summary-buffer-target-mark-list mark-list
+ wl-summary-buffer-temp-mark-list temp-list
+ wl-summary-buffer-temp-mark-column temp-column)
+ (wl-summary-delete-all-temp-marks 'no-msg 'force)
+ (encode-coding-region
+ (point-min) (point-max)
+ (or (and wl-on-mule
+ ;; one in mcs-ltn1(apel<10.4) cannot take 2 arg.
+ (mime-charset-to-coding-system charset 'LF))
+ ;; Mule 2 doesn't have `*ctext*unix'.
+ (mime-charset-to-coding-system charset)))
+ (write-region-as-binary (point-min)(point-max)
+ cache nil 'no-msg)))
+ (when (file-writable-p view) ; 'thread or 'sequence
+ (save-excursion
+ (set-buffer tmp-buffer)
+ (erase-buffer)
+ (prin1 save-view tmp-buffer)
+ (princ "\n" tmp-buffer)
+ (write-region (point-min) (point-max) view nil 'no-msg))))
+ ;; kill tmp buffer.
+ (kill-buffer tmp-buffer))))))
(defsubst wl-summary-get-sync-range (folder)
(intern (or (and
(elmo-folder-plugged-p folder)
(wl-get-assoc-list-value
wl-folder-sync-range-alist
- (elmo-folder-name-internal folder)))
+ (elmo-folder-name-internal folder)
+ 'function))
wl-default-sync-range)))
;; redefined for wl-summary-sync-update
"mark"
"rescan"
"rescan-noscore"
+ "rescan-thread"
"update"
"update-entirely"
"all"
"all-entirely"))
(default (or (wl-get-assoc-list-value
wl-folder-sync-range-alist
- folder)
+ folder
+ 'function)
wl-default-sync-range))
range)
(setq range
(run-hooks 'wl-summary-toggle-disp-off-hook))
;;; (switch-to-buffer cur-buf)
)))
- (when wl-summary-lazy-highlight
- (wl-highlight-summary-window))))
+ (run-hooks 'wl-summary-buffer-window-scroll-functions)))
(defun wl-summary-next-line-content ()
"Show next line of the message."
mes-buf)
(when number
(save-excursion
- (wl-summary-redisplay-internal folder number))
+ (wl-summary-set-message-buffer-or-redisplay))
(setq mes-buf wl-message-buffer)
(wl-message-select-buffer wl-message-buffer)
(set-buffer mes-buf)
- (goto-char (point-min))
(condition-case err
(when (setq mes-buf (wl-message-get-original-buffer))
(wl-draft-reply mes-buf arg summary-buf number)
(error (set-window-configuration winconf)
(signal (car err)(cdr err))))
(with-current-buffer summary-buf
- (elmo-folder-mark-as-answered folder (list number))
+ (elmo-folder-set-flag folder (list number) 'answered)
(wl-summary-update-persistent-mark))
t)))
(save-excursion
(set-buffer summary-buf)
(setq subject
- (or (elmo-message-field folder number 'subject) ""))))
+ (or (elmo-message-entity-field
+ (elmo-message-entity folder number) 'subject 'decode)
+ ""))))
(set-buffer mes-buf)
(wl-draft-forward subject summary-buf)
(unless without-setup-hook
(skip-tmark-regexp (wl-regexp-opt wl-summary-skip-mark-list))
(skip t)
(column (current-column))
- skip-pmark-regexp goto-next next-entity finfo)
- (if (elmo-folder-plugged-p wl-summary-buffer-elmo-folder)
- ()
- (setq skip-pmark-regexp
- (wl-regexp-opt (list " "
- elmo-msgdb-unread-cached-mark
- elmo-msgdb-important-mark))))
+ goto-next next-entity finfo)
(beginning-of-line)
(while (and skip
(not (if downward (eobp) (bobp))))
(forward-line 1)
(forward-line -1))
(setq skip (or (string-match skip-tmark-regexp
- (save-excursion
- (wl-summary-temp-mark)))
- (and skip-pmark-regexp
- (not (string-match
- skip-pmark-regexp
- (save-excursion
- (wl-summary-persistent-mark))))))))
+ (wl-summary-temp-mark))
+ (not (elmo-message-accessible-p
+ wl-summary-buffer-elmo-folder
+ (wl-summary-message-number))))))
(if (if downward (eobp) (and (bobp) skip)) (setq goto-next t))
(if (or (eobp) (and (bobp) skip))
(goto-char start))
(when (elmo-message-use-cache-p folder num)
(elmo-message-set-cached folder num t))
(ignore-errors
- (if (member (elmo-message-mark wl-summary-buffer-elmo-folder
- num)
- (elmo-msgdb-unread-marks))
+ (if (elmo-message-flagged-p wl-summary-buffer-elmo-folder
+ num
+ 'unread)
(wl-summary-mark-as-read num no-folder-mark)
(wl-summary-update-persistent-mark)))
(setq wl-summary-buffer-current-msg num)
(string= (elmo-folder-name-internal fld)
wl-draft-folder))
(ignore-errors
- (if (member (elmo-message-mark fld num)
- (elmo-msgdb-unread-marks))
+ (if (elmo-message-flagged-p fld num 'unread)
(wl-summary-mark-as-read num); no-folder-mark)
(wl-summary-update-persistent-mark)))
(setq wl-summary-buffer-current-msg num)
(if num
(save-excursion
(setq filename (expand-file-name
- (int-to-string num)
+ (concat (int-to-string num)
+ wl-summary-save-file-suffix)
wl-save-dir))
(if (null (and arg
(null (file-exists-p filename))))
(interactive "r")
(save-excursion
(save-restriction
- (narrow-to-region beg end)
+ (wl-summary-narrow-to-region beg end)
(goto-char (point-min))
(let ((wl-save-dir
(wl-read-directory-name "Save to directory: "
(wl-summary-message-number))))
(wl-ps-subject
(and entity
- (or (elmo-msgdb-overview-entity-get-subject entity)
+ (or (elmo-message-entity-field entity 'subject t)
"")))
(wl-ps-from
(and entity
- (or (elmo-msgdb-overview-entity-get-from entity) "")))
+ (or (elmo-message-entity-field entity 'from t) "")))
(wl-ps-date
(and entity
- (or (elmo-msgdb-overview-entity-get-date entity) ""))))
+ (or (elmo-message-entity-field entity 'date) ""))))
(run-hooks 'wl-ps-preprint-hook)
(set-buffer wl-message-buffer)
(copy-to-buffer buffer (point-min) (point-max))
(interactive "P")
(elmo-folder-pack-numbers wl-summary-buffer-elmo-folder)
(let (wl-use-scoring)
- (wl-summary-rescan)))
+ (wl-summary-rescan nil nil t)))
(defun wl-summary-target-mark-uudecode ()
(interactive)
(setq wl-summary-buffer-saved-message nil)))
(message "There's no saved message.")))
+(defun wl-summary-toggle-header-narrowing ()
+ "Toggle message header narrowing."
+ (interactive)
+ (when wl-message-use-header-narrowing
+ (save-selected-window
+ (let* ((mbuf wl-message-buffer)
+ (mwin (when mbuf (get-buffer-window mbuf)))
+ (wpos (when mwin (window-start mwin))))
+ (when mbuf
+ (set-buffer mbuf)
+ (wl-message-header-narrowing-toggle)
+ (and wpos (set-window-start mwin wpos)))))))
+
+(autoload 'elmo-folder-list-global-flag-messages "elmo-flag")
+
(require 'product)
(product-provide (provide 'wl-summary) (require 'wl-version))