Update about its features.
[elisp/wanderlust.git] / wl / wl-folder.el
index 8dd6fc5..a8f764d 100644 (file)
        'wl-folder-prev-unread)
       (define-key wl-folder-mode-map [(shift button5)]
        'wl-folder-next-unread))
-  (if wl-on-nemacs
-      (defun wl-folder-setup-mouse ())
-    (defun wl-folder-setup-mouse ()
-      (define-key wl-folder-mode-map [mouse-2] 'wl-folder-click)
-      (define-key wl-folder-mode-map [mouse-4] 'wl-folder-prev-entity)
-      (define-key wl-folder-mode-map [mouse-5] 'wl-folder-next-entity)
-      (define-key wl-folder-mode-map [S-mouse-4] 'wl-folder-prev-unread)
-      (define-key wl-folder-mode-map [S-mouse-5] 'wl-folder-next-unread))))
+  (defun wl-folder-setup-mouse ()
+    (define-key wl-folder-mode-map [mouse-2] 'wl-folder-click)
+    (define-key wl-folder-mode-map [mouse-4] 'wl-folder-prev-entity)
+    (define-key wl-folder-mode-map [mouse-5] 'wl-folder-next-entity)
+    (define-key wl-folder-mode-map [S-mouse-4] 'wl-folder-prev-unread)
+    (define-key wl-folder-mode-map [S-mouse-5] 'wl-folder-next-unread)))
 
 (if wl-folder-mode-map
     nil
   (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 "\C-c\C-a" 'wl-addrmgr)
   (define-key wl-folder-mode-map "rS"   'wl-folder-sync-region)
   (define-key wl-folder-mode-map "S"    'wl-folder-sync-current-entity)
   (define-key wl-folder-mode-map "rs"   'wl-folder-check-region)
   (define-key wl-folder-mode-map "<"    'beginning-of-buffer)
   (define-key wl-folder-mode-map ">"    'end-of-buffer)
   ;; wl-fldmgr
-  (unless wl-on-nemacs
-    (define-key wl-folder-mode-map "m"    'wl-fldmgr-mode-map))
+  (define-key wl-folder-mode-map "m"    'wl-fldmgr-mode-map)
   (define-key wl-folder-mode-map "*"    'wl-fldmgr-make-multi)
   (define-key wl-folder-mode-map "+"    'wl-fldmgr-make-group)
   (define-key wl-folder-mode-map "|"    'wl-fldmgr-make-filter)
@@ -651,15 +649,10 @@ Optional argument ARG is repeart count."
 ;        (wl-highlight-folder-current-line)
          )))
      ((setq fld-name (wl-folder-entity-name))
-      (if wl-on-nemacs
-         (progn
-           (wl-folder-set-current-entity-id
-            (wl-folder-get-entity-from-buffer))
-           (setq fld-name (wl-folder-get-realname fld-name)))
-       (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-folder-buffer-cur-entity-id)))
+      (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-folder-buffer-cur-entity-id))
       (let ((summary-buf (wl-summary-get-buffer-create fld-name arg))
            error-selecting)
        (if (or wl-stay-folder-window wl-summary-use-frame)
@@ -818,6 +811,8 @@ Optional argument ARG is repeart count."
                           (not (elmo-folder-exists-p folder)))
                      (wl-folder-create-subr folder)
                    (signal (car err) (cdr err))))))
+        (new (elmo-diff-new nums))
+        (nums (cons (elmo-diff-unread nums) (elmo-diff-all nums)))
         unread unsync nomif)
     (if (and (eq wl-folder-notify-deleted 'sync)
             (car nums)
@@ -832,14 +827,15 @@ Optional argument ARG is repeart count."
       (setq unread (or ;; If server diff, All unreads are
                        ; treated as unsync.
                    (if (elmo-folder-use-flag-p folder)
-                       0)
+                       (car nums))
                    (elmo-folder-get-info-unread folder)
                    (wl-summary-count-unread (elmo-msgdb-mark-load
                                              (elmo-folder-msgdb-path
                                               folder)))))
       (setq unread (min unread (- (or (cdr nums) 0) (or (car nums) 0))))
+      (when new (setq unread (- unread new)))
       (wl-folder-entity-hashtb-set wl-folder-entity-hashtb entity
-                                  (list (car nums)
+                                  (list (or new (car nums))
                                         unread
                                         (cdr nums))
                                   (get-buffer wl-folder-buffer-name)))
@@ -847,7 +843,7 @@ Optional argument ARG is repeart count."
     (sit-for 0)
     (list (if wl-folder-notify-deleted
              (car nums)
-           (max (or (car nums) 0))) unread (cdr nums))))
+           (or new (max (or (car nums) 0)))) unread (cdr nums))))
 
 (defun wl-folder-check-entity-async (entity &optional auto)
   (let ((elmo-nntp-groups-async t)
@@ -998,6 +994,7 @@ If current line is group folder, check all sub entries."
          (let ((wl-summary-buffer-name (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
@@ -1048,6 +1045,7 @@ If current line is group folder, check all subfolders."
              (let ((wl-summary-buffer-name (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)
@@ -1426,6 +1424,8 @@ Entering Folder mode calls the value of `wl-folder-mode-hook'."
   (use-local-map wl-folder-mode-map)
   (setq buffer-read-only t)
   (setq inhibit-read-only nil)
+  (make-local-variable 'truncate-partial-width-windows)
+  (setq truncate-partial-width-windows nil)
   (setq truncate-lines t)
   (setq wl-folder-buffer-cur-entity-id nil
        wl-folder-buffer-cur-path nil
@@ -1469,14 +1469,24 @@ Entering Folder mode calls the value of `wl-folder-mode-hook'."
        (switch-to-buffer (get-buffer-create wl-folder-buffer-name)))
       (set-buffer wl-folder-buffer-name)
       (wl-folder-mode)
-      (sit-for 0)
-      (wl-folder-init)
+      ;; Initialization.
+      (setq wl-folder-entity-id 0)
+      (wl-folder-entity-assign-id wl-folder-entity)
+      (setq wl-folder-entity-hashtb
+           (wl-folder-create-entity-hashtb wl-folder-entity))
+      (setq wl-folder-elmo-folder-hashtb (elmo-make-hash wl-folder-entity-id))
+      (setq wl-folder-group-alist
+           (wl-folder-create-group-alist wl-folder-entity))
+      (setq wl-folder-newsgroups-hashtb
+           (wl-folder-create-newsgroups-hashtb wl-folder-entity))
+      (wl-folder-init-info-hashtb)
       (let ((inhibit-read-only t)
            (buffer-read-only nil))
        (erase-buffer)
        (setcdr (assoc (car wl-folder-entity) wl-folder-group-alist) t)
        (save-excursion
          (wl-folder-insert-entity " " wl-folder-entity)))
+      (sit-for 0)
       (set-buffer-modified-p nil)
       (setq initialize t))
     initialize))
@@ -1984,28 +1994,16 @@ Entering Folder mode calls the value of `wl-folder-mode-hook'."
 (defvar wl-folder-init-function 'wl-local-folder-init)
 
 (defun wl-folder-init ()
-  "Call `wl-folder-init-function' function."
+  "Return top-level folder entity."
   (interactive)
-  (funcall wl-folder-init-function))
+  (if wl-use-acap
+      (wl-acap-init)
+    (funcall wl-folder-init-function)))
 
 (defun wl-local-folder-init ()
   "Initialize local folder."
   (message "Initializing folder...")
-  (save-excursion
-    (set-buffer wl-folder-buffer-name)
-    (let ((entity (wl-folder-create-folder-entity))
-         (inhibit-read-only t))
-      (setq wl-folder-entity entity)
-      (setq wl-folder-entity-id 0)
-      (wl-folder-entity-assign-id wl-folder-entity)
-      (setq wl-folder-entity-hashtb
-           (wl-folder-create-entity-hashtb entity))
-      (setq wl-folder-elmo-folder-hashtb (elmo-make-hash wl-folder-entity-id))
-      (setq wl-folder-group-alist
-           (wl-folder-create-group-alist entity))
-      (setq wl-folder-newsgroups-hashtb
-           (wl-folder-create-newsgroups-hashtb wl-folder-entity))
-      (wl-folder-init-info-hashtb)))
+  (setq wl-folder-entity (wl-folder-create-folder-entity))
   (message "Initializing folder...done"))
 
 (defun wl-folder-get-realname (petname)
@@ -2668,6 +2666,7 @@ Use `wl-subscribed-mailing-list'."
              (let ((wl-summary-buffer-name (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