* wl-expire.el (wl-expire-refile): Display progress message.
[elisp/wanderlust.git] / utils / bbdb-wl.el
index 9871335..bd5140e 100644 (file)
 (defvar bbdb-wl-folder-regexp nil)
 (defvar bbdb-wl-ignore-folder-regexp nil)
 
+(defvar bbdb-wl-canonicalize-full-name-function
+  #'bbdb-wl-canonicalize-spaces-and-dots
+  "Way to canonicalize full name.")
+
+(defun bbdb-wl-canonicalize-spaces-and-dots (string)
+  (while (and string (string-match "  +\\|[\f\t\n\r\v]+\\|\\." string))
+    (setq string (replace-match " " nil t string)))
+  (and string (string-match "^ " string)
+       (setq string (replace-match "" nil t string)))
+  string)
+
 ;;;###autoload
 (defun bbdb-wl-setup ()
   (add-hook 'wl-message-redisplay-hook 'bbdb-wl-get-update-record)
   (add-hook 'wl-summary-exit-hook 'bbdb-wl-hide-bbdb-buffer)
   (add-hook 'wl-message-window-deleted-hook 'bbdb-wl-hide-bbdb-buffer)
   (add-hook 'wl-exit-hook 'bbdb-wl-exit)
+  (add-hook 'wl-save-hook 'bbdb-offer-save)
   (add-hook 'wl-summary-toggle-disp-off-hook 'bbdb-wl-hide-bbdb-buffer)
   (add-hook 'wl-summary-toggle-disp-folder-on-hook 'bbdb-wl-hide-bbdb-buffer)
   (add-hook 'wl-summary-toggle-disp-folder-off-hook 'bbdb-wl-hide-bbdb-buffer)
             (lambda ()
 ;;;           (local-set-key "\M-\t" 'bbdb-complete-name)
               (define-key (current-local-map) "\M-\t" 'bbdb-complete-name))))
-  ;; BBDB 2.00.06 or earlier:
-  ;;  auto-autoloads.el includes (provide 'bbdb-autoloads)
-  ;;  Don't exist bbdb-autoloads.el
-  (when (and (not (featurep 'bbdb-autoloads))
-            (module-installed-p 'bbdb-autoloads))
-    ;; BBDB 2.20: bbdb-autoloads.el NOT includes (provide 'bbdb-autoloads)
-    (load "bbdb-autoloads")))
+  (require 'bbdb)
+  (bbdb-initialize)
+
+  (if (not (boundp 'bbdb-get-addresses-from-headers))
+      (defvar bbdb-get-addresses-from-headers
+       '("From" "Resent-From" "Reply-To")))
+
+  (if (not (boundp 'bbdb-get-addresses-to-headers))
+      (defvar bbdb-get-addresses-to-headers
+       '("Resent-To" "Resent-CC" "To" "CC" "BCC")))
+
+  (if (not (boundp 'bbdb-get-addresses-headers))
+      (defvar bbdb-get-addresses-headers
+       (append bbdb-get-addresses-from-headers
+               bbdb-get-addresses-to-headers))))
 
 (defun bbdb-wl-exit ()
   (let (bbdb-buf)
          from-str)
       string)))
 
-(if (not (boundp 'bbdb-get-addresses-from-headers))
-    (defvar bbdb-get-addresses-from-headers
-      '("From" "Resent-From" "Reply-To")))
-
-(if (not (boundp 'bbdb-get-addresses-to-headers))
-    (defvar bbdb-get-addresses-to-headers
-      '("Resent-To" "Resent-CC" "To" "CC" "BCC")))
-
-(if (not (boundp 'bbdb-get-addresses-headers))
-    (defvar bbdb-get-addresses-headers
-      (append bbdb-get-addresses-from-headers bbdb-get-addresses-to-headers)))
-
 (defun bbdb-wl-get-addresses-1 (&optional only-first-address)
   "Return real name and email address of sender respectively recipients.
 If an address matches `bbdb-user-mail-names' it will be ignored.
@@ -174,15 +182,16 @@ For BBDB 2.33 or earlier."
              (setq fn (std11-full-name-string structure)
                    fn (and fn
                            (with-temp-buffer ; to keep raw buffer unibyte.
-                             (elmo-set-buffer-multibyte
+                             (set-buffer-multibyte
                               default-enable-multibyte-characters)
                              (eword-decode-string
                               (decode-mime-charset-string
                                fn wl-mime-charset))))
+                    fn (funcall bbdb-wl-canonicalize-full-name-function fn)
                    ad (std11-address-string structure))
              ;; ignore uninteresting addresses, this is kinda gross!
              (when (or (not (stringp uninteresting-senders))
-                       (not 
+                       (not
                         (or
                          (and fn (string-match uninteresting-senders fn))
                          (and ad (string-match uninteresting-senders ad)))))
@@ -204,7 +213,7 @@ For BBDB 2.34 or later."
       (let ((headers bbdb-get-addresses-headers)
            (uninteresting-senders bbdb-user-mail-names)
            addrlist header structures structure fn ad
-           header-type header-fields)
+           header-type header-fields header-content)
        (while headers
          (setq header-type (caar headers)
                header-fields (cdar headers))
@@ -215,19 +224,19 @@ For BBDB 2.34 or later."
                                (std11-unfold-string header-content)))
              (while (and (setq structure (car structures))
                          (eq (car structure) 'mailbox))
-               (setq fn (std11-full-name-string structure)
+                (setq fn (std11-full-name-string structure)
                      fn (and fn
                              (with-temp-buffer ; to keep raw buffer unibyte.
-                               (elmo-set-buffer-multibyte
+                               (set-buffer-multibyte
                                 default-enable-multibyte-characters)
                                (eword-decode-string
                                 (decode-mime-charset-string
                                  fn wl-mime-charset))))
+                     fn (funcall bbdb-wl-canonicalize-full-name-function fn)
                      ad (std11-address-string structure))
-               
                ;; ignore uninteresting addresses, this is kinda gross!
                (when (or (not (stringp uninteresting-senders))
-                         (not 
+                         (not
                           (or
                            (and fn
                                 (string-match uninteresting-senders fn))
@@ -294,7 +303,7 @@ the user confirms the creation."
                          (string-match (bbdb-user-mail-names) addr))
                      (setq from (or (std11-field-body "To") from)))
                  (with-temp-buffer ; to keep raw buffer unibyte.
-                   (elmo-set-buffer-multibyte
+                   (set-buffer-multibyte
                     default-enable-multibyte-characters)
                    (setq from (eword-decode-string
                                (decode-mime-charset-string
@@ -469,7 +478,7 @@ displaying the record corresponding to the sender of the current message."
     (defun bbdb-extract-field-value (field)
       (let ((value (bbdb-wl-extract-field-value-internal field)))
        (with-temp-buffer ; to keep raw buffer unibyte.
-         (elmo-set-buffer-multibyte
+         (set-buffer-multibyte
           default-enable-multibyte-characters)
          (and value
               (eword-decode-string value)))))