At Thu, 02 Apr 2009 14:45:30 +0900,
Randy Bush wrote:
> 
> for an mua, i use wanderlust under emacs and use bbdb as the address
> book maintainer.  
> 
> bbdb views 
>      "Bob Jones" <b...@jones.edu>
> as different from
>     "'Bob Jones'" <b...@jones.edu>
> and asks me if i want to add/aka, which is annoying.
> 
> is there an option or hack where bbdb recognizes the over-quoting and
> ignores it?

I use something like the following for normalizing the names:

(defun my-bbdb-canonicalize-name-hook (name)
  "Function used to canonicalize the full names of bbdb entries."
  ;; (message (format "canonicalize name %s" name))
  (cond
    ;; strip extra quotes (Some MS mailer likes "'full name'")
    ((string-match "\\`[`'\"]\\(.*\\)[`'\"]\\'" name)
     (bbdb-match-substring name 1))
    ;; replace multiple whitespace with single
    ((string-match "[ \f\t\n\r\v]\\{2,\\}" name)
     (replace-match " " nil t name))
    ;; remove anything in round brackets, e.g.: "Firstname Surname (E-mail)"
    ((string-match "[ ]+(.*)" name)
     (replace-match "" nil t name))
    ;; strip leading whitespace (this is a bug in std11 libs?)
    ((string-match "\\`[ \t]+\\(.*\\)" name)
     (bbdb-match-substring name 1))
    ;; strip trailing whitespace
    ((string-match "\\(.*\\)[ ]+\\'" name)
     (bbdb-match-substring name 1))
    ;; strip Dr pronoun
    ((string-match "\\`Dr\\.? \\(.*\\)" name)
     (bbdb-match-substring name 1))
    ;; person and person -> person & person
    ((string-match "\\`\\(\\w+\\) and \\(\\w.+\\)\\'" name)
     (concat (bbdb-match-substring name 1) " & " (bbdb-match-substring name 2)))
    ;; Surname, Firstname -> Firstname Surname
    ((string-match "\\`\\(\\w.+\\), \\(\\w.+\\)\\'" name)
     (concat (bbdb-match-substring name 2) " " (bbdb-match-substring name 1)))
    ;; Sometimes get an email address in the name part. Map the username to a 
name: <n...@domain> -> Name
    ((string-match "\\`<\\(.*\\)@.*\\'" name)
     (bbdb-match-substring name 1))
    ;; replace name without any whitespace with empty; I don't want bbdb names 
containing only a single name
    ((string-match "\\`\\(\\w+\\)\\'" name)
     ;;(message (format "Eliding name %s" name))
     "")
    (t name)))

That one is hooked in to bbdb-canonicalize-net-hook via customize.

For email address normalization I use:

(defun my-bbdb-canonicalize-address-hook (name)
  "Function used to canonicalize the email address of bbdb entries."
  ;(message (format "canonicalize address %s" name))
  (cond
    ;; strip extra quotes (Some MS mailer likes "'full name'")
   ((string-match "\\`[`'\"<]\\(.*\\)[`'\">]\\'" name)
    (bbdb-match-substring name 1))
   ;; strip leading whitespace (this is a bug in std11 libs?)
   ((string-match "\\`[ \t]+\\(.*\\)" name)
    (bbdb-match-substring name 1))
   ;; Surname, Firstname -> Firstname Surname
   ((string-match "\\`\\(\\w+\\), \\(\\w.+\\)\\'" name)
    (concat (bbdb-match-substring name 2) " " (bbdb-match-substring name 1)))
   ;; strip trailing whitespace
   ((string-match "\\(.*\\)[ ]+\\'" name)
     (bbdb-match-substring name 1))
   (t name)))

;; make bbdb-wl-canonicalize-full-name-function behave like 
bbdb-canonicalize-net-hook. (much more useful, imo)
(defun my-bbdb-canonicalize-name (name)
  (when name                            ;name is sometimes nil?
    (while (not (eq name (setq name (my-bbdb-canonicalize-name-hook name))))
      ;;(insert-string (concat name "\n"))
    ))
  name)

(setq bbdb-wl-canonicalize-full-name-function 'my-bbdb-canonicalize-name)



I don't remember whether these were pilfered off mailing lists or copy
pasta from bbdb/wl source. Feel free to use/modify as you need.

Cheers,
Len.

------------------------------------------------------------------------------
_______________________________________________
bbdb-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bbdb-info
BBDB Home Page: http://bbdb.sourceforge.net/

Reply via email to