* wl-summary.el (wl-summary-redisplay-internal): If `elmo-message-use-cache-p'
[elisp/wanderlust.git] / wl / wl-folder.el
index 629bb44..2c50613 100644 (file)
     (regexp-quote group) ":[-0-9-]+/[0-9-]+/[0-9-]+") nil t))
 
 (defun wl-folder-buffer-search-entity (folder &optional searchname)
-  (let ((search (or searchname (wl-folder-get-petname folder))))
+  (let ((search (or searchname (wl-folder-get-petname folder)))
+       case-fold-search)
     (re-search-forward
      (concat
       "^[ \t]*"
 (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 (, entity)
+       (elmo-set-hash-val (elmo-string (, entity))
                          (if (< (length (, value)) 4)
                              (append (, value) (list (nth 3 info)))
                            (, value))
                 (setq li (cdr li))))))))
 
 ;;; ELMO folder structure with cache.
-(defmacro wl-folder-get-elmo-folder (entity &optional no-cache)
-  "Get elmo folder structure from entity."
-  (` (if (, no-cache)
-        (elmo-make-folder (elmo-string (, entity)))
-       (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)))))
-
 (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'."
@@ -338,6 +329,16 @@ Default HASHTB is `wl-folder-elmo-folder-hashtb'."
   (` (elmo-set-hash-val (, name) (, folder)
                        (or (, hashtb) wl-folder-elmo-folder-hashtb))))
 
+(defmacro wl-folder-get-elmo-folder (entity &optional no-cache)
+  "Get elmo folder structure from entity."
+  (` (if (, no-cache)
+        (elmo-make-folder (elmo-string (, entity)))
+       (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)))))
+
 (defun wl-folder-prev-entity ()
   (interactive)
   (forward-line -1))
@@ -477,7 +478,7 @@ Default HASHTB is `wl-folder-elmo-folder-hashtb'."
        (wl-plugged t)
        emptied)
     (if elmo-enable-disconnected-operation
-       (elmo-dop-queue-flush 'force)) ; Try flushing all queue.
+       (elmo-dop-queue-flush))
     (if (not (elmo-folder-list-messages
              (wl-folder-get-elmo-folder wl-queue-folder)))
        (message "No sending queue exists.")
@@ -850,9 +851,7 @@ Optional argument ARG is repeart count."
              all    (and all    (max 0 all))))
       (setq unread (or (and unread (- unread (or new 0)))
                       (elmo-folder-get-info-unread folder)
-                      (cdr (wl-summary-count-unread
-                            (elmo-msgdb-get-mark-alist
-                             (elmo-folder-msgdb folder))))))
+                      (nth 1 (wl-summary-count-unread))))
       (wl-folder-entity-hashtb-set wl-folder-entity-hashtb entity
                                   (list new unread all)
                                   (get-buffer wl-folder-buffer-name)))
@@ -1078,7 +1077,8 @@ If current line is group folder, all subfolders are marked."
          (group (wl-folder-buffer-group-p))
          summary-buf)
       (when (and entity-name
-                (y-or-n-p (format "Mark all messages in %s as read? " entity-name)))
+                (y-or-n-p (format "Mark all messages in %s as read? "
+                                  entity-name)))
        (wl-folder-mark-as-read-all-entity
         (if group
             (wl-folder-search-group-entity-by-name entity-name
@@ -2212,7 +2212,8 @@ Use `wl-subscribed-mailing-list'."
 ;;;        (assoc fld-name wl-folder-group-alist))
     (setq fld-name wl-default-folder)
     (setq fld-name (or folder
-                      (wl-summary-read-folder fld-name)))
+                      (let (this-command)
+                        (wl-summary-read-folder fld-name))))
     (if (and (setq entity
                   (wl-folder-search-entity-by-name fld-name
                                                    wl-folder-entity
@@ -2239,6 +2240,10 @@ Use `wl-subscribed-mailing-list'."
   ;(if (fboundp 'mmelmo-cleanup-entity-buffers)
   ;(mmelmo-cleanup-entity-buffers))
   (bury-buffer wl-folder-buffer-name)
+  (dolist (summary-buf (wl-collect-summary))
+    (bury-buffer summary-buf))
+  (dolist (draft-buf (wl-collect-draft))
+    (bury-buffer draft-buf))
   (delete-windows-on wl-folder-buffer-name t))
 
 (defun wl-folder-info-save ()
@@ -2498,6 +2503,7 @@ Use `wl-subscribed-mailing-list'."
        (when (> len elmo-display-progress-threshold)
          (elmo-display-progress
           'wl-folder-open-all "Opening all folders..." 100))))
+    (wl-highlight-folder-path wl-folder-buffer-cur-path)
     (message "Opening all folders...done")
     (set-buffer-modified-p nil)))
 
@@ -2516,6 +2522,7 @@ Use `wl-subscribed-mailing-list'."
     (erase-buffer)
     (wl-folder-insert-entity " " wl-folder-entity)
     (wl-folder-move-path id)
+    (wl-highlight-folder-path wl-folder-buffer-cur-path)
     (recenter)
     (set-buffer-modified-p nil)))
 
@@ -2793,6 +2800,7 @@ Call `wl-summary-write-current-folder' with current folder name."
       (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
@@ -2803,7 +2811,8 @@ Call `wl-summary-write-current-folder' with current folder name."
               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 is not created" (elmo-folder-name-internal folder)))
+    (error "Folder %s does not exist" (elmo-folder-name-internal folder))))
 
 (defun wl-folder-confirm-existence (folder &optional force)
   (if force