(defvar wl-folder-buffer-disp-summary nil)
(defvar wl-folder-buffer-cur-entity-id nil)
+(defvar wl-folder-buffer-last-visited-entity-id nil)
(defvar wl-folder-buffer-cur-path nil)
(defvar wl-folder-buffer-cur-point nil)
(make-variable-buffer-local 'wl-folder-buffer-disp-summary)
(make-variable-buffer-local 'wl-folder-buffer-cur-entity-id)
+(make-variable-buffer-local 'wl-folder-buffer-last-visited-entity-id)
(make-variable-buffer-local 'wl-folder-buffer-cur-path)
(make-variable-buffer-local 'wl-folder-buffer-cur-point)
(defconst wl-folder-entity-regexp "^\\([ ]*\\)\\(\\[[\\+-]\\]\\)?\\([^\\[].+\\):[-*0-9]+/[-*0-9]+/[-*0-9]+")
-(defconst wl-folder-group-regexp "^\\([ ]*\\)\\[\\([\\+-]\\)\\]\\(.+\\):[-0-9-]+/[0-9-]+/[0-9-]+\n")
+(defconst wl-folder-group-regexp "^\\([ ]*\\)\\[\\([\\+-]\\)\\]\\(.+\\):[0-9-]+/[0-9-]+/[0-9-]+\n")
;; 1:indent 2:opened 3:group-name
(defconst wl-folder-unsync-regexp ":[^0\\*][0-9]*/[0-9\\*-]+/[0-9\\*-]+$")
["Next Folder" wl-folder-next-entity t]
["Check Current Folder" wl-folder-check-current-entity t]
["Sync Current Folder" wl-folder-sync-current-entity t]
-; ["Drop Current Folder" wl-folder-drop-unsync-current-entity t]
+;;; ["Drop Current Folder" wl-folder-drop-unsync-current-entity t]
["Prefetch Current Folder" wl-folder-prefetch-current-entity t]
"----"
["Mark as Read all Current Folder" wl-folder-mark-as-read-all-current-entity t]
nil
(setq wl-folder-mode-map (make-sparse-keymap))
(define-key wl-folder-mode-map " " 'wl-folder-jump-to-current-entity)
-; (define-key wl-folder-mode-map "\M- " 'wl-folder-open-close)
+;;; (define-key wl-folder-mode-map "\M- " 'wl-folder-open-close)
(define-key wl-folder-mode-map "/" 'wl-folder-open-close)
(define-key wl-folder-mode-map "\C-m" 'wl-folder-jump-to-current-entity)
(define-key wl-folder-mode-map [(shift return)] 'wl-folder-jump-to-current-entity-with-arg)
(define-key wl-folder-mode-map "g" 'wl-folder-goto-folder)
(define-key wl-folder-mode-map "G" 'wl-folder-goto-folder-sticky)
(define-key wl-folder-mode-map "j" 'wl-folder-jump-to-current-entity)
+ (define-key wl-folder-mode-map "\C-i" 'wl-folder-revisit-last-visited-folder)
(define-key wl-folder-mode-map "w" 'wl-draft)
(define-key wl-folder-mode-map "W" 'wl-folder-write-current-folder)
(define-key wl-folder-mode-map "\C-c\C-o" 'wl-jump-to-draft-buffer)
(define-key wl-folder-mode-map "rs" 'wl-folder-check-region)
(define-key wl-folder-mode-map "s" 'wl-folder-check-current-entity)
(define-key wl-folder-mode-map "I" 'wl-folder-prefetch-current-entity)
-; (define-key wl-folder-mode-map "D" 'wl-folder-drop-unsync-current-entity)
+;;; (define-key wl-folder-mode-map "D" 'wl-folder-drop-unsync-current-entity)
(define-key wl-folder-mode-map "p" 'wl-folder-prev-entity)
(define-key wl-folder-mode-map "n" 'wl-folder-next-entity)
(define-key wl-folder-mode-map "v" 'wl-folder-toggle-disp-summary)
(define-key wl-folder-mode-map "?" 'wl-folder-pick)
(define-key wl-folder-mode-map "q" 'wl-exit)
(define-key wl-folder-mode-map "z" 'wl-folder-suspend)
+ (define-key wl-folder-mode-map "x" 'wl-execute-temp-marks)
(define-key wl-folder-mode-map "\M-t" 'wl-toggle-plugged)
(define-key wl-folder-mode-map "\C-t" 'wl-plugged-change)
(define-key wl-folder-mode-map "<" 'beginning-of-buffer)
"Menu used in Folder mode."
wl-folder-mode-menu-spec))
-(defmacro wl-folder-unread-regex (group)
- (` (concat "^[ ]*.+:[0-9\\*-]+/[^0\\*][0-9]*/[0-9\\*-]+$"
- (if (, group)
- "\\|^[ ]*\\[[+-]\\]"
- ""))))
+(defun wl-folder-unread-regex (group)
+ (concat "^[ ]*.+:[0-9\\*-]+/[^0\\*][0-9]*/[0-9\\*-]+$"
+ (if group
+ "\\|^[ ]*\\[[+-]\\]"
+ "")))
-(defmacro wl-folder-buffer-group-p ()
- (` (get-text-property (point) 'wl-folder-is-group)))
+(defun wl-folder-buffer-group-p ()
+ (get-text-property (point) 'wl-folder-is-group))
(defun wl-folder-buffer-search-group (group)
(let ((prev-point (point))
(defun wl-folder-buffer-search-entity (folder &optional searchname)
(let ((search (or searchname (wl-folder-get-petname folder)))
- case-fold-search)
- (re-search-forward
- (concat
- "^[ \t]*"
- (regexp-quote search) ":[-0-9\\*-]+/[0-9\\*-]+/[0-9\\*-]+") nil t)))
+ case-fold-search
+ result)
+ (catch 'found
+ (while (setq result
+ (re-search-forward
+ (concat
+ "^[ \t]*"
+ (regexp-quote search) ":[-0-9\\*-]+/[0-9\\*-]+/[0-9\\*-]+")
+ nil t))
+ (when (string= (wl-folder-get-entity-from-buffer) folder)
+ (throw 'found result))))))
(defsubst wl-folder-get-folder-name-by-id (entity-id &optional hashtb)
(and (numberp entity-id)
(defmacro wl-folder-get-entity-id (entity)
`(get-text-property 0 'wl-folder-entity-id ,entity))
-(defmacro wl-folder-get-entity-from-buffer (&optional getid)
- `(let ((id (get-text-property (point)
- 'wl-folder-entity-id)))
- (if ,getid
- id
- (wl-folder-get-folder-name-by-id id))))
+(defun wl-folder-get-entity-from-buffer (&optional getid)
+ (let ((id (get-text-property (point)
+ 'wl-folder-entity-id)))
+ (if getid
+ id
+ (wl-folder-get-folder-name-by-id id))))
(defmacro wl-folder-entity-exists-p (entity &optional hashtb)
- (` (let ((sym (intern-soft (, entity)
- (or (, hashtb) wl-folder-entity-hashtb))))
- (and sym (boundp sym)))))
+ `(let ((sym (intern-soft ,entity (or ,hashtb wl-folder-entity-hashtb))))
+ (and sym (boundp sym))))
(defmacro wl-folder-clear-entity-info (entity &optional hashtb)
- (` (let ((sym (intern-soft (, entity)
- (or (, hashtb) wl-folder-entity-hashtb))))
- (if (boundp sym)
- (makunbound sym)))))
+ `(elmo-clear-hash-val ,entity (or ,hashtb wl-folder-entity-hashtb)))
(defmacro wl-folder-get-entity-info (entity &optional hashtb)
- (` (elmo-get-hash-val (, entity) (or (, hashtb) wl-folder-entity-hashtb))))
+ `(elmo-get-hash-val ,entity (or ,hashtb wl-folder-entity-hashtb)))
(defmacro wl-folder-set-entity-info (entity value &optional hashtb)
- (` (let* ((hashtb (or (, hashtb) wl-folder-entity-hashtb))
- (info (wl-folder-get-entity-info (, entity) hashtb)))
- (elmo-set-hash-val (elmo-string (, entity))
- (if (< (length (, value)) 4)
- (append (, value) (list (nth 3 info)))
- (, value))
- hashtb))))
+ `(let* ((hashtb (or ,hashtb wl-folder-entity-hashtb))
+ (info (wl-folder-get-entity-info ,entity hashtb)))
+ (elmo-set-hash-val (elmo-string ,entity)
+ (if (< (length ,value) 4)
+ (append ,value (list (nth 3 info)))
+ ,value)
+ hashtb)))
(defun wl-folder-persistent-p (folder)
(or (and (wl-folder-search-entity-by-name folder wl-folder-entity
(defmacro wl-folder-elmo-folder-cache-get (name &optional hashtb)
"Returns a elmo folder structure associated with NAME from HASHTB.
Default HASHTB is `wl-folder-elmo-folder-hashtb'."
- (` (elmo-get-hash-val (, name)
- (or (, hashtb) wl-folder-elmo-folder-hashtb))))
+ `(elmo-get-hash-val ,name
+ (or ,hashtb wl-folder-elmo-folder-hashtb)))
(defmacro wl-folder-elmo-folder-cache-put (name folder &optional hashtb)
"Get folder elmo folder structure on HASHTB for folder with NAME.
Default HASHTB is `wl-folder-elmo-folder-hashtb'."
- (` (elmo-set-hash-val (, name) (, folder)
- (or (, hashtb) wl-folder-elmo-folder-hashtb))))
+ `(elmo-set-hash-val ,name ,folder
+ (or ,hashtb wl-folder-elmo-folder-hashtb)))
(defun wl-draft-get-folder ()
"A function to obtain `opened' draft elmo folder structure."
(string= (elmo-folder-name-internal wl-draft-folder-internal)
wl-draft-folder))
wl-draft-folder-internal
- (setq wl-draft-folder-internal (elmo-make-folder wl-draft-folder))
+ (setq wl-draft-folder-internal (wl-folder-make-elmo-folder
+ wl-draft-folder))
(wl-folder-confirm-existence wl-draft-folder-internal)
(elmo-folder-open wl-draft-folder-internal 'load-msgdb)
wl-draft-folder-internal))
-(defmacro wl-folder-get-elmo-folder (entity &optional no-cache)
+(defun wl-folder-mime-charset (folder-name)
+ (or (wl-get-assoc-list-value wl-folder-mime-charset-alist folder-name)
+ wl-mime-charset))
+
+(defun wl-folder-make-elmo-folder (folder-name)
+ (elmo-make-folder folder-name nil (wl-folder-mime-charset folder-name)))
+
+(defsubst wl-folder-get-elmo-folder (entity &optional no-cache)
"Get elmo folder structure from ENTITY."
- `(if ,no-cache
- (elmo-make-folder (elmo-string ,entity))
- (if (string= (elmo-string ,entity) wl-draft-folder)
- (wl-draft-get-folder)
- (or (wl-folder-elmo-folder-cache-get ,entity)
- (let* ((name (elmo-string ,entity))
- (folder (elmo-make-folder name)))
- (wl-folder-elmo-folder-cache-put name folder)
- folder)))))
+ (let ((name (elmo-string entity)))
+ (if no-cache
+ (wl-folder-make-elmo-folder name)
+ (if (string= name wl-draft-folder)
+ (wl-draft-get-folder)
+ (or (wl-folder-elmo-folder-cache-get name)
+ (let ((folder (wl-folder-make-elmo-folder name)))
+ (wl-folder-elmo-folder-cache-put name folder)
+ folder))))))
(defsubst wl-folder-put-folder-property (beg end id is-group &optional object)
(put-text-property beg end 'wl-folder-entity-id id object)
(setq entity (wl-pop entities))
(cond
((consp entity)
-;; (if (and (string= name (car entity))
-;; (eq id (wl-folder-get-entity-id (car entity))))
-;; (throw 'done last-entity))
+;;; (if (and (string= name (car entity))
+;;; (eq id (wl-folder-get-entity-id (car entity))))
+;;; (throw 'done last-entity))
(and entities
(wl-push entities entity-stack))
(setq entities (nth 2 entity)))
(wl-folder-toggle-disp-summary 'off wl-queue-folder)
(switch-to-buffer cur-buf))))))
+(defun wl-folder-set-persistent-mark (folder number flag)
+ "Set a persistent mark which corresponds to the specified flag on message."
+ (let ((buffer (wl-summary-get-buffer folder)))
+ (if buffer
+ (with-current-buffer buffer
+ (wl-summary-set-persistent-mark flag number))
+ ;; Parent buffer does not exist.
+ (let ((elmo-folder (wl-folder-get-elmo-folder folder)))
+ (elmo-folder-open elmo-folder 'load-msgdb)
+ (elmo-folder-set-flag elmo-folder (list wl-draft-parent-number) flag)
+ (elmo-folder-close elmo-folder)))))
+
(defun wl-folder-empty-trash ()
"Empty trash."
(interactive)
(throw 'done t))
(goto-char (point-max))))
-(defsubst wl-folder-update-group (entity diffs &optional is-group)
+(defun wl-folder-update-group (entity diffs &optional is-group)
(save-excursion
(let ((path (wl-folder-get-path
wl-folder-entity
(defun wl-folder-jump-to-current-entity (&optional arg)
"Enter the current folder. If optional ARG exists, update folder list."
(interactive "P")
- (beginning-of-line)
- (let (entity beg end indent opened fname err fld-name)
- (cond
- ((and (wl-folder-buffer-group-p)
- (looking-at wl-folder-group-regexp))
- (save-excursion
- (setq fname (wl-folder-get-entity-from-buffer))
- (setq indent (wl-match-buffer 1))
- (setq opened (wl-match-buffer 2))
- (if (string= opened "+")
- (progn
- (setq entity (wl-folder-search-group-entity-by-name
- fname
- wl-folder-entity))
- (setq beg (point))
- (if arg
- (wl-folder-update-recursive-current-entity entity)
- ;; insert as opened
- (setcdr (assoc (car entity) wl-folder-group-alist) t)
- (if (eq 'access (cadr entity))
- (wl-folder-maybe-load-folder-list entity))
- ;(condition-case errobj
- (progn
- (if (or (wl-folder-force-fetch-p (car entity))
- (and
- (eq 'access (cadr entity))
- (null (caddr entity))))
- (wl-folder-update-newest indent entity)
- (wl-folder-insert-entity indent entity))
- (wl-highlight-folder-path wl-folder-buffer-cur-path))
- ; (quit
- ; (setq err t)
- ; (setcdr (assoc fname wl-folder-group-alist) nil))
- ; (error
- ; (elmo-display-error errobj t)
- ; (ding)
- ; (setq err t)
- ; (setcdr (assoc fname wl-folder-group-alist) nil)))
- (if (not err)
- (let ((buffer-read-only nil))
- (delete-region (save-excursion (beginning-of-line)
- (point))
- (save-excursion (end-of-line)
- (+ 1 (point))))))))
- (setq beg (point))
- (end-of-line)
- (save-match-data
- (setq end
- (progn (wl-folder-goto-bottom-of-current-folder indent)
- (beginning-of-line)
- (point))))
- (setq entity (wl-folder-search-group-entity-by-name
- fname
- wl-folder-entity))
- (let ((buffer-read-only nil))
- (delete-region beg end))
- (setcdr (assoc (car entity) wl-folder-group-alist) nil)
- (wl-folder-insert-entity indent entity) ; insert entity
- (forward-line -1)
- (wl-highlight-folder-path wl-folder-buffer-cur-path)
-; (wl-delete-all-overlays)
-; (wl-highlight-folder-current-line)
- )))
- ((setq fld-name (wl-folder-get-entity-from-buffer))
+ (let ((fld-name (wl-folder-get-entity-from-buffer))
+ entity beg end indent opened err)
+ (unless fld-name
+ (error "No folder"))
+ (beginning-of-line)
+ (if (and (wl-folder-buffer-group-p)
+ (looking-at wl-folder-group-regexp))
+ ;; folder group
+ (save-excursion
+ (setq indent (wl-match-buffer 1))
+ (setq opened (wl-match-buffer 2))
+ (if (string= opened "+")
+ (progn
+ (setq entity (wl-folder-search-group-entity-by-name
+ fld-name
+ wl-folder-entity))
+ (setq beg (point))
+ (if arg
+ (wl-folder-update-recursive-current-entity entity)
+ ;; insert as opened
+ (setcdr (assoc (car entity) wl-folder-group-alist) t)
+ (if (eq 'access (cadr entity))
+ (wl-folder-maybe-load-folder-list entity))
+ ;(condition-case errobj
+ (progn
+ (if (or (wl-folder-force-fetch-p (car entity))
+ (and
+ (eq 'access (cadr entity))
+ (null (caddr entity))))
+ (wl-folder-update-newest indent entity)
+ (wl-folder-insert-entity indent entity))
+ (wl-highlight-folder-path wl-folder-buffer-cur-path))
+;;; (quit
+;;; (setq err t)
+;;; (setcdr (assoc fld-name wl-folder-group-alist) nil))
+;;; (error
+;;; (elmo-display-error errobj t)
+;;; (ding)
+;;; (setq err t)
+;;; (setcdr (assoc fld-name wl-folder-group-alist) nil)))
+ (if (not err)
+ (let ((buffer-read-only nil))
+ (delete-region (save-excursion (beginning-of-line)
+ (point))
+ (save-excursion (end-of-line)
+ (+ 1 (point))))))))
+ (setq beg (point))
+ (end-of-line)
+ (save-match-data
+ (setq end
+ (progn (wl-folder-goto-bottom-of-current-folder indent)
+ (beginning-of-line)
+ (point))))
+ (setq entity (wl-folder-search-group-entity-by-name
+ fld-name
+ wl-folder-entity))
+ (let ((buffer-read-only nil))
+ (delete-region beg end))
+ (setcdr (assoc (car entity) wl-folder-group-alist) nil)
+ (wl-folder-insert-entity indent entity) ; insert entity
+ (forward-line -1)
+ (wl-highlight-folder-path wl-folder-buffer-cur-path)
+;;; (wl-delete-all-overlays)
+;;; (wl-highlight-folder-current-line)
+ ))
+ ;; ordinal folder
(wl-folder-set-current-entity-id
(get-text-property (point) 'wl-folder-entity-id))
(setq fld-name (wl-folder-get-folder-name-by-id
(wl-summary-goto-folder-subr fld-name
(wl-summary-get-sync-range
(wl-folder-get-elmo-folder fld-name))
- nil arg t)))))
+ nil arg t))))
(set-buffer-modified-p nil))
(defun wl-folder-close-entity (entity)
ret-val
(wl-folder-check-entity (car flist))))
(setq flist (cdr flist)))
- ;(wl-folder-buffer-search-entity (car entity))
- ;(wl-folder-update-line ret-val)
+;;; (wl-folder-buffer-search-entity (car entity))
+;;; (wl-folder-update-line ret-val)
))
((stringp entity)
(message "Checking \"%s\"" entity)
(if (wl-string-match-member entity wl-strict-diff-folders)
(elmo-strict-folder-diff folder)
(elmo-folder-diff folder)))
+ (elmo-open-error
+ (signal (car err) (cdr err)))
(error
;; maybe not exist folder.
- (if (and (not (or (memq 'elmo-open-error
- (get (car err) 'error-conditions))
- (memq 'elmo-imap4-bye-error
- (get (car err) 'error-conditions))))
- (not (elmo-folder-exists-p folder)))
+ (if (not (elmo-folder-exists-p folder))
(wl-folder-create-subr folder)
(signal (car err) (cdr err))))))
(new (elmo-diff-new nums))
(unread (elmo-diff-unread nums))
- (all (elmo-diff-all nums))
- unsync nomif)
+ (all (elmo-diff-all nums)))
(if (and (eq wl-folder-notify-deleted 'sync)
(or (and new (> 0 new))
(and unread (> 0 unread))
(setq new (and new (max 0 new))
unread (and unread (max 0 unread))
all (and all (max 0 all))))
- (setq unread (or (and unread (- unread (or new 0)))
- (elmo-folder-get-info-unread folder)
- (nth 1 (elmo-folder-count-flags folder))))
+ (setq unread (if unread
+ (- unread (or new 0))
+ (or (elmo-folder-get-info-unread folder)
+ (cdr (assq 'unread (elmo-folder-count-flags folder)))
+ 0)))
(wl-folder-entity-hashtb-set wl-folder-entity-hashtb entity
(list new unread all)
(get-buffer wl-folder-buffer-name)))
ret-val
(wl-folder-check-one-entity (elmo-folder-name-internal
folder))))
- ;;(sit-for 0)
+;;; (sit-for 0)
))
;; check network entity at last
(when async-folder-list
ret-val
(wl-folder-check-one-entity (elmo-folder-name-internal
folder))))
- ;;(sit-for 0)
+;;; (sit-for 0)
)))
ret-val))
(if buf-win
(select-window buf-win)
(set-buffer buf))
+ (when (and wl-folder-buffer-cur-entity-id
+ (not (eq wl-folder-buffer-cur-entity-id entity-id)))
+ (setq wl-folder-buffer-last-visited-entity-id wl-folder-buffer-cur-entity-id))
(setq wl-folder-buffer-cur-entity-id entity-id)
(setq wl-folder-buffer-cur-path
(wl-folder-get-path wl-folder-entity entity-id))
((stringp entity)
(let* ((folder (wl-folder-get-elmo-folder entity))
(nums (wl-folder-get-entity-info entity))
- (wl-summary-highlight (if (or (wl-summary-sticky-p folder)
- (wl-summary-always-sticky-folder-p
- folder))
- wl-summary-highlight))
- wl-auto-select-first new unread sticky)
- (setq new (or (car nums) 0))
- (setq unread (or (cadr nums) 0))
- (if (or (not unread-only)
- (or (< 0 new) (< 0 unread)))
- (let ((wl-summary-buffer-name
- (if (setq sticky (get-buffer (wl-summary-sticky-buffer-name
- (elmo-folder-name-internal
- folder))))
- ;; Sticky folder exists.
- (wl-summary-sticky-buffer-name
- (elmo-folder-name-internal folder))
- (concat
- wl-summary-buffer-name
- (symbol-name this-command))))
- (wl-summary-use-frame nil)
- (wl-summary-always-sticky-folder-list nil))
- (save-window-excursion
- (save-excursion
- (wl-summary-goto-folder-subr entity
- (wl-summary-get-sync-range
- folder)
- nil nil nil t)
- (if sticky
- (wl-summary-save-status)
- (wl-summary-exit))))))))))
+ (new (or (car nums) 0))
+ (unread (or (cadr nums) 0)))
+ (when (or (not unread-only)
+ (or (> new 0) (> unread 0)))
+ (let ((summary (wl-summary-get-buffer entity))
+ (range (wl-summary-get-sync-range folder)))
+ (if summary
+ (save-selected-window
+ (with-current-buffer summary
+ (let ((win (get-buffer-window summary t)))
+ (when win
+ (select-window win)))
+ (wl-summary-sync 'unset-cursor range)
+ (wl-summary-save-status)))
+ (elmo-folder-open folder 'load-msgdb)
+ (unwind-protect
+ (progn
+ (elmo-folder-synchronize folder nil (eq range 'all))
+ (wl-folder-set-folder-updated
+ entity
+ (list
+ 0
+ (or (cdr (assq 'unread (elmo-folder-count-flags folder)))
+ 0)
+ (elmo-folder-length folder))))
+ (elmo-folder-close folder)))))))))
(defun wl-folder-sync-current-entity (&optional unread-only)
"Synchronize the folder at position.
(wl-folder-mark-as-read-all-entity (car flist))
(setq flist (cdr flist)))))
((stringp entity)
- (let* ((nums (wl-folder-get-entity-info entity))
- (folder (wl-folder-get-elmo-folder entity))
- (wl-summary-highlight (if (or (wl-summary-sticky-p folder)
- (wl-summary-always-sticky-folder-p
- folder))
- wl-summary-highlight))
- wl-auto-select-first new unread sticky)
- (setq new (or (car nums) 0))
- (setq unread (or (cadr nums) 0))
- (if (or (< 0 new) (< 0 unread))
- (save-window-excursion
- (save-excursion
- (let ((wl-summary-buffer-name
- (if (setq sticky (get-buffer
- (wl-summary-sticky-buffer-name
- (elmo-folder-name-internal
- folder))))
- ;; Sticky folder exists.
- (wl-summary-sticky-buffer-name
- (elmo-folder-name-internal folder))
- (concat
- wl-summary-buffer-name
- (symbol-name this-command))))
- (wl-summary-use-frame nil)
- (wl-summary-always-sticky-folder-list nil))
- (wl-summary-goto-folder-subr entity
- (wl-summary-get-sync-range folder)
- nil)
- (wl-summary-mark-as-read-all)
- (if sticky
- (wl-summary-save-status)
- (wl-summary-exit)))))
- (sit-for 0))))))
+ (let* ((folder (wl-folder-get-elmo-folder entity))
+ (nums (wl-folder-get-entity-info entity))
+ (new (or (car nums) 0))
+ (unread (or (cadr nums) 0)))
+ (when (or (> new 0) (> unread 0))
+ (let ((summary (wl-summary-get-buffer entity))
+ (range (wl-summary-get-sync-range folder)))
+ (if summary
+ (save-selected-window
+ (with-current-buffer summary
+ (let ((win (get-buffer-window summary t)))
+ (when win
+ (select-window win)))
+ (wl-summary-sync 'unset-cursor range)
+ (wl-summary-mark-as-read-all)
+ (wl-summary-save-status)))
+ (elmo-folder-open folder 'load-msgdb)
+ (unwind-protect
+ (progn
+ (elmo-folder-synchronize folder nil (eq range 'all))
+ (elmo-folder-unset-flag
+ folder
+ (elmo-folder-list-flagged folder 'unread 'in-msgdb)
+ 'unread)
+ (wl-folder-set-folder-updated
+ entity
+ (list 0 0 (elmo-folder-length folder))))
+ (elmo-folder-close folder)))))))))
(defun wl-folder-mark-as-read-all-current-entity ()
"Mark as read all messages in the folder at position.
(let (name)
(setq name (wl-match-buffer 1))
(goto-char (+ 1 (match-end 0)))
-; (condition-case ()
-; (unwind-protect
-; (setq flist (elmo-list-folders name)))
-; (error (message "Access to folder %s failed." name)))
-;; (setq flist (elmo-msgdb-flist-load name)) ; load flist.
-;; (setq unsublist (nth 1 flist))
-;; (setq flist (car flist))
-;; (list name 'access flist unsublist)))
+;;; (condition-case ()
+;;; (unwind-protect
+;;; (setq flist (elmo-list-folders name)))
+;;; (error (message "Access to folder %s failed." name)))
+;;; (setq flist (elmo-msgdb-flist-load name)) ; load flist.
+;;; (setq unsublist (nth 1 flist))
+;;; (setq flist (car flist))
+;;; (list name 'access flist unsublist)))
(append (list name 'access) (wl-create-access-folder-entity name))))
- ;((looking-at "^[\t ]*\\([^\t \n}]+\\)[\t ]*\\(\"[^\"]*\"\\)?[\t ]*$") ; normal folder entity
+;;; ((looking-at "^[\t ]*\\([^\t \n}]+\\)[\t ]*\\(\"[^\"]*\"\\)?[\t ]*$") ; normal folder entity
((looking-at "^[\t ]*=[ \t]+\\([^\n]+\\)$"); petname definition
(goto-char (+ 1 (match-end 0)))
(let ((rest (elmo-match-buffer 1))
'is-group
(car entity))
(wl-folder-set-id-name wl-folder-entity-id
- (car entity) hashtb))
+ (car entity) hashtb)
+ (setq wl-folder-entity-id (+ 1 wl-folder-entity-id)))
(and entities
(wl-push entities entity-stack))
(setq entities (nth 2 entity)))
nil
entity)
(wl-folder-set-id-name wl-folder-entity-id
- entity hashtb))))
- (setq wl-folder-entity-id (+ 1 wl-folder-entity-id))
+ entity hashtb)
+ (setq wl-folder-entity-id (+ 1 wl-folder-entity-id)))))
(unless entities
(setq entities (wl-pop entity-stack))))))
;; hide wl-summary window.
(let ((cur-buf (current-buffer))
(summary-buffer (wl-summary-get-buffer folder)))
- (wl-folder-select-buffer summary-buffer)
- (delete-window)
+ (when summary-buffer
+ (wl-folder-select-buffer summary-buffer)
+ (delete-window))
(select-window (get-buffer-window cur-buf))))
(t
(setq wl-folder-buffer-disp-summary
(unwind-protect
(wl-summary-goto-folder-subr folder-name 'no-sync nil)
(select-window (get-buffer-window cur-buf))))
- (wl-folder-select-buffer (wl-summary-get-buffer folder-name))
- (delete-window)
- (select-window (get-buffer-window cur-buf)))))))))
+ (let ((summary-buffer (wl-summary-get-buffer folder-name)))
+ (when summary-buffer
+ (wl-folder-select-buffer summary-buffer)
+ (delete-window))
+ (select-window (get-buffer-window cur-buf))))))))))
(defun wl-folder-prev-unsync ()
"Move cursor to the previous unsync folder."
(run-hooks 'wl-folder-mode-hook))
(defun wl-folder-append-petname (realname petname)
- (let (pentry)
- ;; check group name.
- (if (wl-folder-search-group-entity-by-name petname wl-folder-entity)
- (error "%s already defined as group name" petname))
- (when (setq pentry (wl-string-assoc realname wl-folder-petname-alist))
+ (let ((pentry (wl-string-assoc realname wl-folder-petname-alist)))
+ (when pentry
(setq wl-folder-petname-alist
- (delete pentry wl-folder-petname-alist)))
- (wl-append wl-folder-petname-alist
- (list (cons realname petname)))))
+ (delete pentry wl-folder-petname-alist))))
+ (wl-append wl-folder-petname-alist
+ (list (cons realname petname))))
-(defun wl-folder (&optional arg)
- (interactive "P")
+(defun wl-folder ()
(let (initialize folder-buf)
(if (setq folder-buf (get-buffer wl-folder-buffer-name))
(if wl-folder-use-frame
(set-buffer wl-folder-buffer-name)
(wl-folder-mode)
;; Initialization.
+ (unless wl-folder-entity
+ (wl-folder-init))
(setq wl-folder-entity-id 0)
(wl-folder-entity-assign-id wl-folder-entity)
(setq wl-folder-entity-hashtb
(defun wl-folder-set-folder-updated (name value)
(save-excursion
- (let (buf)
- (if (setq buf (get-buffer wl-folder-buffer-name))
+ (let ((buf (get-buffer wl-folder-buffer-name)))
+ (if buf
(wl-folder-entity-hashtb-set
wl-folder-entity-hashtb name value buf))
(setq wl-folder-info-alist-modified t))))
(list new unread all)))
(defsubst wl-folder-make-save-access-list (list)
- (mapcar '(lambda (x)
- (cond
- ((consp x)
- (list (elmo-string (car x)) 'access))
- (t
- (elmo-string x))))
+ (mapcar (lambda (x)
+ (cond
+ ((consp x)
+ (list (elmo-string (car x)) 'access))
+ (t
+ (elmo-string x))))
list))
(defun wl-folder-update-newest (indent entity)
(wl-highlight-folder-current-line))
(setq removed (cdr removed)))
(remove-text-properties beg (point) '(wl-folder-entity-id)))
- (let* ((len (length flist))
- (mes (> len 100))
- (i 0))
+ (elmo-with-progress-display
+ (wl-folder-insert-entity (length flist))
+ (format "Inserting group %s" (car entity))
(while flist
(setq ret-val
(wl-folder-insert-entity
(setq new (+ (or new 0) (or (nth 0 ret-val) 0)))
(setq unread (+ (or unread 0) (or (nth 1 ret-val) 0)))
(setq all (+ (or all 0) (or (nth 2 ret-val) 0)))
- (when (and mes
- (> len elmo-display-progress-threshold))
- (setq i (1+ i))
- (elmo-display-progress
- 'wl-folder-insert-entity "Inserting group %s..."
- (/ (* i 100) len) (car entity)))
- (setq flist (cdr flist)))
- (if (> len 0)
- (message "Inserting group %s...done" (car entity))))
+ (elmo-progress-notify 'wl-folder-insert-entity)
+ (setq flist (cdr flist))))
(save-excursion
(goto-char group-name-end)
(delete-region (point) (save-excursion (end-of-line)
(wl-folder-check-entity wl-folder-entity))
(defun wl-folder-entity-hashtb-set (entity-hashtb name value buffer)
- (let (cur-val
+ (let ((cur-val (wl-folder-get-entity-info name entity-hashtb))
(new-diff 0)
(unread-diff 0)
(all-diff 0)
- diffs
- entity-list)
- (setq cur-val (wl-folder-get-entity-info name entity-hashtb))
+ diffs)
(setq new-diff (- (or (nth 0 value) 0) (or (nth 0 cur-val) 0)))
(setq unread-diff
(+ new-diff
(save-match-data
(with-current-buffer buffer
(save-excursion
- (setq entity-list (wl-folder-search-entity-list-by-name
- name wl-folder-entity))
- (while entity-list
- (wl-folder-update-group (car entity-list) diffs)
- (setq entity-list (cdr entity-list)))
+ (let ((entity-list (wl-folder-search-entity-list-by-name
+ name wl-folder-entity)))
+ (while entity-list
+ (wl-folder-update-group (car entity-list) diffs)
+ (setq entity-list (cdr entity-list))))
(goto-char (point-min))
(while (wl-folder-buffer-search-entity name)
(wl-folder-update-line value))))))))
hashtb))
;; Unsync number is reserved.
-;;(defun wl-folder-reconstruct-entity-hashtb (entity &optional hashtb id-name)
-;; (let* ((hashtb (or hashtb (elmo-make-hash wl-folder-entity-id)))
-;; (entities (list entity))
-;; entity-stack)
-;; (while entities
-;; (setq entity (wl-pop entities))
-;; (cond
-;; ((consp entity)
-;; (if id-name
-;; (wl-folder-set-id-name (wl-folder-get-entity-id (car entity))
-;; (car entity)))
-;; (and entities
-;; (wl-push entities entity-stack))
-;; (setq entities (nth 2 entity))
-;; )
-;; ((stringp entity)
-;; (wl-folder-set-entity-info entity
-;; (wl-folder-get-entity-info entity)
-;; hashtb)
-;; (if id-name
-;; (wl-folder-set-id-name (wl-folder-get-entity-id entity)
-;; entity))))
-;; (unless entities
-;; (setq entities (wl-pop entity-stack))))
-;; hashtb))
+;;;(defun wl-folder-reconstruct-entity-hashtb (entity &optional hashtb id-name)
+;;; (let* ((hashtb (or hashtb (elmo-make-hash wl-folder-entity-id)))
+;;; (entities (list entity))
+;;; entity-stack)
+;;; (while entities
+;;; (setq entity (wl-pop entities))
+;;; (cond
+;;; ((consp entity)
+;;; (if id-name
+;;; (wl-folder-set-id-name (wl-folder-get-entity-id (car entity))
+;;; (car entity)))
+;;; (and entities
+;;; (wl-push entities entity-stack))
+;;; (setq entities (nth 2 entity))
+;;; )
+;;; ((stringp entity)
+;;; (wl-folder-set-entity-info entity
+;;; (wl-folder-get-entity-info entity)
+;;; hashtb)
+;;; (if id-name
+;;; (wl-folder-set-id-name (wl-folder-get-entity-id entity)
+;;; entity))))
+;;; (unless entities
+;;; (setq entities (wl-pop entity-stack))))
+;;; hashtb))
(defun wl-folder-create-newsgroups-from-nntp-access (entity)
(let ((flist (nth 2 entity))
(when wl-smtp-posting-server
(elmo-set-plugged wl-plugged
wl-smtp-posting-server ; server
- (or (and (boundp 'smtp-service) smtp-service)
+ (or wl-smtp-posting-port
+ (and (boundp 'smtp-service) smtp-service)
"smtp") ; port
wl-smtp-connection-type
nil nil "smtp" add))
(when wl-nntp-posting-server
(elmo-set-plugged wl-plugged
wl-nntp-posting-server
- wl-nntp-posting-stream-type
wl-nntp-posting-port
+ wl-nntp-posting-stream-type
nil nil "nntp" add))
(run-hooks 'wl-make-plugged-hook)))
(setq is-group (get-text-property (point) 'wl-folder-is-group))
(when (looking-at "^[ ]*\\(.*\\):\\([0-9\\*-]*\\)/\\([0-9\\*-]*\\)/\\([0-9\\*]*\\)")
;;(looking-at "^[ ]*\\([^\\[].+\\):\\([0-9\\*-]*/[0-9\\*-]*/[0-9\\*]*\\)")
- (setq cur-new (string-to-int
+ (setq cur-new (string-to-number
(wl-match-buffer 2)))
- (setq cur-unread (string-to-int
+ (setq cur-unread (string-to-number
(wl-match-buffer 3)))
- (setq cur-all (string-to-int
+ (setq cur-all (string-to-number
(wl-match-buffer 4)))
(delete-region (match-beginning 2)
(match-end 4))
(set-buffer-modified-p nil))))))
(defun wl-folder-goto-folder (&optional arg)
+ "Visit some folder."
(interactive "P")
(wl-folder-goto-folder-subr nil arg))
(defun wl-folder-goto-folder-sticky ()
+ "Visit some folder and make it sticky."
(interactive)
(wl-folder-goto-folder-subr nil t))
(defun wl-folder-goto-draft-folder (&optional arg)
+ "Visit draft folder."
(interactive "P")
(wl-folder-goto-folder-subr wl-draft-folder arg))
+(defun wl-folder-revisit-last-visited-folder (&optional arg)
+ "Revisit last visited folder."
+ (interactive "P")
+ (let ((folder
+ (wl-folder-get-folder-name-by-id wl-folder-buffer-last-visited-entity-id)))
+ (if (and folder
+ (y-or-n-p (format "Revisit %s? " folder)))
+ (wl-folder-goto-folder-subr folder arg))))
+
(defun wl-folder-goto-folder-subr (&optional folder sticky)
(beginning-of-line)
(let (summary-buf fld-name entity id error-selecting)
(interactive)
(if (not fld-name)
(setq fld-name (wl-summary-read-folder wl-default-folder)))
- (let* ((id (wl-folder-get-entity-id
- (wl-folder-search-entity-by-name fld-name wl-folder-entity
- 'folder)))
- (path (and id (wl-folder-get-path wl-folder-entity id))))
- (if path
- (wl-folder-open-folder-sub path))))
+ (let ((entity (wl-folder-search-entity-by-name
+ fld-name wl-folder-entity 'folder)))
+ (if entity
+ (let* ((id (wl-folder-get-entity-id entity))
+ (path (and id (wl-folder-get-path wl-folder-entity id))))
+ (if path (wl-folder-open-folder-sub path)))
+ (message "%s: not found" fld-name))))
(defun wl-folder-open-folder-sub (path)
(let ((inhibit-read-only t)
(erase-buffer)
(wl-folder-insert-entity " " wl-folder-entity)
(wl-folder-move-path id))
- (message "Opening all folders...")
- (wl-folder-open-all-pre)
- (save-excursion
- (goto-char (point-min))
- (while (re-search-forward
- "^\\([ ]*\\)\\[\\([+]\\)\\]\\(.+\\):[-0-9-]+/[0-9-]+/[0-9-]+$"
- nil t)
- (setq indent (wl-match-buffer 1))
- (setq name (wl-folder-get-entity-from-buffer))
- (setq entity (wl-folder-search-group-entity-by-name
- name
- wl-folder-entity))
- ;; insert as opened
- (setcdr (assoc (car entity) wl-folder-group-alist) t)
- (beginning-of-line)
- (wl-folder-insert-entity indent entity)
- (delete-region (save-excursion (beginning-of-line)
- (point))
- (save-excursion (end-of-line)
- (+ 1 (point))))
- (when (> len elmo-display-progress-threshold)
- (setq i (1+ i))
- (if (or (zerop (% i 5)) (= i len))
- (elmo-display-progress
- 'wl-folder-open-all "Opening all folders..."
- (/ (* i 100) len)))))
- (when (> len elmo-display-progress-threshold)
- (elmo-display-progress
- 'wl-folder-open-all "Opening all folders..." 100))))
+ (elmo-with-progress-display
+ (wl-folder-open-all (length wl-folder-group-alist))
+ "Opening all folders"
+ (wl-folder-open-all-pre)
+ (save-excursion
+ (goto-char (point-min))
+ (while (re-search-forward
+ "^\\([ ]*\\)\\[\\([+]\\)\\]\\(.+\\):[-0-9-]+/[0-9-]+/[0-9-]+$"
+ nil t)
+ (setq indent (wl-match-buffer 1))
+ (setq name (wl-folder-get-entity-from-buffer))
+ (setq entity (wl-folder-search-group-entity-by-name
+ name
+ wl-folder-entity))
+ ;; insert as opened
+ (setcdr (assoc (car entity) wl-folder-group-alist) t)
+ (beginning-of-line)
+ (wl-folder-insert-entity indent entity)
+ (delete-region (save-excursion (beginning-of-line)
+ (point))
+ (save-excursion (end-of-line)
+ (+ 1 (point))))
+ (elmo-progress-notify 'wl-folder-open-all)))))
(wl-highlight-folder-path wl-folder-buffer-cur-path)
- (message "Opening all folders...done")
(set-buffer-modified-p nil)))
(defun wl-folder-close-all ()
(defun wl-folder-open-close ()
"Open or close parent entity."
(interactive)
- (save-excursion
- (beginning-of-line)
- (if (wl-folder-buffer-group-p)
- ;; if group (whether opend or closed.)
- (wl-folder-jump-to-current-entity)
- ;; if folder
- (let (indent)
- (setq indent (save-excursion
- (re-search-forward "\\([ ]*\\)." nil t)
- (wl-match-buffer 1)))
- (while (looking-at indent)
- (forward-line -1)))
- (wl-folder-jump-to-current-entity))))
+ (unless (wl-folder-get-entity-from-buffer)
+ (error "No folder"))
+ (beginning-of-line)
+ (if (wl-folder-buffer-group-p)
+ ;; if group (whether opend or closed.)
+ (wl-folder-jump-to-current-entity)
+ ;; if folder
+ (let (indent)
+ (setq indent (save-excursion
+ (re-search-forward "\\([ ]*\\)." nil t)
+ (wl-match-buffer 1)))
+ (while (looking-at indent)
+ (forward-line -1)))
+ (wl-folder-jump-to-current-entity)))
(defsubst wl-folder-access-subscribe-p (group folder)
(let (subscr regexp match)
t)))
(defun wl-folder-update-access-group (entity new-flist)
- (let* ((flist (nth 2 entity))
- (unsubscribes (nth 3 entity))
- (len (+ (length flist) (length unsubscribes)))
- (i 0)
- diff new-unsubscribes removes
- subscribed-list folder group entry)
- ;; check subscribed groups
- (while flist
- (cond
- ((listp (car flist)) ;; group
- (setq group (elmo-string (caar flist)))
+ (let ((flist (nth 2 entity))
+ (unsubscribes (nth 3 entity))
+ diff new-unsubscribes removes
+ subscribed-list folder group entry)
+ (elmo-with-progress-display
+ (wl-folder-update-access-group (+ (length flist) (length unsubscribes)))
+ "Updating access group"
+ ;; check subscribed groups
+ (while flist
(cond
- ((assoc group new-flist) ;; found in new-flist
- (setq new-flist (delete (assoc group new-flist)
- new-flist))
- (if (wl-folder-access-subscribe-p (car entity) group)
- (wl-append subscribed-list (list (car flist)))
- (wl-append new-unsubscribes (list (car flist)))
- (setq diff t)))
- (t
- (setq wl-folder-group-alist
- (delete (wl-string-assoc group wl-folder-group-alist)
- wl-folder-group-alist))
- (wl-append removes (list (list group))))))
- (t ;; folder
- (setq folder (elmo-string (car flist)))
+ ((listp (car flist)) ;; group
+ (setq group (elmo-string (caar flist)))
+ (cond
+ ((assoc group new-flist) ;; found in new-flist
+ (setq new-flist (delete (assoc group new-flist)
+ new-flist))
+ (if (wl-folder-access-subscribe-p (car entity) group)
+ (wl-append subscribed-list (list (car flist)))
+ (wl-append new-unsubscribes (list (car flist)))
+ (setq diff t)))
+ (t
+ (setq wl-folder-group-alist
+ (delete (wl-string-assoc group wl-folder-group-alist)
+ wl-folder-group-alist))
+ (wl-append removes (list (list group))))))
+ (t ;; folder
+ (setq folder (elmo-string (car flist)))
+ (cond
+ ((member folder new-flist) ;; found in new-flist
+ (setq new-flist (delete folder new-flist))
+ (if (wl-folder-access-subscribe-p (car entity) folder)
+ (wl-append subscribed-list (list (car flist)))
+ (wl-append new-unsubscribes (list folder))
+ (setq diff t)))
+ (t
+ (wl-append removes (list folder))))))
+ (elmo-progress-notify 'wl-folder-update-access-group)
+ (setq flist (cdr flist)))
+ ;; check unsubscribed groups
+ (while unsubscribes
(cond
- ((member folder new-flist) ;; found in new-flist
- (setq new-flist (delete folder new-flist))
- (if (wl-folder-access-subscribe-p (car entity) folder)
- (wl-append subscribed-list (list (car flist)))
- (wl-append new-unsubscribes (list folder))
- (setq diff t)))
+ ((listp (car unsubscribes))
+ (when (setq entry (assoc (caar unsubscribes) new-flist))
+ (setq new-flist (delete entry new-flist))
+ (wl-append new-unsubscribes (list (car unsubscribes)))))
(t
- (wl-append removes (list folder))))))
- (when (> len elmo-display-progress-threshold)
- (setq i (1+ i))
- (if (or (zerop (% i 10)) (= i len))
- (elmo-display-progress
- 'wl-folder-update-access-group "Updating access group..."
- (/ (* i 100) len))))
- (setq flist (cdr flist)))
- ;; check unsubscribed groups
- (while unsubscribes
- (cond
- ((listp (car unsubscribes))
- (when (setq entry (assoc (caar unsubscribes) new-flist))
- (setq new-flist (delete entry new-flist))
- (wl-append new-unsubscribes (list (car unsubscribes)))))
- (t
- (when (member (car unsubscribes) new-flist)
- (setq new-flist (delete (car unsubscribes) new-flist))
- (wl-append new-unsubscribes (list (car unsubscribes))))))
- (when (> len elmo-display-progress-threshold)
- (setq i (1+ i))
- (if (or (zerop (% i 10)) (= i len))
- (elmo-display-progress
- 'wl-folder-update-access-group "Updating access group..."
- (/ (* i 100) len))))
- (setq unsubscribes (cdr unsubscribes)))
- ;;
- (if (or new-flist removes)
- (setq diff t))
- (setq new-flist
- (mapcar '(lambda (x)
- (cond ((consp x) (list (car x) 'access))
- (t x)))
- new-flist))
- ;; check new groups
- (let ((new-list new-flist))
- (while new-list
- (if (not (wl-folder-access-subscribe-p
- (car entity)
- (if (listp (car new-list))
- (caar new-list)
- (car new-list))))
- ;; auto unsubscribe
- (progn
- (wl-append new-unsubscribes (list (car new-list)))
- (setq new-flist (delete (car new-list) new-flist)))
- (cond
- ((listp (car new-list))
- ;; check group exists
- (if (wl-string-assoc (caar new-list) wl-folder-group-alist)
- (progn
- (message "%s: group already exists." (caar new-list))
- (sit-for 1)
- (wl-append new-unsubscribes (list (car new-list)))
- (setq new-flist (delete (car new-list) new-flist)))
- (wl-append wl-folder-group-alist
- (list (cons (caar new-list) nil)))))))
- (setq new-list (cdr new-list))))
- (if new-flist
- (message "%d new folder(s)." (length new-flist))
- (message "Updating access group...done"))
+ (when (member (car unsubscribes) new-flist)
+ (setq new-flist (delete (car unsubscribes) new-flist))
+ (wl-append new-unsubscribes (list (car unsubscribes))))))
+ (elmo-progress-notify 'wl-folder-update-access-group)
+ (setq unsubscribes (cdr unsubscribes)))
+ ;;
+ (if (or new-flist removes)
+ (setq diff t))
+ (setq new-flist
+ (mapcar (lambda (x)
+ (cond ((consp x) (list (car x) 'access))
+ (t x)))
+ new-flist))
+ ;; check new groups
+ (let ((new-list new-flist))
+ (while new-list
+ (if (not (wl-folder-access-subscribe-p
+ (car entity)
+ (if (listp (car new-list))
+ (caar new-list)
+ (car new-list))))
+ ;; auto unsubscribe
+ (progn
+ (wl-append new-unsubscribes (list (car new-list)))
+ (setq new-flist (delete (car new-list) new-flist)))
+ (cond
+ ((listp (car new-list))
+ ;; check group exists
+ (if (wl-string-assoc (caar new-list) wl-folder-group-alist)
+ (progn
+ (message "%s: group already exists." (caar new-list))
+ (sit-for 1)
+ (wl-append new-unsubscribes (list (car new-list)))
+ (setq new-flist (delete (car new-list) new-flist)))
+ (wl-append wl-folder-group-alist
+ (list (cons (caar new-list) nil)))))))
+ (setq new-list (cdr new-list)))))
+ (when new-flist
+ (message "%d new folder(s)." (length new-flist)))
(wl-append new-flist subscribed-list) ;; new is first
(run-hooks 'wl-folder-update-access-group-hook)
(setcdr (cdr entity) (list new-flist new-unsubscribes))
(wl-folder-check-entity entity))
(wl-folder-prefetch-entity entity)))))
-;(defun wl-folder-drop-unsync-entity (entity)
-; "Drop all unsync messages in the ENTITY."
-; (cond
-; ((consp entity)
-; (let ((flist (nth 2 entity)))
-; (while flist
-; (wl-folder-drop-unsync-entity (car flist))
-; (setq flist (cdr flist)))))
-; ((stringp entity)
-; (let ((nums (wl-folder-get-entity-info entity))
-; wl-summary-highlight wl-auto-select-first new)
-; (setq new (or (car nums) 0))
-; (if (< 0 new)
-; (save-window-excursion
-; (save-excursion
-; (let ((wl-summary-buffer-name (concat
-; wl-summary-buffer-name
-; (symbol-name this-command))))
-; (wl-summary-goto-folder-subr entity 'no-sync nil)
-; (wl-summary-drop-unsync)
-; (wl-summary-exit)))))))))
-
-;(defun wl-folder-drop-unsync-current-entity (&optional force-check)
-; "Drop all unsync messages in the folder at position.
-;If current line is group folder, all subfolders are dropped.
-;If optional arg exists, don't check any folders."
-; (interactive "P")
-; (save-excursion
-; (let ((entity-name (wl-folder-get-entity-from-buffer))
-; (group (wl-folder-buffer-group-p))
-; wl-folder-check-entity-hook
-; summary-buf entity)
-; (when (and entity-name
-; (y-or-n-p (format
-; "Drop all unsync messages in %s? " entity-name)))
-; (setq entity
-; (if group
-; (wl-folder-search-group-entity-by-name entity-name
-; wl-folder-entity)
-; entity-name))
-; (if (null force-check)
-; (wl-folder-check-entity entity))
-; (wl-folder-drop-unsync-entity entity)
-; (message "All unsync messages in %s are dropped!" entity-name)))))
+;;;(defun wl-folder-drop-unsync-entity (entity)
+;;; "Drop all unsync messages in the ENTITY."
+;;; (cond
+;;; ((consp entity)
+;;; (let ((flist (nth 2 entity)))
+;;; (while flist
+;;; (wl-folder-drop-unsync-entity (car flist))
+;;; (setq flist (cdr flist)))))
+;;; ((stringp entity)
+;;; (let ((nums (wl-folder-get-entity-info entity))
+;;; wl-summary-highlight wl-auto-select-first new)
+;;; (setq new (or (car nums) 0))
+;;; (if (< 0 new)
+;;; (save-window-excursion
+;;; (save-excursion
+;;; (let ((wl-summary-buffer-name (concat
+;;; wl-summary-buffer-name
+;;; (symbol-name this-command))))
+;;; (wl-summary-goto-folder-subr entity 'no-sync nil)
+;;; (wl-summary-drop-unsync)
+;;; (wl-summary-exit)))))))))
+
+;;;(defun wl-folder-drop-unsync-current-entity (&optional force-check)
+;;; "Drop all unsync messages in the folder at position.
+;;;If current line is group folder, all subfolders are dropped.
+;;;If optional arg exists, don't check any folders."
+;;; (interactive "P")
+;;; (save-excursion
+;;; (let ((entity-name (wl-folder-get-entity-from-buffer))
+;;; (group (wl-folder-buffer-group-p))
+;;; wl-folder-check-entity-hook
+;;; summary-buf entity)
+;;; (when (and entity-name
+;;; (y-or-n-p (format
+;;; "Drop all unsync messages in %s? " entity-name)))
+;;; (setq entity
+;;; (if group
+;;; (wl-folder-search-group-entity-by-name entity-name
+;;; wl-folder-entity)
+;;; entity-name))
+;;; (if (null force-check)
+;;; (wl-folder-check-entity entity))
+;;; (wl-folder-drop-unsync-entity entity)
+;;; (message "All unsync messages in %s are dropped!" entity-name)))))
(defun wl-folder-write-current-folder ()
"Write message to current folder's newsgroup or mailing-list.
(kill-buffer bufname))))
(defun wl-folder-create-subr (folder)
- (if (elmo-folder-creatable-p folder)
- (if (y-or-n-p (format "Folder %s does not exist, create it? "
- (elmo-folder-name-internal folder)))
- (progn
- (message "")
- (setq wl-folder-entity-hashtb
- (wl-folder-create-entity-hashtb
- (elmo-folder-name-internal folder)
- wl-folder-entity-hashtb))
- (unless (elmo-folder-create folder)
- (error "Create folder failed")))
- (error "Folder %s is not created" (elmo-folder-name-internal folder)))
- (error "Folder %s does not exist" (elmo-folder-name-internal folder))))
+ (let ((name (elmo-folder-name-internal folder)))
+ (unless (elmo-folder-creatable-p folder)
+ (error "Folder %s does not exist" name))
+ (unless (y-or-n-p (format "Folder %s does not exist, create it? " name))
+ (error "Folder %s is not created" name))
+ (message "")
+ (setq wl-folder-entity-hashtb
+ (wl-folder-create-entity-hashtb name wl-folder-entity-hashtb))
+ (unless (elmo-folder-create folder)
+ (error "Create folder failed"))))
(defun wl-folder-confirm-existence (folder &optional force)
(if force
(unless entity (error "No folder"))
(wl-folder-goto-folder-subr
(concat "/"
- (elmo-read-search-condition
+ (wl-read-search-condition
wl-fldmgr-make-filter-default)
"/" entity))))
(interactive)
(save-excursion
(let* ((condition (car (elmo-parse-search-condition
- (elmo-read-search-condition
+ (wl-read-search-condition
wl-summary-pick-field-default))))
(entity (wl-folder-get-entity-from-buffer))
(folder-list
(setq folder-list (cdr folder-list)))
(if results
(message "%s are picked."
- (mapconcat '(lambda (res)
- (format "%s(%d)"
- (car res)
- (length (cdr res))))
+ (mapconcat (lambda (res)
+ (format "%s(%d)"
+ (car res)
+ (length (cdr res))))
results
","))
(message "No message was picked.")))))
(defun wl-folder-complete-filter-condition (string predicate flag)
(cond
- ((string-match "^\\(.*|\\|.*&\\|.*!\\|.*(\\)\\([^:]*\\)$" string)
+ ((string-match "^\\(.*|\\|.*&\\|.*(\\)\\([^:]*\\)$" string)
(let* ((str1 (match-string 1 string))
(str2 (match-string 2 string))
(str2-comp
(t
(let ((candidate
(mapcar (lambda (x) (list (concat (downcase x) ":")))
- (append '("last" "first"
- "from" "subject" "to" "cc" "body"
- "since" "before" "tocc")
- elmo-msgdb-extra-fields))))
+ (wl-search-condition-fields))))
(if (not flag)
(try-completion string candidate)
(all-completions string candidate))))))