diff options
Diffstat (limited to 'bits/bbdb-funcs.txt')
-rw-r--r-- | bits/bbdb-funcs.txt | 383 |
1 files changed, 0 insertions, 383 deletions
diff --git a/bits/bbdb-funcs.txt b/bits/bbdb-funcs.txt deleted file mode 100644 index 14a8180..0000000 --- a/bits/bbdb-funcs.txt +++ /dev/null @@ -1,383 +0,0 @@ -Navigation: Table of Contents, Index, next: .emacs file by Alex, prev: Emacs - -BBDB Elisp Code - -Overview: - - * Unmigrating from file format 4 - * Writing a .mailrc from BBDB - * Writing a Pine addressbook from BBDB, by Matt McClure - * Editing and formatting addresses with the country patch - o A new address editing function - o Adding a new formatting function - + The identifying function - + The formatting function - + Print formatting of addresses - -Unmigrating from file format 4 - -(defun bbdb-unmigrate-stuff (&optional new-version) - "Create a buffer with unmigrated BBDB data. -Usefull if you fooled around with BBDB file format 4 by Alex and want to -start using the official BBDB 2.00.06 again. In order to do that, you -have to save your .bbdb in BBDB file format 3 instead of the file format 4 -introduced by Alex. This function will create a *BBDB Version 3* buffer -for you, which you can examine and save as your new .bbdb. The unmigration -will strip the country fields of all entries in your BBDB as such a field -did not exist in the BBDB file format 3 used in BBDB 2.00.06." - (interactive "nUnmigrate to version (I recommend version 3): ") - (if (null new-version) - (setq new-version 3)) - (if (>= new-version bbdb-file-format) - (error "Current BBDB file format is version %d" bbdb-file-format) - (let* ((records (bbdb-records)) - (propnames (bbdb-with-db-buffer bbdb-propnames)) - (rec) - (bbdb-file-format-migration (cons bbdb-file-format new-version)) - (buf (get-buffer-create (format "*BBDB Version %d*" (cdr bbdb-file-format-migration))))) - (message "Unconverting the BBDB database...") - (set-buffer buf) - (erase-buffer) - (insert (format (concat ";;; file-version: %d\n" - ";;; user-fields: %S\n") - new-version (mapcar (function (lambda (x) (intern (car x)))) - propnames))) - (while records - (setq rec (copy-sequence (car records))) - (bbdb-unmigrate-record rec) - (aset rec 8 nil) - (insert (format "%S\n" rec)) - (setq records (cdr records))) - (pop-to-buffer buf) - (message "Unconverting the BBDB database...done")))) - -Writing a .mailrc from BBDB - -The following will export a very primitive version of your BBDB information -into a .mailrc file which is used for normal mail(1) and Emacs Rmail. - -Usually the main problem when exporting BBDB to other formats is the -creation of an ALIAS name. In my example below I just use LASTNAME. The -following function tries to write your BBDB into a .mailrc file, like this: - -alias LASTNAME "FULL_NAME <NETADDRESS>" - -mail-groups defined via the mail-alias field are not supported, but see Matt -McClure's code further down the page for an example on how to do this. - -I used the same code as bbdb-print for the file-name. Unfortunately this -very simple code must have a bug somewhere. It only occurs if you test it a -lot: When you are prompted for a file-name, "~/bbdb.tex" or "~/.mailrc" is -the default. Press RET. Sometimes this will find-file the correct file, and -sometimes you will overwrite your selected buffer instead. I haven't looked -into this, however. :( - -(defvar bbdb-mailrc-file-name ".mailrc" - "Filename to write mail aliases to.") - -(defun bbdb-write-mailrc (visible-records to-file) - (interactive (list (bbdb-do-all-records-p) - (read-file-name "Export To File: " bbdb-mailrc-file-name))) - (setq bbdb-mailrc-file-name (expand-file-name to-file)) - ;; `good' are people with netaddresses, `bad' are people without. The - ;; people are taken of the list records and put on either the good or - ;; the bad list. - (let ((good '()) (bad '()) - (records (if (not visible-records) - (bbdb-records) - (set-buffer bbdb-buffer-name) - (mapcar 'car bbdb-records)))) - ;; Open .mailrc file - (find-file bbdb-mailrc-file-name) - (widen) - (erase-buffer) - ;; Loop through records to print. - (while records - (if (bbdb-record-net (car records)) - (setq good (cons (car records) good)) - (setq bad (cons (car records) bad))) - (setq records (cdr records))) - ;; write all net-addresses into .mailrc - (insert (mapconcat (function (lambda (x) - (let ((name (bbdb-dwim-net-address x)) - (alias (bbdb-record-lastname x))) - (concat "alias " - alias - " \"" - (if (string-match "\"\\(.*\\)\"\\(.*\\)" name) - (format "%s%s" (match-string 1 name) - (match-string 2 name)) - name) - "\"")))) - (nreverse good) - "\n")) - ;; Mail groups - - ;; not implemented, yet - - ;; Feedback on the output quality. - (if bad - (message "There were %d people with bad or missing net addresses." - (length bad)) - (message "Done.")))) - -Writing a Pine addressbook from BBDB, by Matt McClure - -From: Matt McClure <matthew.mcclure.es.99@aya.yale.edu> -Subject: Re: conversion to pine addressbook? -Date: Wed, 25 Aug 1999 10:12:50 -0400 (EDT) - -It isn't pretty, but this will create a pine addressbook. -It also supports the mail-alias field (inefficiently, but it works). -I don't think it should be too difficult to modify to create mailrc -files instead. - -Thanks to Alex for the start. - -Matt - -;;;;; - -(defvar bbdb-mailrc-file-name "~/.addressbook" - "Filename to write mail aliases to.") - -(defun bbdb-write-dot-addressbook (to-file) - (interactive (list (read-file-name "Export To File: " "" nil nil bbdb-mailrc-file-name))) - (setq bbdb-mailrc-file-name (expand-file-name to-file)) - ;; `good' are people with netaddresses, `bad' are people without. The - ;; people are taken of the list records and put on either the good or - ;; the bad list. - (let ((good '()) (bad '()) - (records (bbdb-records)) - (grouped-good '()) (grouped-bad '()) - (grouped-records (bbdb-records)) - (mail-groups-alist '())) - ;; Open .mailrc file - (find-file bbdb-mailrc-file-name) - (widen) - (erase-buffer) - ;; Loop through records to print. - (while records - (if (bbdb-record-net (car records)) - (setq good (cons (car records) good)) - (setq bad (cons (car records) bad))) - (setq records (cdr records))) - ;; write all net-addresses into .mailrc - (insert (mapconcat - (function (lambda (x) - (let ((alias (concat (bbdb-record-firstname x) - " " - (bbdb-record-lastname x))) - (name (concat (bbdb-record-lastname x) - ", " - (bbdb-record-firstname x))) - (email (car (bbdb-record-net x))) - ) - (concat alias - "\t" - name - "\t" - email - ) - ))) - (nreverse good) - "\n")) - ;; Mail groups - ;; get the mail-aliases - (while grouped-records - (if (and - (bbdb-record-net (car grouped-records)) - (assoc 'mail-alias (bbdb-record-raw-notes (car grouped-records)))) - (setq grouped-good (cons (car grouped-records) grouped-good)) - (setq grouped-bad (cons (car grouped-records) grouped-bad))) - (setq grouped-records (cdr grouped-records))) - - (while grouped-good - (let ((aliases (split-string - (cdr (assoc 'mail-alias - (bbdb-record-raw-notes (car grouped-good)))) - "[, \f\t\n\r\v]+"))) - (while aliases - ;; store the name associated with alias somehow - (setq mail-groups-alist - (cons (cons (car aliases) - (concat "\"" - (bbdb-record-firstname (car grouped-good)) - " " - (bbdb-record-lastname (car grouped-good)) - "\"")) - mail-groups-alist)) - (setq aliases (cdr aliases)))) - (setq grouped-good (cdr grouped-good))) - - (setq mail-groups-alist (sort mail-groups-alist - (lambda (x y) - (string< (car x) (car y))))) - - ;; put each name from mail-groups-alist into the appropriate mail aliases - (setq assn '("" . "")) - (while mail-groups-alist - (let ((assn-new (car mail-groups-alist))) - (if (string= (car assn) "") - (insert (concat "\n" (car assn-new) "\t\t(")) - (if (not (string= (car assn) (car assn-new))) - (insert (concat ")\n" (car assn-new) "\t\t(")))) - (insert (concat (cdr assn-new) ",")) - (setq mail-groups-alist (cdr mail-groups-alist)) - (setq assn assn-new))) - - (if (not (string= (car assn) "")) - (insert ")\n")) - - ;; Feedback on the output quality. - (if bad - (message "There were %d people with bad or missing net addresses." - (length bad)) - (message "Done.")))) - -Editing and formatting addresses with the country patch - -If you are using my country patch to BBDB, you might want to use a different -address editing function or add new address formating functions. The -following shows you how to go about doing that. - -A new address editing function - -You can only have one active input function at the time. The name of the -active input function is stored in the variable -`bbdb-address-editing-function'. Therefore, you will have to write a new -address editing function and you will have to set -`bbdb-address-editing-function'. - -The easiest way to go about this, is using paste and copy: use -`bbdb-address-edit-default' as a starting point. - -(defun bbdb-address-edit-continental-german (addr) - "Function to use for address editing. -The sub-fields are queried using the continental order and using German -prompts. This is an alternate value for `bbdb-address-editing-function'. -It is used by German speaking users. - -The sub-fields and the prompts used are: -Strasse, Zeile 1: street1 -Strasse, Zeile 2: street2 -Strasse, Zeile 3: street3 -PLZ: zip -Stadt: city -Region/Staat: state -Land: country" - (let* ((st1 (bbdb-read-string "Strasse, Zeile 1: " (bbdb-address-street1 addr))) - (st2 (if (string= st1 "") "" - (bbdb-read-string "Strasse, Zeile 2: " (bbdb-address-street2 addr)))) - (st3 (if (string= st2 "") "" - (bbdb-read-string "Strasse, Zeile 3: " (bbdb-address-street3 addr)))) - (zip (bbdb-error-retry - (bbdb-parse-zip-string - (bbdb-read-string "PLZ: " (bbdb-address-zip-string addr))))) - (cty (bbdb-read-string "Stadt: " (bbdb-address-city addr))) - (ste (bbdb-read-string "Region/Staat: " (bbdb-address-state addr))) - (country (bbdb-read-string "Land: " (bbdb-address-country addr)))) - (bbdb-address-set-street1 addr st1) - (bbdb-address-set-street2 addr st2) - (bbdb-address-set-street3 addr st3) - (bbdb-address-set-city addr cty) - (bbdb-address-set-state addr ste) - (bbdb-address-set-zip addr zip) - (bbdb-address-set-country addr country) - nil)) -(setq bbdb-address-editing-function 'bbdb-address-edit-continental-german) - -Adding a new formatting function - -You will have to add a new entry to `bbdb-address-formatting-alist'. The new -entry must be a cons cell consisting of an identifying function and a -formatting function. - -I'll use a Japanese format as an example. Please note that I don't really -know how Japanese mail is formatted in Japan. The following reflects -international standards for mail from outside Japan being sent to a Japanese -address. - -First we'll start by adding the identifying function and the formatting -function to `bbdb-address-formatting-alist'. This will controll address -formatting in the *BBDB* buffer. - -(add-to-list 'bbdb-address-formatting-alist - '(bbdb-address-is-japanese . bbdb-format-address-japanese)) - -The identifying function - -The function can do any testing it likes with the address received. In this -case we just test for the country name "Japan". - -(defun bbdb-address-is-japanese (addr) - "Return non-nil if the address ADDR is a japanese address. - -This is a possible identifying function for -`bbdb-address-formatting-alist' and -`bbdb-address-print-formatting-alist'." - (and (string= (upcase (bbdb-address-country addr)) "JAPAN"))) - -The formatting function - -Another paste and copy event: use `bbdb-format-address-default' as a -starting point. - -(defun bbdb-format-address-japanese (addr) - "Insert formated Japanese address ADDR in current buffer. - -This is what it looks like: - location: street1 - street2 - street3 - city - state - zip country" - (insert (format " %14s: " (bbdb-address-location addr))) - (bbdb-format-streets addr) - (let ((c (bbdb-address-city addr)) - (s (bbdb-address-state addr)) - (z (bbdb-address-zip-string addr)) - (y (bbdb-address-country addr))) - (if (or (> (length c) 0) - (> (length s) 0) - (> (length z) 0) - (> (length y) 0)) - (progn - (if (> (length c) 0) - (progn - (indent-to 17) - (insert c "\n"))) - (if (> (length s) 0) - (progn - (indent-to 17) - (insert s "\n"))) - (if (or (> (length z) 0) - (> (length y) 0)) - (progn - (indent-to 17) - (if (> (length z) 0) - (insert z (if (> (length y) 0) " " ""))) - (if (> (length y) 0) - (insert y)) - (insert "\n" ""))))))) - -Print formatting of addresses - -This works just like the example above. Instead of adding the identifying -and formatting functions to `bbdb-address-formatting-alist', you add the two -functions to `bbdb-address-print-formatting-alist'. You can use the same -identifying function that you used in `bbdb-address-formatting-alist'. The -only thing you will have to code up is a print formatting function. It will -be very similar to the normal formatting function. Use -`bbdb-print-format-address-default' as a starting point. The details are -left as an exercise to the reader. ----------------------------------------------------------------------------- - -Navigation: Top, Table of Contents, Index, next: .emacs file by Alex, prev: -Emacs ----------------------------------------------------------------------------- -http://hammer.prohosting.com/~gumbart/bbdb-funcs.html / Alex Schroeder -<a.schroeder@bsiag.ch> / updated: 2000-03-10 / significant changes: -2000-02-11 ----------------------------------------------------------------------------- |