(defvar wl-summary-buffer-thread-indent-set-alist nil)
(defvar wl-summary-buffer-view nil)
(defvar wl-summary-buffer-message-modified nil)
-(defvar wl-summary-buffer-mark-modified nil)
(defvar wl-summary-buffer-thread-modified nil)
(defvar wl-summary-buffer-number-column nil)
(make-variable-buffer-local 'wl-summary-buffer-thread-indent-set)
(make-variable-buffer-local 'wl-summary-buffer-view)
(make-variable-buffer-local 'wl-summary-buffer-message-modified)
-(make-variable-buffer-local 'wl-summary-buffer-mark-modified)
(make-variable-buffer-local 'wl-summary-buffer-thread-modified)
(make-variable-buffer-local 'wl-summary-buffer-number-column)
(make-variable-buffer-local 'wl-summary-buffer-temp-mark-column)
(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
+ (if wl-on-xemacs
(progn
(make-local-variable 'pre-idle-hook)
(add-hook 'pre-idle-hook 'wl-highlight-summary-window))
wl-summary-buffer-message-modified)
(defun wl-summary-set-mark-modified ()
(elmo-folder-set-mark-modified-internal
- wl-summary-buffer-elmo-folder t)
- (setq wl-summary-buffer-mark-modified t))
+ wl-summary-buffer-elmo-folder t))
(defun wl-summary-mark-modified-p ()
- wl-summary-buffer-mark-modified)
+ (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 ()
(wl-summary-cleanup-temp-marks)
(erase-buffer)
(wl-summary-set-message-modified)
- (wl-summary-set-mark-modified)
(setq wl-thread-entity-hashtb (elmo-make-hash
(* (length (elmo-msgdb-get-number-alist
(wl-summary-buffer-msgdb))) 2)))
(elmo-message-encache
wl-summary-buffer-elmo-folder
number))
+ (elmo-message-set-cached wl-summary-buffer-elmo-folder
+ number t)
(setq new-mark
- (cond
- ((string= mark
- elmo-msgdb-unread-uncached-mark)
- elmo-msgdb-unread-cached-mark)
- ((string= mark elmo-msgdb-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))
- elmo-msgdb-unread-cached-mark)
- ((string= mark elmo-msgdb-read-uncached-mark)
- nil)
- (t mark)))
- (elmo-msgdb-set-mark msgdb number new-mark)
- (or new-mark (setq new-mark " "))
- (wl-summary-set-mark-modified)
+ (or (elmo-message-mark wl-summary-buffer-elmo-folder
+ number)
+ " "))
(wl-summary-update-modeline)
(wl-folder-update-unread
(wl-summary-buffer-folder-name)
wl-summary-buffer-new-count)))
new-mark)))))))
-;;(defvar wl-summary-message-uncached-marks
-;; (list elmo-msgdb-new-mark
-;; elmo-msgdb-unread-uncached-mark
-;; elmo-msgdb-read-uncached-mark))
-
(defun wl-summary-prefetch-region (beg end &optional prefetch-marks)
(interactive "r")
(let ((count 0)
(inhibit-read-only t)
(buffer-read-only nil)
(case-fold-search nil)
- msg mark)
+ msg mark new-mark)
(message "Setting all msgs as read...")
(elmo-folder-mark-as-read folder
(elmo-folder-list-unreads
(save-excursion
(goto-char (point-min))
(while (not (eobp))
- (setq msg (wl-summary-message-number))
- (setq mark (wl-summary-persistent-mark))
- (when (and (not (string= mark " "))
- (not (string= mark elmo-msgdb-important-mark))
- (not (string= mark elmo-msgdb-read-uncached-mark)))
+ (setq msg (wl-summary-message-number)
+ mark (wl-summary-persistent-mark)
+ new-mark (or (elmo-message-mark folder msg) " "))
+ (unless (string= mark new-mark)
(delete-backward-char 1)
- (if (or (not (elmo-message-use-cache-p folder msg))
- (string= mark elmo-msgdb-unread-cached-mark))
- (progn
- (insert " ")
- (elmo-msgdb-set-mark msgdb msg nil))
- ;; New mark and unread-uncached mark
- (insert elmo-msgdb-read-uncached-mark)
- (elmo-msgdb-set-mark
- msgdb msg elmo-msgdb-read-uncached-mark))
+ ;; New mark and unread-uncached mark
+ (insert new-mark)
(if wl-summary-highlight
(wl-highlight-summary-current-line nil nil t)))
(forward-line 1)))
- (wl-summary-set-mark-modified)
(wl-folder-update-unread (wl-summary-buffer-folder-name) 0)
(setq wl-summary-buffer-unread-count 0)
(setq wl-summary-buffer-new-count 0)
(msgdb (wl-summary-buffer-msgdb))
(number-alist (elmo-msgdb-get-number-alist msgdb))
(case-fold-search nil)
- mark number unread new-mark)
- (setq mark (wl-summary-persistent-mark))
- (cond
- ((or (string= mark elmo-msgdb-new-mark)
- (string= mark elmo-msgdb-unread-uncached-mark)
- (string= mark elmo-msgdb-important-mark))
- ;; noop
- )
- ((string= mark elmo-msgdb-unread-cached-mark)
- (setq new-mark elmo-msgdb-unread-uncached-mark))
- (t
- (setq new-mark elmo-msgdb-read-uncached-mark)))
- (when new-mark
- (setq number (wl-summary-message-number))
+ new-mark mark number unread)
+ (setq number (wl-summary-message-number))
+ (elmo-message-set-cached folder number nil)
+ (setq new-mark (elmo-message-mark folder number)
+ mark (wl-summary-persistent-mark))
+ (unless (string= new-mark mark)
(delete-backward-char 1)
(insert new-mark)
(elmo-file-cache-delete
(elmo-message-field wl-summary-buffer-elmo-folder
number
'message-id)))
- (elmo-msgdb-set-mark msgdb number new-mark)
- (wl-summary-set-mark-modified)
(if wl-summary-highlight
(wl-highlight-summary-current-line nil nil t))
(set-buffer-modified-p nil)))))
(defun wl-summary-resume-cache-status ()
"Resume the cache status of all messages in the current folder."
(interactive)
- (let* ((folder wl-summary-buffer-elmo-folder)
- (cur-buf (current-buffer))
- (msgdb (wl-summary-buffer-msgdb))
- (number-alist (elmo-msgdb-get-number-alist msgdb))
- (inhibit-read-only t)
- (buffer-read-only nil)
- (case-fold-search nil)
- msg mark msgid set-mark)
+ (let ((folder wl-summary-buffer-elmo-folder)
+ (buffer-read-only nil)
+ (case-fold-search nil)
+ number msgid set-mark mark)
(message "Resuming cache status...")
(save-excursion
(goto-char (point-min))
(while (not (eobp))
- (setq msg (wl-summary-message-number))
+ (setq number (wl-summary-message-number))
(setq mark (wl-summary-persistent-mark))
- (setq msgid (elmo-msgdb-get-field msgdb msg 'message-id))
+ (setq msgid (elmo-message-field folder number 'message-id))
(setq set-mark nil)
(if (elmo-file-cache-exists-p msgid)
- (if (or
- (string= mark elmo-msgdb-unread-uncached-mark) ; U -> !
- (string= mark elmo-msgdb-new-mark) ; N -> !
- )
- (setq set-mark elmo-msgdb-unread-cached-mark)
- (if (string= mark elmo-msgdb-read-uncached-mark) ; u -> ' '
- (setq set-mark " ")))
- (if (string= mark " ")
- (setq set-mark elmo-msgdb-read-uncached-mark) ;' ' -> u
- (if (string= mark elmo-msgdb-unread-cached-mark)
- (setq set-mark elmo-msgdb-unread-uncached-mark) ; ! -> U
- )))
+ (when (member mark (elmo-msgdb-uncached-marks))
+ (elmo-message-set-cached folder number t)
+ (setq set-mark (elmo-message-mark folder number)))
+ (unless (member mark (elmo-msgdb-uncached-marks))
+ (elmo-message-set-cached folder number nil)
+ (setq set-mark (or (elmo-message-mark folder number) " "))))
(when set-mark
(delete-backward-char 1)
(insert set-mark)
- (elmo-msgdb-set-mark msgdb msg
- (if (string= set-mark " ") nil set-mark))
(if wl-summary-highlight
(wl-highlight-summary-current-line)))
(forward-line 1))
- (wl-summary-set-mark-modified)
(wl-summary-count-unread)
(wl-summary-update-modeline)
(message "Resuming cache status...done")
unreads-in-db (elmo-folder-list-messages-mark-match
wl-summary-buffer-elmo-folder
(wl-regexp-opt (elmo-msgdb-unread-marks)))
- importants (elmo-folder-list-importants
- wl-summary-buffer-elmo-folder)
+ 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))
(setq diff (elmo-list-diff importants importants-in-db))
(setq diffs (cadr diff))
(setq mes (concat mes (format "(-%d" (length diffs))))
(while diffs
- (wl-summary-mark-as-read (car diffs) 'no-folder)
+ (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))))
(while diffs
- (wl-summary-mark-as-unread (car diffs) 'no-server 'no-modeline)
+ (wl-summary-mark-as-unread (car diffs) 'no-folder 'no-modeline)
(setq diffs (cdr diffs)))
(if (interactive-p) (message mes)))))
"Making thread...done"
"Inserting message...done")))
(wl-summary-set-message-modified)
- (wl-summary-set-mark-modified)
(when (and sync-all (eq wl-summary-buffer-view 'thread))
(elmo-kill-buffer wl-summary-search-buf-name)
(message "Inserting message...")
dels)
;;; (elmo-msgdb-save (wl-summary-buffer-folder-name) nil)
(wl-summary-set-message-modified)
- (wl-summary-set-mark-modified)
(wl-folder-set-folder-updated (wl-summary-buffer-folder-name)
(list 0 0 0))
;;; for thread.
wl-summary-buffer-temp-mark-column
wl-summary-buffer-persistent-mark-column
wl-summary-buffer-message-modified
- wl-summary-buffer-mark-modified
wl-summary-buffer-thread-modified
wl-summary-buffer-number-list
wl-summary-buffer-msgdb
(wl-thread-entity-get-linked thr-entity))))))
(defun wl-summary-mark-as-unread (&optional number
- no-server-update
+ no-folder-mark
no-modeline-update)
(interactive)
(save-excursion
- (let* (eol
- (inhibit-read-only t)
- (buffer-read-only nil)
+ (let ((buffer-read-only nil)
(folder wl-summary-buffer-elmo-folder)
- (msgdb (wl-summary-buffer-msgdb))
-;;; (number-alist (elmo-msgdb-get-number-alist msgdb))
- new-mark visible mark cur-mark entity)
- (if number
- (progn
- (setq visible (wl-summary-jump-to-msg number))
- (unless (setq mark (elmo-msgdb-get-mark msgdb number))
- (setq mark " ")))
- ;; interactive
- (setq visible t))
+ mark new-mark visible)
+ (setq visible (if number
+ (wl-summary-jump-to-msg number)
+ t)
+ number (or number (wl-summary-message-number))
+ mark (elmo-message-mark folder number))
+ (unless (member mark (elmo-msgdb-unread-marks))
+ (elmo-folder-unmark-read folder (list number) no-folder-mark))
+ (setq new-mark (elmo-message-mark folder number))
+ (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
+ (wl-summary-buffer-folder-name)
+ (+ wl-summary-buffer-unread-count
+ wl-summary-buffer-new-count)))
(when visible
- (if (null (wl-summary-message-number))
- (message "No message.")
- (end-of-line)
- (setq eol (point))
- (wl-summary-goto-previous-message-beginning)))
- (if (or (and (not visible)
- ;; already exists in msgdb.
- (elmo-msgdb-overview-get-entity number msgdb))
- (progn
- ;; visible.
- (setq cur-mark (wl-summary-persistent-mark))
- (or (string= cur-mark " ")
- (string= cur-mark elmo-msgdb-read-uncached-mark))))
- (progn
- (setq number (or number (wl-summary-message-number)))
- (setq mark (or mark cur-mark))
- (save-match-data
- (setq new-mark (if (string= mark
- elmo-msgdb-read-uncached-mark)
- elmo-msgdb-unread-uncached-mark
- (if (elmo-message-use-cache-p folder number)
- elmo-msgdb-unread-cached-mark
- elmo-msgdb-unread-uncached-mark))))
- ;; server side mark
- (unless no-server-update
- (elmo-folder-unmark-read folder (list number)))
- (when visible
- (delete-backward-char 1)
- (insert new-mark))
- (elmo-msgdb-set-mark msgdb number new-mark)
- (unless no-modeline-update
- (setq wl-summary-buffer-unread-count
- (+ 1 wl-summary-buffer-unread-count))
- (wl-summary-update-modeline)
- (wl-folder-update-unread
- (wl-summary-buffer-folder-name)
- (+ wl-summary-buffer-unread-count
- wl-summary-buffer-new-count)))
- (wl-summary-set-mark-modified)
- (if (and visible wl-summary-highlight)
- (wl-highlight-summary-current-line))))))
- (set-buffer-modified-p nil))
+ (unless (string= (wl-summary-persistent-mark) new-mark)
+ (delete-backward-char 1)
+ (insert (or new-mark " "))
+ (if (and visible wl-summary-highlight)
+ (wl-highlight-summary-current-line))
+ (set-buffer-modified-p nil)))
+ number)))
(defun wl-summary-delete (&optional number)
"Mark a delete mark 'D'.
(let ((del-fld (wl-summary-get-delete-folder
(wl-summary-buffer-folder-name)))
(start (point))
- (unread-marks (list elmo-msgdb-unread-cached-mark
- elmo-msgdb-unread-uncached-mark
- elmo-msgdb-new-mark))
(refiles (append moves dels))
(refile-failures 0)
(copy-failures 0)
;; end cOpy
(wl-summary-folder-info-update)
(wl-summary-set-message-modified)
- (wl-summary-set-mark-modified)
(run-hooks 'wl-summary-exec-hook)
(unless (and wl-message-buffer
(eq (wl-summary-message-number)
(interactive)
(wl-summary-pick wl-summary-buffer-target-mark-list 'delete))
-(defun wl-summary-mark-as-read (&optional number no-folder-mark)
+(defun wl-summary-mark-as-read (&optional number
+ no-folder-mark
+ no-modeline-update)
(interactive)
(save-excursion
(let ((buffer-read-only nil)
(folder wl-summary-buffer-elmo-folder)
(msgdb (wl-summary-buffer-msgdb))
(case-fold-search nil)
- cur-mark mark stat visible uncached new-mark marked)
- (setq number (or number (wl-summary-message-number))
- visible (if number
+ mark visible new-mark)
+ (setq visible (if number
(wl-summary-jump-to-msg number)
;; interactive
t)
- mark (elmo-msgdb-get-mark msgdb number))
- (cond
- ((string= mark elmo-msgdb-new-mark) ; N
- (setq stat 'new))
- ((string= mark elmo-msgdb-unread-uncached-mark) ; U
- (setq stat 'unread))
- ((string= mark elmo-msgdb-unread-cached-mark) ; !
- (setq stat 'unread))
- ((string= mark elmo-msgdb-read-uncached-mark) ; u
- (setq stat 'read))
- (t
- ;; no need to mark server.
- (setq no-folder-mark t)))
- (setq new-mark
- (if (and (if (elmo-message-use-cache-p folder number)
- (not (elmo-folder-local-p folder)))
- (not (elmo-file-cache-exists-p
- (elmo-message-field wl-summary-buffer-elmo-folder
- number 'message-id))))
- elmo-msgdb-read-uncached-mark
- nil))
- ;; folder mark.
- (unless no-folder-mark
- (elmo-folder-mark-as-read folder (list number)))
- (cond ((eq stat 'unread)
- (setq wl-summary-buffer-unread-count
- (1- wl-summary-buffer-unread-count)))
- ((eq stat 'new)
- (setq wl-summary-buffer-new-count
- (1- wl-summary-buffer-new-count))))
- (wl-summary-update-modeline)
- (wl-folder-update-unread
- (wl-summary-buffer-folder-name)
- (+ wl-summary-buffer-unread-count
- wl-summary-buffer-new-count))
- (when stat
- ;; set mark on buffer
- (when visible
- (unless (string= (wl-summary-persistent-mark) new-mark)
- (delete-backward-char 1)
- (insert (or new-mark " "))))
- ;; set msgdb mark.
- (unless (string= mark new-mark)
- (elmo-msgdb-set-mark msgdb number new-mark))
- (wl-summary-set-mark-modified))
- (if (and visible wl-summary-highlight)
- (wl-highlight-summary-current-line nil nil t))
- (set-buffer-modified-p nil)
- (if stat
+ number (or number (wl-summary-message-number))
+ mark (elmo-message-mark folder number))
+ (when (member mark (elmo-msgdb-unread-marks))
+ ;; folder mark.
+ (elmo-folder-mark-as-read folder (list number) no-folder-mark))
+ (setq new-mark (elmo-message-mark folder number))
+ (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
+ (wl-summary-buffer-folder-name)
+ (+ wl-summary-buffer-unread-count
+ wl-summary-buffer-new-count)))
+ ;; set mark on buffer
+ (when visible
+ (unless (string= (wl-summary-persistent-mark) new-mark)
+ (delete-backward-char 1)
+ (insert (or new-mark " ")))
+ (if (and visible wl-summary-highlight)
+ (wl-highlight-summary-current-line nil nil t))
+ (set-buffer-modified-p nil))
+ (if (member mark (elmo-msgdb-unread-marks))
(run-hooks 'wl-summary-unread-message-hook))
number ;return value
)))
(elmo-message-encache folder number 'read))
(unless no-server-update
(elmo-msgdb-global-mark-set message-id
- elmo-msgdb-important-mark)))
- (wl-summary-set-mark-modified)))
+ elmo-msgdb-important-mark)))))
(if (and visible wl-summary-highlight)
(wl-highlight-summary-current-line nil nil t))))
(set-buffer-modified-p nil)
"Return non-nil when summary line format is changed."
(not (string=
wl-summary-buffer-line-format
- (or (elmo-object-load (expand-file-name
+ (or (elmo-object-load (expand-file-name
wl-summary-line-format-file
(elmo-folder-msgdb-path
wl-summary-buffer-elmo-folder))
(if downward
(forward-line 1)
(forward-line -1))
- (setq skip (or (string-match skip-tmark-regexp
+ (setq skip (or (string-match skip-tmark-regexp
(save-excursion
(wl-summary-temp-mark)))
(and skip-pmark-regexp
(num (or number (wl-summary-message-number)))
(wl-mime-charset wl-summary-buffer-mime-charset)
(default-mime-charset wl-summary-buffer-mime-charset)
- fld-buf fld-win thr-entity)
+ no-folder-mark fld-buf fld-win thr-entity)
(if (and wl-thread-open-reading-thread
(eq wl-summary-buffer-view 'thread)
(not (wl-thread-entity-get-opened
(if (setq fld-win (get-buffer-window fld-buf))
(delete-window fld-win)))
(setq wl-current-summary-buffer (current-buffer))
- (wl-summary-mark-as-read
- num
- ;; not fetched, then change server-mark.
- (if (wl-message-redisplay folder num 'mime
- (or force-reload
- (string= (elmo-folder-name-internal
- folder)
- wl-draft-folder)))
- nil
- ;; plugged, then leave server-mark.
- (if (and
- (not
- (elmo-folder-local-p
- wl-summary-buffer-elmo-folder))
- (elmo-folder-plugged-p
- wl-summary-buffer-elmo-folder))
- 'leave)))
+ (setq no-folder-mark
+ ;; If cache is used, change folder-mark.
+ (if (wl-message-redisplay folder num
+ 'mime
+ (or
+ force-reload
+ (string= (elmo-folder-name-internal
+ folder)
+ wl-draft-folder)))
+ nil
+ ;; plugged, then leave folder-mark.
+ (if (and (not (elmo-folder-local-p
+ wl-summary-buffer-elmo-folder))
+ (elmo-folder-plugged-p
+ wl-summary-buffer-elmo-folder))
+ 'leave)))
+ (if (elmo-message-use-cache-p folder num)
+ (elmo-message-set-cached folder num t))
+ (wl-summary-mark-as-read num no-folder-mark)
(setq wl-summary-buffer-current-msg num)
(when wl-summary-recenter
(recenter (/ (- (window-height) 2) 2))