BBDB Filters and Processors
BBDB Filters and Processors.
Document Number: | PLPC-110402 [ .bib ] |
Version: | 0.51 |
Dated: | December 18, 2007 |
Group: | BLEOE |
Primary URL: | http://www.neda.com/PLPC/110402 |
Federated Publications: | ByTopic -- ByContent |
AccessPage Revision: | This AccessPage was produced on February 20, 2018 at 10:41 PST (-0800) |
Author(s): | Mohsen BANAN |
Organization: | Neda Communications, Inc |
AVAILABLE FORMATS
- PDF: -- 116K -- Provides the document in Portable Document Format.
- HTML: -- 212K -- Displays the document as a web page.
AVAILABLE OTHER FORMS
- bbdb-filters-0.51.tar: -- 240K -- .
SHORT
DESCRIPTION
BBDB Filters is a collection of tools that enhances BBDB and further integrates it with the email system, latex, hylafax, PDAs, etc.
Version 0.51
December 18, 2007
http://www.neda.com/PLPC/110402
Copyright ©2014 Mohsen BANAN
Permission is granted to make and distribute complete (not partial)
verbatim copies of this document provided that the copyright notice
and this permission notice are preserved on all copies.
Contents
- 1 Introduction
- 2 Setup
- 3 Output Filters
- 3.1 Microsoft Schedule+ and Windows CE Contacts
- 3.2 Netscape Address Book (Version 4.x) and Windows NT
- 3.3 Netscape Address Book (Version 6) and Windows NT
- 3.4 Palm Pilot
- 3.5 PC Eudora
- 3.6 Lotus cc:Mail Nicknames
- 3.7 PH
- 3.8 Export and Import BBDB Entries
- 3.9 HP 200LX Phone Book
- 3.10 BBDB and TeX Output
- 4 Input Filters
- 5 Action Processors
- 6 Group Processors
- 7 Examples
- 8 Miscellany
- A GNU LIBRARY GENERAL PUBLIC LICENSE
1 Introduction
Over time much valuable data has been gathered in BBDB database files. Many wish to share parts or all of this information with others. They also wish to have access to this same information from other systems (like personal digital assistants) lacking straightforward BBDB access.
For these reasons, we have prepared a family of filters that convert the information in BBDB to and from a variety of other formats. We have put in place some general frameworks to accomplish a set of common functions. These include:
- Output filters:
- export BBDB information to other formats. Section 3 describes the general framework for output filters and currently supported filters.
- Input filters:
- import information from other formats into BBDB. Section 4 describes the general framework for input filters and currently supported filters.
- Action Processors:
- Apply extendible functions to a set of selected BBDB entries. Section 5 describes the general framework for action processors and currently processors.
- Group Processors:
- Tools to allow selection of subsets of BBDB entries and manipulation of such entries. Section 6 describes the general framework for group processors and currently supported processors.
The combination of above features allows for extremly powerful results.
Our hope is that over time this collection of BBDB filters will grow through contributed code.
1.1 About This Package
This package is a collection of filters and is called “BBDB Filters & Processors”. It has been somewhat tested with BBDB version 1.50. The present state of the software is still preliminary although it has proved useful.
1.2 About This Manual
This documentation applies to Version 0.3 of the “BBDB Filters & Processors” package. The documentation is presently skeletal and very preliminary. It mostly provides the user with instructions for use, and very little background is included. Familiarity with Emacs Lisp is assumed for some sections.
1.3 The Big Picture
2 Setup
2.1 Installation
To install the binaries, just edit the makefile and run “make install”.
Description of files in the distribution:
- COPYING.LIB:
- The GNU Library General Public License document.
- README:
- read this file before starting the installation.
- bbdb-a-msend-example.el:
- an example of msend-xxx elisp functions to form the subject and include attachements (pdf, gif, ...) in the e-mail.
- bbdb-a-tex-example.el:
- an example for generating a TeX file (could be in the form of letter, memo, article, book, etc.)
- bbdb-action-extension.el:
- define the key map for BBDB action extension.
- bbdb-action-lib.el:
- define an extension to a filename.
- bbdb-append.el:
- elisp functions to append all entries in the *BBDB* buffer matching the regexp STRING in any fields.
- bbdb-ccmail.el:
- an output filters to export all entries in the *BBDB* buffer into CCMail format.
- bbdb-eudora.el:
- an output filters to export all entries in the *BBDB* buffer into Eudora format.
- bbdb-export.el:
- elisp function to export the selected BBDB entries.
- bbdb-filters-load.el:
- loading all necessary file automatically in order to use the “BBDB Filters & Processors” package.
- bbdb-group.el:
- elisp function to generate a group names.
- bbdb-hp200lx.el:
- an output filters to export all entries in the *BBDB* buffer into HP200 LX handheld PC.
- bbdb-nsmail.el:
- an output filters to export all entries in the *BBDB* buffer into Netscape (version 4.x) address book format.
- bbdb-netscape6.el:
- an output filters to export all entries in the *BBDB* buffer into Netscape (version 6) address book format.
- bbdb-outlook97.el:
- an output filters to export all entries in the *BBDB* buffer into Microsoft Outlook 97 format.
- bbdb-palmpilot.el:
- an output filters to export all entries in the *BBDB* buffer into Palm Pilot format.
- bbdb-passwd.el:
- coverts passwd files to the canonical bbdb input filters format.
- bbdb-ph.el:
- generate an output of the *BBDB* buffer in PH tab-delimited-file (.CDF) format.
- bbdb-pine.el:
- an output filters to export all entries in the *BBDB* buffer into PINE format.
- bbdb-schdplus.el:
- an output filters to export all entries in the *BBDB* buffer into Microsoft Schedule+ format.
- bbdb-tex-lib:
- insert BBDB field (i.e. first name, last name addrss, phone number, etc.) in the generated TeX file.
- tex-fax-cover.el:
- produces a fax cover in TeX file which automatically insert the originator’s information and recipient’s information from the *BBDB* buffer entries.
- tex-letter.el:
- produces a letter style in TeX file which automatically insert the originator’s information and recipient’s information from the *BBDB* buffer entries.
- tex-memo.el:
- produces a memo style in TeX file which automatically insert the originator’s information and recipient’s information from the *BBDB* buffer entries.
- tex-envelope.el:
- produces an envelope in TeX file which automatically insert the originator’s information and recipient’s information from the *BBDB* buffer entries.
- originator-prefs.el:
- consists of originator’s preferences which will be used for creating letter, memo, envelope or fax cover.
- comRecs.el:
- creates a new communication record notes for a specific person from *BBDB* buffer or visit an existing one.
- insert-fpath:
- insert a message/text from a file.
- makefile:
- the setup file.
2.2 Configuration
After running the “make install”, go to directory where the binaries were installed and edit the “bbdb-filters-load.el” file so that the output of the BBDB filters will be saved in the directory that you specified (i.e. the default derectory for Eudora output is in /dos/m/eudora.mai/).
When you are done, load the “bbdb-filter-load” file (M-x load-file bbdb-filter-load).
2.3 Customizing It
For e-mail merge and TeX merge customization, see bbdb-a-msend-example.el and bbdb-a-tex-example.el.
The originator-prefs.el is used to set the user’s preferences. For more details, see Section 5.2.
3 Output Filters
“Output filters” are used to export BBDB information into formats used by other systems.
In general, an output filter uses the contents of your *BBDB* buffer as input. Note that output filters do not use BBDB files (typically ‘ /.bbdb’) directly.
An output filter is invoked by executing its associated lisp function. The name of the function is conventionally named bbdb-output-<system> (e.g., M-x bbdb-output-hp200lx).
The result of running an output filter is to create a new buffer that contains the *BBDB* information appropriately transformed into a format suitable for use by the target system. The new buffer is given a file name that you specify.
3.1 Microsoft Schedule+ and Windows CE Contacts
3.1.1 Microsoft Schedule+ and Windows CE 1.0
This output filter package has only been tested with the Microsoft Schedule+ version 7.0a software and Windows CE Version 1.0. The software is in file bbdb-schdplus.el.
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to export.
- Invoke M-x bbdb-output-schdplus to create an ASCII .CSV (Comma Separated Values) BBDB export file.
- Start Microsoft Schedule+ program. Use the File->Import->Text... menu item to import the exported BBDB entries into Schdeule+. Follow the screens and select “contacts” format. The text import wizard may ask you to specify the mapping between the fields in the BBDB export file and those used by Schedule+. Simply specify fields of the same name. (e.g., “Business City” maps to “Businesss City”).
- To use this exported information with Windows CE, you must down
download it to your HPC using the HPC Explorer application. On the
host computer start the HPC Explorer application. Use
Tools->Synchronize now to initiate the transfer.
If the menu item is grayed out you should use bring up the Tools->Synchronization Manager... dialog and check the box for “Enable Appointment, Contact and Task Synchronization”. Leave unchecked the box for “Automatically synchronize upon connecting”.
3.1.2 Microsoft Schedule+ and Windows CE 2.0
This output filter package has been tested with Microsoft Schedule+ version 7.0a (this program is part of Microsoft Outlook) and Windows CE version 2.0. The software is in file bbdb-schdplus.el. Here are the steps to import the bbdb list into the Windows CE device:
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to export.
- Invoke M-x bbdb-output-schdplus to create an ASCII .CSV (Comma Separated Values) BBDB export file. It will automatically ask you to save bbdb-schdplus.csv file. Just accept the default file name but you may want to specify your own location of the file.
- In your Windows machine, open the Microsoft Outlook program.
- Click on File menu and then click on Import & Export.
- Click om Import from Schedule+ or another program or file and then click Next.
- Choose the Comma Separated Values (DOS) and then click Next.
- Locate the file to be imported (the bbdb-schdplus.csv) and then click Next.
- Select the Contacts as the destination folder and then click Next.
3.2 Netscape Address Book (Version 4.x) and Windows NT
This output filter package has only been tested with the Netscape Communicator 4.72 and Windows NT OS. The software is in file bbdb-nsmail.el.
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to export.
- Invoke M-x bbdb-output-nsmail to create an HTML file.
- You will be prompted to save the HTML file to a file. The
default is
~/.netscape/address-book.bbdb.html
. To accept the default, just press enter. - After you created the HTML file, open the Netscape Communicator on your Windows NT machine and then click on the “Communicator –> Address Book”.
- You suppose to be in the Address Book window. In the Address Book window, click on File –> New Address Book. You’ll be prompted to create a new Address Book name. Type in the address book name that you want to import to Netscape address book.
- Under the Directory column, you’ll see the Address Book that you just created. Click on that new address book name. Right now, it should be empty.
- Click on File –> Import –> Communicator Address Book, and then click Next. Under “Files of type”, select the HTML Files and then locate the HTML files that you created from the BBDB (i.e. address-book.bbdb.html), adn then click Open. It shuld automatically put the imported HTML files in your address book.
3.3 Netscape Address Book (Version 6) and Windows NT
This output filter package has only been tested with the Netscape Communicator 6 and Windows NT OS. The software is in file bbdb-netscape6.el.
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to export.
- Invoke M-x bbdb-output-netscape6 to create CSV file.
- You will be prompted to save the CSV file to a file. The
default is
~/bbdb-netscape6.csv
. To accept the default, just press enter. This name will be the name of your Netscape 6 Address Book. - After you created the CSV file, open the Netscap 6 on your Windows NT machine and then click on the “Task –> Address Book”.
- You suppose to be in the Address Book window. In the Address Book window, click on File –> Import. The type of materila to import: Address Book. Next.
- Click on Text, then Next
- Select the CSV file that you just created, then click Next. Then just click OK.
3.4 Palm Pilot
The software is in file bbdb-palmpilot.el. Here are the steps to import the bbdb list into the Windows CE device:
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to export.
- Invoke M-x bbdb-output-palmpilot to create an ASCII .CSV (Comma Separated Values) BBDB export file. It will automatically ask you to save bbdb-palmpilot.csv file. Just accept the default file name but you may want to specify your own location of the file.
- The rest of the steps will be documented later (as of 001106)
3.5 PC Eudora
BBDB information can be exported to PC Eudora in two formats–as a nickname database file and as a recipients database file.
The PC Eudora output filter is in file bbdb-eudora.el.
3.5.1 PC Eudora Nickname Database
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to export.
- Invoke bbdb-output-eudora-nndbase to create a PC Eudora Nickname database file.
- Make the file accessible to PC Eudora.
3.5.2 PC Eudora Recipient Database
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to export.
- Invoke bbdb-output-eudora-rcpdbase to create a PC Eudora recipient’s database file.
- Make the file accessible to PC Eudora.
3.6 Lotus cc:Mail Nicknames
The Lotus cc:Mail output filter is in file bbdb-ccmail.el.
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to export.
- Invoke bbdb-output-ccmail to create a cc:Mail Nicknames file.
- Make the file accessible to cc:Mail.
3.7 PH
The PH output filter is in file bbdb-ph.el.
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to export.
- Invoke bbdb-output-ph to create a ph data file for use with the maked program.
- Make the file accessible to ph.
3.8 Export and Import BBDB Entries
3.8.1 Emacs Lisp Export Through E-mail
The Emacs Lisp Export output filter is in file bbdb-export.el.
This output filter uses the current contents of your *BBDB* buffer to generate a new buffer (*BBDB* Export) that contains a single lisp (progn ...) expression. For example, a *BBDB* buffer containing two records would result in the following *BBDB* Export buffer:
;;; ======= Start of Exported BBDB Records ======= (progn (require 'bbdb-com) (defun bbdb-maybe-create (name company net &optional addrs phones notes) "Try to add a record to BBDB if it does not already exist." (condition-case err (progn (bbdb-create-internal name company net addrs phones notes) (message "%s %s added." name (if net (concat "<" net ">") "")) (sleep-for 1)) (error (ding) (message "%s %s skipped. (%s)" name (if net (concat "<" net ">") "") (car (cdr err))) (sleep-for 1)))) (bbdb-maybe-create "Jill Doe--IMPORTED" "CBS Corporation" '("jilld@cbs.com") '( ["Home" "368 222ND PL" "" "" "Springfield" "MA" 2117] ) '( ["Office" 617 555 9983 0] ) '"Movie Mogul") (bbdb-maybe-create "John Doe--IMPORTED" "ABC Incorporated" '("jdoe@abc.com") '( ["Office" "123 Any Street" "" "" "Any Town" "WA" (98027 7758)] ) '( ["Office" 206 555 1234 0] ) '"TV Producer") ) ;;; ======= End of Exported BBDB Records =======
This lisp expression can then be sent via email or some other text-based messaging facility to another user who can then evaluate the expression which will add the BBDB records to the recipient’s BBDB database.
Only new records are added. A record with the same name or net address as one already existing in the BBDB is skipped entirely.
In the sample contents of a *BBDB* Export buffer presented, two records are being exported–one for “John Doe” and the other for “Jill Doe”. Notice that their names have been appended with –IMPORTED. This string can be used to quick locate each record that is added to the database using this mechanism.
The following steps are for exporting BBDB records into Emacs Lisp:
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to export.
- Invoke bbdb-export to create a *BBDB* Export buffer which contains a single (progn ...) can be evaluated to add the records to the existing BBDB database (if the records do not already exist).
- Use the contents of *BBDB* Export in email and other messaging systems.
The following steps are for a user wishing to import the contents of a *BBDB* Export buffer’s expression into his or her own database:
- Evaluate the region bounded by the lines
;;; ======= Start of Exported BBDB Records =======
and
;;; ======= End of Exported BBDB Records =======.
You can use such commands as M-x eval-region or M-x eval-last-sexp. - Review the newly imported entries. To see them, invoke M-x bbdb and specify –IMPORTED at the Regular Expression prompt.
- After reviewing the contents of the imported records, you may wish to remove the –IMPORTED that is appended to the name by bbdb-export.
3.9 HP 200LX Phone Book
This package has only been tested on HP 200LX palmtop systems. It also requires the “HP 200LX Connectivity Pack” for converting comma-delimited ASCII files into binary .PDB files which are read by the HP 200LX Phone Book application. Version 1.00 of the “HP 200LX Connectivty Pack” was used for testing.
The HP 200LX output filter is in file bbdb-hp200lx.el.
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to export.
- Invoke bbdb-output-hp200lx to create an ASCII .CDF (Comma Delimited File).
- Using Xlate/Merge option of HP Connectivity Pack convert the .CDF file into a binary .PDB file used by the Phone Book program.
- Download the .PDB file to your palmtop’s internal disk and ensure that the Phone Book program is set use the newly downloaded .PDB file.
3.10 BBDB and TeX Output
You can use BBDB entries to create a TeX file in different style (letter, fax, memo, envelope). The recipient information are inserted directly ito the output from *BBDB* buffer. As for the originator/sender information, you can customize it to be whatever you want (seee Section 5.2).
The default for originator’s info is in originator-prefs.el. The default directory for this file is in /bbdbGens. Copy this file to the default directory or you may change the directory to wherever you want. To change the default directory, you need to change the originator-tex-bbdb-dir which is located in the bbdb-filters-load.el.
You may also want to change the output directory, bbdb-a-output-file, to wherever you want (this variable is located at originator-prefs.el). Currently, this originator-prefs.el is used by tex-fax-cover.el, tex-letter.el, tex-memo.el, and tex-envelope.el.
To overwrite the originator’s default values, create another originator-prefs (i.e. originator-prefs-template.el) and load this file.
3.10.1 General Usage of TeX Output Filters
The following steps are for exporting BBDB records into Emacs Lisp:
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to export.
- To overwrite the default sender’s information, load the originator-prefs-template.el (or any other originator-prefs).
- Put the cursor anywhere around the person’s name that you want
to write a memo/letter/fax/envelope to and then press
x
or*x
. - You will be prompted for “Type of action:”. To see any available actions, just hit the Tab key and you’ll see a list of actions.
- Invoke tex-fax-cover, tex-letter, tex-memo, tex-envelope-legal (for legal size envelope (#10 envelope)), tex-envelope-7x5 (for 7x5 size envelope). If there are multiple phones, BBDB will prompt you to select.
- The output buffer will write-file to the specified output directory (the default is specified in originator-prefs.el – bbdb-a-output-file and is set to /bbdbGens/texOutputFiles)
- Save the output file and run latex.
4 Input Filters
“Input filters” are used to import into BBDB information from a foreign system’s data file.
The name of the function is conventionally named bbdb-input-<system> (e.g., bbdb-input-passwd is the name of the Emacs Lisp function for the UNIX password file input filter).
In general, an “input filter” expects the foreign system’s data to be in the current buffer. The contents of the current buffer are used to create an Emacs Lisp file which when loaded will add new records into your BBDB database if they don’t yet exist–existing BBDB records will not be modified.
4.1 General Facilities for Input Filtering
The result of running an input filter is to produce a new buffer a series of bif-create-record expressions, each corresponding to a single user’s record. Notice that input filters do not directly modify the contents of the BBDB files (typically ‘ /.bbdb’).
To actually modify the contents of the BBDB database, you must evaluated the expressions in the resultant buffer created by the input filter. One way to do so is simply to invoke M-x eval-buffer. Another way is to simply save the buffer to disk and load its contents into Emacs Lisp using M-x load-file.
4.2 UNIX Password Files
The UNIX password file input filter is in file bbdb-passwd.el.
- Use M-x find-file to visit the UNIX password file you wish to import.
- With the password file in the current buffer, invoke the input filter M-x bbdb-input-passwd. You will be prompted for the domain name associated with that host’s password file; an organization name; as well as the file name to be associated with the buffer of bif-create-record expressions.
- Evaluate the contents of the input filter’s buffer to add records into your BBDB database file.
5 Action Processors
- Invoke M-x bbdb to populate the *BBDB* buffer with the name you want to generate.
- Put the cursor anywhere around the person’s name that you want
to write a memo to and then press
x
or*x
. - You will be prompted for “Type of action:”. To see any available actions, just hit the Tab key and you’ll see a list of actions.
- Conventions for generating an email to each recepient is "msend-xxx".
Conventions for generating an email to all recepient is "mall-xxx".
Convention for generating a TeX file (letter, memo, fax, ...) is
"tex-memo-xxx".
See 7 for detail.
5.1 E-Mail Actions
Automating the process of enclosing generalized information as in-line text to as attachemnts is very useful. Then marrying that ability with BBDB action processors and group processors creates a full set of very powerful information distribution tools.
By convention the names for creation of such families of information distribution tools is as follows:
- insertable text:
- Just a tex file that can be inserted in any email through moded-insert.
- minc-xxx:
- elisp functions to add attachements.
- msend-xxx:
- msend-xxx elisp functions to form the subject and include attachements (pdf, gif, ...). You then need to complete it by add supplying the To line.
- bbdb-msend-xxx:
- bbdb-msend-xxx elisp functions and M-x x msend-xxx bbdb action for use through a BBDB buffer to send to each entry in bbdb buffer. Makes thing individual and personal. You then need to finalize the send.
- bbdb-mbatch-xxx:
- bbdb-msend-xxx elisp functions and M-x x msend-xxx bbdb action for use through a BBDB buffer to send to each entry in bbdb buffer. You then need NOT to finalize the send – they just go out. Be careful when using the mbatch feature.
- bbdb-mall-xxx:
- elisp functions and M-x x mall-xxx bbdb action. You need to finalize. Make things group oriented.
- bbdb-mallbatch-xxx:
- elisp functions and M-x x mall-xxx bbdb action. You need NOT to finalize. Make things group oriented. Be careful when using the mbatch feature.
5.2 Originator’s Preferences
The originator-prefs.el file is used to load the sender’s default information such as name address, e-mail, etc. Mostly these information are being used to setup the header for letter, memo, and fax cover as well as the return address for the envelope.
You may want to have several originator-prefs file so that you’ll be able to have different letter head. This is done by overwrite the values of the default information. Included in this package is originator-prefs-template.el, whic is an example of how you overwrite the default values by loading this file.
5.3 TeX Actions
This feature can create different kind of TeX file. For example, it can create a memo, a letter, an article, etc.
5.3.1 tex-letter
This feature produces a LaTeX file for the letter. The originator’s letter head are set in the originator-prefs.el. This function is intended to be used with bbdb. The recipient’s information will automatically inserted from the bbdb record.
For more information on how to use this feature, see Section 3.10.1.
5.3.2 tex-memo
This feature is almost the same as tex-letter except it produces different LaTeX style document.
5.3.3 tex-envelope
When writing a letter or memo, you may also want to print the envelope that goes with it.
This code is modified from the original sources written by J. Daniel Smith in 1990 (the make-env.tex, lettermac.tex and zip.tex).
At this moment, there are 2 differnt sizes of envelopes, the legal size (known as #10 envelope) and 7x5 size envelope.
For more information on how to use this feature, see Section 3.10.1 and 7.2.1.
5.3.4 tex-fax-cover
This feature functions almost the same as tex-letter except it produces different LaTeX style document. It produces a LaTeX file for used to send a fax cover with sender and recipient’s information automatically inserted.
For more information on how to use this feature, see Section 3.10.1
5.4 comRecs-create
5.4.1 comRecs-this-create
This function creates a new communication record note. When you are invoking this feature, a new directory is created and it will match with the person’s name (which is indicated in the comrec field) from the *BBDB* buffer and the notes will be saved with a specific date.
The following steps are for creating the comRec for Mary Doe:
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to export (i.e. Mary Doe).
- Put the cursor anywhere around the person’s name and then
press
x
. - You will be prompted for “Type of action:” and then type in “comRecs-this-create”.
- The output buffer will write-file to the specified output directory (i.e. /bbdbGens/comRecs/Doe/010405112311.notes)
- Save the output file.
5.4.2 comRecs-group-create
This function creates a new communication record note. When you are invoking this feature, a new directory is created and it will match with the group projects’s name (which is indicated in the comrec field) from the *BBDB* buffer and the notes will be saved with a specific date.
Assume that the comrec field exists (i.e. comrec: 2001-project). The following steps are for creating the 2001-project comRec for Mary Doe:
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to export (i.e. Mary Doe).
- Put the cursor anywhere around the person’s name and then
press
x
. - You will be prompted for “Type of action:” and then type in “comRecs-group-create”.
- The output buffer will write-file to the specified output directory (i.e. /bbdbGens/comRecs/2001-project/010405112311.notes)
- Save the output file.
5.5 comRecs-visit
This function will visit an existing comRecs note which is previously created using the comRecs-create function.
When somebody invoking the comRecs-visit, the function will check whether the comrec field exist inside the *BBDB* record. If the comrec field exist, the function will execute the comRecs-group-visit (see Section 5.5.2). If the comrec field doesn’t exist, the comRecs-this-visit (see Section 5.5.1) will be executed instead.
NOTE: as of 04/23/2001 this feature has not been implemented but comRecs-group- and comRecs-this will do the job.
5.5.1 comRecs-this-visit
This function visits the existing communication record note. When you are invoking this feature, it will open the directory that match with the person’s lastname from the *BBDB* buffer and will display all of the existing notes.
The following steps are for visiting an individual comRec of Mary Doe:
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to export (i.e. Mary Doe).
- Put the cursor anywhere around the person’s name and then
press
x
. - You will be prompted for “Type of action:” and then type in “comRecs-this-visit”.
- A message “Visit File To: /bbdbGens/comRecs/Doe/” will appear and you can select the specific note that you want to visit.
5.5.2 comRecs-group-visit
This function visits the existing communication record note. When you are invoking this feature, it will open the directory that match with the group projects’s name (which is indicated in the comrec field) from the *BBDB* buffer and will display all of the existing notes.
The following steps are for visiting the group comRec (i.e. comrec: 2001-project) of Mary Doe:
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to export (i.e. Mary Doe).
- Put the cursor anywhere around the person’s name and then
press
x
. - You will be prompted for “Type of action:” and then type in “comRecs-group-visit”.
- A message “Visit File To: /bbdbGens/comRecs/2001-project/” will appear and you can select the specific note that you want to visit.
6 Group Processors
6.1 Group Names Generation
The script generate a list of people’s name in the BBDB buffer. This feature is useful to generate a list of names and group them accordingly. For example, you can create a group of people in your family, your circle-of-friend group, your business-people group, etc.
- Invoke M-x bbdb to populate the *BBDB* buffer with the contents you wish to generate.
- Put the cursor at the person’s name and type
x
(this will only generate that person name only). To generate the whole content of your *BBDB* buffer, type* x
(this will generate a list of people’s name of your *BBDB* buffer. - You’ll be prompted for an “Action To Apply”. Type in
group-names-gen
and press enter. - You’ll be prompted for a file name to save. The default name
is
group.names
. To accept this default, press enter, otherwise type in your own filename and press enter.
6.2 Using bbdb-group feature for the Names Generation File
Once you generate the list of names, you can append one or all of the names in the list for their complete information. There are 4 bbdb-group command available:
- bbdb-group-append
- bbdb-group-blank
- bbdb-group-input
- bbdb-group-process-line
-
First of all, you need to open the
group.names
file that you just create in previous section. - To append just a name, put the cursor at the beginning of that
person’s name and type in
M-x bbdb-group-process
. As a result, a *BBDB* buffer will be created and the person’s information that ypu requested will appear. If you runM-x bbdb-group-process-line
for the next person in the list, the *BBDB* buffer will add that person to the buffer. - To automatically append the whole name in the list, use
M-x bbdb-group-append
command. - The
M-x bbdb-group-blank
just create a blank *BBDB* buffer. - The
M-x bbdb-group-input
act the same way asM-x bbdb-group-append
.
7 Examples
The following examples which are intended to be used as a starting point for customization provide a set of conventions that have proven useful.
7.1 TeX Actions
Processing customizable letters and envelops with mail merge features is quite easy as an extension of the action processor filters.
7.1.1 TeX Letter
By convention the action name for tex actions is:
tex-style-content-from
style: says which style (letter, fax, ...)
content: says what the content is.
from: says what the letter head should look like.
Here is the example:
-
Invoke
M-x bbdb
to populate the *BBDB* buffer with the contents you wish to generate. - Place the cursor at the person’s name which you want to send the letter to and hit ’x’. Action To Apply: tex-letter-filtersAnnounce-neda.
- Write to file: /tmp/filename.tex
- Build the tex file with the latexmake command (e.g. latexmake filename.ps).
7.2 Mailing Labels/Envelope
7.2.1 TeX Envelope
After the TeX file is created (by invoking the tex-envelope), build it
by running the command texmake xxx-envelope.pdf
. Open the pdf
format of xxx-envelope.pdf.
The printing of this pdf file has only been tested using the Lexmark 4039 Laser printer only. When trying to print, mark it as “Print as image”. Here are the options that were used when testing the print out:
Print as image Printer Properties: Paper Source: Envelope Feeder Paper Size: Envelope #10
7.2.2 MS Word Mail Merge
You can create a batch of mailing labels or envelopes using the .cvs
file tha you created from inviking M-x bbdb-output-scdplus
with
Microsoft Word.
- Open the MS Word and open the new file (blank doc). Click on Tools–>Mail Merge.
- Under the Main Document, click Create and then choose the avilable type (Mailing Labels or Envelopes).
- Under Get Data, click on Open Data Source and then choose the .cvs file.
- Under Create Labels, choose Insert Merge Field that you want to appear on the envelope.
- Click on Merge.
8 Miscellany
8.1 TODO List
- Move generic input filter functionality out of bbdb-passwd.el and into, say, bbdb-ifilt.el. The generic functionality code has names typically prefixed with bif-.
- Add support for gdbload (as an alternative to the Xlate/Merge application provided in the HP 200LX Connectivity Pack) into the HP 200LX output filter. This is based on input from Robert Nicholson <robert@steffi.dircon.co.uk>.
- Add documentation for variables in the various input and output filters.
- Check and document all dependencies on other packages.
- For the originator-prefs.el, the originator’s information can be extracted from the system For example usind
id
will give you who is the user name and id. Usinggrep username /etc/passwd
will tell the username’s full name and usingM-x describe-variable user-mail-address
8.2 Credits
Pean Lim <pean@neda.com> wrote most of this package. Mohsen
Banan <http://mohsen.banan.1.byname.net/ContactMe> put it all together and guided the
work. Pinneke Tjandana <pinneke@neda.com> expanded and edited some of the lisp code and this manual. Neda Communications, Inc. sponsored the work. The output
filters code is based on bbdb-print by Boris Goldowsky
<boris@prodigal.psych.rochester.edu>.
Ţhis LGPL is meant to be included from other files. Ţo format a standalone LGPL, use liblic.texi.
A GNU LIBRARY GENERAL PUBLIC LICENSE
Copyright opyright 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
[This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.]
Preamble
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software—to make sure the software is free for all its users.
This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it.
For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights.
Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library.
Also, for each distributor’s protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors’ reputations.
Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone’s free use or not licensed at all.
Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don’t assume that anything in it is the same as in the ordinary license.
The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such.
Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better.
However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries.
The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a “work based on the library” and a “work that uses the library”. The former contains code derived from the library, while the latter only works together with the library.
Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one.
-
This License Agreement applies to any software library which
contains a notice placed by the copyright holder or other authorized
party saying it may be distributed under the terms of this Library
General Public License (also called “this License”). Each licensee is
addressed as “you”.
A “library” means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.
The “Library”, below, refers to any such software library or work which has been distributed under these terms. A “work based on the Library” means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term “modification”.)
“Source code” for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.
Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.
- You may copy and distribute verbatim copies of the Library’s
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
- You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
- The modified work must itself be a software library.
- You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.
- You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.
- If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.)
These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library.
In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
- You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of the Library into a program that is not a library.
- You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code.
- A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a “work that uses the Library”. Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a “work that uses the Library” with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a “work that uses the library”. The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.
When a “work that uses the Library” uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.
- As an exception to the Sections above, you may also compile or
link a “work that uses the Library” with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer’s own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:
- Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable “work that uses the Library”, as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)
- Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.
- If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.
- Verify that the user has already received a copy of these materials or that you have already sent this user a copy.
For an executable, the required form of the “work that uses the Library” must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute.
- You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
- Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above.
- Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
- You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
- You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.
- Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients’ exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
- If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
- If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
- The Free Software Foundation may publish revised and/or new
versions of the Library General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and “any later version”, you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.
- If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.NO WARRANTY
- BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License).
To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.
one line to give the library’s name and an idea of what it does. Copyright (C) year name of author
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This library 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 Library General Public License for more details.
You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your school, if any, to sign a “copyright disclaimer” for the library, if necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the library ‘Frob’ (a library for tweaking knobs) written by James Random Hacker.
signature of Ty Coon, 1 April 1990 Ty Coon, President of Vice
That’s all there is to it!
References