(require 'mime-edit)
(defcustom elmo-nmz-default-index-path "~/Mail"
- "*Default index path for namazu."
+ "*Default index path for namazu.
+If the value is a list, all elements are used as index paths for namazu."
:type 'directory
:group 'elmo)
:type 'symbol
:group 'elmo)
-(defcustom elmo-nmz-args '("--all" "--list" "--early")
+(defcustom elmo-nmz-args '("--all" "--list" "--late")
"*Argument list for namazu to list matched files."
:type '(repeat string)
:group 'elmo)
(defcustom elmo-nmz-index-alias-alist nil
"*Alist of ALIAS and INDEX-PATH."
:type '(repeat (cons (string :tag "Alias Name")
- (directory :tag "Index Path")))
+ (choice (directory :tag "Index Path")
+ (repeat (directory :tag "Index Path")))))
:group 'elmo)
+(defvar elmo-nmz-use-drive-letter (if (memq system-type
+ '(OS/2 emx windows-nt)) t nil)
+ "*If non-nil, do a drive letter conversion (e.g. /a|/ => a:/).")
+
;;; "namazu search"
(eval-and-compile
(luna-define-class elmo-nmz-folder
(expand-file-name
(elmo-replace-string-as-filename
(elmo-folder-name-internal folder))
- (expand-file-name "nmz" elmo-msgdb-dir)))
+ (expand-file-name "nmz" elmo-msgdb-directory)))
-(defun elmo-nmz-msgdb-create-entity (folder number)
+(defun elmo-nmz-msgdb-create-entity (msgdb folder number)
"Create msgdb entity for the message in the FOLDER with NUMBER."
- (let ((location (elmo-map-message-location folder number))
+ (let ((location (expand-file-name (elmo-map-message-location folder number)))
entity uid)
- (setq entity (elmo-msgdb-create-overview-entity-from-file number location))
- (unless (or (> (length (elmo-msgdb-overview-entity-get-to entity)) 0)
- (> (length (elmo-msgdb-overview-entity-get-cc entity)) 0)
- (not (string= (elmo-msgdb-overview-entity-get-subject entity)
+ (setq entity (elmo-msgdb-create-message-entity-from-file
+ (elmo-msgdb-message-entity-handler msgdb) number location))
+ (unless (or (> (length (elmo-message-entity-field entity 'to)) 0)
+ (> (length (elmo-message-entity-field entity 'cc)) 0)
+ (not (string= (elmo-message-entity-field entity 'subject)
elmo-no-subject)))
- (elmo-msgdb-overview-entity-set-subject entity location)
+ (elmo-message-entity-set-field entity 'subject location)
(setq uid (nth 2 (file-attributes location)))
- (elmo-msgdb-overview-entity-set-from entity
- (concat
- (user-full-name uid)
- " <"(user-login-name uid) "@"
- (system-name) ">")))
+ (elmo-message-entity-set-field entity 'from
+ (concat
+ (user-full-name uid)
+ " <"(user-login-name uid) "@"
+ (system-name) ">")))
entity))
(luna-define-method elmo-folder-msgdb-create ((folder elmo-nmz-folder)
- numlist new-mark
- already-mark seen-mark
- important-mark
- seen-list)
- (let* (overview number-alist mark-alist entity
- i percent num pair)
+ numlist flag-table)
+ (let ((new-msgdb (elmo-make-msgdb))
+ entity mark i percent num)
(setq num (length numlist))
(setq i 0)
(message "Creating msgdb...")
(while numlist
(setq entity
(elmo-nmz-msgdb-create-entity
- folder (car numlist)))
+ new-msgdb folder (car numlist)))
(when entity
- (setq overview
- (elmo-msgdb-append-element
- overview entity))
- (setq number-alist
- (elmo-msgdb-number-add number-alist
- (elmo-msgdb-overview-entity-get-number
- entity)
- (elmo-msgdb-overview-entity-get-id
- entity)))
- (setq mark-alist
- (elmo-msgdb-mark-append
- mark-alist
- (elmo-msgdb-overview-entity-get-number
- entity)
- (or (elmo-msgdb-global-mark-get
- (elmo-msgdb-overview-entity-get-id
- entity))
- new-mark))))
+ (elmo-msgdb-append-entity new-msgdb entity '(new unread)))
(when (> num elmo-display-progress-threshold)
(setq i (1+ i))
(setq percent (/ (* i 100) num))
'elmo-folder-msgdb-create "Creating msgdb..."
percent))
(setq numlist (cdr numlist)))
- (message "Creating msgdb...done.")
- (list overview number-alist mark-alist)))
+ (message "Creating msgdb...done")
+ new-msgdb))
(luna-define-method elmo-folder-message-file-p ((folder elmo-nmz-folder))
t)
((folder elmo-nmz-folder))
t)
-(luna-define-method elmo-folder-diff ((folder elmo-nmz-folder)
- &optional numbers)
+(luna-define-method elmo-folder-diff ((folder elmo-nmz-folder))
(cons nil nil))
(luna-define-method elmo-folder-message-make-temp-files ((folder
numbers
&optional
start-number)
- (let ((temp-dir (elmo-folder-make-temp-dir folder))
+ (let ((temp-dir (elmo-folder-make-temporary-directory folder))
(cur-number (if start-number 0)))
(dolist (number numbers)
- (elmo-add-name-to-file
+ (elmo-copy-file
(elmo-message-file-name folder number)
(expand-file-name
(int-to-string (if start-number (incf cur-number) number))
location strategy
&optional section unseen)
(when (file-exists-p location)
- (insert-file-contents-as-binary location)
- (unless (or (std11-field-body "To")
- (std11-field-body "Cc")
- (std11-field-body "Subject"))
- (let (charset guess uid)
- (erase-buffer)
- (set-buffer-multibyte t)
- (insert-file-contents location)
- (setq charset (detect-mime-charset-region (point-min)
- (point-max)))
- (goto-char (point-min))
- (setq guess (mime-find-file-type location))
- (setq uid (nth 2 (file-attributes location)))
- (insert "From: " (concat (user-full-name uid)
- " <"(user-login-name uid) "@"
- (system-name) ">") "\n")
- (insert "Subject: " location "\n")
- (insert "Content-Type: "
- (concat (nth 0 guess) "/" (nth 1 guess))
- "; charset=" (upcase (symbol-name charset))
- "\nMIME-Version: 1.0\n\n")
- (encode-mime-charset-region (point-min) (point-max) charset)
- (set-buffer-multibyte nil)))))
+ (prog1
+ (insert-file-contents-as-binary (expand-file-name location))
+ (unless (or (std11-field-body "To")
+ (std11-field-body "Cc")
+ (std11-field-body "Subject"))
+ (let (charset guess uid)
+ (erase-buffer)
+ (set-buffer-multibyte t)
+ (insert-file-contents (expand-file-name location))
+ (setq charset (detect-mime-charset-region (point-min)
+ (point-max)))
+ (goto-char (point-min))
+ (setq guess (mime-find-file-type location))
+ (setq uid (nth 2 (file-attributes location)))
+ (insert "From: " (concat (user-full-name uid)
+ " <"(user-login-name uid) "@"
+ (system-name) ">") "\n")
+ (insert "Subject: " location "\n")
+ (insert "Content-Type: "
+ (concat (nth 0 guess) "/" (nth 1 guess))
+ "; charset=" (upcase (symbol-name charset))
+ "\nMIME-Version: 1.0\n\n")
+ (encode-mime-charset-region (point-min) (point-max) charset)
+ (set-buffer-multibyte nil))))))
(luna-define-method elmo-map-folder-list-message-locations
((folder elmo-nmz-folder))
(list
(encode-mime-charset-string
(elmo-nmz-folder-pattern-internal folder)
- elmo-nmz-charset)
- (expand-file-name
- (elmo-nmz-folder-index-path-internal folder)))))
+ elmo-nmz-charset))
+ (if (listp (elmo-nmz-folder-index-path-internal folder))
+ (mapcar
+ 'expand-file-name
+ (elmo-nmz-folder-index-path-internal folder))
+ (list
+ (expand-file-name
+ (elmo-nmz-folder-index-path-internal folder))))))
(goto-char (point-min))
(while (not (eobp))
(beginning-of-line)
+ ;; convert url to file path.
+ (when (looking-at "^file://")
+ (replace-match ""))
+ (when (and elmo-nmz-use-drive-letter
+ (looking-at "^/\\([A-Za-z]\\)|/"))
+ (replace-match "\\1:/")
+ (beginning-of-line))
(setq bol (point))
(end-of-line)
(setq locations (cons (buffer-substring bol (point)) locations))
(forward-line 1))
- locations)))
+ (nreverse locations))))
(luna-define-method elmo-folder-exists-p ((folder elmo-nmz-folder))
t)
-(luna-define-method elmo-folder-search ((folder elmo-nmz-folder)
- condition &optional from-msgs)
- (let* ((msgs (or from-msgs (elmo-folder-list-messages folder)))
- (orig msgs)
- (i 0)
- case-fold-search matches
- percent num
- (num (length msgs)))
- (while msgs
- (if (elmo-file-field-condition-match
- (elmo-map-message-location folder (car msgs))
- condition
- (car msgs)
- orig)
- (setq matches (cons (car msgs) matches)))
- (setq i (1+ i))
- (setq percent (/ (* i 100) num))
- (elmo-display-progress
- 'elmo-nmz-search "Searching..."
- percent)
- (setq msgs (cdr msgs)))
- matches))
-
-;;; To override elmo-map-folder methods.
-(luna-define-method elmo-folder-list-unreads-internal
- ((folder elmo-nmz-folder) unread-marks &optional mark-alist)
- t)
-
-(luna-define-method elmo-folder-unmark-important ((folder elmo-nmz-folder)
- numbers)
- t)
-
-(luna-define-method elmo-folder-mark-as-important ((folder elmo-nmz-folder)
- numbers)
- t)
-
-(luna-define-method elmo-folder-unmark-read ((folder elmo-nmz-folder) numbers)
- t)
-
-(luna-define-method elmo-folder-mark-as-read ((folder elmo-nmz-folder) numbers)
- t)
-
(require 'product)
(product-provide (provide 'elmo-nmz) (require 'elmo-version))