'flag as all.
(wl-use-flag-folder-help-echo): New user option.
* wl-summary.el (wl-summary-detect-mark-position): Bind
wl-summary-highlight as nil.
(wl-summary-set-mark-modified): Follow the API change.
(wl-summary-mark-modified-p): Ditto.
(wl-summary-mark-as-read-all): Ditto.
(wl-summary-sync-marks): Don't call
elmo-folder-list-messages-with-global-mark.
(wl-summary-mark-as-read-internal): Follow the API change.
(wl-summary-mark-as-answered-internal): Ditto.
(wl-summary-mark-as-important): Cause an error when 'flag folder;
Follow the API change.
(wl-summary-create-line): Call with number argument.
(wl-summary-reply): Follow the API change.
* wl-highlight.el (wl-highlight-summary-line-flag-folder): New
function.
(wl-highlight-summary-line-string): Call it when
wl-use-flag-folder-help-echo is non-nil.
(wl-highlight-summary-current-line): Ditto.
(elmo-flag-folder-referrer): Added autoload setting.
* wl-draft.el (wl-draft-kill): Follow the API change.
* elmo-flag.el: New file.
* elmo-mark.el: Removed.
* modb-legacy.el (modb-legacy-new-mark,
modb-legacy-unread-uncached-mark,
modb-legacy-unread-cached-mark,
modb-legacy-read-uncached-mark,
modb-legacy-answered-cached-mark,
modb-legacy-answered-uncached-mark,
modb-legacy-important-mark): New constants (Moved from elmo-msgdb.el);
All other related portions are changed.
* elmo.el (luna-define-class): Changed mark-modified to flag-modified.
(elmo-folder-list-messages-with-global-mark): Abolish.
(elmo-folder-unflag-important): Renamed from `mark' to `flag'.
(elmo-folder-flag-as-important): Ditto.
(elmo-folder-unflag-read): Ditto.
(elmo-folder-flag-as-read): Ditto.
(elmo-folder-unflag-answered): Ditto.
(elmo-folder-flag-as-answered): Ditto.
(elmo-message-encache): Return the cache path.
(elmo-folder-move-messages): Call elmo-global-flag-detach-messages.
(elmo-message-set-flag): Transitional implementation.
(elmo-message-unset-flag): Ditto.
(elmo-folder-unflag-important): Call elmo-global-flag-detach.
(elmo-folder-flag-as-important): Call elmo-global-flag-set.
(elmo-init): Call elmo-global-flag-initialize.
(toplevel): Added autoload settings for elmo-flag.
* elmo-vars.el (elmo-msgdb-global-mark-filename): Abolished.
* elmo-util.el: Removed all elmo-msgdb-global-mark stuff.
(elmo-file-cache-delete): Don't treat global-mark.
* elmo-shimbun.el (elmo-folder-msgdb-create): Ditto.
* elmo-sendlog.el (elmo-folder-msgdb-create): Ditto.
* elmo-pop3.el (elmo-pop3-msgdb-create-message): Call
`elmo-global-flags-set'.
* elmo-pipe.el (elmo-folder-flag-as-read): Renamed from `mark' to
`flag'.
(elmo-folder-unflag-read): Ditto.
(elmo-folder-unflag-important): Ditto.
(elmo-folder-flag-as-important): Ditto.
(elmo-folder-unflag-answered): Ditto.
(elmo-folder-flag-as-answered): Ditto.
* elmo-nntp.el (elmo-nntp-create-msgdb-from-overview-string): Call
`elmo-global-flags-set'.
(elmo-folder-flag-as-read): Renamed from `mark' to `flag'.
* elmo-nmz.el (elmo-folder-msgdb-create): Always put `new' flag.
* elmo-net.el (elmo-folder-unflag-important): Renamed from `mark' to
`flag'.
(elmo-folder-flag-as-important): Ditto.
(elmo-folder-unflag-important): Ditto.
(elmo-folder-flag-as-important): Ditto.
(elmo-folder-unflag-read): Ditto.
(elmo-folder-flag-as-read): Ditto.
(elmo-folder-unflag-answered): Ditto.
(elmo-folder-flag-as-answered): Ditto.
* elmo-multi.el (elmo-folder-list-importants): Don't call
elmo-folder-list-messages-with-global-mark.
(elmo-folder-flag-as-important): Renamed from `mark' to `flag'.
(elmo-folder-unflag-important): Ditto.
(elmo-folder-flag-as-read): Ditto.
(elmo-folder-unflag-read): Ditto.
(elmo-folder-flag-as-answered): Ditto.
(elmo-folder-unflag-answered): Ditto.
* elmo-msgdb.el (elmo-msgdb-new-mark,
elmo-msgdb-unread-uncached-mark, elmo-msgdb-unread-cached-mark,
elmo-msgdb-read-uncached-mark, elmo-msgdb-answered-cached-mark,
elmo-msgdb-answered-uncached-mark, elmo-msgdb-important-mark): Removed
(Moved to modb-legacy.el).
(elmo-flag-table-get): Treat important flag too.
* elmo-map.el (elmo-map-folder-unflag-important): Renamed from
`mark' to `flag'.
(elmo-map-folder-flag-as-important): Ditto.
(elmo-map-folder-unflag-read): Ditto.
(elmo-map-folder-flag-as-read): Ditto.
(elmo-map-folder-unflag-answered): Ditto.
(elmo-map-folder-flag-as-answered): Ditto.
(elmo-folder-unflag-important): Ditto.
(elmo-folder-flag-as-important): Ditto.
(elmo-folder-unflag-read): Ditto.
(elmo-folder-flag-as-read): Ditto.
(elmo-folder-unflag-answered): Ditto.
(elmo-folder-flag-as-answered): Ditto.
* elmo-maildir.el (elmo-folder-msgdb-create): Ditto.
(elmo-map-folder-flag-as-important): Renamed from `mark' to
`flag'.
(elmo-map-folder-unflag-important): Ditto.
(elmo-map-folder-flag-as-read): Ditto.
(elmo-map-folder-unflag-read): Ditto.
(elmo-map-folder-flag-as-answered): Ditto.
(elmo-map-folder-unflag-answered): Ditto.
* elmo-localdir.el (elmo-folder-msgdb-create): 	Call
`elmo-global-flags-set'.
(elmo-global-flags-set): Added autoload setting.
* elmo-internal.el (elmo-internal-folder-list): Changed `mark' to
`flag'.
* elmo-imap4.el (elmo-imap4-fetch-callback-1-subr): Don't call
`elmo-msgdb-global-mark-set'.
(elmo-folder-msgdb-create-plugged): Changed callback-data structure;
Call `elmo-global-flags-set'.
(elmo-folder-unflag-important-plugged): Renamed from `mark' to
`flag'.
(elmo-folder-flag-as-important-plugged): Ditto.
(elmo-folder-unflag-read-plugged): Ditto.
(elmo-folder-flag-as-read-plugged): Ditto.
(elmo-folder-unflag-answered-plugged): Ditto.
(elmo-folder-flag-as-answered-plugged): Ditto.
(elmo-global-flags-set): Added autoload setting.
* elmo-filter.el (elmo-folder-flag-as-read): Renamed from `mark' to
`flag'.
(elmo-folder-unflag-read): Ditto.
(elmo-folder-flag-as-important): Ditto.
(elmo-folder-unflag-important): Ditto.
(elmo-folder-flag-as-answered): Ditto.
(elmo-folder-unflag-answered): Ditto.
* elmo-dop.el (elmo-dop-queue-merge-method-list): Follow the API
change of `mark'->`flag'.
(elmo-dop-queue-method-name-alist): Ditto.
(elmo-folder-flag-as-read-dop): Renamed from `mark' to `flag'.
(elmo-folder-unflag-read-dop): Ditto.
(elmo-folder-flag-as-important-dop): Ditto.
(elmo-folder-unflag-important-dop): Ditto.
(elmo-folder-flag-as-answered-dop): Ditto.
(elmo-folder-unflag-answered-dop): Ditto.
* elmo-cache.el (elmo-folder-msgdb-create): Call
`elmo-global-flags-set'.
* elmo-archive.el (elmo-archive-msgdb-create-as-numlist-subr1):
Call `elmo-global-flags-set'.
(elmo-archive-msgdb-create-as-numlist-subr2): Call
elmo-archive-parse-mmdf with argument `folder'.
(elmo-archive-parse-mmdf): Added argument `folder';
Call `elmo-global-flags-set'.
* WL-ELS (ELMO-MODULES): Removed elmo-mark and added elmo-flag.
+2003-09-18  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * WL-ELS (ELMO-MODULES): Removed elmo-mark and added elmo-flag.
+
 2003-09-17  TAKAHASHI Kaoru  <kaoru@kaisei.org>
 
        * doc/.cvsignore: Added makeinfo stuff.
 
    elmo-localdir elmo-localnews elmo-map elmo-maildir
    elmo-multi elmo-filter
    elmo-archive elmo-pipe elmo-cache
-   elmo-internal elmo-mark elmo-sendlog
+   elmo-internal elmo-flag elmo-sendlog
    elmo-dop elmo-nmz elmo-split
    modb modb-entity modb-legacy
    ))
 
 2003-09-18  Yuuichi Teranishi  <teranisi@gohome.org>
 
+       * elmo-flag.el: New file.
+       
+       * elmo-mark.el: Removed.
+
+       * modb-legacy.el (modb-legacy-new-mark,
+       modb-legacy-unread-uncached-mark,
+       modb-legacy-unread-cached-mark,
+       modb-legacy-read-uncached-mark,
+       modb-legacy-answered-cached-mark,
+       modb-legacy-answered-uncached-mark,
+       modb-legacy-important-mark): New constants (Moved from elmo-msgdb.el);
+       All other related portions are changed.
+
+       * elmo.el (luna-define-class): Changed mark-modified to flag-modified.
+       (elmo-folder-list-messages-with-global-mark): Abolish.
+       (elmo-folder-unflag-important): Renamed from `mark' to `flag'.
+       (elmo-folder-flag-as-important): Ditto.
+       (elmo-folder-unflag-read): Ditto.
+       (elmo-folder-flag-as-read): Ditto.
+       (elmo-folder-unflag-answered): Ditto.
+       (elmo-folder-flag-as-answered): Ditto.
+       (elmo-message-encache): Return the cache path.
+       (elmo-folder-move-messages): Call elmo-global-flag-detach-messages.
+       (elmo-message-set-flag): Transitional implementation.
+       (elmo-message-unset-flag): Ditto.
+       (elmo-folder-unflag-important): Call elmo-global-flag-detach.
+       (elmo-folder-flag-as-important): Call elmo-global-flag-set.
+       (elmo-init): Call elmo-global-flag-initialize.
+       (toplevel): Added autoload settings for elmo-flag.
+
+       * elmo-vars.el (elmo-msgdb-global-mark-filename): Abolished.
+
+       * elmo-util.el: Removed all elmo-msgdb-global-mark stuff.
+       (elmo-file-cache-delete): Don't treat global-mark.
+
+       * elmo-shimbun.el (elmo-folder-msgdb-create): Ditto.
+
+       * elmo-sendlog.el (elmo-folder-msgdb-create): Ditto.
+
+       * elmo-pop3.el (elmo-pop3-msgdb-create-message): Call
+       `elmo-global-flags-set'.
+
+       * elmo-pipe.el (elmo-folder-flag-as-read): Renamed from `mark' to
+       `flag'.
+       (elmo-folder-unflag-read): Ditto.
+       (elmo-folder-unflag-important): Ditto.
+       (elmo-folder-flag-as-important): Ditto.
+       (elmo-folder-unflag-answered): Ditto.
+       (elmo-folder-flag-as-answered): Ditto.
+
+       * elmo-nntp.el (elmo-nntp-create-msgdb-from-overview-string): Call
+       `elmo-global-flags-set'.
+       (elmo-folder-flag-as-read): Renamed from `mark' to `flag'.
+
+       * elmo-nmz.el (elmo-folder-msgdb-create): Always put `new' flag.
+
+       * elmo-net.el (elmo-folder-unflag-important): Renamed from `mark' to
+       `flag'.
+       (elmo-folder-flag-as-important): Ditto.
+       (elmo-folder-unflag-important): Ditto.
+       (elmo-folder-flag-as-important): Ditto.
+       (elmo-folder-unflag-read): Ditto.
+       (elmo-folder-flag-as-read): Ditto.
+       (elmo-folder-unflag-answered): Ditto.
+       (elmo-folder-flag-as-answered): Ditto.  
+
+       * elmo-multi.el (elmo-folder-list-importants): Don't call
+       elmo-folder-list-messages-with-global-mark.
+       (elmo-folder-flag-as-important): Renamed from `mark' to `flag'.
+       (elmo-folder-unflag-important): Ditto.
+       (elmo-folder-flag-as-read): Ditto.
+       (elmo-folder-unflag-read): Ditto.
+       (elmo-folder-flag-as-answered): Ditto.
+       (elmo-folder-unflag-answered): Ditto.
+
+       * elmo-msgdb.el (elmo-msgdb-new-mark,
+       elmo-msgdb-unread-uncached-mark, elmo-msgdb-unread-cached-mark,
+       elmo-msgdb-read-uncached-mark, elmo-msgdb-answered-cached-mark,
+       elmo-msgdb-answered-uncached-mark, elmo-msgdb-important-mark): Removed
+       (Moved to modb-legacy.el).
+       (elmo-flag-table-get): Treat important flag too.
+
+       * elmo-map.el (elmo-map-folder-unflag-important): Renamed from
+       `mark' to `flag'.
+       (elmo-map-folder-flag-as-important): Ditto.
+       (elmo-map-folder-unflag-read): Ditto.
+       (elmo-map-folder-flag-as-read): Ditto.
+       (elmo-map-folder-unflag-answered): Ditto.
+       (elmo-map-folder-flag-as-answered): Ditto.
+       (elmo-folder-unflag-important): Ditto.
+       (elmo-folder-flag-as-important): Ditto.
+       (elmo-folder-unflag-read): Ditto.
+       (elmo-folder-flag-as-read): Ditto.
+       (elmo-folder-unflag-answered): Ditto.
+       (elmo-folder-flag-as-answered): Ditto.
+
+       * elmo-maildir.el (elmo-folder-msgdb-create): Ditto.
+       (elmo-map-folder-flag-as-important): Renamed from `mark' to
+       `flag'.
+       (elmo-map-folder-unflag-important): Ditto.
+       (elmo-map-folder-flag-as-read): Ditto.
+       (elmo-map-folder-unflag-read): Ditto.
+       (elmo-map-folder-flag-as-answered): Ditto.
+       (elmo-map-folder-unflag-answered): Ditto.
+
+       * elmo-localdir.el (elmo-folder-msgdb-create):  Call
+       `elmo-global-flags-set'.
+       (elmo-global-flags-set): Added autoload setting.
+
+       * elmo-internal.el (elmo-internal-folder-list): Changed `mark' to
+       `flag'.
+
+       * elmo-imap4.el (elmo-imap4-fetch-callback-1-subr): Don't call
+       `elmo-msgdb-global-mark-set'.
+       (elmo-folder-msgdb-create-plugged): Changed callback-data structure;
+       Call `elmo-global-flags-set'.
+       (elmo-folder-unflag-important-plugged): Renamed from `mark' to
+       `flag'.
+       (elmo-folder-flag-as-important-plugged): Ditto.
+       (elmo-folder-unflag-read-plugged): Ditto.
+       (elmo-folder-flag-as-read-plugged): Ditto.
+       (elmo-folder-unflag-answered-plugged): Ditto.
+       (elmo-folder-flag-as-answered-plugged): Ditto.
+       (elmo-global-flags-set): Added autoload setting.
+
+       * elmo-filter.el (elmo-folder-flag-as-read): Renamed from `mark' to
+       `flag'.
+       (elmo-folder-unflag-read): Ditto.
+       (elmo-folder-flag-as-important): Ditto.
+       (elmo-folder-unflag-important): Ditto.
+       (elmo-folder-flag-as-answered): Ditto.
+       (elmo-folder-unflag-answered): Ditto.
+
+       * elmo-dop.el (elmo-dop-queue-merge-method-list): Follow the API
+       change of `mark'->`flag'.
+       (elmo-dop-queue-method-name-alist): Ditto.
+       (elmo-folder-flag-as-read-dop): Renamed from `mark' to `flag'.
+       (elmo-folder-unflag-read-dop): Ditto.
+       (elmo-folder-flag-as-important-dop): Ditto.
+       (elmo-folder-unflag-important-dop): Ditto.
+       (elmo-folder-flag-as-answered-dop): Ditto.
+       (elmo-folder-unflag-answered-dop): Ditto.
+
+       * elmo-cache.el (elmo-folder-msgdb-create): Call
+       `elmo-global-flags-set'.
+
+       * elmo-archive.el (elmo-archive-msgdb-create-as-numlist-subr1):
+       Call `elmo-global-flags-set'.
+       (elmo-archive-msgdb-create-as-numlist-subr2): Call
+       elmo-archive-parse-mmdf with argument `folder'.
+       (elmo-archive-parse-mmdf): Added argument `folder';
+       Call `elmo-global-flags-set'.
+
        * elmo-version.el (elmo-version): Up to 2.11.14.
 
 2003-09-17  Hiroya Murata  <lapis-lazuli@pop06.odn.ne.jp>
 
         (file (elmo-archive-get-archive-name folder))
         (method (elmo-archive-get-method type 'cat))
         (new-msgdb (elmo-make-msgdb))
-        entity i percent num message-id)
+        entity i percent num message-id flags)
     (with-temp-buffer
       (setq num (length numlist))
       (setq i 0)
               method file (car numlist) type
               (elmo-archive-folder-archive-prefix-internal folder)))
        (when entity
-         (setq message-id (elmo-msgdb-overview-entity-get-id entity))
-         (elmo-msgdb-append-entity
-          new-msgdb
-          entity
-          (elmo-flag-table-get flag-table message-id)))
+         (setq message-id (elmo-msgdb-overview-entity-get-id entity)
+               flags (elmo-flag-table-get flag-table message-id))
+         (elmo-global-flags-set flags folder (car numlist) message-id)
+         (elmo-msgdb-append-entity new-msgdb entity flags))
        (when (> num elmo-display-progress-threshold)
          (setq i (1+ i))
          (setq percent (/ (* i 100) num))
         ((looking-at delim1)   ;; MMDF
          (elmo-msgdb-append
           new-msgdb
-          (elmo-archive-parse-mmdf msgs flag-table)))
+          (elmo-archive-parse-mmdf folder msgs flag-table)))
 ;;;     ((looking-at delim2)   ;; UNIX MAIL
 ;;;      (elmo-msgdb-append
 ;;;       new-msgdb
           percent))))
     new-msgdb))
 
-(defun elmo-archive-parse-mmdf (msgs flag-table)
+(defun elmo-archive-parse-mmdf (folder msgs flag-table)
   (let ((delim elmo-mmdf-delimiter)
        (new-msgdb (elmo-make-msgdb))
        number sp ep rest entity
-       message-id)
+       message-id flags)
     (goto-char (point-min))
     (setq rest msgs)
     (while (and rest (re-search-forward delim nil t)
          ()                            ; nop
        (save-excursion
          (narrow-to-region sp ep)
-         (setq entity (elmo-archive-msgdb-create-entity-subr number))
-         (setq message-id (elmo-msgdb-overview-entity-get-id entity))
-         (elmo-msgdb-append-entity
-          new-msgdb
-          entity
-          (elmo-flag-table-get flag-table message-id))
+         (setq entity (elmo-archive-msgdb-create-entity-subr number)
+               message-id (elmo-msgdb-overview-entity-get-id entity)
+               flags (elmo-flag-table-get flag-table message-id))
+         (elmo-global-flags-set flags folder number message-id)
+         (elmo-msgdb-append-entity new-msgdb entity flags)
          (widen)))
       (forward-line 1)
       (setq rest (cdr rest)))
 
   (let ((i 0)
        (len (length numbers))
        (new-msgdb (elmo-make-msgdb))
-       entity message-id)
+       entity message-id flags)
     (message "Creating msgdb...")
     (while numbers
       (setq entity
            (elmo-msgdb-create-overview-entity-from-file
             (car numbers) (elmo-message-file-name folder (car numbers))))
       (when entity
-       (setq message-id (elmo-msgdb-overview-entity-get-id entity))
-       (elmo-msgdb-append-entity new-msgdb entity
-                                 (elmo-flag-table-get flag-table message-id)))
+       (setq message-id (elmo-msgdb-overview-entity-get-id entity)
+             flags (elmo-flag-table-get flag-table message-id))
+       (elmo-global-flags-set flags folder (car numbers) message-id)
+       (elmo-msgdb-append-entity new-msgdb entity flags))
       (when (> len elmo-display-progress-threshold)
        (setq i (1+ i))
        (elmo-display-progress
 
     (setq elmo-dop-queue (nconc elmo-dop-queue (list queue)))))
 
 (defvar elmo-dop-queue-merge-method-list
-  '(elmo-folder-mark-as-read
-    elmo-folder-unmark-read
-    elmo-folder-mark-as-important
-    elmo-folder-unmark-important
-    elmo-folder-mark-as-answered
-    elmo-folder-unmark-answered))
+  '(elmo-folder-flag-as-read
+    elmo-folder-unflag-read
+    elmo-folder-flag-as-important
+    elmo-folder-unflag-important
+    elmo-folder-flag-as-answered
+    elmo-folder-unflag-answered))
 
 (defvar elmo-dop-queue-method-name-alist
   '((elmo-folder-append-buffer-dop-delayed . "Append")
     (elmo-folder-delete-messages-dop-delayed . "Delete")
     (elmo-message-encache . "Encache")
     (elmo-folder-create-dop-delayed . "Create")
-    (elmo-folder-mark-as-read . "Read")
-    (elmo-folder-unmark-read . "Unread")
-    (elmo-folder-mark-as-answered . "Answered")
-    (elmo-folder-unmark-answered . "Unanswered")    
-    (elmo-folder-mark-as-important . "Important")
-    (elmo-folder-unmark-important . "Unimportant")))
+    (elmo-folder-flag-as-read . "Read")
+    (elmo-folder-unflag-read . "Unread")
+    (elmo-folder-flag-as-answered . "Answered")
+    (elmo-folder-unflag-answered . "Unanswered")    
+    (elmo-folder-flag-as-important . "Important")
+    (elmo-folder-unflag-important . "Unimportant")))
 
 (defmacro elmo-dop-queue-method-name (queue)
   `(cdr (assq (elmo-dop-queue-method ,queue)
 (defsubst elmo-folder-create-dop (folder)
   (elmo-dop-queue-append folder 'elmo-folder-create-dop-delayed nil))
 
-(defsubst elmo-folder-mark-as-read-dop (folder numbers)
-  (elmo-dop-queue-append folder 'elmo-folder-mark-as-read (list numbers)))
+(defsubst elmo-folder-flag-as-read-dop (folder numbers)
+  (elmo-dop-queue-append folder 'elmo-folder-flag-as-read (list numbers)))
 
-(defsubst elmo-folder-unmark-read-dop (folder numbers)
-  (elmo-dop-queue-append folder 'elmo-folder-unmark-read (list numbers)))
+(defsubst elmo-folder-unflag-read-dop (folder numbers)
+  (elmo-dop-queue-append folder 'elmo-folder-unflag-read (list numbers)))
 
-(defsubst elmo-folder-mark-as-important-dop (folder numbers)
-  (elmo-dop-queue-append folder 'elmo-folder-mark-as-important (list numbers)))
+(defsubst elmo-folder-flag-as-important-dop (folder numbers)
+  (elmo-dop-queue-append folder 'elmo-folder-flag-as-important (list numbers)))
 
-(defsubst elmo-folder-unmark-important-dop (folder numbers)
-  (elmo-dop-queue-append folder 'elmo-folder-unmark-important (list numbers)))
+(defsubst elmo-folder-unflag-important-dop (folder numbers)
+  (elmo-dop-queue-append folder 'elmo-folder-unflag-important (list numbers)))
 
-(defsubst elmo-folder-mark-as-answered-dop (folder numbers)
-  (elmo-dop-queue-append folder 'elmo-folder-mark-as-answered (list numbers)))
+(defsubst elmo-folder-flag-as-answered-dop (folder numbers)
+  (elmo-dop-queue-append folder 'elmo-folder-flag-as-answered (list numbers)))
 
-(defsubst elmo-folder-unmark-answered-dop (folder numbers)
-  (elmo-dop-queue-append folder 'elmo-folder-unmark-answered (list numbers)))
+(defsubst elmo-folder-unflag-answered-dop (folder numbers)
+  (elmo-dop-queue-append folder 'elmo-folder-unflag-answered (list numbers)))
 
 ;;; Execute as subsutitute for plugged operation.
 (defun elmo-folder-status-dop (folder)
 
   (elmo-message-file-name (elmo-filter-folder-target-internal folder)
                          number))
 
-(luna-define-method elmo-folder-mark-as-read :around ((folder
+(luna-define-method elmo-folder-flag-as-read :around ((folder
                                                       elmo-filter-folder)
                                                      numbers
-                                                     &optional ignore-flag)
-  (elmo-folder-mark-as-read (elmo-filter-folder-target-internal folder)
-                           numbers ignore-flag)
+                                                     &optional is-local)
+  (elmo-folder-flag-as-read (elmo-filter-folder-target-internal folder)
+                           numbers is-local)
   (luna-call-next-method))
 
-(luna-define-method elmo-folder-unmark-read :around ((folder
+(luna-define-method elmo-folder-unflag-read :around ((folder
                                                      elmo-filter-folder)
                                                     numbers
-                                                    &optional ignore-flag)
-  (elmo-folder-unmark-read (elmo-filter-folder-target-internal folder)
-                          numbers ignore-flag)
+                                                    &optional is-local)
+  (elmo-folder-unflag-read (elmo-filter-folder-target-internal folder)
+                          numbers is-local)
   (luna-call-next-method))
 
-(luna-define-method elmo-folder-mark-as-important :around ((folder
+(luna-define-method elmo-folder-flag-as-important :around ((folder
                                                            elmo-filter-folder)
                                                           numbers
                                                           &optional
-                                                          ignore-flag)
-  (elmo-folder-mark-as-important (elmo-filter-folder-target-internal folder)
-                                numbers ignore-flag)
+                                                          is-local)
+  (elmo-folder-flag-as-important (elmo-filter-folder-target-internal folder)
+                                numbers is-local)
     (luna-call-next-method))
 
-(luna-define-method elmo-folder-unmark-important :around ((folder
+(luna-define-method elmo-folder-unflag-important :around ((folder
                                                           elmo-filter-folder)
                                                          numbers
                                                          &optional
-                                                         ignore-flag)
-  (elmo-folder-unmark-important (elmo-filter-folder-target-internal folder)
-                               numbers ignore-flag)
+                                                         is-local)
+  (elmo-folder-unflag-important (elmo-filter-folder-target-internal folder)
+                               numbers is-local)
   (luna-call-next-method))
 
-(luna-define-method elmo-folder-mark-as-answered :around ((folder
+(luna-define-method elmo-folder-flag-as-answered :around ((folder
                                                           elmo-filter-folder)
-                                                         numbers)
-  (elmo-folder-mark-as-answered (elmo-filter-folder-target-internal folder)
-                               numbers)
+                                                         numbers
+                                                         &optional
+                                                         is-local)
+  (elmo-folder-flag-as-answered (elmo-filter-folder-target-internal folder)
+                               numbers is-local)
   (luna-call-next-method))
 
 
-(luna-define-method elmo-folder-unmark-answered :around ((folder
+(luna-define-method elmo-folder-unflag-answered :around ((folder
                                                          elmo-filter-folder)
-                                                        numbers)
-  (elmo-folder-unmark-answered (elmo-filter-folder-target-internal folder)
-                              numbers)
+                                                        numbers
+                                                        &optional
+                                                        is-local)
+  (elmo-folder-unflag-answered (elmo-filter-folder-target-internal folder)
+                              numbers is-local)
   (luna-call-next-method))
 
 (require 'product)
 
--- /dev/null
+;;; elmo-flag.el --- global flag handling.
+
+;; Copyright (C) 2003 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;;
+(require 'elmo-util)
+(require 'elmo-localdir)
+(eval-when-compile (require 'cl))
+
+;;; Code:
+(defcustom elmo-global-flag-list '(important)
+  "A list of flag symbol which is managed globally by the flag folder."
+  :type '(repeat symbol)
+  :group 'elmo)
+
+(defvar elmo-global-flag-folder-alist nil
+  "Internal variable to hold global-flag-folder structures.")
+
+(eval-and-compile
+  (luna-define-class elmo-flag-folder (elmo-localdir-folder)
+                    (flag minfo minfo-hash))
+  (luna-define-internal-accessors 'elmo-flag-folder))
+
+(luna-define-method elmo-folder-initialize ((folder
+                                            elmo-flag-folder)
+                                           name)
+  (if (string-match "flag/\\([a-z]+\\)" name)
+      (setq name (match-string 1 name))
+    (setq name (symbol-name (car elmo-global-flag-list))))
+  (or (cdr (assq (intern name) elmo-global-flag-folder-alist))
+      (progn
+       (unless (file-directory-p (expand-file-name (concat "flag/" name)
+                                               elmo-msgdb-directory))
+         (elmo-make-directory (expand-file-name (concat "flag/" name)
+                                                elmo-msgdb-directory)))
+       (elmo-localdir-folder-set-dir-name-internal
+        folder (expand-file-name (concat "flag/" name)
+                                 elmo-msgdb-directory))
+       (elmo-localdir-folder-set-directory-internal
+        folder
+        (expand-file-name (concat "flag/" name)
+                          elmo-msgdb-directory))
+       (if (file-exists-p (expand-file-name
+                           (concat "flag/" name "/.minfo")
+                           elmo-msgdb-directory))
+           (elmo-flag-folder-set-minfo-internal
+            folder
+            (elmo-object-load (expand-file-name
+                               (concat "flag/" name "/.minfo")
+                               elmo-msgdb-directory))))
+       (elmo-flag-folder-set-minfo-hash-internal
+        folder
+        (elmo-make-hash (length (elmo-flag-folder-minfo-internal folder))))
+       (dolist (elem (elmo-flag-folder-minfo-internal folder))
+         (elmo-set-hash-val (nth 1 elem) elem
+                            (elmo-flag-folder-minfo-hash-internal folder))
+         (elmo-set-hash-val (concat "#" (number-to-string (nth 2 elem)))
+                            elem
+                            (elmo-flag-folder-minfo-hash-internal folder))
+         (dolist (pair (car elem))
+           (elmo-set-hash-val (concat (number-to-string (cdr pair))
+                                      ":" (car pair))
+                              elem
+                              (elmo-flag-folder-minfo-hash-internal folder))))
+       (elmo-flag-folder-set-flag-internal folder (intern name))
+       (setq elmo-global-flag-folder-alist
+             (cons (cons (intern name) folder) elmo-global-flag-folder-alist))
+       folder)))
+
+(luna-define-method elmo-folder-commit :after ((folder
+                                               elmo-flag-folder))
+  (elmo-object-save
+   (expand-file-name (concat "flag/"
+                            (symbol-name
+                             (elmo-flag-folder-flag-internal folder))
+                            "/.minfo") elmo-msgdb-directory)
+   (elmo-flag-folder-minfo-internal folder)))
+
+(defun elmo-flag-folder-delete-message (folder number
+                                              &optional keep-referrer)
+  (let* ((elem (elmo-get-hash-val (concat "#" (number-to-string number))
+                                 (elmo-flag-folder-minfo-hash-internal
+                                  folder)))
+        target-folder key)
+    (dolist (pair (car elem))
+      (when (and (car pair) (cdr pair))
+       (unless keep-referrer
+         (setq target-folder (elmo-make-folder (car pair)))
+         (elmo-folder-open target-folder 'load-msgdb)
+         ;; Unset the flag of the original folder.
+         ;; (XXX Should the message-id checked?)
+         (elmo-message-unset-flag target-folder (cdr pair)
+                                  (elmo-flag-folder-flag-internal folder))
+         (elmo-folder-close target-folder))
+       (elmo-clear-hash-val (concat (number-to-string (cdr pair)) ":"
+                                    (car pair))
+                            (elmo-flag-folder-minfo-hash-internal
+                             folder))))
+    (elmo-clear-hash-val (concat "#" (number-to-string number))
+                        (elmo-flag-folder-minfo-hash-internal
+                         folder))
+    (elmo-clear-hash-val (nth 1 elem) (elmo-flag-folder-minfo-hash-internal
+                                      folder))
+    (elmo-flag-folder-set-minfo-internal
+     folder
+     (delq elem (elmo-flag-folder-minfo-internal folder))))
+  t)
+
+(luna-define-method elmo-folder-delete-messages ((folder
+                                                 elmo-flag-folder)
+                                                numbers)
+  (dolist (number numbers)
+    (elmo-flag-folder-delete-message folder number)
+    (elmo-localdir-delete-message folder number))
+  (elmo-folder-commit folder)
+  t)
+
+;; Same as localdir except that the flag is always the flag.
+(luna-define-method elmo-folder-msgdb-create ((folder elmo-flag-folder)
+                                             numbers
+                                             flag-table)
+  (when numbers
+    (let ((dir (elmo-localdir-folder-directory-internal folder))
+         (new-msgdb (elmo-make-msgdb))
+         entity (i 0)
+         (len (length numbers)))
+      (message "Creating msgdb...")
+      (while numbers
+       (when (setq entity (elmo-localdir-msgdb-create-entity
+                           dir (car numbers)))
+         (elmo-msgdb-append-entity new-msgdb entity
+                                   (list (elmo-flag-folder-flag-internal
+                                          folder))))
+       (when (> len elmo-display-progress-threshold)
+         (setq i (1+ i))
+         (elmo-display-progress
+          'elmo-flag-folder-msgdb-create "Creating msgdb..."
+          (/ (* i 100) len)))
+       (setq numbers (cdr numbers)))
+      (message "Creating msgdb...done")
+      new-msgdb)))
+
+(luna-define-method elmo-folder-append-buffer ((folder elmo-flag-folder)
+                                              unread
+                                              &optional number)
+  (error "Cannot append to the flag folder"))
+
+;;; Utilities
+
+(defmacro elmo-flag-get-folder (flag)
+  "Get the flag folder structure for FLAG."
+  `(when (memq ,flag elmo-global-flag-list)
+     (elmo-make-folder (concat  "'flag/" (symbol-name ,flag)))))
+
+(defun elmo-flag-folder-referrer (folder number)
+  "Return a list of referrer message information.
+Each element is a cons cell like following:
+\(FNAME . NUMBER\)
+FNAME is the name of the folder which the message is contained.
+NUMBER is the number of the message."
+  (when (eq (elmo-folder-type-internal folder) 'flag)
+    (car (elmo-get-hash-val (concat "#" (number-to-string number))
+                           (elmo-flag-folder-minfo-hash-internal
+                            folder)))))
+
+;;; Global-Flag API
+(defun elmo-global-flag-initialize ()
+  "Initialize flag folders.
+This function is necessary to be called before using `elmo-flag-folder'."
+  (unless elmo-global-flag-folder-alist
+    (dolist (flag elmo-global-flag-list)
+      (setq elmo-global-flag-folder-alist
+           (cons (elmo-make-folder
+                  (concat "'flag/" (symbol-name flag)))
+                 elmo-global-flag-folder-alist)))))
+
+(defun elmo-global-flag-p (flag)
+  "Return non-nil when FLAG is global."
+  (memq flag elmo-global-flag-list))
+
+(defun elmo-global-flags (fname number)
+  "Return a list of global flags for the message.
+FNAME is the name string of the folder.
+NUMBER is the number of the message."
+  (let ((flag-list elmo-global-flag-list)
+       folder matches)
+    (while flag-list
+      (setq folder (elmo-flag-get-folder (car flag-list)))
+      (when (elmo-get-hash-val
+            (concat (number-to-string number) ":" fname)
+            (elmo-flag-folder-minfo-hash-internal folder))
+       (setq matches (cons (elmo-flag-folder-flag-internal folder)
+                           matches)))
+      (setq flag-list (cdr flag-list)))
+    matches))
+
+;;;
+;; minfo is a list of following cell.
+;; ((((FNAME . NUMBER)...(FNAME . NUMBER)) MESSAGE-ID NUMBER-IN-FLAG-FOLDER)
+;; minfo-index is the hash table of above with following indice;
+(defun elmo-global-flags-set (flags folder number message-id)
+  "Set global flags to the message.
+FLAGS is a list of symbol of the flag.
+FOLDER is the elmo folder structure.
+NUMBER is the message number."
+  (dolist (flag flags)
+    (elmo-global-flag-set flag folder number message-id)))
+
+(defsubst elmo-global-flag-set-internal (flag folder number message-id)
+  (when message-id
+    (let ((flag-folder (elmo-flag-get-folder flag))
+         cache new-file new-number elem)
+      (if (setq elem (elmo-get-hash-val
+                     message-id
+                     (elmo-flag-folder-minfo-hash-internal
+                      flag-folder)))
+         ;; Same ID already exists.
+         (when (and folder number
+                    (not (member (cons (elmo-folder-name-internal folder)
+                                       number) (car elem))))
+           (setcar elem
+                   (cons (cons (elmo-folder-name-internal folder)
+                               number) (car elem)))
+           (setq new-number (nth 2 elem))
+           (elmo-set-hash-val (concat (number-to-string number)
+                                      ":" (elmo-folder-name-internal
+                                           folder))
+                              elem
+                              (elmo-flag-folder-minfo-hash-internal
+                               flag-folder)))
+       ;; Append new element.
+       (setq new-file
+             (expand-file-name
+              (int-to-string
+               (setq new-number (1+ (car (elmo-folder-status flag-folder)))))
+              (elmo-localdir-folder-directory-internal flag-folder)))
+       (with-temp-buffer
+         (setq cache (and message-id (elmo-file-cache-get message-id)))
+         (if (and cache (eq (elmo-file-cache-status cache) 'entire))
+             (elmo-copy-file (elmo-file-cache-path cache)
+                             new-file)
+           (when (and folder number)
+             (elmo-message-fetch folder number (elmo-make-fetch-strategy
+                                                'entire)
+                                 nil (current-buffer))
+             (write-region-as-binary (point-min) (point-max) new-file nil
+                                     'no-msg))))
+       (elmo-flag-folder-set-minfo-internal
+        flag-folder
+        (cons
+         (setq elem (list
+                     (when (and folder number)
+                       (list (cons (elmo-folder-name-internal folder)
+                                   number)))
+                     message-id
+                     new-number))
+         (elmo-flag-folder-minfo-internal flag-folder)))
+       (when (and folder number)
+         (elmo-set-hash-val (concat (number-to-string number)
+                                    ":" (elmo-folder-name-internal
+                                         folder))
+                            elem
+                            (elmo-flag-folder-minfo-hash-internal
+                             flag-folder)))
+       (elmo-set-hash-val message-id elem
+                          (elmo-flag-folder-minfo-hash-internal
+                           flag-folder))
+       (elmo-set-hash-val (concat "#" (number-to-string new-number)) elem
+                          (elmo-flag-folder-minfo-hash-internal
+                           flag-folder)))
+      (elmo-folder-commit flag-folder)
+      new-number)))
+
+(defun elmo-global-flag-set (flag folder number message-id)
+  "Set global flag to the message.
+FLAG is a symbol of the flag.
+FOLDER is the elmo folder structure.
+NUMBER is the message number.
+MESSAGE-ID is the message-id of the message."
+  (when (elmo-global-flag-p flag)
+    (elmo-global-flag-set-internal flag folder number message-id)))
+
+(defun elmo-global-flag-detach (flag folder number &optional delete-if-none)
+  "Detach the message from the global flag.
+FOLDER is the folder structure.
+NUMBERS is the message number.
+If optional DELETE-IF-NONE is non-nil, delete message from flag folder when
+the message is not flagged in any folder."
+  (unless (eq (elmo-folder-type-internal folder) 'flag)
+    (let ((flag-folder (elmo-flag-get-folder flag))
+         elem key)
+      (when flag-folder
+       (setq key (concat (number-to-string number) ":"
+                         (elmo-folder-name-internal folder))
+             elem (elmo-get-hash-val
+                   key
+                   (elmo-flag-folder-minfo-hash-internal flag-folder)))
+       (when elem
+         (setcar elem (delete (cons (elmo-folder-name-internal folder)
+                                    number) (car elem)))
+         (elmo-clear-hash-val key (elmo-flag-folder-minfo-hash-internal
+                                   flag-folder))
+         ;; Does not have any referrer, remove.
+         (when (and delete-if-none (null (car elem)))
+           (elmo-flag-folder-delete-message flag-folder (nth 2 elem) 'keep)
+           (elmo-localdir-delete-message flag-folder (nth 2 elem))
+           (elmo-folder-commit flag-folder)))))))
+
+(defun elmo-global-flag-detach-messages (folder numbers)
+  "Detach all messages specified from all global flags.
+FOLDER is the folder structure.
+NUMBERS is the message number list."
+  (unless (eq (elmo-folder-type-internal folder) 'flag)
+    (dolist (flag elmo-global-flag-list)
+      (dolist (number numbers)
+       (elmo-global-flag-detach flag folder number)))))
+
+;;; To migrate from global mark folder
+(defvar elmo-global-mark-filename "global-mark"
+  "Obsolete variable. (Just for migration)")
+
+(defun elmo-global-mark-upgrade ()
+  "Upgrade old `global-mark' structure."
+  (interactive)
+  (when (file-exists-p (expand-file-name
+                       elmo-global-mark-filename elmo-msgdb-directory))
+    (message "Upgrading flag structure...")
+    (elmo-global-flag-initialize)
+    (when (elmo-global-flag-p 'important)
+      (let ((global-marks
+            (elmo-object-load
+             (expand-file-name
+              elmo-global-mark-filename elmo-msgdb-directory)))
+           (folder (elmo-flag-get-folder 'important))
+           file-cache)
+       (dolist (elem global-marks)
+         (setq file-cache (elmo-file-cache-get (car elem)))
+         (when (eq (elmo-file-cache-status file-cache) 'entire)
+           (elmo-global-flag-set 'important nil nil (car elem))))))
+    (message "Upgrading flag structure...done")))
+
+(require 'product)
+(product-provide (provide 'elmo-flag) (require 'elmo-version))
+
+;;; elmo-flag.el ends here
 
 
 ;;
 ;; app-data:
-;; cons of flag-table and result of use-flag-p.
+;; cons of flag-table and folder structure
 (defsubst elmo-imap4-fetch-callback-1-subr (entity flags app-data)
   "A msgdb entity callback function."
-  (let ((use-flag (cdr app-data))
+  (let ((use-flag (elmo-folder-use-flag-p (cdr app-data)))
        (flag-table (car app-data))
        (msg-id (elmo-msgdb-overview-entity-get-id entity))
        saved-flags flag-list)
-    (when (elmo-string-member-ignore-case "\\Flagged" flags)
-      (elmo-msgdb-global-mark-set msg-id elmo-msgdb-important-mark))
+;;    (when (elmo-string-member-ignore-case "\\Flagged" flags)
+;;      (elmo-msgdb-global-mark-set msg-id elmo-msgdb-important-mark))
     (setq saved-flags (elmo-flag-table-get flag-table msg-id)
          flag-list
          (if use-flag
 (defun elmo-imap4-search-internal-primitive (folder session filter from-msgs)
   (let ((search-key (elmo-filter-key filter))
        (imap-search-keys '("bcc" "body" "cc" "from" "subject" "to"
-                           "larger" "smaller" "mark"))
+                           "larger" "smaller" "flag"))
        (total 0)
        (length (length from-msgs))
        charset set-list end results)
        (setq elmo-imap4-current-msgdb (elmo-make-msgdb)
              elmo-imap4-seen-messages nil
              elmo-imap4-fetch-callback 'elmo-imap4-fetch-callback-1
-             elmo-imap4-fetch-callback-data (cons flag-table
-                                                  (elmo-folder-use-flag-p
-                                                   folder)))
+             elmo-imap4-fetch-callback-data (cons flag-table folder))
        (while set-list
          (elmo-imap4-send-command-wait
           session
        (message "Getting overview...done")
        (when elmo-imap4-seen-messages
          (elmo-imap4-set-flag folder elmo-imap4-seen-messages "\\Seen"))
+       ;; cannot setup the global flag while retrieval.
+       (dolist (number (elmo-msgdb-list-messages elmo-imap4-current-msgdb))
+         (elmo-global-flags-set (elmo-msgdb-flags elmo-imap4-current-msgdb
+                                                  number)
+                                folder number
+                                (elmo-msgdb-message-entity-field
+                                 (elmo-msgdb-message-entity
+                                  elmo-imap4-current-msgdb number)
+                                 'message-id)))
        elmo-imap4-current-msgdb))))
 
-(luna-define-method elmo-folder-unmark-important-plugged
+(luna-define-method elmo-folder-unflag-important-plugged
   ((folder elmo-imap4-folder) numbers)
   (elmo-imap4-set-flag folder numbers "\\Flagged" 'remove))
 
-(luna-define-method elmo-folder-mark-as-important-plugged
+(luna-define-method elmo-folder-flag-as-important-plugged
   ((folder elmo-imap4-folder) numbers)
   (elmo-imap4-set-flag folder numbers "\\Flagged"))
 
-(luna-define-method elmo-folder-unmark-read-plugged
+(luna-define-method elmo-folder-unflag-read-plugged
   ((folder elmo-imap4-folder) numbers)
   (elmo-imap4-set-flag folder numbers "\\Seen" 'remove))
 
-(luna-define-method elmo-folder-mark-as-read-plugged
+(luna-define-method elmo-folder-flag-as-read-plugged
   ((folder elmo-imap4-folder) numbers)
   (elmo-imap4-set-flag folder numbers "\\Seen"))
 
-(luna-define-method elmo-folder-unmark-answered-plugged
+(luna-define-method elmo-folder-unflag-answered-plugged
   ((folder elmo-imap4-folder) numbers)
   (elmo-imap4-set-flag folder numbers "\\Answered" 'remove))
 
-(luna-define-method elmo-folder-mark-as-answered-plugged
+(luna-define-method elmo-folder-flag-as-answered-plugged
   ((folder elmo-imap4-folder) numbers)
   (elmo-imap4-set-flag folder numbers "\\Answered"))
 
                                                         condition)
   nil)
 
+(autoload 'elmo-global-flags-set "elmo-flag")
+
 (require 'product)
 (product-provide (provide 'elmo-imap4) (require 'elmo-version))
 
 
                                            name)
   (elmo-internal-folder-initialize folder name))
 
-(defvar elmo-internal-folder-list '(mark cache sendlog))
+(defvar elmo-internal-folder-list '(flag cache sendlog))
 
 (defun elmo-internal-folder-initialize (folder name)
   (let ((fsyms elmo-internal-folder-list)
 
     (let ((dir (elmo-localdir-folder-directory-internal folder))
          (new-msgdb (elmo-make-msgdb))
          entity message-id
+         flags
          (i 0)
          (len (length numbers)))
       (message "Creating msgdb...")
              (elmo-localdir-msgdb-create-entity
               dir (car numbers)))
        (when entity
-         (setq message-id (elmo-msgdb-overview-entity-get-id entity))
-         (elmo-msgdb-append-entity
-          new-msgdb
-          entity
-          (elmo-flag-table-get flag-table message-id)))
+         (setq message-id (elmo-msgdb-overview-entity-get-id entity)
+               flags (elmo-flag-table-get flag-table message-id))
+         (elmo-global-flags-set flags folder (car numbers) message-id)
+         (elmo-msgdb-append-entity new-msgdb entity flags))
        (when (> len elmo-display-progress-threshold)
          (setq i (1+ i))
          (elmo-display-progress
                (throw 'found t))
            (setq lock (cdr lock)))))))
 
+(autoload 'elmo-global-flags-set "elmo-flag")
+
 (require 'product)
 (product-provide (provide 'elmo-localdir) (require 'elmo-version))
 
 
                    folder))))
        (unless (memq 'unread flags)
          (setq flags (delq 'new flags)))
+       (elmo-global-flags-set flags folder number message-id)
        (elmo-msgdb-append-entity new-msgdb entity flags)
        (when (> len elmo-display-progress-threshold)
          (setq i (1+ i))
      mark))
   t)
 
-(luna-define-method elmo-map-folder-mark-as-important ((folder elmo-maildir-folder)
+(luna-define-method elmo-map-folder-flag-as-important ((folder elmo-maildir-folder)
                                                       locs)
   (elmo-maildir-set-mark-msgs folder locs ?F))
   
-(luna-define-method elmo-map-folder-unmark-important ((folder elmo-maildir-folder)
+(luna-define-method elmo-map-folder-unflag-important ((folder elmo-maildir-folder)
                                                      locs)
   (elmo-maildir-delete-mark-msgs folder locs ?F))
 
-(luna-define-method elmo-map-folder-mark-as-read ((folder elmo-maildir-folder)
+(luna-define-method elmo-map-folder-flag-as-read ((folder elmo-maildir-folder)
                                                  locs)
   (elmo-maildir-set-mark-msgs folder locs ?S))
 
-(luna-define-method elmo-map-folder-unmark-read ((folder elmo-maildir-folder)
+(luna-define-method elmo-map-folder-unflag-read ((folder elmo-maildir-folder)
                                                 locs)
   (elmo-maildir-delete-mark-msgs folder locs ?S))
 
-(luna-define-method elmo-map-folder-mark-as-answered ((folder
+(luna-define-method elmo-map-folder-flag-as-answered ((folder
                                                       elmo-maildir-folder)
                                                      locs)
   (elmo-maildir-set-mark-msgs folder locs ?R))
 
-(luna-define-method elmo-map-folder-unmark-answered ((folder
+(luna-define-method elmo-map-folder-unflag-answered ((folder
                                                      elmo-maildir-folder)
                                                     locs)
   (elmo-maildir-delete-mark-msgs folder locs ?R))
 
 (luna-define-generic elmo-map-folder-list-message-locations (folder)
   "Return a location list of the FOLDER.")
 
-(luna-define-generic elmo-map-folder-unmark-important (folder locations)
+(luna-define-generic elmo-map-folder-unflag-important (folder locations)
   "")
 
-(luna-define-generic elmo-map-folder-mark-as-important (folder locations)
+(luna-define-generic elmo-map-folder-flag-as-important (folder locations)
   "")
 
-(luna-define-generic elmo-map-folder-unmark-read (folder locations)
+(luna-define-generic elmo-map-folder-unflag-read (folder locations)
   "")
 
-(luna-define-generic elmo-map-folder-mark-as-read (folder locations)
+(luna-define-generic elmo-map-folder-flag-as-read (folder locations)
   "")
 
-(luna-define-generic elmo-map-folder-unmark-answered (folder locations)
+(luna-define-generic elmo-map-folder-unflag-answered (folder locations)
   "")
 
-(luna-define-generic elmo-map-folder-mark-as-answered (folder locations)
+(luna-define-generic elmo-map-folder-flag-as-answered (folder locations)
   "")
 
 (luna-define-generic elmo-map-message-fetch (folder location
   ((folder elmo-map-folder) &optional nohide)
   (mapcar 'car (elmo-map-folder-location-alist-internal folder)))
 
-(luna-define-method elmo-folder-unmark-important :before ((folder
+(luna-define-method elmo-folder-unflag-important :before ((folder
                                                           elmo-map-folder)
                                                          numbers
                                                          &optional
-                                                         ignore-flags)
-  (unless ignore-flags
-    (elmo-map-folder-unmark-important
+                                                         is-local)
+  (unless is-local
+    (elmo-map-folder-unflag-important
      folder
      (elmo-map-folder-numbers-to-locations folder numbers))))
 
-(luna-define-method elmo-folder-mark-as-important :before ((folder
+(luna-define-method elmo-folder-flag-as-important :before ((folder
                                                            elmo-map-folder)
                                                           numbers
                                                           &optional
-                                                          ignore-flags)
-  (unless ignore-flags
-    (elmo-map-folder-mark-as-important
+                                                          is-local)
+  (unless is-local
+    (elmo-map-folder-flag-as-important
      folder
      (elmo-map-folder-numbers-to-locations folder numbers))))
 
-(luna-define-method elmo-folder-unmark-read :before ((folder elmo-map-folder)
+(luna-define-method elmo-folder-unflag-read :before ((folder elmo-map-folder)
                                                     numbers
-                                                    &optional ignore-flags)
-  (unless ignore-flags
-    (elmo-map-folder-unmark-read
+                                                    &optional is-local)
+  (unless is-local
+    (elmo-map-folder-unflag-read
      folder
      (elmo-map-folder-numbers-to-locations folder numbers))))
 
-(luna-define-method elmo-folder-mark-as-read :before ((folder
+(luna-define-method elmo-folder-flag-as-read :before ((folder
                                                       elmo-map-folder)
                                                      numbers
-                                                     &optional ignore-flags)
-  (unless ignore-flags
-    (elmo-map-folder-mark-as-read
+                                                     &optional is-local)
+  (unless is-local
+    (elmo-map-folder-flag-as-read
      folder
      (elmo-map-folder-numbers-to-locations folder numbers))))
 
-(luna-define-method elmo-folder-unmark-answered :before ((folder
+(luna-define-method elmo-folder-unflag-answered :before ((folder
                                                          elmo-map-folder)
                                                         numbers)
-  (elmo-map-folder-unmark-answered
+  (elmo-map-folder-unflag-answered
    folder
    (elmo-map-folder-numbers-to-locations folder numbers)))
 
-(luna-define-method elmo-folder-mark-as-answered :before ((folder
+(luna-define-method elmo-folder-flag-as-answered :before ((folder
                                                          elmo-map-folder)
                                                         numbers)
-  (elmo-map-folder-mark-as-answered
+  (elmo-map-folder-flag-as-answered
    folder
    (elmo-map-folder-numbers-to-locations folder numbers)))
 
 
+++ /dev/null
-;;; elmo-mark.el --- Global mark folder for ELMO.
-
-;; Copyright (C) 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
-
-;; Author: Yuuichi Teranishi <teranisi@gohome.org>
-;; Keywords: mail, net news
-
-;; This file is part of ELMO (Elisp Library for Message Orchestration).
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-;;
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-;;
-
-;;; Commentary:
-;;
-
-;;; Code:
-;;
-(require 'elmo)
-(require 'elmo-map)
-
-(defcustom elmo-mark-default-mark "$"
-  "*Default global-mark for mark-folder."
-  :type 'string
-  :group 'elmo)
-
-;;; ELMO mark folder
-(eval-and-compile
-  (luna-define-class elmo-mark-folder (elmo-map-folder) (mark))
-  (luna-define-internal-accessors 'elmo-mark-folder))
-
-(luna-define-method elmo-folder-initialize ((folder
-                                            elmo-mark-folder)
-                                           name)
-  (elmo-mark-folder-set-mark-internal
-   folder
-   elmo-mark-default-mark)
-  folder)
-
-(luna-define-method elmo-folder-have-subfolder-p ((folder elmo-mark-folder))
-  nil)
-
-(luna-define-method elmo-folder-expand-msgdb-path ((folder
-                                                   elmo-mark-folder))
-  (expand-file-name "mark"
-                   (expand-file-name "internal"
-                                     elmo-msgdb-directory)))
-
-(luna-define-method elmo-map-folder-list-message-locations
-  ((folder elmo-mark-folder))
-  (elmo-mark-folder-list-message-locations folder))
-
-(defun elmo-mark-folder-list-message-locations (folder)
-  (let (result)
-    (dolist (pair (or elmo-msgdb-global-mark-alist
-                     (setq elmo-msgdb-global-mark-alist
-                           (elmo-object-load
-                            (expand-file-name
-                             elmo-msgdb-global-mark-filename
-                             elmo-msgdb-directory)))))
-      (if (string= (elmo-mark-folder-mark-internal folder)
-                  (cdr pair))
-         (setq result (cons (car pair) result))))
-    (nreverse result)))
-
-(luna-define-method elmo-folder-message-file-p ((folder elmo-mark-folder))
-  t)
-
-(luna-define-method elmo-message-file-name ((folder elmo-mark-folder)
-                                           number)
-  (elmo-file-cache-get-path
-   (elmo-map-message-location folder number)))
-
-(luna-define-method elmo-folder-msgdb-create ((folder elmo-mark-folder)
-                                             numbers flag-table)
-  (elmo-mark-folder-msgdb-create folder numbers))
-
-(defun elmo-mark-folder-msgdb-create (folder numbers)
-  (let ((i 0)
-       (len (length numbers))
-       (new-msgdb (elmo-make-msgdb))
-       entity message-id)
-    (message "Creating msgdb...")
-    (while numbers
-      (setq entity
-           (elmo-msgdb-create-overview-entity-from-file
-            (car numbers) (elmo-message-file-name folder (car numbers))))
-      (when entity
-       (elmo-msgdb-append-entity new-msgdb
-                                 entity
-                                 '(important cached)))
-      (when (> len elmo-display-progress-threshold)
-       (setq i (1+ i))
-       (elmo-display-progress
-        'elmo-mark-folder-msgdb-create "Creating msgdb..."
-        (/ (* i 100) len)))
-      (setq numbers (cdr numbers)))
-    (message "Creating msgdb...done")
-    new-msgdb))
-
-(luna-define-method elmo-folder-append-buffer ((folder elmo-mark-folder)
-                                              &optional flag number)
-  (let* ((msgid (elmo-field-body "message-id"))
-        (path (elmo-file-cache-get-path msgid))
-        dir)
-    (when path
-      (setq dir (directory-file-name (file-name-directory path)))
-      (unless (file-exists-p dir)
-       (elmo-make-directory dir))
-      (when (file-writable-p path)
-       (write-region-as-binary (point-min) (point-max)
-                               path nil 'no-msg)))
-    (elmo-msgdb-global-mark-set msgid
-                               (elmo-mark-folder-mark-internal folder))))
-
-(luna-define-method elmo-map-folder-delete-messages ((folder elmo-mark-folder)
-                                                    locations)
-  (dolist (location locations)
-    (elmo-msgdb-global-mark-delete location)))
-
-(luna-define-method elmo-message-fetch-with-cache-process
-  ((folder elmo-mark-folder) number strategy &optional section unseen)
-  ;; disbable cache process
-  (elmo-message-fetch-internal folder number strategy section unseen))
-
-(luna-define-method elmo-map-message-fetch ((folder elmo-mark-folder)
-                                           location strategy
-                                           &optional section unseen)
-  (let ((file (elmo-file-cache-get-path location)))
-    (when (file-exists-p file)
-      (insert-file-contents-as-binary file))))
-
-(luna-define-method elmo-folder-exists-p ((folder elmo-mark-folder))
-  t)
-
-(luna-define-method elmo-folder-writable-p ((folder elmo-mark-folder))
-  t)
-
-(require 'product)
-(product-provide (provide 'elmo-mark) (require 'elmo-version))
-
-;;; elmo-mark.el ends here
 
 (require 'modb)
 (require 'modb-entity)
 
-(defconst elmo-msgdb-new-mark "N"
-  "Mark for new message.")
-
-(defconst elmo-msgdb-unread-uncached-mark "U"
-  "Mark for unread and uncached message.")
-
-(defconst elmo-msgdb-unread-cached-mark "!"
-  "Mark for unread but already cached message.")
-
-(defconst elmo-msgdb-read-uncached-mark "u"
-  "Mark for read but uncached message.")
-
-(defconst elmo-msgdb-answered-cached-mark "&"
-  "Mark for answered and cached message.")
-
-(defconst elmo-msgdb-answered-uncached-mark "A"
-  "Mark for answered but cached message.")
-
-(defconst elmo-msgdb-important-mark "$"
-  "Mark for important message.")
-
 ;;; MSGDB interface.
 ;;
 ;; MSGDB elmo-load-msgdb PATH
   (let ((flags (elmo-get-hash-val msg-id flag-table)))
     (if flags
        (append
-        (and (elmo-msgdb-global-mark-get msg-id)
-             '(important))
         (and (elmo-file-cache-exists-p msg-id)
              '(cached))
-        (elmo-list-delete '(important cached read)
+        (elmo-list-delete '(cached read)
                           (copy-sequence flags)
                           #'delq))
       '(new unread))))
 
                               (elmo-multi-folder-divide-number-internal
                                folder))))
                     (elmo-folder-list-importants child)))))
-    (elmo-uniq-list
-     (nconc importants
-           (elmo-folder-list-messages-with-global-mark
-            folder elmo-msgdb-important-mark)))))
+    importants))
 
 (luna-define-method elmo-folder-list-messages
   ((folder elmo-multi-folder) &optional visible-only in-msgdb)
       (setq msg-list (cdr msg-list)))
     ret-val))
 
-(luna-define-method elmo-folder-mark-as-important ((folder
+(luna-define-method elmo-folder-flag-as-important ((folder
                                                    elmo-multi-folder)
                                                   numbers
                                                   &optional
-                                                  ignore-flags)
+                                                  is-local)
   (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
-    (elmo-folder-mark-as-important (car folder-numbers)
+    (elmo-folder-flag-as-important (car folder-numbers)
                                   (cdr folder-numbers)
-                                  ignore-flags)))
+                                  is-local)))
 
-(luna-define-method elmo-folder-unmark-important ((folder
+(luna-define-method elmo-folder-unflag-important ((folder
                                                   elmo-multi-folder)
                                                  numbers
                                                  &optional
-                                                 ignore-flags)
+                                                 is-local)
   (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
-    (elmo-folder-unmark-important (car folder-numbers)
+    (elmo-folder-unflag-important (car folder-numbers)
                                  (cdr folder-numbers)
-                                 ignore-flags)))
+                                 is-local)))
 
-(luna-define-method elmo-folder-mark-as-read ((folder
+(luna-define-method elmo-folder-flag-as-read ((folder
                                               elmo-multi-folder)
                                              numbers
-                                             &optional ignore-flag)
+                                             &optional is-local)
   (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
-    (elmo-folder-mark-as-read (car folder-numbers)
+    (elmo-folder-flag-as-read (car folder-numbers)
                              (cdr folder-numbers)
-                             ignore-flag)))
+                             is-local)))
 
-(luna-define-method elmo-folder-unmark-read ((folder
+(luna-define-method elmo-folder-unflag-read ((folder
                                              elmo-multi-folder)
                                             numbers
-                                            &optional ignore-flag)
+                                            &optional is-local)
   (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
-    (elmo-folder-unmark-read (car folder-numbers)
+    (elmo-folder-unflag-read (car folder-numbers)
                             (cdr folder-numbers)
-                            ignore-flag)))
+                            is-local)))
 
-(luna-define-method elmo-folder-mark-as-answered ((folder
+(luna-define-method elmo-folder-flag-as-answered ((folder
                                                   elmo-multi-folder)
-                                                 numbers)
+                                                 numbers
+                                                 &optional is-local)
   (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
-    (elmo-folder-mark-as-answered (car folder-numbers)
-                                 (cdr folder-numbers))))
+    (elmo-folder-flag-as-answered (car folder-numbers)
+                                 (cdr folder-numbers)
+                                 is-local)))
 
-(luna-define-method elmo-folder-unmark-answered ((folder
+(luna-define-method elmo-folder-unflag-answered ((folder
                                                  elmo-multi-folder)
-                                                numbers)
+                                                numbers
+                                                &optional is-local)
   (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
-    (elmo-folder-unmark-answered (car folder-numbers)
-                                (cdr folder-numbers))))
+    (elmo-folder-unflag-answered (car folder-numbers)
+                                (cdr folder-numbers)
+                                is-local)))
 
 (luna-define-method elmo-folder-list-flagged ((folder elmo-multi-folder)
                                              flag
 
                             (mapcar 'abs numbers)
                             flag-table)))
 
-(luna-define-method elmo-folder-unmark-important :before ((folder
+(luna-define-method elmo-folder-unflag-important :before ((folder
                                                           elmo-net-folder)
                                                          numbers
                                                          &optional
-                                                         ignore-flag)
+                                                         is-local)
   (when (and (elmo-folder-use-flag-p folder)
-            (not ignore-flag))
+            (not is-local))
     (if (elmo-folder-plugged-p folder)
-       (elmo-folder-send folder 'elmo-folder-unmark-important-plugged
+       (elmo-folder-send folder 'elmo-folder-unflag-important-plugged
                          numbers)
       (elmo-folder-send folder
-                       'elmo-folder-unmark-important-unplugged numbers))))
+                       'elmo-folder-unflag-important-unplugged numbers))))
 
-(luna-define-method elmo-folder-mark-as-important :before ((folder
+(luna-define-method elmo-folder-flag-as-important :before ((folder
                                                            elmo-net-folder)
                                                           numbers
                                                           &optional
-                                                          ignore-flag)
+                                                          is-local)
   (when (and (elmo-folder-use-flag-p folder)
-            (not ignore-flag))
+            (not is-local))
     (if (elmo-folder-plugged-p folder)
-       (elmo-folder-send folder 'elmo-folder-mark-as-important-plugged
+       (elmo-folder-send folder 'elmo-folder-flag-as-important-plugged
                          numbers)
-      (elmo-folder-send folder 'elmo-folder-mark-as-important-unplugged
+      (elmo-folder-send folder 'elmo-folder-flag-as-important-unplugged
                        numbers))))
 
-(luna-define-method elmo-folder-unmark-read :before ((folder elmo-net-folder)
+(luna-define-method elmo-folder-unflag-read :before ((folder elmo-net-folder)
                                                     numbers
-                                                    &optional ignore-flag)
+                                                    &optional is-local)
   (when (and (elmo-folder-use-flag-p folder)
-            (not ignore-flag))
+            (not is-local))
     (if (elmo-folder-plugged-p folder)
-       (elmo-folder-send folder 'elmo-folder-unmark-read-plugged numbers)
-      (elmo-folder-send folder 'elmo-folder-unmark-read-unplugged numbers))))
+       (elmo-folder-send folder 'elmo-folder-unflag-read-plugged numbers)
+      (elmo-folder-send folder 'elmo-folder-unflag-read-unplugged numbers))))
 
-(luna-define-method elmo-folder-mark-as-read :before ((folder elmo-net-folder)
+(luna-define-method elmo-folder-flag-as-read :before ((folder elmo-net-folder)
                                                      numbers
-                                                     &optional ignore-flag)
+                                                     &optional is-local)
   (when (and (elmo-folder-use-flag-p folder)
-            (not ignore-flag))
+            (not is-local))
     (if (elmo-folder-plugged-p folder)
-       (elmo-folder-send folder 'elmo-folder-mark-as-read-plugged numbers)
+       (elmo-folder-send folder 'elmo-folder-flag-as-read-plugged numbers)
       (elmo-folder-send
-       folder 'elmo-folder-mark-as-read-unplugged numbers))))
+       folder 'elmo-folder-flag-as-read-unplugged numbers))))
 
-(luna-define-method elmo-folder-unmark-answered :before ((folder
+(luna-define-method elmo-folder-unflag-answered :before ((folder
                                                          elmo-net-folder)
-                                                        numbers)
-  (when (elmo-folder-use-flag-p folder)
+                                                        numbers
+                                                        &optional is-local)
+  (when (and (elmo-folder-use-flag-p folder)
+            (not is-local))
     (if (elmo-folder-plugged-p folder)
-       (elmo-folder-send folder 'elmo-folder-unmark-answered-plugged
+       (elmo-folder-send folder 'elmo-folder-unflag-answered-plugged
                          numbers)
       (elmo-folder-send folder
-                       'elmo-folder-unmark-answered-unplugged numbers))))
+                       'elmo-folder-unflag-answered-unplugged numbers))))
 
-(luna-define-method elmo-folder-mark-as-answered :before ((folder
+(luna-define-method elmo-folder-flag-as-answered :before ((folder
                                                           elmo-net-folder)
-                                                         numbers)
-  (when (elmo-folder-use-flag-p folder)
+                                                         numbers
+                                                         &optional is-local)
+  (when (and (elmo-folder-use-flag-p folder)
+            (not is-local))
     (if (elmo-folder-plugged-p folder)
-       (elmo-folder-send folder 'elmo-folder-mark-as-answered-plugged
+       (elmo-folder-send folder 'elmo-folder-flag-as-answered-plugged
                          numbers)
-      (elmo-folder-send folder 'elmo-folder-mark-as-answered-unplugged
+      (elmo-folder-send folder 'elmo-folder-flag-as-answered-unplugged
                        numbers))))
 
-(luna-define-method elmo-folder-mark-as-read-unplugged ((folder
+(luna-define-method elmo-folder-flag-as-read-unplugged ((folder
                                                         elmo-net-folder)
                                                        numbers)
-  (elmo-folder-mark-as-read-dop folder numbers))
+  (elmo-folder-flag-as-read-dop folder numbers))
 
-(luna-define-method elmo-folder-unmark-read-unplugged ((folder elmo-net-folder)
+(luna-define-method elmo-folder-unflag-read-unplugged ((folder elmo-net-folder)
                                                     numbers)
-  (elmo-folder-unmark-read-dop folder numbers))
+  (elmo-folder-unflag-read-dop folder numbers))
 
-(luna-define-method elmo-folder-mark-as-important-unplugged ((folder
+(luna-define-method elmo-folder-flag-as-important-unplugged ((folder
                                                              elmo-net-folder)
                                                             numbers)
-  (elmo-folder-mark-as-important-dop folder numbers))
+  (elmo-folder-flag-as-important-dop folder numbers))
 
-(luna-define-method elmo-folder-unmark-important-unplugged ((folder
+(luna-define-method elmo-folder-unflag-important-unplugged ((folder
                                                             elmo-net-folder)
                                                            numbers)
-  (elmo-folder-unmark-important-dop folder numbers))
+  (elmo-folder-unflag-important-dop folder numbers))
 
-(luna-define-method elmo-folder-mark-as-answered-unplugged ((folder
+(luna-define-method elmo-folder-flag-as-answered-unplugged ((folder
                                                             elmo-net-folder)
                                                            numbers)
-  (elmo-folder-mark-as-answered-dop folder numbers))
+  (elmo-folder-flag-as-answered-dop folder numbers))
 
-(luna-define-method elmo-folder-unmark-answered-unplugged
+(luna-define-method elmo-folder-unflag-answered-unplugged
   ((folder elmo-net-folder) numbers)
-  (elmo-folder-unmark-answered-dop folder numbers))
+  (elmo-folder-unflag-answered-dop folder numbers))
 
 (luna-define-method elmo-message-encache :around ((folder elmo-net-folder)
                                                  number &optional read)
 
            (elmo-nmz-msgdb-create-entity
             folder (car numlist)))
       (when entity
-       (setq mark (or (elmo-msgdb-global-mark-get
-                       (elmo-msgdb-overview-entity-get-id
-                        entity))
-                      elmo-msgdb-new-mark))
-       (elmo-msgdb-append-entity new-msgdb entity mark))
+       (elmo-msgdb-append-entity new-msgdb entity '(new)))
       (when (> num elmo-display-progress-threshold)
        (setq i (1+ i))
        (setq percent (/ (* i 100) num))
 
     ("lines" . 7)
     ("xref" . 8)))
 
-(defun elmo-nntp-create-msgdb-from-overview-string (str
+(defun elmo-nntp-create-msgdb-from-overview-string (folder
+                                                   str
                                                    flag-table
                                                    &optional numlist)
   (let ((new-msgdb (elmo-make-msgdb))
        ov-list message-id entity
        ov-entity num
-       extras extra ext field field-index)
+       extras extra ext field field-index flags)
     (setq ov-list (elmo-nntp-parse-overview-string str))
     (while ov-list
       (setq ov-entity (car ov-list))
                      :date       (aref ov-entity 3)
                      :size       (string-to-int (aref ov-entity 6))
                      :extra      extra))
-       (setq message-id (elmo-message-entity-field entity 'message-id))
-       (elmo-msgdb-append-entity new-msgdb entity
-                                 (elmo-flag-table-get flag-table message-id)))
+       (setq message-id (elmo-message-entity-field entity 'message-id)
+             flags (elmo-flag-table-get flag-table message-id))
+       (elmo-global-flags-set flags folder num message-id)
+       (elmo-msgdb-append-entity new-msgdb entity flags))
       (setq ov-list (cdr ov-list)))
     new-msgdb))
 
              (elmo-msgdb-append
               new-msgdb
               (elmo-nntp-create-msgdb-from-overview-string
+               folder
                ov-str
                flag-table
                filter))))
            (elmo-msgdb-append
             new-msgdb
             (elmo-nntp-create-msgdb-from-overview-string
+             folder
              ov-str
              flag-table
              filter)))))
 ;;         temp-crosses slot is a list of cons cell:
 ;;         (NUMBER . (MESSAGE-ID (LIST-OF-NEWSGROUPS) 'ng))
 ;;    1.2. In elmo-folder-close, `temp-crosses' slot is cleared,
-;;    1.3. In elmo-folder-mark-as-read, move crosspost entry
+;;    1.3. In elmo-folder-flag-as-read, move crosspost entry
 ;;         from `temp-crosses' slot to `elmo-crosspost-message-alist'.
 
 ;; 2. process crosspost alist.
   )
 
 (defun elmo-nntp-folder-update-crosspost-message-alist (folder numbers)
-;;    1.3. In elmo-folder-mark-as-read, move crosspost entry
+;;    1.3. In elmo-folder-flag-as-read, move crosspost entry
 ;;         from `temp-crosses' slot to `elmo-crosspost-message-alist'.
   (let (elem)
     (dolist (number numbers)
         folder
         (delq elem (elmo-nntp-folder-temp-crosses-internal folder)))))))
 
-(luna-define-method elmo-folder-mark-as-read :before ((folder
+(luna-define-method elmo-folder-flag-as-read :before ((folder
                                                       elmo-nntp-folder)
                                                      numbers
-                                                     &optional ignore-flags)
+                                                     &optional is-local)
   (elmo-nntp-folder-update-crosspost-message-alist folder numbers))
 
 (defsubst elmo-nntp-folder-process-crosspost (folder)
 
   (elmo-folder-message-make-temp-files
    (elmo-pipe-folder-dst-internal folder) numbers start-number))
 
-(luna-define-method elmo-folder-mark-as-read ((folder elmo-pipe-folder)
-                                             numbers &optional ignore-flag)
-  (elmo-folder-mark-as-read (elmo-pipe-folder-dst-internal folder)
-                           numbers ignore-flag))
+(luna-define-method elmo-folder-flag-as-read ((folder elmo-pipe-folder)
+                                             numbers &optional is-local)
+  (elmo-folder-flag-as-read (elmo-pipe-folder-dst-internal folder)
+                           numbers is-local))
 
-(luna-define-method elmo-folder-unmark-read ((folder elmo-pipe-folder)
+(luna-define-method elmo-folder-unflag-read ((folder elmo-pipe-folder)
                                             numbers
-                                            &optional ignore-flag)
-  (elmo-folder-unmark-read (elmo-pipe-folder-dst-internal folder)
-                          numbers ignore-flag))
+                                            &optional is-local)
+  (elmo-folder-unflag-read (elmo-pipe-folder-dst-internal folder)
+                          numbers is-local))
 
-(luna-define-method elmo-folder-unmark-important ((folder elmo-pipe-folder)
+(luna-define-method elmo-folder-unflag-important ((folder elmo-pipe-folder)
                                                  numbers
-                                                 &optional ignore-flag)
-  (elmo-folder-unmark-important (elmo-pipe-folder-dst-internal folder)
-                               numbers ignore-flag))
+                                                 &optional is-local)
+  (elmo-folder-unflag-important (elmo-pipe-folder-dst-internal folder)
+                               numbers is-local))
 
-(luna-define-method elmo-folder-mark-as-important ((folder elmo-pipe-folder)
+(luna-define-method elmo-folder-flag-as-important ((folder elmo-pipe-folder)
                                                   numbers
-                                                  &optional ignore-flag)
-  (elmo-folder-mark-as-important (elmo-pipe-folder-dst-internal folder)
-                                numbers ignore-flag))
+                                                  &optional is-local)
+  (elmo-folder-flag-as-important (elmo-pipe-folder-dst-internal folder)
+                                numbers is-local))
 
-(luna-define-method elmo-folder-unmark-answered ((folder elmo-pipe-folder)
-                                                numbers)
-  (elmo-folder-unmark-answered (elmo-pipe-folder-dst-internal folder)
-                              numbers))
+(luna-define-method elmo-folder-unflag-answered ((folder elmo-pipe-folder)
+                                                numbers
+                                                &optional is-local)
+  (elmo-folder-unflag-answered (elmo-pipe-folder-dst-internal folder)
+                              numbers is-local))
 
-(luna-define-method elmo-folder-mark-as-answered ((folder elmo-pipe-folder)
-                                                 numbers)
-  (elmo-folder-mark-as-answered (elmo-pipe-folder-dst-internal folder)
-                               numbers))
+(luna-define-method elmo-folder-flag-as-answered ((folder elmo-pipe-folder)
+                                                 numbers
+                                                 &optional is-local)
+  (elmo-folder-flag-as-answered (elmo-pipe-folder-dst-internal folder)
+                               numbers is-local))
 
 (luna-define-method elmo-folder-pack-numbers ((folder elmo-pipe-folder))
   (elmo-folder-pack-numbers (elmo-pipe-folder-dst-internal folder)))
 
       (elmo-pop3-sort-msgdb-by-original-number
        folder
        (elmo-pop3-msgdb-create-by-header
+       folder
        process
        numlist
        flag-table
   (elmo-get-hash-val (format "#%d" number)
                     elmo-pop3-size-hash))
 
-(defun elmo-pop3-msgdb-create-by-header (process numlist
-                                                flag-table
-                                                loc-alist)
+(defun elmo-pop3-msgdb-create-by-header (folder process numlist
+                                               flag-table
+                                               loc-alist)
   (let ((tmp-buffer (get-buffer-create " *ELMO Overview TMP*")))
     (with-current-buffer (process-buffer process)
       (if loc-alist ; use uidl.
                                  tmp-buffer process numlist)
       (prog1
          (elmo-pop3-msgdb-create-message
+          folder
           tmp-buffer
           process
           (length numlist)
           flag-table loc-alist)
        (kill-buffer tmp-buffer)))))
 
-(defun elmo-pop3-msgdb-create-message (buffer
+(defun elmo-pop3-msgdb-create-message (folder
+                                      buffer
                                       process
                                       num
                                       numlist
                                       loc-alist)
   (save-excursion
     (let ((new-msgdb (elmo-make-msgdb))
-         beg entity i number message-id)
+         beg entity i number message-id flags)
       (set-buffer buffer)
       (elmo-set-buffer-multibyte default-enable-multibyte-characters)
       (goto-char (point-min))
                             (elmo-msgdb-overview-entity-get-number entity))
                            loc-alist)))
                    (elmo-msgdb-overview-entity-set-number entity number)))
-             (setq message-id (elmo-message-entity-field entity 'message-id))
-             (elmo-msgdb-append-entity
-              new-msgdb
-              entity
-              (elmo-flag-table-get flag-table message-id)))))
+             (setq message-id (elmo-message-entity-field entity 'message-id)
+                   flags (elmo-flag-table-get flag-table message-id))
+             (elmo-global-flags-set flags folder number message-id)
+             (elmo-msgdb-append-entity new-msgdb entity flags))))
        (when (> num elmo-display-progress-threshold)
          (setq i (1+ i))
          (if (or (zerop (% i 5)) (= i num))
 
   (let ((i 0)
        (len (length numbers))
        (new-msgdb (elmo-make-msgdb))
-       entity message-id)
+       entity message-id flags)
     (message "Creating msgdb...")
     (while numbers
       (setq entity
           (nconc
            (elmo-folder-killed-list-internal folder)
            (list (car numbers))))
-       (setq message-id (elmo-msgdb-overview-entity-get-id entity))
-       (elmo-msgdb-append-entity new-msgdb entity
-                                 (elmo-flag-table-get flag-table message-id)))
+       (setq message-id (elmo-msgdb-overview-entity-get-id entity)
+             flags (elmo-flag-table-get flag-table message-id))
+       (elmo-global-flags-set flags folder (car numbers) message-id)
+       (elmo-msgdb-append-entity new-msgdb entity flags))
       (when (> len elmo-display-progress-threshold)
        (setq i (1+ i))
        (elmo-display-progress
 
 (luna-define-method elmo-folder-msgdb-create ((folder elmo-shimbun-folder)
                                              numlist flag-table)
   (let ((new-msgdb (elmo-make-msgdb))
-       entity i percent length msgid)
+       entity i percent length msgid flags)
     (setq length (length numlist))
     (setq i 0)
     (message "Creating msgdb...")
            (elmo-shimbun-msgdb-create-entity
             folder (car numlist)))
       (when entity
-       (setq msgid (elmo-msgdb-overview-entity-get-id entity))
-       (elmo-msgdb-append-entity new-msgdb entity
-                                 (elmo-flag-table-get flag-table msgid)))
+       (setq msgid (elmo-msgdb-overview-entity-get-id entity)
+             flags (elmo-flag-table-get flag-table msgid))
+       (elmo-global-flags-set flags folder (car numlist) msgid)
+       (elmo-msgdb-append-entity new-msgdb entity flags))
       (when (> length elmo-display-progress-threshold)
        (setq i (1+ i))
        (setq percent (/ (* i 100) length))
 
                                  (match-end matchn)) list)))
     (nreverse list)))
 
-;;;
-;; parsistent mark handling
-;; (for global!)
-;; (FIXME: this should be treated in the msgdb.)
-
-(defvar elmo-msgdb-global-mark-alist nil)
-
-(defun elmo-msgdb-global-mark-delete (msgid)
-  (let* ((path (expand-file-name
-               elmo-msgdb-global-mark-filename
-               elmo-msgdb-directory))
-        (malist (or elmo-msgdb-global-mark-alist
-                    (setq elmo-msgdb-global-mark-alist
-                          (elmo-object-load path))))
-        match)
-    (when (setq match (assoc msgid malist))
-      (setq elmo-msgdb-global-mark-alist
-           (delete match elmo-msgdb-global-mark-alist))
-      (elmo-object-save path elmo-msgdb-global-mark-alist))))
-
-(defun elmo-msgdb-global-mark-set (msgid mark)
-  (let* ((path (expand-file-name
-               elmo-msgdb-global-mark-filename
-               elmo-msgdb-directory))
-        (malist (or elmo-msgdb-global-mark-alist
-                    (setq elmo-msgdb-global-mark-alist
-                          (elmo-object-load path))))
-        match)
-    (if (setq match (assoc msgid malist))
-       (setcdr match mark)
-      (setq elmo-msgdb-global-mark-alist
-           (nconc elmo-msgdb-global-mark-alist
-                  (list (cons msgid mark)))))
-    (elmo-object-save path elmo-msgdb-global-mark-alist)))
-
-(defun elmo-msgdb-global-mark-get (msgid)
-  (cdr (assoc msgid (or elmo-msgdb-global-mark-alist
-                       (setq elmo-msgdb-global-mark-alist
-                             (elmo-object-load
-                              (expand-file-name
-                               elmo-msgdb-global-mark-filename
-                               elmo-msgdb-directory)))))))
-
 ;;; File cache.
 (defmacro elmo-make-file-cache (path status)
   "PATH is the cache file name.
 
 (defun elmo-file-cache-delete (path)
   "Delete a cache on PATH."
-  (unless (elmo-msgdb-global-mark-get
-          (elmo-cache-to-msgid (file-name-nondirectory path)))
-    (when (file-exists-p path)
-      (if (file-directory-p path)
-         (progn
-           (dolist (file (directory-files path t "^[^\\.]"))
-             (delete-file file))
-           (delete-directory path))
-       (delete-file path))
-      t)))
+  (when (file-exists-p path)
+    (if (file-directory-p path)
+       (progn
+         (dolist (file (directory-files path t "^[^\\.]"))
+           (delete-file file))
+         (delete-directory path))
+      (delete-file path))
+    t))
 
 (defun elmo-file-cache-exists-p (msgid)
   "Returns 'section or 'entire if a cache which corresponds to MSGID exists."
 
 (defvar elmo-msgdb-lock-list-filename "lock"
   "Locked messages...list of message-id.
 For disconnected operations.")
-(defvar elmo-msgdb-global-mark-filename "global-mark"
-  "Alist of global mark.")
 (defvar elmo-lost+found-folder "+lost+found"
   "Lost and found.")
 (defvar elmo-crosspost-alist-filename "crosspost-alist"
 
                                     killed-list  ; killed list.
                                     persistent   ; non-nil if persistent.
                                     message-modified ; message is modified.
-                                    mark-modified    ; mark is modified.
+                                    flag-modified    ; flag is modified.
                                     process-duplicates  ; read or hide
                                     biff   ; folder for biff
                                     ))
 (luna-define-generic elmo-folder-list-answereds (folder)
   "Return a list of answered message numbers contained in FOLDER.")
 
-;; TODO: Should reconsider the structure of global mark.
-(defun elmo-folder-list-messages-with-global-mark (folder mark)
-  (let (entity msgs)
-    (dolist (mark-pair (or elmo-msgdb-global-mark-alist
-                          (setq elmo-msgdb-global-mark-alist
-                                (elmo-object-load
-                                 (expand-file-name
-                                  elmo-msgdb-global-mark-filename
-                                  elmo-msgdb-directory)))))
-      (if (and (string= mark (cdr mark-pair))
-              (setq entity
-                    (elmo-msgdb-message-entity (elmo-folder-msgdb folder)
-                                               (car mark-pair))))
-         (setq msgs (cons (elmo-msgdb-overview-entity-get-number entity)
-                          msgs))))
-    msgs))
-
 (luna-define-generic elmo-folder-list-flagged (folder flag &optional in-msgdb)
   "List messages in the FOLDER with FLAG.
 FLAG is a symbol which is one of the following:
 NUMBERS is a list of message numbers to create msgdb.
 FLAG-TABLE is a hashtable of message-id and flag.")
 
-(luna-define-generic elmo-folder-unmark-important (folder
+(luna-define-generic elmo-folder-unflag-important (folder
                                                   numbers
-                                                  &optional ignore-flags)
-  "Un-mark messages as important.
+                                                  &optional is-local)
+  "Un-flag messages as important.
 FOLDER is the ELMO folder structure.
 NUMBERS is a list of message numbers to be processed.
-If IGNORE-FLAGS is non-nil, folder flags are not updated.")
+If IS-LOCAL is non-nil, only the local flag is updated.")
 
-(luna-define-generic elmo-folder-mark-as-important (folder
+(luna-define-generic elmo-folder-flag-as-important (folder
                                                    numbers
-                                                   &optional ignore-flags)
-  "Mark messages as important.
+                                                   &optional is-local)
+  "Flag messages as important.
 FOLDER is the ELMO folder structure.
 NUMBERS is a list of message numbers to be processed.
-If IGNORE-FLAGS is non-nil, folder flags are not updated.")
+If IS-LOCAL is non-nil, only the local flag is updated.")
 
-(luna-define-generic elmo-folder-unmark-read (folder numbers
-                                                    &optional ignore-flags)
-  "Un-mark messages as read.
+(luna-define-generic elmo-folder-unflag-read (folder numbers
+                                                    &optional is-local)
+  "Un-flag messages as read.
 FOLDER is the ELMO folder structure.
 NUMBERS is a list of message numbers to be processed.
-If IGNORE-FLAGS is non-nil, folder flags are not updated.")
+If IS-LOCAL is non-nil, only the local flag is updated.")
 
-(luna-define-generic elmo-folder-mark-as-read (folder numbers
-                                                     &optional ignore-flags)
-  "Mark messages as read.
+(luna-define-generic elmo-folder-flag-as-read (folder numbers
+                                                     &optional is-local)
+  "Flag messages as read.
 FOLDER is the ELMO folder structure.
 NUMBERS is a list of message numbers to be processed.
-If IGNORE-FLAGS is non-nil, folder flags are not updated.")
+If IS-LOCAL is non-nil, only the local flag is updated.")
 
-(luna-define-generic elmo-folder-unmark-answered (folder numbers)
-  "Un-mark messages as answered.
+(luna-define-generic elmo-folder-unflag-answered (folder numbers
+                                                        &optional is-local)
+  "Un-flag messages as answered.
 FOLDER is the ELMO folder structure.
-NUMBERS is a list of message numbers to be processed.")
+If IS-LOCAL is non-nil, only the local flag is updated.")
 
-(luna-define-generic elmo-folder-mark-as-answered (folder numbers)
-  "Mark messages as answered.
+(luna-define-generic elmo-folder-flag-as-answered (folder numbers
+                                                         &optional is-local)
+  "Flag messages as answered.
 FOLDER is the ELMO folder structure.
-NUMBERS is a list of message numbers to be processed.")
+If IS-LOCAL is non-nil, only the local flag is updated.")
 
 (luna-define-generic elmo-folder-append-buffer (folder &optional flag
                                                       number)
   "Append messages from folder.
 FOLDER is the ELMO folder structure.
 Caller should make sure FOLDER is `writable'.
-(Can be checked with `elmo-folder-writable-p').
+\(Can be checked with `elmo-folder-writable-p'\).
 SRC-FOLDER is the source ELMO folder structure.
 NUMBERS is the message numbers to be appended in the SRC-FOLDER.
 If second optional argument SAME-NUMBER is specified,
 
 (defun elmo-folder-encache (folder numbers &optional unread)
   "Encache messages in the FOLDER with NUMBERS.
-If UNREAD is non-nil, messages are not marked as read."
+If UNREAD is non-nil, messages are not flaged as read."
   (dolist (number numbers)
     (elmo-message-encache folder number unread)))
 
 (luna-define-generic elmo-message-encache (folder number &optional read)
   "Encache message in the FOLDER with NUMBER.
-If READ is non-nil, message is marked as read.")
+If READ is non-nil, message is flaged as read.")
 
 (luna-define-method elmo-message-encache ((folder elmo-folder) number
                                          &optional read)
-  (elmo-message-fetch
-   folder number
-   (elmo-make-fetch-strategy 'entire
-                            nil ;use-cache
-                            t   ;save-cache
-                            (elmo-file-cache-get-path
-                             (elmo-message-field
-                              folder number 'message-id)))
-   nil nil (not read)))
+  (let (path)
+    (elmo-message-fetch
+     folder number
+     (elmo-make-fetch-strategy 'entire
+                              nil ;use-cache
+                              t   ;save-cache
+                              (setq path (elmo-file-cache-get-path
+                                          (elmo-message-field
+                                           folder number 'message-id))))
+     nil nil (not read))
+    path))
 
 (luna-define-generic elmo-message-fetch (folder number strategy
                                                &optional
 is fetched (if possible).
 If second optional argument OUTBUF is specified, fetched message is
 inserted to the buffer and returns t if fetch was ended successfully.
-If third optional argument UNREAD is non-nil, message is not marked as read.
+If third optional argument UNREAD is non-nil, message is not flaged as read.
 Returns non-nil if fetching was succeed.")
 
 (luna-define-generic elmo-message-fetch-with-cache-process (folder
 STRATEGY is the message fetching strategy.
 If optional argument SECTION is specified, only the SECTION of the message
 is fetched (if possible).
-If second optional argument UNREAD is non-nil, message is not marked as read.
+If second optional argument UNREAD is non-nil, message is not flaged as read.
 Returns non-nil if fetching was succeed.")
 
 (luna-define-generic elmo-message-fetch-internal (folder number strategy
 STRATEGY is the message fetching strategy.
 If optional argument SECTION is specified, only the SECTION of the message
 is fetched (if possible).
-If second optional argument UNREAD is non-nil, message is not marked as read.
+If second optional argument UNREAD is non-nil, message is not flaged as read.
 Returns non-nil if fetching was succeed.")
 
 (luna-define-generic elmo-message-fetch-field (folder number field)
 
 (luna-define-generic elmo-folder-process-crosspost (folder)
   "Process crosspost for FOLDER.
-Return a cons cell of (NUMBER-CROSSPOSTS . NEW-MARK-ALIST).")
+Return a cons cell of (NUMBER-CROSSPOSTS . NEW-FLAG-ALIST).")
 
 (luna-define-generic elmo-folder-newsgroups (folder)
   "Return list of newsgroup name of FOLDER.")
         (elmo-folder-msgdb-path folder)
         (elmo-folder-killed-list-internal folder)))
       (elmo-folder-set-message-modified folder nil)
-      (elmo-folder-set-mark-modified-internal folder nil)
+      (elmo-folder-set-flag-modified-internal folder nil)
       (elmo-msgdb-save msgdb))))
 
 (luna-define-method elmo-folder-close-internal ((folder elmo-folder))
          (progn
            (if (and (elmo-folder-delete-messages src-folder succeeds)
                     (elmo-folder-detach-messages src-folder succeeds))
-               (setq result t)
+               (progn
+                 (elmo-global-flag-detach-messages src-folder succeeds)
+                 (setq result t))
              (message "move: delete messages from %s failed."
                       (elmo-folder-name-internal src-folder))
              (setq result nil))
       (t
        (memq flag cur-flags)))))
 
-(defun elmo-message-set-flag (folder number flag)
+(defun elmo-message-set-flag (folder number flag &optional is-local)
   "Set message flag.
 FOLDER is a ELMO folder structure.
 NUMBER is a message number to set flag.
   `answered'  (set the message as answered)
   `important' (set the message as important)
 'sugar' flag:
-  `read'      (remove new and unread flags)")
-
-(defun elmo-message-unset-flag (folder number flag)
+  `read'      (remove new and unread flags)
+If optional IS-LOCAL is non-nil, update only local (not server) status."
+  ;; XXX Transitional implementation.
+  (case flag
+    (unread
+     (elmo-folder-unflag-read folder (list number) is-local))
+    (read
+     (elmo-folder-flag-as-read folder (list number) is-local))
+    (answered
+     (elmo-folder-flag-as-answered folder (list number) is-local))
+    (important
+     (elmo-folder-flag-as-important folder (list number) is-local))))
+
+(defun elmo-message-unset-flag (folder number flag &optional is-local)
   "Unset message flag.
 FOLDER is a ELMO folder structure.
 NUMBER is a message number to set flag.
   `answered'  (remove answered flag)
   `important' (remove important flag)
 'sugar' flag:
-  `read'      (set unread flag)")
+  `read'      (set unread flag)
+If optional IS-LOCAL is non-nil, update only local (not server) status."
+  ;; XXX Transitional implementation.
+  (case flag
+    (unread
+     (elmo-folder-flag-as-read folder (list number) is-local))
+    (read
+     (elmo-folder-unflag-read folder (list number) is-local))
+    (answered
+     (elmo-folder-unflag-answered folder (list number) is-local))
+    (important
+     (elmo-folder-unflag-important folder (list number) is-local))))
 
 (luna-define-generic elmo-message-field (folder number field)
   "Get message field value in the msgdb.
 (luna-define-method elmo-message-folder ((folder elmo-folder) number)
   folder) ; default is folder
 
-(luna-define-method elmo-folder-unmark-important ((folder elmo-folder)
+(luna-define-method elmo-folder-unflag-important ((folder elmo-folder)
                                                  numbers
-                                                 &optional ignore-flags)
+                                                 &optional is-local)
   (when (elmo-folder-msgdb-internal folder)
     (dolist (number numbers)
+      (when (elmo-global-flag-p 'important)
+       (elmo-global-flag-detach 'important folder number 'remove-if-none))
       (elmo-msgdb-unset-flag (elmo-folder-msgdb folder)
                             number
                             'important))))
 
-(luna-define-method elmo-folder-mark-as-important ((folder elmo-folder)
+(luna-define-method elmo-folder-flag-as-important ((folder elmo-folder)
                                                   numbers
-                                                  &optional ignore-flags)
-  (when (elmo-folder-msgdb-internal folder)
-    (dolist (number numbers)
-      (elmo-msgdb-set-flag (elmo-folder-msgdb folder)
-                          number
-                          'important))))
+                                                  &optional is-local)
+  (let (path message-id)
+    (when (elmo-folder-msgdb-internal folder)
+      (dolist (number numbers)
+       ;; important message should always be a read message.
+       (if (eq (elmo-file-cache-exists-p
+                (setq message-id
+                      (elmo-message-field folder number 'message-id)))
+               'entire)
+           (elmo-folder-flag-as-read folder (list number)))
+       (when (elmo-global-flag-p 'important)
+         (elmo-global-flag-set 'important folder number message-id))
+       (elmo-msgdb-set-flag (elmo-folder-msgdb folder)
+                            number
+                            'important)))))
 
-(luna-define-method elmo-folder-unmark-read ((folder elmo-folder)
+(luna-define-method elmo-folder-unflag-read ((folder elmo-folder)
                                             numbers
-                                            &optional ignore-flags)
+                                            &optional is-local)
   (when (elmo-folder-msgdb-internal folder)
     (dolist (number numbers)
       (elmo-msgdb-unset-flag (elmo-folder-msgdb folder)
                             number
                             'read))))
 
-(luna-define-method elmo-folder-mark-as-read ((folder elmo-folder)
+(luna-define-method elmo-folder-flag-as-read ((folder elmo-folder)
                                              numbers
-                                             &optional ignore-flag)
+                                             &optional is-local)
   (when (elmo-folder-msgdb-internal folder)
     (dolist (number numbers)
       (elmo-msgdb-set-flag (elmo-folder-msgdb folder)
                           number
                           'read))))
 
-(luna-define-method elmo-folder-unmark-answered ((folder elmo-folder) numbers)
+(luna-define-method elmo-folder-unflag-answered ((folder elmo-folder)
+                                                numbers
+                                                &optional is-local)
   (when (elmo-folder-msgdb-internal folder)
     (dolist (number numbers)
       (elmo-msgdb-unset-flag (elmo-folder-msgdb folder)
                             number
                             'answered))))
 
-(luna-define-method elmo-folder-mark-as-answered ((folder elmo-folder) numbers)
+(luna-define-method elmo-folder-flag-as-answered ((folder elmo-folder)
+                                                 numbers
+                                                 &optional is-local)
   (when (elmo-folder-msgdb-internal folder)
     (dolist (number numbers)
       (elmo-msgdb-set-flag (elmo-folder-msgdb folder)
                   'hide)
               ;; Let duplicates be a temporary killed message.
               (elmo-folder-kill-messages folder duplicates)
-              ;; Should be mark as read.
-              (elmo-folder-mark-as-read folder duplicates))
+              ;; Should be flag as read.
+              (elmo-folder-flag-as-read folder duplicates))
              ((eq (elmo-folder-process-duplicates-internal folder)
                   'read)
-              ;; Mark as read duplicates.
-              (elmo-folder-mark-as-read folder duplicates))
+              ;; Flag as read duplicates.
+              (elmo-folder-flag-as-read folder duplicates))
              (t
               ;; Do nothing.
               (setq duplicates nil)))
                                             no-check)
   (let ((killed-list (elmo-folder-killed-list-internal folder))
        (before-append t)
-       old-msgdb diff diff-2 delete-list new-list new-msgdb mark
+       old-msgdb diff diff-2 delete-list new-list new-msgdb flag
        flag-table crossed after-append)
     (setq old-msgdb (elmo-folder-msgdb folder))
     (setq flag-table (elmo-flag-table-load (elmo-folder-msgdb-path folder)))
              (setq before-append nil)
              (setq crossed (elmo-folder-append-msgdb folder new-msgdb))
              ;; process crosspost.
-             ;; Return a cons cell of (NUMBER-CROSSPOSTS . NEW-MARK-ALIST).
+             ;; Return a cons cell of (NUMBER-CROSSPOSTS . NEW-FLAG-ALIST).
              (elmo-folder-process-crosspost folder)
              (elmo-folder-set-message-modified folder t)
-             (elmo-folder-set-mark-modified-internal folder t))
+             (elmo-folder-set-flag-modified-internal folder t))
            ;; return value.
            (or crossed 0)))
       (quit
   "Initialize ELMO module."
   (elmo-crosspost-message-alist-load)
   (elmo-resque-obsolete-variables)
+  (elmo-global-flag-initialize)
   (elmo-dop-queue-load))
 
 (defun elmo-quit ()
     (while types
       (setq class
            (luna-find-class
-            (intern (format "elmo-%s-folder" (symbol-name (cdr (car types)))))))
+            (intern (format "elmo-%s-folder"
+                            (symbol-name (cdr (car types)))))))
       ;; Call all folder's `elmo-quit' method.
       (if class
          (dolist (func (luna-class-find-functions class 'elmo-quit))
 ;; autoloads
 (autoload 'elmo-dop-queue-flush "elmo-dop")
 (autoload 'elmo-nntp-post "elmo-nntp")
+(autoload 'elmo-global-flag-initialize "elmo-flag")
+(autoload 'elmo-global-flag-p "elmo-flag")
+(autoload 'elmo-global-flag-detach "elmo-flag")
+(autoload 'elmo-global-flag-detach-messages "elmo-flag")
+(autoload 'elmo-global-flag-set "elmo-flag")
 
 (require 'product)
 (product-provide (provide 'elmo) (require 'elmo-version))
 
 
 ;;; legacy implement
 ;;
+
+(defconst modb-legacy-new-mark "N"
+  "Mark for new message.")
+
+(defconst modb-legacy-unread-uncached-mark "U"
+  "Mark for unread and uncached message.")
+
+(defconst modb-legacy-unread-cached-mark "!"
+  "Mark for unread but already cached message.")
+
+(defconst modb-legacy-read-uncached-mark "u"
+  "Mark for read but uncached message.")
+
+(defconst modb-legacy-answered-cached-mark "&"
+  "Mark for answered and cached message.")
+
+(defconst modb-legacy-answered-uncached-mark "A"
+  "Mark for answered but cached message.")
+
+(defconst modb-legacy-important-mark "$"
+  "Mark for important message.")
+
 (eval-and-compile
   (luna-define-class modb-legacy (modb-generic)
                     (overview number-alist mark-alist index))
 (defsubst elmo-msgdb-set-path (msgdb path)
   (modb-generic-set-location-internal msgdb path))
 
-(defvar elmo-msgdb-unread-marks-internal nil)
-(defsubst elmo-msgdb-unread-marks ()
+(defvar modb-legacy-unread-marks-internal nil)
+(defsubst modb-legacy-unread-marks ()
   "Return an unread mark list"
-  (or elmo-msgdb-unread-marks-internal
-      (setq elmo-msgdb-unread-marks-internal
-           (list elmo-msgdb-new-mark
-                 elmo-msgdb-unread-uncached-mark
-                 elmo-msgdb-unread-cached-mark))))
-
-(defvar elmo-msgdb-answered-marks-internal nil)
-(defsubst elmo-msgdb-answered-marks ()
+  (or modb-legacy-unread-marks-internal
+      (setq modb-legacy-unread-marks-internal
+           (list modb-legacy-new-mark
+                 modb-legacy-unread-uncached-mark
+                 modb-legacy-unread-cached-mark))))
+
+(defvar modb-legacy-answered-marks-internal nil)
+(defsubst modb-legacy-answered-marks ()
   "Return an answered mark list"
-  (or elmo-msgdb-answered-marks-internal
-      (setq elmo-msgdb-answered-marks-internal
-           (list elmo-msgdb-answered-cached-mark
-                 elmo-msgdb-answered-uncached-mark))))
-
-(defvar elmo-msgdb-uncached-marks-internal nil)
-(defsubst elmo-msgdb-uncached-marks ()
-  (or elmo-msgdb-uncached-marks-internal
-      (setq elmo-msgdb-uncached-marks-internal
-           (list elmo-msgdb-new-mark
-                 elmo-msgdb-answered-uncached-mark
-                 elmo-msgdb-unread-uncached-mark
-                 elmo-msgdb-read-uncached-mark))))
-
-(defsubst elmo-msgdb-mark-to-flags (mark)
+  (or modb-legacy-answered-marks-internal
+      (setq modb-legacy-answered-marks-internal
+           (list modb-legacy-answered-cached-mark
+                 modb-legacy-answered-uncached-mark))))
+
+(defvar modb-legacy-uncached-marks-internal nil)
+(defsubst modb-legacy-uncached-marks ()
+  (or modb-legacy-uncached-marks-internal
+      (setq modb-legacy-uncached-marks-internal
+           (list modb-legacy-new-mark
+                 modb-legacy-answered-uncached-mark
+                 modb-legacy-unread-uncached-mark
+                 modb-legacy-read-uncached-mark))))
+
+(defsubst modb-legacy-mark-to-flags (mark)
   (append
-   (and (string= mark elmo-msgdb-new-mark)
+   (and (string= mark modb-legacy-new-mark)
        '(new))
-   (and (string= mark elmo-msgdb-important-mark)
+   (and (string= mark modb-legacy-important-mark)
        '(important))
-   (and (member mark (elmo-msgdb-unread-marks))
+   (and (member mark (modb-legacy-unread-marks))
        '(unread))
-   (and (member mark (elmo-msgdb-answered-marks))
+   (and (member mark (modb-legacy-answered-marks))
        '(answered))
-   (and (not (member mark (elmo-msgdb-uncached-marks)))
+   (and (not (member mark (modb-legacy-uncached-marks)))
        '(cached))))
 
-(defsubst elmo-msgdb-flags-to-mark (flags)
+(defsubst modb-legacy-flags-to-mark (flags)
   (cond ((memq 'new flags)
-        elmo-msgdb-new-mark)
+        modb-legacy-new-mark)
        ((memq 'important flags)
-        elmo-msgdb-important-mark)
+        modb-legacy-important-mark)
        ((memq 'answered flags)
         (if (memq 'cached flags)
-            elmo-msgdb-answered-cached-mark
-          elmo-msgdb-answered-uncached-mark))
+            modb-legacy-answered-cached-mark
+          modb-legacy-answered-uncached-mark))
        ((memq 'unread flags)
         (if (memq 'cached flags)
-            elmo-msgdb-unread-cached-mark
-          elmo-msgdb-unread-uncached-mark))
+            modb-legacy-unread-cached-mark
+          modb-legacy-unread-uncached-mark))
        (t
         (if (memq 'cached flags)
             nil
-          elmo-msgdb-read-uncached-mark))))
+          modb-legacy-read-uncached-mark))))
 
 (defsubst elmo-msgdb-get-mark (msgdb number)
   "Get mark string from MSGDB which corresponds to the message with NUMBER."
   (length (modb-legacy-overview-internal msgdb)))
 
 (luna-define-method elmo-msgdb-flags ((msgdb modb-legacy) number)
-  (elmo-msgdb-mark-to-flags (elmo-msgdb-get-mark msgdb number)))
+  (modb-legacy-mark-to-flags (elmo-msgdb-get-mark msgdb number)))
 
 (luna-define-method elmo-msgdb-set-flag ((msgdb modb-legacy)
                                         number flag)
      (elmo-msgdb-unset-flag msgdb number 'cached))
     (t
      (let* ((cur-mark (elmo-msgdb-get-mark msgdb number))
-           (flags (elmo-msgdb-mark-to-flags cur-mark))
+           (flags (modb-legacy-mark-to-flags cur-mark))
            new-mark)
        (and (memq 'new flags)
            (setq flags (delq 'new flags)))
        (when (and (eq flag 'unread)
                  (memq 'answered flags))
         (setq flags (delq 'answered flags)))
-       (setq new-mark (elmo-msgdb-flags-to-mark flags))
+       (setq new-mark (modb-legacy-flags-to-mark flags))
        (unless (string= new-mark cur-mark)
         (elmo-msgdb-set-mark msgdb number new-mark))))))
 
      (elmo-msgdb-set-flag msgdb number 'cached))
     (t
      (let* ((cur-mark (elmo-msgdb-get-mark msgdb number))
-           (flags (elmo-msgdb-mark-to-flags cur-mark))
+           (flags (modb-legacy-mark-to-flags cur-mark))
            new-mark)
        (and (memq 'new flags)
            (setq flags (delq 'new flags)))
        (when (and (eq flag 'unread)
                  (memq 'answered flags))
         (setq flags (delq 'answered flags)))
-       (setq new-mark (elmo-msgdb-flags-to-mark flags))
+       (setq new-mark (modb-legacy-flags-to-mark flags))
        (unless (string= new-mark cur-mark)
         (elmo-msgdb-set-mark msgdb number new-mark))))))
 
        mark-regexp matched)
     (case flag
       (new
-       (setq mark-regexp (regexp-quote elmo-msgdb-new-mark)))
+       (setq mark-regexp (regexp-quote modb-legacy-new-mark)))
       (unread
-       (setq mark-regexp (elmo-regexp-opt (elmo-msgdb-unread-marks))))
+       (setq mark-regexp (elmo-regexp-opt (modb-legacy-unread-marks))))
       (answered
-       (setq mark-regexp (elmo-regexp-opt (elmo-msgdb-answered-marks))))
+       (setq mark-regexp (elmo-regexp-opt (modb-legacy-answered-marks))))
       (important
-       (setq mark-regexp (regexp-quote elmo-msgdb-important-mark)))
+       (setq mark-regexp (regexp-quote modb-legacy-important-mark)))
       (read
-       (setq mark-regexp (elmo-regexp-opt (elmo-msgdb-unread-marks))))
+       (setq mark-regexp (elmo-regexp-opt (modb-legacy-unread-marks))))
       (digest
        (setq mark-regexp (elmo-regexp-opt
-                         (append (elmo-msgdb-unread-marks)
-                                 (list elmo-msgdb-important-mark)))))
+                         (append (modb-legacy-unread-marks)
+                                 (list modb-legacy-important-mark)))))
       (any
        (setq mark-regexp (elmo-regexp-opt
                          (append
-                          (elmo-msgdb-unread-marks)
-                          (elmo-msgdb-answered-marks)
-                          (list elmo-msgdb-important-mark))))))
+                          (modb-legacy-unread-marks)
+                          (modb-legacy-answered-marks)
+                          (list modb-legacy-important-mark))))))
     (when mark-regexp
       (if (eq flag 'read)
          (dolist (number (elmo-msgdb-list-messages msgdb))
        (nconc (elmo-msgdb-get-number-alist msgdb)
              (list (cons number message-id))))
       (modb-generic-set-message-modified-internal msgdb t)
-      (when (setq mark (elmo-msgdb-flags-to-mark flags))
+      (when (setq mark (modb-legacy-flags-to-mark flags))
        (elmo-msgdb-set-mark-alist
         msgdb
         (nconc (elmo-msgdb-get-mark-alist msgdb)
 
 FLAG is a symbol which is one of the following:
 `new'       ... Message which is new.
 `read'      ... Message which is already read.
-`important' ... Message which is marked as important.
-`answered'  ... Message which is marked as answered.
+`important' ... Message which is important.
+`answered'  ... Message which is answered.
 `cached'    ... Message which is cached.")
 
 (luna-define-generic elmo-msgdb-unset-flag (msgdb number flag)
 FLAG is a symbol which is one of the following:
 `new'       ... Message which is new.
 `read'      ... Message which is already read.
-`important' ... Message which is marked as important.
-`answered'  ... Message which is marked as answered.
+`important' ... Message which is important.
+`answered'  ... Message which is answered.
 `cached'    ... Message which is cached.")
 
 (luna-define-generic elmo-msgdb-list-messages (msgdb)
 
 2003-09-18  Yuuichi Teranishi  <teranisi@gohome.org>
 
+       * wl-vars.el (wl-folder-sync-range-alist): Set default range for
+       'flag as all.
+       (wl-use-flag-folder-help-echo): New user option.
+
+       * wl-summary.el (wl-summary-detect-mark-position): Bind 
+       wl-summary-highlight as nil.
+       (wl-summary-set-mark-modified): Follow the API change.
+       (wl-summary-mark-modified-p): Ditto.
+       (wl-summary-mark-as-read-all): Ditto.
+       (wl-summary-sync-marks): Don't call
+       elmo-folder-list-messages-with-global-mark.
+       (wl-summary-mark-as-read-internal): Follow the API change.
+       (wl-summary-mark-as-answered-internal): Ditto.
+       (wl-summary-mark-as-important): Cause an error when 'flag folder;
+       Follow the API change.
+       (wl-summary-create-line): Call with number argument.
+       (wl-summary-reply): Follow the API change.
+
+       * wl-highlight.el (wl-highlight-summary-line-flag-folder): New
+       function.
+       (wl-highlight-summary-line-string): Call it when
+       wl-use-flag-folder-help-echo is non-nil.
+       (wl-highlight-summary-current-line): Ditto.
+       (elmo-flag-folder-referrer): Added autoload setting.
+
+       * wl-draft.el (wl-draft-kill): Follow the API change.
+
        * Version number is increased to 2.11.14.
        
 2003-09-17  Hiroya Murata  <lapis-lazuli@pop06.odn.ne.jp>
 
                       (string= (wl-summary-buffer-folder-name)
                                folder-name)))
                (with-current-buffer buffer
-                 (elmo-folder-unmark-answered folder (list number))
+                 (elmo-folder-unflag-answered folder (list number))
                  (when (wl-summary-jump-to-msg number)
                    (wl-summary-update-persistent-mark)))
              (elmo-folder-open folder 'load-msgdb)
-             (elmo-folder-unmark-answered folder (list number))
+             (elmo-folder-unflag-answered folder (list number))
              (elmo-folder-close folder))))
        (wl-draft-hide cur-buf)
        (wl-draft-delete cur-buf)))
 
              '(wl-highlight-summary-normal-face)
            '(wl-highlight-summary-thread-top-face)))))))
 
-(defun wl-highlight-summary-line-string (line flags temp-mark indent)
+(defun wl-highlight-summary-line-flag-folder (number beg end &optional string)
+  ;; help-echo for flag folder.
+  (let (flag-info)
+    (current-buffer)
+    (when (eq (elmo-folder-type-internal wl-summary-buffer-elmo-folder)
+             'flag)
+      (setq flag-info
+           (elmo-flag-folder-referrer wl-summary-buffer-elmo-folder
+                                      number))
+      (if flag-info
+         (put-text-property beg end 'help-echo
+                            (concat "The message exists in "
+                                    (mapconcat
+                                     (lambda (pair)
+                                       (concat (car pair) "/"
+                                               (number-to-string
+                                                (cdr pair))))
+                                     flag-info ","))
+                            string)))))
+
+(defun wl-highlight-summary-line-string (number line flags temp-mark indent)
   (let ((fsymbol (car (wl-highlight-summary-line-face-spec
                       flags
                       temp-mark
                       (> (length indent) 0)))))
     (put-text-property 0 (length line) 'face fsymbol line))
-  (if wl-use-highlight-mouse-line
-      (put-text-property 0 (length line) 'mouse-face 'highlight line)))
+  (when wl-use-highlight-mouse-line
+    (put-text-property 0 (length line) 'mouse-face 'highlight line))
+  (when wl-use-flag-folder-help-echo
+    (wl-highlight-summary-line-flag-folder number 0 (length line) line)))
 
 (defun wl-highlight-summary-current-line ()
   (interactive)
                           'wl-highlight-action-argument-face))
       (when wl-use-highlight-mouse-line
        (put-text-property bol eol 'mouse-face 'highlight))
+      (when wl-use-flag-folder-help-echo
+       (wl-highlight-summary-line-flag-folder number bol eol))
       (when wl-use-dnd
        (wl-dnd-set-drag-starter bol eol)))))
 
         (inhibit-read-only t))
     (put-text-property beg end 'mouse-face 'highlight)))
 
+
+(autoload 'elmo-flag-folder-referrer "elmo-flag")
+
 (require 'product)
 (product-provide (provide 'wl-highlight) (require 'wl-version))
 
 
        (dummy-temp (char-to-string 200))
        (wl-summary-new-mark (char-to-string 201)) ; bind only for the check.
        (wl-summary-flag-priority-list '(new))     ; ditto.
+       wl-summary-highlight
        temp persistent)
     (with-temp-buffer
       (setq wl-summary-buffer-number-column column
 (defun wl-summary-message-modified-p ()
   wl-summary-buffer-message-modified)
 (defun wl-summary-set-mark-modified ()
-  (elmo-folder-set-mark-modified-internal
+  (elmo-folder-set-flag-modified-internal
    wl-summary-buffer-elmo-folder t))
 (defun wl-summary-mark-modified-p ()
-  (elmo-folder-mark-modified-internal
+  (elmo-folder-flag-modified-internal
    wl-summary-buffer-elmo-folder))
 (defun wl-summary-set-thread-modified ()
   (setq wl-summary-buffer-thread-modified t))
       (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-flag-as-read folder
                                  (elmo-folder-list-unreads
                                   folder))
        (save-excursion
                    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)))
+      (setq importants (elmo-folder-list-importants
+                       wl-summary-buffer-elmo-folder)
            unreads (elmo-folder-list-unreads
                     wl-summary-buffer-elmo-folder)
            answereds (elmo-folder-list-answereds
       (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-unflag-read folder number-list no-folder-mark)
+         (elmo-folder-flag-as-read folder number-list 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?
+         ;; should elmo-folder-flag-as-read return unread numbers?
          (wl-summary-count-unread)
          (wl-summary-update-modeline)
          (wl-folder-update-unread
       (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-unflag-answered folder number-list)
+         (elmo-folder-flag-as-answered folder number-list))
        (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
                                               no-server-update)
   (interactive)
   (if (eq (elmo-folder-type-internal wl-summary-buffer-elmo-folder)
-         'internal)
+         'flag)
       (error "Cannot process mark in this folder"))
   (save-excursion
     (let* ((folder wl-summary-buffer-elmo-folder)
            (progn
              ;; server side mark
              (save-match-data
-               (elmo-folder-unmark-important folder (list number)
+               (elmo-folder-unflag-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-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))))
+         (elmo-folder-flag-as-important folder (list number)
+                                        no-server-update)))
       (when visible
        (wl-summary-update-persistent-mark))))
   number)
        "@"
       "")))
 
+;;; 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
                        (elmo-msgdb-overview-entity-get-number
                         wl-message-entity))))
     (if wl-summary-highlight
-       (wl-highlight-summary-line-string line
-                                         wl-flags
-                                         wl-temp-mark
-                                         wl-thr-indent-string))
+       (wl-highlight-summary-line-string
+        (elmo-msgdb-overview-entity-get-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)
        (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-flag-as-answered folder (list number))
        (wl-summary-update-persistent-mark))
       t)))
 
 
 (defcustom wl-folder-sync-range-alist
   (list (cons (concat "^" (regexp-quote wl-draft-folder) "$\\|^"
                      (regexp-quote wl-queue-folder) "$")
-             "all"))
+             "all")
+       (cons "^'flag" "all"))
   "*Default sync range alist.  If no matches, `wl-default-sync-range' is used."
   :type '(repeat (cons (regexp :tag "Folder Regexp")
                       (choice (const "update")
 ;; highilght about mouse
 (defcustom wl-use-highlight-mouse-line (and window-system
                                            (>= emacs-major-version 19))
-  "*Highlight mouse line, if non nil."
+  "*Highlight mouse line, if non-nil."
+  :type 'boolean
+  :group 'wl-highlight)
+
+(defcustom wl-use-flag-folder-help-echo nil
+  "*Display help-echo in the flag folder if non-nil."
   :type 'boolean
   :group 'wl-highlight)