summaryrefslogtreecommitdiff
path: root/html
diff options
context:
space:
mode:
authorRonan Waide <waider@waider.ie>2000-05-01 22:39:03 +0000
committerRonan Waide <waider@waider.ie>2000-05-01 22:39:03 +0000
commit6e36601186ee4231be705116651c59ebb1cf3d98 (patch)
tree30617e302e8a8711bf5c79b495cdc8380a3350bd /html
parentcfd0dd8fe240fbb2727f9ee4e7b1ca4be61c3162 (diff)
Initial checkin
Diffstat (limited to 'html')
-rw-r--r--html/bbdb.html6045
-rw-r--r--html/images/bbi.gifbin0 -> 1324 bytes
-rw-r--r--html/images/headleft.gifbin0 -> 197 bytes
-rw-r--r--html/images/headright.gifbin0 -> 199 bytes
-rw-r--r--html/index.html239
-rw-r--r--html/patches/bbdb-print.patch27
-rw-r--r--html/patches/multi-record.patch1493
7 files changed, 7804 insertions, 0 deletions
diff --git a/html/bbdb.html b/html/bbdb.html
new file mode 100644
index 0000000..f029f79
--- /dev/null
+++ b/html/bbdb.html
@@ -0,0 +1,6045 @@
+<A NAME="SEC1"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H1> 1. BBDB </H1>
+<!--docid::SEC1::-->
+<P>
+
+<B>BBDB</B> is a rolodex-like database program for GNU Emacs. <B>BBDB</B> stands
+for <B><I>Insidious Big Brother Database</I></B>, and is not, repeat, <EM>not</EM> an
+obscure reference to the Buck Rogers TV series.
+</P><P>
+
+It provides the following features:
+</P><P>
+
+
+<UL>
+<LI>
+
+Integration with mail and news readers, with little or no
+interaction by the user: <P>
+
+
+<UL>
+<LI>
+
+easy (or automatic) display of the record corresponding to the sender of
+the current message; <P>
+
+<LI>
+
+automatic creation of records based on the contents of the current
+message; <P>
+
+<LI>
+
+automatic addition of data to arbitrary fields of the record
+corresponding to the sender of the current message. </UL>
+
+<LI>
+
+Listing all records which match a regular expression;
+<P>
+
+<LI>
+
+Listing all records which match a regular expression in a particular
+field (<SAMP>`company'</SAMP> or <SAMP>`notes,'</SAMP> for example); </UL>
+
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC2">Installation</A></TD><TD ALIGN="left">Installation</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC16">The BBDB</A></TD><TD ALIGN="left">Overview</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC21">BBDB Mode</A></TD><TD ALIGN="left">BBDB Mode</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC24">Interfaces</A></TD><TD ALIGN="left">Interfaces to various readers</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC28">Reader-specific Features</A></TD><TD ALIGN="left">Features only available to specific readers</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC35">Other Packages</A></TD><TD ALIGN="left">Using the BBDB with other packages</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC40">Options</A></TD><TD ALIGN="left">Options</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC44">Utilities</A></TD><TD ALIGN="left">Utilities</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC49">Internals</A></TD><TD ALIGN="left">BBDB Internals</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC57">Mailing Lists</A></TD><TD ALIGN="left">The BBDB mailing lists</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC58">Changes</A></TD><TD ALIGN="left">New in this version</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC61">The Latest Version</A></TD><TD ALIGN="left">Where to Get It</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC62">The Future</A></TD><TD ALIGN="left">Known Bugs, the TODO list and EOL statements</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC66">Thanks</A></TD><TD ALIGN="left">to the Ministry of Bugs</TD><TR>
+
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC68">Concept Index</A></TD><TD ALIGN="left">Concept Index</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC69">Variable Index</A></TD><TD ALIGN="left">Variable Index</TD><TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC2"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC1"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC3"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H2> 1.1 Installation </H2>
+<!--docid::SEC2::-->
+<P>
+
+This program consists of several groups of files, organized by
+directory:
+</P><P>
+
+
+<PRE>
+ lisp - the main program code for the <B>BBDB</B>
+ tex - TeX support files for See section <A HREF="bbdb.html#SEC46">1.8.2 <CODE>bbdb-print</CODE></A>, the <B>BBDB</B>
+ printing utility
+ texinfo - the documentation files for the <B>BBDB</B>
+ utils - miscellaneous external utility programs
+</PRE>
+
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC3">General Prerequisites</A></TD><TD ALIGN="left">General <B>BBDB</B> requirements</TD><TR>
+
+File Installation
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC4">Normal User</A></TD><TD ALIGN="left">"Normal" Installations</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC5">XEmacs Package</A></TD><TD ALIGN="left">Installing as an XEmacs package</TD><TR>
+
+Initial Configuration
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC6">Initial Configuration</A></TD><TD ALIGN="left">How to initially set up the <B>BBDB</B></TD><TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC3"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC4"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.1.1 General Prerequisites </H3>
+<!--docid::SEC3::-->
+<P>
+
+Various parts of the <B>BBDB</B> require extra packages to be available
+that are not part of the <B>BBDB</B> distribution. Please note that with
+one exception no extra packages (beyond those which ship with both GNU
+Emacs and XEmacs) are required for the use of <B>BBDB</B> core
+functionality.<A NAME="DOCF1" HREF="bbdb.html#FOOT1">(1)</A> This one exception
+applies to XEmacs 20.5 users - the <CODE>xemacs-base</CODE> package must be
+installed for the correct operation of the core <B>BBDB</B> functionality.
+The table below lists the requirements of the various portions of the
+<B>BBDB</B>. Please note that the absence of any of the below optional
+packages will not affect core <B>BBDB</B> functionality.
+</P><P>
+
+<TABLE>
+
+<TR><TD><BR> BBDB file</TD>
+
+</TD><TD> <BR> Package needed
+</TD><TD> <BR> GNU 19.34
+</TD><TD> <BR> GNU 20.2
+</TD><TD> XEmacs<BR> @center &#62;=20.4
+</TD><TD> XEmacs<BR> @center 20.5
+
+</TR>
+<TR><TD><CODE>bbdb-ftp</CODE></TD>
+
+</TD><TD> EFS or <BR> Ange-FTP
+</TD><TD> @center B
+</TD><TD> @center B
+</TD><TD> @center B
+</TD><TD> @center P
+
+</TR>
+<TR><TD><CODE>bbdb-gnus</CODE></TD>
+
+</TD><TD> Gnus[1]
+</TD><TD> @center B
+</TD><TD> @center B
+</TD><TD> @center B
+</TD><TD> @center P
+
+</TR>
+<TR><TD><CODE>bbdb-mhe</CODE></TD>
+
+</TD><TD> MH-E
+</TD><TD> @center B
+</TD><TD> @center B
+</TD><TD> @center B
+</TD><TD> @center P
+
+</TR>
+<TR><TD><CODE>bbdb-reportmail</CODE></TD>
+
+</TD><TD> Reportmail
+</TD><TD>
+</TD><TD>
+</TD><TD> @center B
+</TD><TD> @center P[2]
+
+</TR>
+<TR><TD><CODE>bbdb-sc</CODE></TD>
+
+</TD><TD> Supercite
+</TD><TD> @center B
+</TD><TD>
+</TD><TD> @center B
+</TD><TD> @center P
+
+</TR>
+<TR><TD><CODE>bbdb-srv</CODE></TD>
+
+</TD><TD> <CODE>gnuserv</CODE> and <BR> <CODE>itimer</CODE>
+</TD><TD>
+</TD><TD>
+</TD><TD> @center B
+</TD><TD> @center B
+
+</TR>
+<TR><TD><CODE>bbdb-vm</CODE></TD>
+
+</TD><TD> VM
+</TD><TD>
+</TD><TD>
+</TD><TD> @center B
+</TD><TD> @center P
+
+</TR>
+<TR><TD><CODE>bbdb-w3</CODE></TD>
+
+</TD><TD> <CODE>browse-url</CODE>
+</TD><TD> @center B
+</TD><TD> @center B
+</TD><TD> @center B
+</TD><TD> @center P[3]
+</TR></TABLE>
+<P>
+
+<BR> <B>NOTES:</B>
+
+<OL>
+<LI>The three year old GNUS mail/newsreader should still
+
+work. Please keep in mind that you have a relatively recent Emacs (GNU
+19.34 or later, XEmacs 19.15 or later), you are probably using Gnus.
+<LI>As of this writing, Reportmail is available as
+
+part of the <CODE>edit-utils</CODE> package.
+<LI>As of this writing, <CODE>browse-url</CODE> is
+
+available as part of the <CODE>mail-lib</CODE> package.
+</OL>
+
+Please also note that the XEmacs package locations are as of this
+writing. As the XEmacs 20.5 package system is still in development, the
+locations may change without warning.
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC4"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC3"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.1.2 Normal User Installation </H3>
+<!--docid::SEC4::-->
+<P>
+
+
+<H3>Byte Compiling the Lisp files</H3>
+<P>
+
+First, you need to byte-compile the appropriate <B>BBDB</B> Lisp files.
+While this is in theory an optional step, it is virtually required in
+practice due to speed reasons.
+</P><P>
+
+In order to successfully compile the <B>BBDB</B>, the build process needs
+to know the location of the various optional packages. If the
+directories containing these optional packages are in the default Emacs
+search path (the <CODE>load-path</CODE> variable), no other changes need be
+made for the build process to complete successfully.
+</P><P>
+
+If the optional packages are not in the default search path, the build
+process will not find them unless explicitly told of their location(s).
+To tell the build process where to find Gnus, MH-E, and/or VM, set the
+<CODE>GNUSDIR</CODE>, <CODE>MHEDIR</CODE>, and/or <CODE>VMDIR</CODE> variables,
+respectively, in <TT>`Makefile'</TT>. To tell the build process where
+to find any other package(s), add the directories containing the lisp
+files for the package(s) to the <CODE>OTHERDIR</CODE> variable in
+<TT>`Makefile'</TT>. If multiple directories are to be added, they should
+be separated by spaces, and should <B>not</B> be quoted. For example, to
+add the <TT>`/p/local/elisp/footnote'</TT> and <TT>`/p/local/elisp/sc'</TT>
+directories, set <CODE>OTHERDIR</CODE> as follows:
+</P><P>
+
+
+<PRE>
+ <CODE>OTHERDIR=/p/local/elisp/footnote /p/local/elisp/sc</CODE>
+</PRE>
+
+After setting the paths (if necessary), run one of the following commands:
+<P>
+
+
+<PRE>
+ <CODE>make bbdb</CODE> - Build the core, mailer independent, components
+ <CODE>make gnus</CODE> - Core components plus <CODE>Gnus</CODE> support
+ <CODE>make mhe</CODE> - Core components plus <CODE>MH-E</CODE> support
+ <CODE>make rmail</CODE> - Core components plus <CODE>RMAIL</CODE> support
+ <CODE>make vm</CODE> - Build the core components with <CODE>VM</CODE> support
+ <CODE>make all</CODE> - Core components plus support for all mailers
+ listed above
+</PRE>
+
+You can also combine the above <CODE>make</CODE> commands. For example, to
+build the <B>BBDB</B> with support for <CODE>Gnus</CODE> and <CODE>VM</CODE>, you can
+do so by typing:
+<P>
+
+
+<PRE>
+make gnus vm
+</PRE>
+
+
+<H3>Moving the files to their final destination</H3>
+<P>
+
+
+<H4>Lisp files</H4>
+<P>
+
+As stated above, the <TT>`lisp'</TT> subdirectory contains the Emacs Lisp source
+files for the <B>BBDB</B>. Therefore, these files must be in the Emacs
+<CODE>load-path</CODE>. There are several ways of doing this, three of which are
+described below:
+</P><P>
+
+
+<UL>
+<LI>
+
+Add the <TT>`lisp'</TT> directory from the source distribution to the
+<CODE>load-path</CODE>. This will allow you to run the <B>BBDB</B> in-place. This
+method is recommended for normal users or <B>BBDB</B> developers, especially if
+disk usage is an issue. It is <B>not</B> recommended for site-wide
+installations. <P>
+
+<LI>
+
+Link the <TT>`lisp'</TT> directory into your <TT>`site-lisp'</TT> directory. This is
+for a site-wide installation, but it is subject to the following caveat. If you
+link the <TT>`lisp'</TT> directory into <TT>`site-lisp'</TT>, you will make life more
+difficult for yourself down the road, as you will not be able to make changes to
+the source directory (new versions, patches, etc) without having an effect on
+other users who now depend on it. This directory will automatically be added to
+the <CODE>load-path</CODE> when Emacs starts. <P>
+
+<LI>
+
+Make a directory whose sole purpose in life is containing the production copies
+of the <B>BBDB</B> source and byte-compiled source files. Either put this
+directory under <TT>`site-lisp'</TT> (or put it somewhere else and link it into
+<TT>`site-lisp'</TT>). This directory will automatically be added to the
+<CODE>load-path</CODE> when Emacs starts. This is the best of the three listed here,
+as it allows for a degree of separation between the (possibly changing) source
+tree and the production code.
+</UL>
+
+
+<H4>TeX files</H4>
+<P>
+
+The <TT>`tex'</TT> subdirectory contains the TeX support files for
+bbdb-print, the <B>BBDB</B> printing utility (See section <A HREF="bbdb.html#SEC46">1.8.2 <CODE>bbdb-print</CODE></A>).
+The three support files, <TT>`bbdb-cols.tex'</TT>, <TT>`bbdb-print.tex'</TT>, and
+<TT>`bbdb-print-brief.tex'</TT>, must be placed in a directory that is
+either on the default TeX search path or is listed in the
+<CODE>TEXINPUTS</CODE> environment variable. If neither of these two options
+is taken, TeX will not be able to process the file output by
+<CODE>bbdb-print</CODE>.
+</P><P>
+
+
+<H4>texinfo files</H4>
+<P>
+
+The <TT>`bbdb.info'</TT> file in this directory contains the documentation
+for the <B>BBDB</B>. This file should either be linked or copied to a
+directory on the default path for the <CODE>info</CODE> program or listed in
+the <CODE>INFOPATH</CODE> environment variable.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC5"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC4"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC6"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.1.3 XEmacs Package Installation </H3>
+<!--docid::SEC5::-->
+<P>
+
+<B>NOTE:</B> XEmacs packages are currently supported only under XEmacs
+20.5. If you are not running 20.5, you should install the <B>BBDB</B>
+according to the instructions in section <A HREF="bbdb.html#SEC4">1.1.2 Normal User Installation</A>.
+</P><P>
+
+
+<H3>Byte Compiling the Lisp files</H3>
+<P>
+
+The byte-compilation procedure is the same as that used in the Normal
+User installation. See section <A HREF="bbdb.html#SEC4">1.1.2 Normal User Installation</A>.
+</P><P>
+
+
+<H3>Moving the files to their final destination</H3>
+<P>
+
+Support is provided for the automatic installation of the <B>BBDB</B> in an
+XEmacs package directory. Before installation, one or more variables
+must be set in the <TT>`Makefile'</TT> as described below.
+</P><P>
+
+<DL COMPACT>
+
+<DT><B><CODE>PACKAGEROOT</CODE></B>
+<DD>
+This variable sets the root of the XEmacs package directory. It is
+<B>required</B> for XEmacs package - the installation will not even begin
+unless this variable is set.
+<DT><B><CODE>LINKPATH</CODE></B>
+<DD>
+If this variable is either undefined (commented out) or set to the empty
+string, the <TT>`lisp'</TT> and <TT>`info'</TT> directories will be copied into
+<CODE>PACKAGEROOT</CODE>. If <CODE>LINKPATH</CODE> is set, the <TT>`lisp'</TT> and
+<TT>`info'</TT> directories will be linked into <CODE>PACKAGEROOT</CODE>.
+<DT><B><CODE>LINKPATH</CODE></B>
+<DD>
+If this variable is either undefined (commented out) or set to the empty
+string, the <TT>`lisp'</TT> and <TT>`info'</TT> directories will be linked in
+with the output of <CODE>pwd</CODE> as the source directory. If something
+else should be used as the source directory, <CODE>LINKPATH</CODE> should be set
+to the 'something else'. If, for example, <CODE>pwd</CODE> returns
+<TT>`/p/local/elisp/bbdb'</TT>, the <TT>`lisp'</TT>, <TT>`info'</TT> and <TT>`etc'</TT>
+(which will include the files distributed in <TT>`tex'</TT> and
+<TT>`utils'</TT>) directories
+will be linked in from <TT>`/p/local/elisp/bbdb/{lisp,info,etc}'</TT>. If,
+however, you prefer that they be linked in from
+<TT>`/usr/local/elisp/bbdb/...'</TT>, set <CODE>LINKPATH</CODE> to
+<TT>`/usr/local/elisp/bbdb'</TT>. This variable is ignored if
+<CODE>LINKPATH</CODE> is not set.
+</DL>
+<P>
+
+To perform the installation, use the command <CODE>make install-pkg</CODE>.
+This will compile the <TT>`lisp/auto-autoloads.el'</TT> file and will
+install the source and documentation files as indicated by the variables
+described above. The final installation tree will take the following form:
+</P><P>
+
+<DL COMPACT>
+
+<DT><CODE>$PACKAGEROOT/</CODE>
+<DD>
+<DL COMPACT>
+
+<DT><CODE>etc/</CODE>
+<DD>
+<DL COMPACT>
+
+<DT><CODE>bbdb/</CODE>
+<DD>
+<DL COMPACT>
+
+<DT><CODE>tex/</CODE>
+<DD>
+ <I>support files for bbdb-print, copied from the <TT>`tex'</TT> directory
+ in the source distribution</I>
+<DT><CODE>utils/</CODE>
+<DD>
+ <I>miscellaneous utilities, copied from the <TT>`utils'</TT> directory in
+ the source distribution</I>
+</DL>
+</DL>
+<DT><CODE>info/</CODE>
+<DD>
+<DL COMPACT>
+
+<DT><CODE>bbdb/</CODE>
+<DD>
+ <I><B>BBDB</B> documentation files, copied from the <TT>`info'</TT> directory
+ in the source distribution</I>
+</DL>
+<DT><CODE>lisp/</CODE>
+<DD>
+<DL COMPACT>
+
+<DT><CODE>bbdb/</CODE>
+<DD>
+ <I><B>BBDB</B> lisp source files, copied from the <TT>`lisp'</TT> directory
+ in the source distribution</I>
+</DL>
+</DL>
+</DL>
+<P>
+
+After you install the package, you should probably redump XEmacs.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC6"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC7"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.1.4 Initial Configuration </H3>
+<!--docid::SEC6::-->
+<P>
+
+The simplest way to configure the <B>BBDB</B> is to include the following
+forms in your Emacs configuration file:
+</P><P>
+
+
+<PRE>
+<CODE>(require 'bbdb)</CODE>
+<CODE>(bbdb-initialize)</CODE>
+</PRE>
+
+<B>Note:</B> The forms above replace the autoloads needed for previous
+versions of the <B>BBDB</B>.
+<P>
+
+This will set up the <B>BBDB</B> for basic querying and record manipulation
+(the Core Functionality referred to in the Prerequisites section). It
+will not enable any of the mailreader-, newsreader- or other
+package-specific <B>BBDB</B> features. To enable some or all of these
+features, the <CODE>(bbdb-initialize)</CODE> form can be enable as shown
+below. Alternatively, the features can be enabled manually as described
+in the following sections.
+</P><P>
+
+
+<H3>Modifying <CODE>(bbdb-initialize)</CODE></H3>
+<P>
+
+The <CODE>bbdb-initialize</CODE> function can be used to enable the various
+package-specific <B>BBDB</B> functions. This feature activation is
+accomplished through the passing of symbols which tell the function
+which features to activate. These symbols are outlined below and in the
+Emacs documentation for the <CODE>bbdb-initialize</CODE><A NAME="DOCF2" HREF="bbdb.html#FOOT2">(2)</A>
+</P><P>
+
+
+<H4>Initialization symbols for mail and news readers</H4>
+<P>
+
+<DL COMPACT>
+
+<DT><CODE>gnus</CODE>
+<DD>
+ Initialize support for Gnus<A NAME="DOCF3" HREF="bbdb.html#FOOT3">(3)</A>. If you pass the <CODE>gnus</CODE> symbol, you should
+ probably also pass the <CODE>message</CODE> symbol.
+<DT><CODE>mh-e</CODE>
+<DD>
+ Initialize support for the MH-E mail reader.
+<DT><CODE>rmail</CODE>
+<DD>
+ Initialize support for the RMAIL mail reader.
+<DT><CODE>sendmail</CODE>
+<DD>
+ Initialize support for sendmail (<KBD>M-x mail</KBD>)
+<DT><CODE>vm</CODE>
+<DD>
+ Initialize support for the VM mail reader.<A NAME="DOCF4" HREF="bbdb.html#FOOT4">(4)</A>
+</DL>
+<P>
+
+
+<H4>Initialization symbols for other packages</H4>
+<P>
+
+<DL COMPACT>
+
+<DT><CODE>message</CODE>
+<DD>
+ Initialize support for Message mode (the mail composition program
+ included with Gnus).
+<DT><CODE>reportmail</CODE>
+<DD>
+ Initialize support for the Reportmail mail notification package.
+<DT><CODE>sc</CODE>
+<DD>
+ Initialize support for the Supercite message citation package.
+ Additional initialization is required for Supercite to work with the
+ <B>BBDB</B>. See section <A HREF="bbdb.html#SEC14">1.1.4.8 Initializing <B>BBDB</B> support for Supercite</A>.
+<DT><CODE>w3</CODE>
+<DD>
+ Initialize support for Web browsers.
+</DL>
+<P>
+
+
+<H4>Initialization example</H4>
+<P>
+
+To initialize support for Gnus 5.5, Message mode, Supercite, and Web
+browsers, the following forms would be used:
+</P><P>
+
+
+<PRE>
+(require 'bbdb)
+(bbdb-initialize 'gnus 'message 'sc 'w3)
+</PRE>
+
+
+<H4>Manual initialization</H4>
+<P>
+
+If your initialization needs exceed those provided by
+<CODE>bbdb-initialize</CODE>, refer to the following sections for a
+description of the procedures necessary for enabling <B>BBDB</B> support
+for the packages listed above. The procedures described are the same as
+those carried out by the <CODE>bbdb-initialize</CODE> function when passed the
+appropriate symbols. That is, the procedure listed in the RMAIL Prep
+section below is the same as than executed by <CODE>bbdb-initialize</CODE>
+when the <CODE>rmail</CODE> symbol is passed.
+
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+Mail and News readers:
+
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC7">Gnus Prep</A></TD><TD ALIGN="left">Initializing <B>BBDB</B> support for Gnus</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC8">MH-E Prep</A></TD><TD ALIGN="left">Initializing <B>BBDB</B> support for MH-E</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC9">RMAIL Prep</A></TD><TD ALIGN="left">Initializing <B>BBDB</B> support for RMAIL</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC10">Sendmail Prep</A></TD><TD ALIGN="left">Initializing <B>BBDB</B> support for Sendmail</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC11">VM Prep</A></TD><TD ALIGN="left">Initializing <B>BBDB</B> support for VM</TD><TR>
+
+Other packages:
+
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC12">Message Prep</A></TD><TD ALIGN="left">Initializing <B>BBDB</B> support for Message mode</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC13">Reportmail Prep</A></TD><TD ALIGN="left">Initializing <B>BBDB</B> support for Reportmail</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC14">Supercite Prep</A></TD><TD ALIGN="left">Initializing <B>BBDB</B> support for Supercite</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC15">Web Browser Prep</A></TD><TD ALIGN="left">Initializing <B>BBDB</B> support for Web Browsers</TD><TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC7"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC6"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC8"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.1.4.1 Initializing <B>BBDB</B> support for Gnus </H4>
+<!--docid::SEC7::-->
+<P>
+
+To take advantage of the <B>Gnus</B> features of the <B>BBDB</B>, add one of
+the following forms to your Emacs configuration file: </P><P>
+
+For Gnus 3.14 or older:
+</P><P>
+
+<CODE>(add-hook 'gnus-Startup-hook 'bbdb-insinuate-gnus)</CODE>
+</P><P>
+
+For Gnus 3.15 or newer:
+</P><P>
+
+<CODE>(add-hook 'gnus-startup-hook 'bbdb-insinuate-gnus)</CODE>
+</P><P>
+
+<CODE>bbdb-insinuate-gnus</CODE> adds bindings for the default keys to
+<B>Gnus</B> and configures <B>Gnus</B> to notify the <B>BBDB</B> when new
+messages are loaded. This notification is required if the <B>BBDB</B> is
+to be able to display <B>BBDB</B> entries for messages displayed in
+<B>Gnus</B>.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC8"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC7"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC9"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.1.4.2 Initializing <B>BBDB</B> support for MH-E </H4>
+<!--docid::SEC8::-->
+<P>
+
+To take advantage of the <B>MH-E</B> features of the <B>BBDB</B>, add the
+following form to your Emacs configuration file: </P><P>
+
+
+<PRE>
+(add-hook 'mh-folder-mode-hook 'bbdb-insinuate-mh)
+</PRE>
+
+<CODE>bbdb-insinuate-mh</CODE> adds bindings for the default keys to
+<B>MH-E</B> and configures <B>MH-E</B> to notify the <B>BBDB</B> when new
+messages are loaded. This notification is required if the <B>BBDB</B> is
+to be able to display <B>BBDB</B> entries for messages displayed in
+<B>MH-E</B>.
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC9"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC8"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC10"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.1.4.3 Initializing <B>BBDB</B> support for RMAIL </H4>
+<!--docid::SEC9::-->
+<P>
+
+To take advantage of the <B>RMAIL</B> features of the <B>BBDB</B>, add the
+following form to your Emacs configuration file: </P><P>
+
+
+<PRE>
+(add-hook 'rmail-mode-hook 'bbdb-insinuate-rmail)
+</PRE>
+
+<CODE>bbdb-insinuate-rmail</CODE> adds bindings for the default keys to
+<B>RMAIL</B> and configures <B>RMAIL</B> to notify the <B>BBDB</B> when new
+messages are loaded. This notification is required if the <B>BBDB</B> is
+to be able to display <B>BBDB</B> entries for messages displayed in
+<B>RMAIL</B>.
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC10"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC9"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC11"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.1.4.4 Initializing <B>BBDB</B> support for Sendmail </H4>
+<!--docid::SEC10::-->
+<P>
+
+To take advantage of send-mail-mode (the one invoked with <CODE>M-x
+mail</CODE>) features of the <B>BBDB</B>, add the following form to your Emacs
+configuration file: </P><P>
+
+
+<PRE>
+(add-hook 'mail-setup-hook 'bbdb-insinuate-sendmail)
+</PRE>
+
+<CODE>bbdb-insinuate-sendmail</CODE> enables auto-completion in
+send-mail-mode.
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC11"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC10"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC12"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.1.4.5 Initializing <B>BBDB</B> support for VM </H4>
+<!--docid::SEC11::-->
+<P>
+
+To take advantage of the <B>VM</B> features of the <B>BBDB</B>, add the
+following form to your <TT>`~/.vm'</TT> file:
+</P><P>
+
+
+<PRE>
+<CODE>(bbdb-insinuate-vm)</CODE>
+</PRE>
+
+<CODE>bbdb-insinuate-vm</CODE> adds bindings for the default keys to <B>VM</B>
+and configures <B>VM</B> to notify the <B>BBDB</B> when new messages are
+loaded. This notification is required if the <B>BBDB</B> is to be able to
+display <B>BBDB</B> entries for messages displayed in <B>VM</B>.
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC12"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC11"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC13"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.1.4.6 Initializing <B>BBDB</B> support for Message mode </H4>
+<!--docid::SEC12::-->
+<P>
+
+To allow the <B>BBDB</B> to be used in Message mode, add the following form
+to your Emacs initialization file:
+</P><P>
+
+
+<PRE>
+<CODE>(bbdb-insinuate-message)</CODE>
+</PRE>
+
+<CODE>bbdb-insinuate-message</CODE> adds a binding for <KBD>M-TAB</KBD> to Message
+mode. This will enable completion of addressees based on <B>BBDB</B>
+records. See section <A HREF="bbdb.html#SEC36">1.6.1 Using the <B>BBDB</B> with Message Mode</A> for more details on the operation
+of Message mode <B>BBDB</B> record completion.
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC13"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC12"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC14"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.1.4.7 Initializing <B>BBDB</B> support for Reportmail </H4>
+<!--docid::SEC13::-->
+<P>
+
+To allow the Reportmail package to report information from <B>BBDB</B>
+records for new mail, add the following form to your Emacs
+initialization file:
+</P><P>
+
+
+<PRE>
+<CODE>(bbdb-insinuate-reportmail)</CODE>
+</PRE>
+
+<CODE>bbdb-insinuate-reportmail</CODE> adds to the
+<CODE>display-time-get-field</CODE> function to allow access to <B>BBDB</B>
+records during new mail information display. See section <A HREF="bbdb.html#SEC37">1.6.2 Using the <B>BBDB</B> with Reportmail</A>
+for more details on the operation of Reportmail with the <B>BBDB</B>.
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC14"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC13"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC15"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.1.4.8 Initializing <B>BBDB</B> support for Supercite </H4>
+<!--docid::SEC14::-->
+<P>
+
+To allow the <B>BBDB</B> to assist in the storage of Supercite citations,
+add the following form to your Emacs initialization file:
+</P><P>
+
+
+<PRE>
+<CODE>(bbdb-insinuate-sc)</CODE>
+</PRE>
+
+<CODE>bbdb-insinuate-sc</CODE> adds <B>BBDB</B> functions to two Supercite hooks
+- <CODE>sc-post-hook</CODE> and <CODE>sc-attribs-postselect-hook</CODE>. See
+section <A HREF="bbdb.html#SEC38">1.6.3 Using the <B>BBDB</B> with Supercite</A> for more details on the operation of Supercite
+citation management using the <B>BBDB</B>.
+<P>
+
+Three other Supercite variables must be set/modified to allow the
+<B>BBDB</B> to work with it. These variables are not automatically set as
+it would be impossible to reliably set them without interfering with
+other user customizations. The modifications are:
+</P><P>
+
+<DL COMPACT>
+
+<DT><CODE>sc-preferred-attribution-list</CODE>
+<DD>
+<CODE>"sc-consult"</CODE> should be added to the list. An example
+configuration is:
+<P>
+
+
+<PRE>
+(setq sc-preferred-attribution-list
+ '("sc-lastchoice" "x-attribution" "sc-consult"
+ "initials" "firstname" "lastname"))
+</PRE>
+
+<DT><CODE>sc-attrib-selection-list</CODE>
+<DD>
+The following form should be added to <CODE>sc-attrib-selection-list</CODE>:
+<P>
+
+
+<PRE>
+ '(("sc-from-address"
+ ((".*" . (bbdb/sc-consult-attr
+ (sc-mail-field "sc-from-address"))))))
+</PRE>
+
+<DT><CODE>sc-mail-glom-frame</CODE>
+<DD>
+The following form should be added to <CODE>sc-mail-glom-frame</CODE>, to
+allow the retrieval of the name of a person who is a) in the <B>BBDB</B>
+and b) has only included their net address in the message in question.
+<P>
+
+
+<PRE>
+ ("^$" (progn (bbdb/sc-default)
+ (list 'abort '(step . 0))))
+</PRE>
+
+An example configuration is as follows:
+<P>
+
+
+<PRE>
+<CODE>(setq sc-mail-glom-frame</CODE>
+<CODE> '((begin (setq sc-mail-headers-start (point)))</CODE>
+<CODE> ("^x-attribution:[ \t]+.*$" (sc-mail-fetch-field t) nil t)</CODE>
+<CODE> ("^\\S +:.*$" (sc-mail-fetch-field) nil t)</CODE>
+<CODE> ("^$" (progn (bbdb/sc-default)</CODE>
+<CODE> (list 'abort '(step . 0))))</CODE>
+<CODE> ("^[ \t]+" (sc-mail-append-field))</CODE>
+<CODE> (sc-mail-warn-if-non-rfc822-p (sc-mail-error-in-mail-field))</CODE>
+<CODE> (end (setq sc-mail-headers-end (point)))))</CODE>
+</PRE>
+
+</DL>
+<P>
+
+The above is also documented in <TT>`bbdb-sc.el'</TT>. The
+<CODE>bbdb/sc-setup-variables</CODE> function has been provided as an example for
+Supercite variable initialization. Please note that while
+<CODE>bbdb/sc-setup-variables</CODE> makes every attempt to safely configure
+the Supercite variables, it will not always work. Specifically, the
+variables <CODE>sc-attrib-selection-list</CODE> and <CODE>sc-mail-glom-frame</CODE>
+will not be overridden if they have already been defined.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC15"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC14"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.1.4.9 Initializing <B>BBDB</B> support for Web Browsers </H4>
+<!--docid::SEC15::-->
+<P>
+
+To allow URLs to be added to <B>BBDB</B> records, add the following form to
+your Emacs initialization file:
+</P><P>
+
+
+<PRE>
+<CODE>(bbdb-insinuate-w3)</CODE>
+</PRE>
+
+<CODE>bbdb-insinuate-w3</CODE> adds the definition of <KBD>:</KBD> to the W3
+keymap.
+<P>
+
+The other <CODE>bbdb-w3</CODE> functions, specifically the passing of URLs
+from <B>BBDB</B> records to Web browsers, do not require initialization
+within the <B>BBDB</B>. They do, however, require the configuration of the
+<CODE>browse-url</CODE> package so it knows to which Web browser URLs are to
+be passed. For more details on the operation of <CODE>bbdb-w3</CODE>, see
+section <A HREF="bbdb.html#SEC39">1.6.4 Using the <B>BBDB</B> with Web Browsers</A>.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC16"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC15"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC17"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC21"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H2> 1.2 The <B>BBDB</B> </H2>
+<!--docid::SEC16::-->
+<P>
+
+This section discusses the basics of the <B>BBDB</B> - an overview of the
+database's layout, and a discussion of the basic <B>BBDB</B> manipulation
+commands.
+</P><P>
+
+The database itself lives in a file which is named by the variable
+<CODE>bbdb-file</CODE>. If this variable is not set, the database is assumed
+to be in <TT>`~/.bbdb'</TT>.
+</P><P>
+
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC17">Database Fields</A></TD><TD ALIGN="left">Description of database fields</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC18">Basic Searching</A></TD><TD ALIGN="left">Basic database searching commands</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC19">Advanced Searching</A></TD><TD ALIGN="left">Advanced database searching commands</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC20">Manual Record Addition</A></TD><TD ALIGN="left">Adding records by hand</TD><TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC17"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC18"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC21"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.2.1 Database Fields </H3>
+<!--docid::SEC17::-->
+<P>
+
+The database is organized as a set of records, where each record
+corresponds to one person or organization. Each record has several
+fields, and each field is of one of several types. Below, the built-in
+types are listed, followed by a description of how and why some types
+can be used more than once in a single record: <A NAME="IDX1"></A>
+</P><P>
+
+<TABLE>
+
+<TR><TD>Type</TD>
+
+</TD><TD> Description
+</TD><TD> Notes
+
+</TR>
+<TR><TD><CODE>name</CODE></TD>
+
+</TD><TD> The name of this person, or none if the record corresponds to an
+organization.
+</TD><TD> Single value, single instance.
+
+</TR>
+<TR><TD><CODE>company</CODE></TD>
+
+</TD><TD> The name of this person's organization, or none.
+</TD><TD> Single value, single instance.
+
+</TR>
+<TR><TD><CODE>AKA</CODE></TD>
+
+</TD><TD> A list of other names for this person.
+</TD><TD> Multiple values through commas.
+
+</TR>
+<TR><TD><CODE>net</CODE></TD>
+
+</TD><TD> A list of this person's network addresses.
+</TD><TD> Multiple values through commas.
+
+</TR>
+<TR><TD><CODE>address</CODE></TD>
+
+</TD><TD> A list of postal (physical) addresses for this person.
+</TD><TD> Multiple values through multiple occurences.
+
+</TR>
+<TR><TD><CODE>phone</CODE></TD>
+
+</TD><TD> A list of telephone numbers for this person.
+</TD><TD> Multiple values through multiple occurences.
+
+</TR>
+<TR><TD><CODE>notes</CODE></TD>
+
+</TD><TD> Random commentary.
+</TD><TD> Multiple values through multiple occurences.
+
+</TR></TABLE>
+<P>
+
+The field types listed above can be classified into four categories, as
+indicated by the comments in the `Notes' column.
+</P><P>
+
+Field types marked as "Single value, single occurrence" may only occur
+once per record. Each occurrence can only have a single value. For
+example, there will be only one field of type <CODE>name</CODE> in a record.
+It will be named <CODE>name</CODE>, and will contain a single value (the
+person's name).
+</P><P>
+
+The types marked as "Multiple values through commas" are essentially the
+same as the single value, single occurrence field types, but with one
+crucial difference: they can contain multiple values in the form of a
+comma-separated list. So, for example, while a <CODE>name</CODE> field with a
+value of "foo, bar" would be treated as if it contained the single value
+"foo, bar", a <CODE>net</CODE> field with the same data would be thought of as
+having two separate values - "foo" and "bar". As in the single
+occurrence, single value field types, there will be only one occurrence
+of each "Multiple values through commas" field type, and the occurrence
+will have the same name as the type.
+</P><P>
+
+The "Multiple values through multiple occurrences" field type is the
+most flexible of the four listed here. There can be multiple
+occurrences of each type. This type necessarily does not have the name
+restriction imposed by the previous two types. For example, there can
+be multiple fields of the <CODE>address</CODE> type, none of which have to be
+named <CODE>address</CODE>. One could be named <CODE>home</CODE>, and the other
+could be named <CODE>work</CODE>.
+</P><P>
+
+Special properties of the <CODE>notes</CODE> field type: All user-defined
+fields that don't fit into the other predefined field types
+(<CODE>name</CODE>, <CODE>company</CODE>, <CODE>AKA</CODE>, <CODE>net</CODE>, <CODE>address</CODE>,
+and <CODE>phone</CODE>) will be created as a <CODE>notes</CODE>-type field. In
+addition, several of the user-defined field names are "special". That
+is, the <B>BBDB</B> treats the values of these "special" fields differently
+than it does other user-defined fields. The "special" fields are:
+</P><P>
+
+<A NAME="IDX2"></A>
+<DL COMPACT>
+
+<DT><CODE>attribution</CODE>
+<DD>
+<A NAME="IDX3"></A>
+<I>(Available only when the Supercite-specific <B>BBDB</B> functions have been
+enabled)</I> Used for the storage of Supercite attributions. For initialization
+details, see section <A HREF="bbdb.html#SEC14">1.1.4.8 Initializing <B>BBDB</B> support for Supercite</A>. For usage details, see section <A HREF="bbdb.html#SEC38">1.6.3 Using the <B>BBDB</B> with Supercite</A>. The field used can be changed by changing the value of
+<CODE>bbdb/sc-attribution-field</CODE>.
+<DT><CODE>aka</CODE>
+<DD>
+Used to store non-primary names associated with a given record.
+<DT><CODE>face</CODE>
+<DD>
+<I>(XEmacs only)</I> Used for the storage of image data. This data is to be
+in the format output by <CODE>compface</CODE>, and commonly found in
+<CODE>X-Face:</CODE> headers in messages. If face support has been compiled
+into XEmacs, the image contained in the <CODE>face</CODE> header will be
+displayed when the record is viewed.
+<DT><CODE>finger-host</CODE>
+<DD>
+<A NAME="IDX4"></A>
+Address used in place of the listed net address for fingering the entity
+indicated by the record. See section <A HREF="bbdb.html#SEC21">1.3 BBDB Mode</A>. The field used can be changed by
+changing the value of <CODE>bbdb-finger-host-field</CODE>.
+<DT><CODE>gnus-score</CODE>
+<DD>
+<A NAME="IDX5"></A>
+<B>Gnus</B> scoring adjustment for this person. For initialization details, see
+section <A HREF="bbdb.html#SEC7">1.1.4.1 Initializing <B>BBDB</B> support for Gnus</A>. For usage details, see section <A HREF="bbdb.html#SEC29">1.5.1 Gnus-specific Features</A>. The field used
+can be changed by changing the value of <CODE>bbdb/gnus-score-field</CODE>.
+<DT><CODE>mail-alias</CODE>
+<DD>
+Value used instead of <CODE>name</CODE> for completion. See section <A HREF="bbdb.html#SEC27">1.4.3 Mail Sending Interfaces</A>.
+<DT><CODE>mail-name</CODE>
+<DD>
+<I>(Available only when the Reportmail-specific <B>BBDB</B> functions have been
+enabled)</I> Used for the storage of non-default names to be used in the
+reporting of new mail by Reportmail. For initialization details,
+see section <A HREF="bbdb.html#SEC13">1.1.4.7 Initializing <B>BBDB</B> support for Reportmail</A>. For usage details, see section <A HREF="bbdb.html#SEC37">1.6.2 Using the <B>BBDB</B> with Reportmail</A>.
+<DT><CODE>mark-char</CODE>
+<DD>
+The field containing the character to be used for marking a given poster
+in the Gnus Summary Buffer. For usage details, see section <A HREF="bbdb.html#SEC31">1.5.1.2 Gnus Summary Buffer Enhancements</A>.
+<DT><CODE>tex-name</CODE>
+<DD>
+<A NAME="IDX6"></A>
+<A NAME="IDX7"></A>
+The value of this field is used in place of the <CODE>name</CODE> field when
+printing the database using <CODE>bbdb-print</CODE>. See section <A HREF="bbdb.html#SEC46">1.8.2 <CODE>bbdb-print</CODE></A>.
+<DT><CODE>www</CODE>
+<DD>
+This field contains the URL assocated with the <B>BBDB</B> record. Common uses
+are with <CODE>bbdb-snarf</CODE> (see section <A HREF="bbdb.html#SEC47">1.8.3 <CODE>bbdb-snarf</CODE></A>) and the <B>BBDB</B>/Web Browser
+functionality (for initialization details, see section <A HREF="bbdb.html#SEC15">1.1.4.9 Initializing <B>BBDB</B> support for Web Browsers</A>. For
+usage details, see section <A HREF="bbdb.html#SEC39">1.6.4 Using the <B>BBDB</B> with Web Browsers</A>).
+</DL>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC18"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC17"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC19"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC21"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.2.2 Basic searching commands </H3>
+<!--docid::SEC18::-->
+<P>
+
+You can list the contents of the database with the command
+<KBD>M-x bbdb</KBD>. You will be prompted for a regular expression, and all
+records which match that regexp in the name, company, network address,
+or any notes fields will be displayed.<A NAME="IDX8"></A>
+<A NAME="IDX9"></A>
+<A NAME="IDX10"></A>
+<A NAME="IDX11"></A>
+<A NAME="IDX12"></A>
+<A NAME="IDX13"></A>
+</P><P>
+
+A narrower search may be made by using the commands <KBD>bbdb-name</KBD>,
+<KBD>bbdb-company,</KBD> <KBD>bbdb-net,</KBD> or <KBD>bbdb-notes</KBD>. These commands
+limit their searches to the name, company, email address, and notes
+fields, respectively. If these commands are given a prefix argument,
+the listing displayed will be one line per entry; otherwise, the full
+database entry will be shown on multiple lines.
+</P><P>
+
+The functions described above are predefined to certain keys in the
+<CODE>*BBDB*</CODE> buffer. See section <A HREF="bbdb.html#SEC21">1.3 BBDB Mode</A> for more details.
+</P><P>
+
+<A NAME="IDX14"></A>
+The <CODE>bbdb-notes</CODE> command will prompt for the notes field to search
+(<KBD>RET</KBD> for all). In this way you can limit your searches to the
+contents of one particular user-defined notes field. (You can add
+user-defined fields with the <CODE>bbdb-insert-new-field</CODE> command;
+See section <A HREF="bbdb.html#SEC21">1.3 BBDB Mode</A>.)</P><P>
+
+<A NAME="IDX15"></A>
+<A NAME="IDX16"></A>
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC19"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC18"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC20"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC21"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.2.3 Advanced searching commands </H3>
+<!--docid::SEC19::-->
+<P>
+
+The following functions can be used to search for records based on
+creation and/or modification dates. These functions will match records
+that have <CODE>timestamp</CODE> and/or <CODE>creation-date</CODE> fields (as
+appropriate. See section <A HREF="bbdb.html#SEC43">1.7.3 Predefined Hooks</A> for more information on these
+fields, which are created by default.
+</P><P>
+
+<DL COMPACT>
+
+<DT><CODE>bbdb-timestamp-older</CODE>
+<DD>
+<A NAME="IDX17"></A>
+
+Display all records modified before a given date. If this function is
+called interactively, it will prompt for a date. If it is being called
+non-interactively, the date should be provided as a string in
+<SAMP>`yyyy-mm-dd'</SAMP> format.
+<P>
+
+<A NAME="IDX18"></A>
+<DT><CODE>bbdb-timestamp-newer</CODE>
+<DD>
+Display all records modified after a given date. If this function is
+called interactively, it will prompt for a date. If it is being called
+non-interactively, the date should be provided as a string in
+<SAMP>`yyyy-mm-dd'</SAMP> format.
+<P>
+
+<A NAME="IDX19"></A>
+<DT><CODE>bbdb-creation-older</CODE>
+<DD>
+Display all records created before a given date. If this function is
+called interactively, it will prompt for a date. If it is being called
+non-interactively, the date should be provided as a string in
+<SAMP>`yyyy-mm-dd'</SAMP> format.
+<P>
+
+<A NAME="IDX20"></A>
+<DT><CODE>bbdb-creation-newer</CODE>
+<DD>
+Display all records created after a given date. If this function is
+called interactively, it will prompt for a date. If it is being called
+non-interactively, the date should be provided as a string in
+<SAMP>`yyyy-mm-dd'</SAMP> format.
+<P>
+
+<A NAME="IDX21"></A>
+<DT><CODE>bbdb-creation-no-change</CODE>
+<DD>
+Display all records that have not been changed since creation.
+</DL>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC20"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC19"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC21"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC21"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.2.4 Manual record addition </H3>
+<!--docid::SEC20::-->
+<P>
+
+There are several ways to add new entries to the Insidious Big Brother
+Database; the most straightforward is to use <KBD>M-x bbdb-create</KBD>,
+which will prompt you for all relevant information. However, the
+easiest way is to allow them to be added automatically by one of the
+mail or news-reading interfaces (See section <A HREF="bbdb.html#SEC24">1.4 Interfaces</A>). </P><P>
+
+<A NAME="IDX22"></A>
+<A NAME="IDX23"></A>
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC21"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC20"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC22"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC24"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H2> 1.3 BBDB Mode </H2>
+<!--docid::SEC21::-->
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC22"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC21"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC23"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.3.1 Functions bound to keys in <B>BBDB</B> Mode </H3>
+<!--docid::SEC22::-->
+<P>
+
+When the <SAMP>`*BBDB*'</SAMP> buffer is active (either summoned by one of the
+commands in the previous section [See section <A HREF="bbdb.html#SEC16">1.2 The <B>BBDB</B></A>] or by your mail
+or news program), a variety of commands become available for database
+manipulation. Some of the commands listed below take numeric arguments.
+These arguments can be generated by entering the number before pressing
+the key(s) corresponding to the desired command. The output (if any) of
+the listed commands will be displayed in the <SAMP>`*BBDB*'</SAMP> buffer, and
+can be navigated through using the usual cursor motion commands.
+<A NAME="IDX24"></A>
+<A NAME="IDX25"></A>
+</P><P>
+
+<DL COMPACT>
+
+<DT><KBD>e</KBD>
+<DD>
+<A NAME="IDX26"></A>
+<A NAME="IDX27"></A>
+<A NAME="IDX28"></A>
+(<CODE>bbdb-edit-current-field</CODE>) Edit the field on the current line. If
+the cursor is in the middle of a multi-line field, such as an address or
+comments section, then the entire field is edited, not just the current
+line. <P>
+
+<DT><KBD>;</KBD>
+<DD>
+<A NAME="IDX29"></A>
+(<CODE>bbdb-edit-notes</CODE>) A shortcut for editing the <VAR>notes</VAR> field. <P>
+
+<DT><KBD>d, C-k</KBD>
+<DD>
+<A NAME="IDX30"></A>
+<A NAME="IDX31"></A>
+<A NAME="IDX32"></A>
+(<CODE>bbdb-delete-current-field-or-record</CODE>) Delete the field on the
+current line. If the current line is the first line of a record, the
+<B>BBDB</B> will, after prompting the user, delete the entire record from
+the database.
+<P>
+
+<DT><KBD>C-o</KBD>
+<DD>
+<A NAME="IDX33"></A>
+<A NAME="IDX34"></A>
+<A NAME="IDX35"></A>
+<A NAME="IDX36"></A>
+(<CODE>bbdb-insert-new-field</CODE>) Inserts a new field into the current
+record. You are prompted (with completion) for the type of field to
+insert (<B>phone</B>, <B>address</B>, <B>notes</B>, etc); if the string you type
+is not a known field type, you will be asked whether to add a new field
+with the entered name of type <CODE>notes</CODE>.
+<P>
+
+<A NAME="IDX37"></A>
+<A NAME="IDX38"></A>
+<A NAME="IDX39"></A>
+If you are inserting a new phone-number field, you can control whether
+it is a North American or European phone number by providing a prefix
+argument. A prefix arg of <KBD>^U</KBD> means it's to be a euronumber, and
+any other prefix arg means it's to be a a structured North American
+number. If no prefix argument is supplied, the style used is controlled
+by the variable <CODE>bbdb-north-american-phone-numbers-p</CODE>. </P><P>
+
+<DT><KBD>C-x C-t</KBD>
+<DD>
+<A NAME="IDX40"></A>
+<A NAME="IDX41"></A>
+<A NAME="IDX42"></A>
+(<CODE>bbdb-transpose-fields</CODE>) This is like the <CODE>transpose-lines</CODE>
+command, but it is for <B>BBDB</B> fields. If the cursor is on a field of
+a <B>BBDB</B> record, that field and the previous field will be
+transposed.<P>
+
+With non-zero numeric argument <VAR>ARG</VAR>, the previous field is moved
+past <VAR>ARG</VAR> fields. With argument 0, the field indicated by
+<I>point</I> is interchanged with the one indicated by <I>mark</I>.
+</P><P>
+
+Both fields must be in the same record, and must be of the same basic type
+(that is, you can use this command to change the order in which phone-number
+fields are listed, but you can't use it to make an address appear before a
+phone number; the order of field types is fixed.)</P><P>
+
+<DT><KBD>n, p</KBD>
+<DD>
+<A NAME="IDX43"></A>
+<A NAME="IDX44"></A>
+(<CODE>bbdb-next-record</CODE>, <CODE>bbdb-prev-record</CODE>) Move to the next and
+previous displayed record, respectively. <P>
+
+<DT><KBD>t</KBD>
+<DD>
+<A NAME="IDX45"></A>
+(<CODE>bbdb-elide-record</CODE>) Toggles whether the current record is displayed
+in a one-line listing, or a full multi-line listing. With a numeric argument
+of 0, the current record will unconditionally be made elided; with any
+other argument, the current record will unconditionally be shown
+expanded. <P>
+
+If <KBD>*t</KBD> is used instead of simply <KBD>t</KBD>, then the state of all
+records will be changed instead of just the one at point. In this case,
+a numeric argument of 0 means that all records will unconditionally be
+made elided; any other numeric argument means that all of the records
+will unconditionally be shown expanded; and no numeric argument means
+that the records are made to be in the opposite state of the record
+under point. </P><P>
+
+<DT><KBD>o</KBD>
+<DD>
+<A NAME="IDX46"></A>
+(<CODE>bbdb-omit-record</CODE>) Removes the current record from the display,
+but does not delete it from the database; it merely makes it seem as if
+the most recent search had not matched this record. With a numeric
+argument, omit the next N records. With a negative argument, go
+backwards. <P>
+
+<DT><KBD>m</KBD>
+<DD>
+<A NAME="IDX47"></A>
+<A NAME="IDX48"></A>
+<A NAME="IDX49"></A>
+(<CODE>bbdb-send-mail</CODE>) Begin composing mail to the person represented
+by the current record. The first email address is used. Normally, the
+mail-sending package which is used is determined by which mail-reading
+package is loaded; that is, if <B>MH-E</B> is loaded, then <CODE>mh-send</CODE>
+will be used; if <B>VM</B> is loaded, then <CODE>vm-mail</CODE> is used; if
+<B>message</B> is loaded, then it is used; otherwise, <CODE>mail</CODE> is used.
+You can override this by setting the variable
+<CODE>bbdb-send-mail-style</CODE> to one of the symbols <CODE>vm</CODE>, <CODE>mh</CODE>,
+<CODE>message</CODE>, or <CODE>mail</CODE>. <P>
+
+If <KBD>*m</KBD> is used instead of simply <KBD>m</KBD>, then mail will be sent to
+all of the folks listed in the <SAMP>`*BBDB*'</SAMP> buffer instead of just the
+person under point. </P><P>
+
+This function does not at present use the facility provided by
+<CODE>compose-mail</CODE> and <CODE>mail-user-agent</CODE>. In a future version of
+the <B>BBDB</B>, it will.
+</P><P>
+
+<DT><KBD>s, C-x C-s</KBD>
+<DD>
+<A NAME="IDX50"></A>
+<A NAME="IDX51"></A>
+(<CODE>bbdb-save-db</CODE>) Saves the <B>BBDB</B> file to disk.
+<P>
+
+<DT><KBD>r</KBD>
+<DD>
+<A NAME="IDX52"></A>
+<A NAME="IDX53"></A>
+<A NAME="IDX54"></A>
+(<CODE>bbdb-refile-record</CODE>) Merge the current record into some other record;
+that is, delete the record under point after copying all of the data
+within it into some other record. this is useful if you realize that
+somehow a redundant record has gotten into the database, and you want to
+merge it with another. <P>
+
+If both records have names and/or companies, you are asked which to use.
+Phone numbers, addresses, and network addresses are simply concatenated.
+The first record is the record under the point; the second is prompted
+for. Completion behavior is as dictated by the variable
+<CODE>bbdb-completion-type</CODE>. </P><P>
+
+<DT><KBD>M-d</KBD>
+<DD>
+<A NAME="IDX55"></A>
+<A NAME="IDX56"></A>
+<A NAME="IDX57"></A>
+(<CODE>bbdb-dial</CODE>) If you are on a machine with the ability to play
+sounds, this command will play the appropriate tones on the builtin
+speaker to dial the phone number corresponding to the current line. If
+the point is at the beginning of a record, dial the first phone number.
+This does not dial the extension. This also does not dial the area code
+if it is the same as <CODE>bbdb-default-area-code</CODE>, unless a prefix
+argument is given. <P>
+
+The <B>BBDB</B> comes configured to play sounds on machines running
+Solaris. If you are on another type of machine, you must set
+<CODE>bbdb-sound-player</CODE> to a string containing the name of the audio
+file player on your machine. You must also set <CODE>bbdb-sound-files</CODE>
+to a vector of arguments to be passed to the program indicated by
+<CODE>bbdb-sound-player</CODE>. <CODE>bbdb-sound-player</CODE> will be called with
+the first element of <CODE>bbdb-sound-files</CODE> for the digit <SAMP>`0'</SAMP>, the
+second for <SAMP>`1'</SAMP>, the third for <SAMP>`2'</SAMP>, and so on.
+</P><P>
+
+<DL COMPACT>
+
+<DT><CODE>bbdb-dial-local-prefix</CODE>
+<DD>
+<A NAME="IDX58"></A>
+Set this to a string of digits if your phone system requires you to dial
+some code to access an outside line.<P>
+
+<DT><CODE>bbdb-dial-long-distance-prefix</CODE>
+<DD>
+<A NAME="IDX59"></A>
+Set this to a string of digits if your phone system requires you to dial
+some code before dialing a long-distance number (one not in your local
+area code.)</DL>
+<P>
+
+<DT><KBD>f</KBD>
+<DD>
+<A NAME="IDX60"></A>
+<A NAME="IDX61"></A>
+(<CODE>bbdb-finger</CODE>) This command fingers the network address of a
+<B>BBDB</B> record. If this command is executed from the <SAMP>`*BBDB*'</SAMP> buffer,
+it fingers the network address of the record which is at point; otherwise,
+it prompts in the minibuffer (with completion) for a user to finger. With a
+numeric prefix argument, it fingers the <I>N</I>th network address of the
+current record; with a prefix argument of <KBD>^U</KBD>, it fingers all of them.
+The <SAMP>`*finger*'</SAMP> buffer is filled asynchronously, meaning that you don't
+have to wait around for it to finish; but fingering another user before
+the first finger has finished could have unpredictable results.<P>
+
+If this command is executed from the <SAMP>`*BBDB*'</SAMP> buffer, it may be prefixed
+with <KBD>*</KBD> (as in <KBD>*f</KBD> instead of simply <KBD>f</KBD>), meaning to
+finger all of the users currently listed instead of just the one under
+point. The numeric prefix argument has the same interpretation. </P><P>
+
+<A NAME="IDX62"></A>
+You can define a special network address to "finger" by defining a field
+<CODE>finger-host</CODE>. The name of the field to be fingered can be changed
+by setting <CODE>bbdb-finger-host-field</CODE>.
+</P><P>
+
+<DT><KBD>q</KBD>
+<DD>
+<A NAME="IDX63"></A>
+(<CODE>bbdb-bury-buffer</CODE>) Hides the <SAMP>`*BBDB*'</SAMP> buffer. <B>Note:</B>
+This command does <B>not</B> kill the <SAMP>`*BBDB*'</SAMP> buffer.
+<P>
+
+<DT><KBD>?</KBD>
+<DD>
+<A NAME="IDX64"></A>
+(<CODE>bbdb-help</CODE>) This displays a one-line help message in the
+minibuffer, showing some of the most common bbdb-mode commands.
+<P>
+
+<DT><KBD>i</KBD>
+<DD>
+<A NAME="IDX65"></A>
+(<CODE>bbdb-info</CODE>) This documentation is displayed. Please note that
+either <TT>`bbdb'</TT> or <TT>`bbdb.info'</TT> must be installed in one of the
+info directories known to Emacs for this command to work.
+<P>
+
+<DL COMPACT>
+
+<DT><CODE>bbdb-info-file</CODE>
+<DD>
+<A NAME="IDX66"></A>
+If this documentation is not installed in the standard Info directory,
+then you should set this variable to the name of the texinfo-formatted
+version of this file; the <CODE>bbdb-info</CODE> command will use this file
+instead.</DL>
+<P>
+
+<DT><KBD>W</KBD>
+<DD>
+<A NAME="IDX67"></A>
+<A NAME="IDX68"></A>
+(<CODE>bbdb-www</CODE>) Displays the Web page listed in the <CODE>www</CODE> field
+of the current record. See section <A HREF="bbdb.html#SEC39">1.6.4 Using the <B>BBDB</B> with Web Browsers</A>.
+<P>
+
+<DT><KBD>P</KBD>
+<DD>
+<A NAME="IDX69"></A>
+<A NAME="IDX70"></A>
+(<CODE>bbdb-print</CODE>) Creates a TeX file that contains a pretty-printed version
+of <B>BBDB</B> records. If prefixed by <KBD>*</KBD>, only the records currently
+displayed will print. See section <A HREF="bbdb.html#SEC46">1.8.2 <CODE>bbdb-print</CODE></A>.
+<P>
+
+<DT><KBD>h</KBD>
+<DD>
+<A NAME="IDX71"></A>
+Moves point to another window via the <CODE>other-window</CODE> function.
+<P>
+
+<DT><KBD>c</KBD>
+<DD>
+<A NAME="IDX72"></A>
+<A NAME="IDX73"></A>
+(<CODE>bbdb-create</CODE>) Create a new database record from information
+supplied by the user.
+<P>
+
+<DT><KBD>C</KBD>
+<DD>
+<A NAME="IDX74"></A>
+<A NAME="IDX75"></A>
+(<CODE>bbdb-changed</CODE>) Display all records that have been changed since
+the last time the database was saved.
+<P>
+
+<DT><KBD>b</KBD>
+<DD>
+<A NAME="IDX76"></A>
+<A NAME="IDX77"></A>
+(<CODE>bbdb</CODE>) Begin a new database search. The results of the new
+search will be displayed in place of the results of the old search.
+<P>
+
+<DT><KBD>S a, S c, S o, S n</KBD>
+<DD>
+<A NAME="IDX78"></A>
+<A NAME="IDX79"></A>
+<A NAME="IDX80"></A>
+<A NAME="IDX81"></A>
+<A NAME="IDX82"></A>
+(<CODE>bbdb-net</CODE>, <CODE>bbdb-company</CODE>, <CODE>bbdb-notes</CODE>,
+<CODE>bbdb-name</CODE>)<BR>
+Begin a new database search. This search will be
+limited to the net address, company, notes, or name fields,
+respectively, of database records. See section <A HREF="bbdb.html#SEC18">1.2.2 Basic searching commands</A> for more
+details.
+<P>
+
+</DL>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC23"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC22"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC24"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.3.2 Other database manipulation functions </H3>
+<!--docid::SEC23::-->
+<P>
+
+<DL COMPACT>
+
+<DT><CODE>bbdb-kill-older</CODE>
+<DD>
+<A NAME="IDX83"></A>
+
+If called interactively (or with a single argument - a date in
+<SAMP>`yyyy-mm-dd'</SAMP> format), it will kill all records that were last
+modified before the given date as determined by the <CODE>timestamp</CODE>
+field. See section <A HREF="bbdb.html#SEC43">1.7.3 Predefined Hooks</A>. If called non-interactively with a
+date (in <SAMP>`yyyy-mm-dd'</SAMP> format), a comparison function and an action
+function, the comparison function is applied to the <CODE>timestamp</CODE>
+field of all records, and the action function applied to those for whom
+the comparison function returns true. If <SAMP>`nil'</SAMP> is supplied as the
+comparison function, <CODE>string-lessp</CODE> is used.
+<P>
+
+</DL>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC24"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC23"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC25"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC21"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H2> 1.4 Interfaces </H2>
+<!--docid::SEC24::-->
+<P>
+
+The <B>BBDB</B> interfaces itself with several message-handling packages, but
+certain parameters control its behavior depending on whether it is
+being used from within a mail reader or a news reader. </P><P>
+
+In all of these packages, two new keybindings will be added:
+</P><P>
+
+<DL COMPACT>
+
+<DT><KBD>:</KBD>
+<DD>
+<A NAME="IDX84"></A>
+<A NAME="IDX85"></A>
+<A NAME="IDX86"></A>
+<A NAME="IDX87"></A>
+<A NAME="IDX88"></A>
+(<CODE>bbdb/<I>package</I>-show-sender</CODE>) Displays the <B>BBDB</B> entry corresponding
+to the author of the current message. If there is none, you will be
+asked whether to create one. The function called is
+<CODE>bbdb/<I>package</I>-show-sender</CODE>, where <CODE><I>package</I></CODE> is either
+<CODE>gnus</CODE>, <CODE>mh</CODE>, <CODE>rmail</CODE>, or <CODE>vm</CODE>, depending on the
+mail or news program being used when the command is invoked.
+<P>
+
+<DT><KBD>;</KBD>
+<DD>
+<A NAME="IDX89"></A>
+<A NAME="IDX90"></A>
+<A NAME="IDX91"></A>
+<A NAME="IDX92"></A>
+<A NAME="IDX93"></A>
+(<CODE>bbdb/<I>package</I>-annotate-sender</CODE>) Lets you edit the <SAMP>`notes'</SAMP>
+field of the <B>BBDB</B> record corresponding to the sender of the current
+message. If there is no record for the current author, you will be
+asked whether to create one. The function called is
+<CODE>bbdb/<I>package</I>-annotate-sender</CODE>, where <CODE><I>package</I></CODE> is
+either <CODE>gnus</CODE>, <CODE>mh</CODE>, <CODE>rmail</CODE>, or <CODE>vm</CODE>, depending on
+the mail or news program being used when the command is invoked.
+</DL>
+<P>
+
+These keybindings (and several other features) will not be
+available unless you call the appropriate "insinuation"
+function; See section <A HREF="bbdb.html#SEC2">1.1 Installation</A>.</P><P>
+
+It is possible to configure <B>BBDB</B> so that it automatically creates a
+record when it sees a message from a person who is not in the database.
+It is also possible to have text automatically added to the notes field
+of the corresponding record depending on the contents of the message
+headers. See section <A HREF="bbdb.html#SEC42">1.7.2 Customization Hooks</A> </P><P>
+
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC25">Mail Reading Interfaces</A></TD><TD ALIGN="left">Mail Reading Interfaces</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC26">News Reading Interfaces</A></TD><TD ALIGN="left">News Reading Interfaces</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC27">Mail Sending Interfaces</A></TD><TD ALIGN="left">Mail Sending Interfaces</TD><TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC25"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC24"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC26"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC24"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC24"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.4.1 Mail Reading Interfaces </H3>
+<!--docid::SEC25::-->
+<P>
+
+There are BBDB interfaces for the following mail readers:
+</P><P>
+
+
+<UL>
+<LI>
+
+<B>Gnus</B>, a news- and email- reader written by Lars Magne Ingebrigtsen
+(based on <B>GNUS</B> by Mansanobu Umeda).
+<LI>
+
+<B>MH-E</B>, the Emacs interface to <B>Mail Handler</B> (<B>MH</B>), from the
+standard emacs library, but packaged separately from XEmacs since
+version 20.4.<LI>
+
+<B>RMAIL</B>, from the standard emacs library (packaged separately for
+XEmacs users as of 20.4);
+<LI>
+
+<B>View Mail</B>, by Kyle Jones, version 5.31 or newer;
+</UL>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC26"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC25"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC27"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC24"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC24"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.4.2 News Reading Interfaces </H3>
+<!--docid::SEC26::-->
+<P>
+
+There are BBDB interfaces for the following news readers:
+</P><P>
+
+
+<UL>
+<LI>
+
+<B>GNUS</B>, a newsreader written by Masanobu Umeda. <LI>
+
+<B>Gnus</B>, the modern news- and email-reading incarnation of <B>GNUS</B>.
+<B>Gnus</B> is written by Lars Magne Ingebrigtsen.</UL>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC27"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC26"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC24"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC24"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.4.3 Mail Sending Interfaces </H3>
+<!--docid::SEC27::-->
+<P>
+
+<A NAME="IDX94"></A>
+<A NAME="IDX95"></A>
+<A NAME="IDX96"></A>
+<A NAME="IDX97"></A>
+When sending mail, the keystroke <KBD>M-TAB</KBD> is bound to the
+function <CODE>bbdb-complete-name</CODE>. This will take the string that
+you have typed (from point back to the preceding colon, comma, or
+the beginning of the line) and will complete that against the
+contents of the database. What you have typed may be an initial
+subsequence of a person's full name or network address; if it
+completes ambiguously, then what you have typed will be replaced
+with the common portion of the matches. Typing <KBD>M-TAB</KBD> again will
+show a list of possible completions. If it completes unambiguously,
+then an address of the form <CODE>User Name &#60;email-address&#62;</CODE> will
+be inserted. The variable <CODE>bbdb-completion-type</CODE> controls
+whether completion is done on real names, or network addresses, or
+both. </P><P>
+
+This binding is automatically set by the various insinuation functions
+documented earlier in this manual. (See section <A HREF="bbdb.html#SEC6">1.1.4 Initial Configuration</A>)
+Briefly, the forms for these functions are:
+</P><P>
+
+<DL COMPACT>
+
+<DT><B>Gnus</B>
+<DD>
+<CODE>(setq gnus-Startup-hook 'bbdb-insinuate-gnus)</CODE> <I>for Gnus 3.14 or older</I><BR>
+<CODE>(setq gnus-startup-hook 'bbdb-insinuate-gnus)</CODE> <I>for Gnus 3.15 or newer</I>
+<DT><B>MH-E</B>
+<DD>
+<CODE>(setq mh-folder-mode-hook 'bbdb-insinuate-mh)</CODE>
+<DT><B>RMAIL</B>
+<DD>
+<CODE>(setq rmail-mode-hook 'bbdb-insinuate-rmail)</CODE>
+<DT><B>sendmail</B>
+<DD>
+<CODE>(setq mail-setup-hook 'bbdb-insinuate-sendmail)</CODE>
+<DT><B>VM</B>
+<DD>
+<CODE>(bbdb-insinuate-vm)</CODE> <I>Add to <TT>`~/.vm'</TT> file</I>
+</DL>
+<P>
+
+The above forms should be added to your Emacs initialization file,
+except where otherwise noted.
+</P><P>
+
+You can control what "real name" is inserted with the
+<CODE>mail-alias</CODE> field: if a record has a <CODE>mail-alias</CODE>
+field, then that is used instead of their <CODE>name</CODE> field.
+</P><P>
+
+<A NAME="IDX98"></A>
+If the variable <CODE>bbdb-completion-display-record</CODE> is true (the
+default) then when you successfully complete an address with
+<KBD>M-TAB</KBD>, the corresponding record will be appended to
+the <SAMP>`*BBDB*'</SAMP> buffer. The buffer will not be displayed if it
+is not already visible, but the record will be displayed there.
+</P><P>
+
+<A NAME="IDX99"></A>
+<A NAME="IDX100"></A>
+When sending mail, you can use the command <CODE>bbdb-yank-addresses</CODE>
+to CC the current message to the people currently displayed in
+the <SAMP>`*BBDB*'</SAMP> buffer. This is useful if you are in the midst of
+sending or replying to a message, and you decide to add some recipients.
+You can use one of the <KBD>M-x bbdb</KBD> commands to display the set of
+people that you want to CC the message to, and then execute this command
+to add them to the list.
+</P><P>
+
+<A NAME="IDX101"></A>
+<A NAME="IDX102"></A>
+<A NAME="IDX103"></A>
+<A NAME="IDX104"></A>
+</P><P>
+
+If you are using Jamie Zawinski's <TT>`mail-abbrevs.el'</TT> package, which
+uses the word-abbrev mechanism for mail aliases, then you can store your
+mail aliases in the BBDB instead of duplicating the information
+elsewhere.</P><P>
+
+If you want a mail alias to be defined for a person, simply add a
+<CODE>mail-alias</CODE> field to their record. You may have multiple aliases
+for the same person; simply separate them with commas.</P><P>
+
+If more than one person has the same mail-alias, then that alias expands
+to the addresses of all of those people; in this way you can maintain
+mailing lists within the BBDB.</P><P>
+
+To actually define the aliases which are stored in the BBDB, call the
+function <CODE>bbdb-define-all-aliases</CODE> from your
+<CODE>mail-setup-hook</CODE>. This will search the database, and call
+<CODE>define-mail-alias</CODE> to define each of the resulting aliases.</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC28"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC27"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC29"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC24"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H2> 1.5 Reader-specific Features </H2>
+<!--docid::SEC28::-->
+<P>
+
+There are features of the <B>BBDB</B> that are available only for specific
+mail- and news-readers. These features are described below.
+</P><P>
+
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC29">Gnus Features</A></TD><TD ALIGN="left">Gnus-specific Features</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC33">VM Features</A></TD><TD ALIGN="left">VM-specific Features</TD><TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC29"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC30"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC33"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.5.1 Gnus-specific Features </H3>
+<!--docid::SEC29::-->
+<P>
+
+The <B>BBDB</B> can be used to provide score information, or to integrate
+database information into the <B>Gnus</B> Summary buffer or the <B>GNUS</B>
+Subject List.
+</P><P>
+
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC30">Gnus Scoring</A></TD><TD ALIGN="left">Store score adjustments in the <B>BBDB</B></TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC31">Gnus Summary Buffer</A></TD><TD ALIGN="left"><B>BBDB</B> information in the Summary buffer</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC32">GNUS Subject List</A></TD><TD ALIGN="left"><B>BBDB</B> information in the Subject List</TD><TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC30"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC29"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC31"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC33"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.5.1.1 Scoring </H4>
+<!--docid::SEC30::-->
+<P>
+
+The <B>BBDB</B> can provide scoring information to <B>Gnus</B> in one of two
+ways.
+</P><P>
+
+
+<OL>
+<LI>
+
+Articles whose authors appear in the <B>BBDB</B> and who have
+<CODE>gnus-score</CODE> fields will have their scores adjusted by the value
+contained in that field.
+<LI>
+
+Articles whose authors appear in the <B>BBDB</B> but who do not have
+<CODE>gnus-score</CODE> fields will have their scores adjusted by
+<CODE>bbdb/gnus-score-default</CODE>. If <CODE>bbdb/gnus-score-default</CODE> is
+<CODE>nil</CODE>, no score adjustment will be made.
+</OL>
+
+The <B>BBDB</B> by default searches the field contained in
+<CODE>bbdb/gnus-score-field</CODE> for score values. To have the <B>BBDB</B> use
+a different field, change the value of this variable.
+<P>
+
+To enable <B>BBDB</B>-assisted scoring, add the <CODE>bbdb/gnus-score</CODE>
+function to <CODE>gnus-score-find-score-files-function</CODE>. Assuming that
+you want to preserve the default value of this variable, use a form
+similar to the following:
+</P><P>
+
+
+<PRE>
+(setq gnus-score-find-score-files-function
+ '(gnus-score-find-bnews bbdb/gnus-score))
+</PRE>
+
+<B>Note:</B> The default value in <B>Gnus</B> 5.5 is <CODE>gnus-score-find-bnews</CODE>.
+Check your configuration before using the above code, as your values may
+be different.
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC31"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC30"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC32"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC33"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.5.1.2 Gnus Summary Buffer Enhancements </H4>
+<!--docid::SEC31::-->
+<P>
+
+<B>Gnus</B> can use the <B>BBDB</B> to do one of two things:
+</P><P>
+
+
+<UL>
+<LI>
+
+Mark authors in the Summary Buffer who have records in the <B>BBDB</B> with
+a user-defined mark character. See Marking Posters, below.
+<LI>
+
+For authors in the Summary Buffer who also have records in the <B>BBDB</B>,
+replace their name as listed in the Summary Buffer with their name as
+stored in the <B>BBDB</B>. See Using Names from the <B>BBDB</B>, below.
+</UL>
+
+
+<H4>Marking Posters</H4>
+<P>
+
+Authors with records in the <B>BBDB</B> can be marked either with a
+user-defined mark character, or with a default one. The marking is
+enabled by the use of a Gnus user format code, as determined by
+<CODE>bbdb/gnus-summary-in-bbdb-format-letter</CODE>. This variable, which
+defaults to <SAMP>`b'</SAMP>, is used to create a format code which is intended
+for use in <CODE>gnus-summary-line-format</CODE>. The format code is created
+by concatenating <SAMP>`%u'</SAMP> with the value of
+<CODE>bbdb/gnus-summary-in-bbdb-format-letter</CODE>. In the default case
+this results in the creation of the format code <SAMP>`%ub'</SAMP>.
+</P><P>
+
+Posts are marked as follows: If the record for the poster has the field
+indicated in <CODE>bbdb-message-marker-field</CODE> (the default is
+<CODE>mark-char</CODE>), the value of that field is used as the mark
+character.<A NAME="DOCF5" HREF="bbdb.html#FOOT5">(5)</A> If no such field is present, the value of
+<CODE>bbdb/gnus-summary-known-poster-mark</CODE> will be used instead. If the
+author is not in the <B>BBDB</B>, a space will be used as the mark character.
+</P><P>
+
+
+<H4>Using Names from the <B>BBDB</B></H4>
+<P>
+
+The names reported for authors of posts in the Summary buffer can be
+altered to conform to the values present in their respective <B>BBDB</B>
+records (if any). This rewriting is enabled by the use of a Gnus user
+format code, as determined by
+<CODE>bbdb/gnus-summary-user-format-letter</CODE>. This variable, which
+defaults to <SAMP>`B'</SAMP>, is used to create a format code which is intended
+for use in <CODE>gnus-summary-line-format</CODE>. The format code is created
+by concatenating <SAMP>`%u'</SAMP> with the value of
+<CODE>bbdb/gnus-summary-user-format-letter</CODE>. In the default case this
+results in the creation of the format code <SAMP>`%uB'</SAMP>. This format code
+is intended to <B>replace</B> the format code previously used in the Summary
+buffer format line to indicate the author and/or net address (usually
+<SAMP>`%a'</SAMP>, <SAMP>`%n'</SAMP>, and/or <SAMP>`$N'</SAMP>).
+</P><P>
+
+The effects of this format code are in two independent parts - the
+marking of known posters, and the rewriting of posters names. The
+first, the marking of posters, occurs only when
+<CODE>bbdb/gnus-summary-mark-known-posters</CODE> is <CODE>t</CODE> (the default)
+and the posters have entries in the <B>BBDB</B>. When this variable is
+true, the marking occurs as described in the previous section, Marking
+Posters, above.
+</P><P>
+
+The poster name rewriting is done for all posters - not just for those
+with records in the <B>BBDB</B>. That said, rewriting rules for posters in
+the <B>BBDB</B> are more flexible than for those not listed. The rewriting is
+governed by two variables, as described below.
+</P><P>
+
+<CODE>bbdb/gnus-summary-prefer-real-names</CODE> can have one of three values -
+<SAMP>`t'</SAMP>, <SAMP>`bbdb'</SAMP>, or <CODE>nil</CODE>. In general, this variable governs
+the preference between net addresses and names. If it is <SAMP>`t'</SAMP>, the
+name (if any) will be used. If <SAMP>`nil'</SAMP>, the net address will be
+used. The third value, <SAMP>`bbdb'</SAMP>, can be used as a method for
+distinguishing between authors with records in the <B>BBDB</B> and those
+without. If the variable is set to <SAMP>`bbdb'</SAMP>, the name from the
+<B>BBDB</B> record will be used if the author has a record in the
+<B>BBDB</B>. If the author is not in the <B>BBDB</B>, the net address from
+the message will be printed. This variable makes little sense if
+<CODE>bbdb/gnus-summary-prefer-bbdb-data</CODE> is <SAMP>`nil'</SAMP>, as no names
+will be printed in the Summary buffer in this case - only net addresses.
+</P><P>
+
+<CODE>bbdb/gnus-summary-prefer-bbdb-data</CODE> is used to (dis)allow use of
+the <B>BBDB</B> for author data retrieval. If it is <SAMP>`t'</SAMP>, data from
+the <B>BBDB</B> will be used if available. If it is <SAMP>`nil'</SAMP>, data from
+the <B>BBDB</B> will not be used.
+</P><P>
+
+In the following examples, assume the following:
+</P><P>
+
+
+<OL>
+<LI>Message: <CODE>From: Jamie &#60;jwz@netscape.com&#62;</CODE><BR>
+
+<B>BBDB</B>: No record
+<LI>Message: <CODE>From: Matt &#60;simmonmt@acm.org&#62;</CODE><BR>
+
+<B>BBDB</B>: Name: <SAMP>`Matthew'</SAMP>, Net: <SAMP>`simmonmt@purdue.edu'</SAMP>
+</OL>
+
+<TABLE>
+
+<TR><TD><CODE>bbdb/gnus-summary-prefer-bbdb-data</CODE></TD>
+
+</TD><TD> @center <CODE>t</CODE>
+</TD><TD> @center <CODE>t</CODE>
+</TD><TD> @center <CODE>nil</CODE>
+</TR>
+<TR><TD><CODE>bbdb/gnus-summary-prefer-real-names</CODE></TD>
+
+</TD><TD> @center <CODE>t</CODE>
+</TD><TD> @center <CODE>bbdb</CODE>
+</TD><TD> @center <CODE>t</CODE>
+</TR>
+<TR><TD>Printed in Summary buffer for</TD>
+
+</TR>
+<TR><TD>@center Case 1</TD>
+
+</TD><TD> @center Jamie
+</TD><TD> @center jwz@netscape.com
+</TD><TD> @center Jamie
+</TR>
+<TR><TD>@center Case 2</TD>
+
+</TD><TD> @center Matthew
+</TD><TD> @center Matthew
+</TD><TD> @center Matt
+</TR></TABLE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC32"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC31"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC33"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC33"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.5.1.3 GNUS Summary Buffer Enhancements </H4>
+<!--docid::SEC32::-->
+<P>
+
+<I>This section is remarkably terse, as I don't have a copy of <B>GNUS</B>.
+If anybody can provide more descriptive information, please let me
+know.</I>
+</P><P>
+
+
+<PRE>
+(autoload 'bbdb/gnus-lines-and-from "bbdb-gnus")
+(setq gnus-optional-headers 'bbdb/gnus-lines-and-from)
+</PRE>
+
+<DL COMPACT>
+
+<DT><CODE>bbdb/gnus-mark-known-posters</CODE>
+<DD>
+<A NAME="IDX105"></A>
+<A NAME="IDX106"></A>
+If <CODE>t</CODE> (the default), then the <B>GNUS</B> subject list will contain an
+indication of those messages posted by people who have entries in
+the Insidious Big Brother Database (they will be marked with an
+asterisk.) <P>
+
+<A NAME="IDX107"></A>
+You can change the character used to mark records on a record-by-record
+basis by adding a <CODE>mark-char</CODE> property to the record, whose value
+is be the string to display (preferably one character.) </P><P>
+
+<DT><CODE>bbdb/gnus-header-prefer-real-names</CODE>
+<DD>
+<A NAME="IDX108"></A>
+Default: <CODE>nil</CODE>. if <CODE>t</CODE>, then the <B>GNUS</B> subject list will
+display real names instead of network addresses. <P>
+
+<DT><CODE>bbdb/gnus-header-show-bbdb-names</CODE>
+<DD>
+<A NAME="IDX109"></A>
+Default: <CODE>t</CODE>. If both this variable and
+the <CODE>bbdb/gnus-header-prefer-real-names</CODE> variable are true, then
+for news messages from people who are in your database, the name displayed
+will be the primary name from the database, rather than the one from
+the <SAMP>`From:'</SAMP> line of the message. This doesn't affect the names of
+people who aren't in the database, of course.<P>
+
+<DT><CODE>bbdb/gnus-lines-and-from-length</CODE>
+<DD>
+<A NAME="IDX110"></A>
+Default: 18. The number of characters used to display <SAMP>`From:'</SAMP> info in
+<B>GNUS</B>, if you have set <CODE>gnus-optional-headers</CODE> to
+<CODE>bbdb/gnus-lines-and-from</CODE>. </DL>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC33"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC32"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC34"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC29"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.5.2 VM-specific features </H3>
+<!--docid::SEC33::-->
+<P>
+
+The <B>BBDB</B> can be used to integrate database information into the
+message summary.
+</P><P>
+
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC34">VM Message Summary</A></TD><TD ALIGN="left"><B>BBDB</B> information in message summary</TD><TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC34"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC33"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC29"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC33"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.5.2.1 VM Message Summary Enhancements </H4>
+<!--docid::SEC34::-->
+<P>
+
+<A NAME="IDX111"></A>
+<A NAME="IDX112"></A>
+<A NAME="IDX113"></A>
+<A NAME="IDX114"></A>
+VM users can cause their summary buffer to display the name of the
+message sender according to BBDB data, instead of according to the
+contents of the current message's headers. In VM 5.40 or later, use
+the summary format control <CODE>%UB"</CODE> instead of <CODE>"%F"</CODE>, and the
+current record name will be shown there if available. If no entry is
+found it behaves like <CODE>"%F"</CODE>. See the documentation for
+<CODE>vm-summary-format</CODE> for more details. Warning, this may
+significantly slow down summary generation for large folders.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC35"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC34"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC36"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H2> 1.6 Using the <B>BBDB</B> with other packages </H2>
+<!--docid::SEC35::-->
+<P>
+
+The <B>BBDB</B> adds functionality to several packages. The following sections
+detail these augmentations.
+</P><P>
+
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC36">Using Message Mode</A></TD><TD ALIGN="left">Using the <B>BBDB</B> with Message Mode</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC37">Using Reportmail</A></TD><TD ALIGN="left">Using the <B>BBDB</B> with Reportmail</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC38">Using Supercite</A></TD><TD ALIGN="left">Using the <B>BBDB</B> with Supercite</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC39">Using Web Browsers</A></TD><TD ALIGN="left">Using the <B>BBDB</B> with Web Browsers</TD><TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC36"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC37"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.6.1 Using the <B>BBDB</B> with Message Mode </H3>
+<!--docid::SEC36::-->
+<P>
+
+At this time, the only feature the <B>BBDB</B> adds to Message mode is the binding
+to <KBD>M-TAB</KBD> which allows for <B>BBDB</B> record completion.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC37"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC36"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC38"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.6.2 Using the <B>BBDB</B> with Reportmail </H3>
+<!--docid::SEC37::-->
+<P>
+
+The <B>BBDB</B> can modify the <TT>`reportmail.el'</TT> package to use information
+from <B>BBDB</B> records when identifying the senders or recipients of e-mail
+messages.
+</P><P>
+
+In normal operation, Reportmail displays the name and net address sender and
+recipient of incoming messages. The <B>BBDB</B> can be configured to intercept
+and rewrite this information before it appears in the Emacs mode-line. It
+first attempts to rewrite the sender and/or recipient information by
+substituting those addresses with information from the <B>BBDB</B>. Replacement
+information is first sought from the <CODE>mail-name</CODE> field in the respective
+<B>BBDB</B> records. If no such field is found, the <CODE>name</CODE> field is
+returned. If no <B>BBDB</B> record is found, no rewriting is performed.
+</P><P>
+
+The <B>BBDB</B>-Reportmail augmentation is accomplished through the advising of
+the Reportmail <CODE>display-time-get-field</CODE> function in order to do
+a-posteriori modification of the returned value. The augmentation uses the
+<CODE>bbdb/reportmail-alternate-full-name</CODE> function to retrieve data from the
+<B>BBDB</B> for use in rewriting.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC38"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC37"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC39"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.6.3 Using the <B>BBDB</B> with Supercite </H3>
+<!--docid::SEC38::-->
+<P>
+
+The <B>BBDB</B> can be used with Supercite to store attributions with <B>BBDB</B>
+records. Normally, when a non-default attribution is entered for a given
+message, the entered attribution is used for that message, and is then
+discarded. When the <B>BBDB</B>-Supercite augmentation is enabled, the
+non-default attribution will be added to the record (if any) for the entity
+being cited. This poor explanation sounds complicated, but it's not. If a
+message from <SAMP>`Jamie Zawinski &#60;jwz@netscape.com&#62;'</SAMP> is being replied to,
+Supercite will, by default, suggest the citation <SAMP>`Jamie'</SAMP>. If the
+non-default citation <SAMP>`jwz'</SAMP> is entered, Supercite can save it with the
+<B>BBDB</B> record for <SAMP>`Jamie Zawinski'</SAMP> in the <CODE>attribution</CODE> field.
+</P><P>
+
+The field used can be changed by changing the value of
+<CODE>bbdb/sc-attribution-field</CODE>.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC39"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC38"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.6.4 Using the <B>BBDB</B> with Web Browsers </H3>
+<!--docid::SEC39::-->
+<P>
+
+The <B>BBDB</B>/Web Browser integration is in two parts, one which is
+automatically enabled, and one which must be manually enabled (see section <A HREF="bbdb.html#SEC15">1.1.4.9 Initializing <B>BBDB</B> support for Web Browsers</A>). The first feature added is the ability to display the URL
+associated with a given record in a Web Browser. The second is the ability to
+add URLs to <B>BBDB</B> records from within W3, the Emacs Web Browser.
+</P><P>
+
+Pressing <KBD>W</KBD> in the <CODE>*BBDB*</CODE> buffer while the cursor is positioned
+over a record with a <CODE>www</CODE> field will cause the first URL in the field to
+be loaded in a Web Browser. This functionality uses <CODE>browse-url</CODE> to
+display URLs - see the documentation for <CODE>browse-url</CODE> for information on
+selecting the browser to be used.
+</P><P>
+
+If W3 is used, and if the <B>BBDB</B>/W3 functionality has been enabled as
+described in section <A HREF="bbdb.html#SEC15">1.1.4.9 Initializing <B>BBDB</B> support for Web Browsers</A>, pressing the <KBD>:</KBD> key will add the URL
+currently being displayed in W3 to a user-specified <B>BBDB</B> record.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC40"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC39"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC41"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H2> 1.7 Options </H2>
+<!--docid::SEC40::-->
+<P>
+
+There are many variables which control the behavior of the Insidious Big
+Brother Database, and there are many hook-variables which can be used to
+modify its behavior in more complex ways. Several pieces of functionality
+are included which use the hooks in this way. </P><P>
+
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC41">Customization Parameters</A></TD><TD ALIGN="left">Customization Parameters</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC42">Customization Hooks</A></TD><TD ALIGN="left">Customization Hooks</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC43">Predefined Hooks</A></TD><TD ALIGN="left">Predefined Hooks</TD><TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC41"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC42"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.7.1 Customization Parameters </H3>
+<!--docid::SEC41::-->
+<P>
+
+<DL COMPACT>
+
+<DT><CODE>bbdb-file</CODE>
+<DD>
+<A NAME="IDX115"></A>
+The name of the file which contains your personal database. Default:
+<TT>`~/.bbdb'</TT>.
+<P>
+
+<DT><CODE>bbdb-default-area-code</CODE>
+<DD>
+<A NAME="IDX116"></A>
+<A NAME="IDX117"></A>
+The default area code to use when prompting for a new phone number.
+Default: 415. This must be a number, not a string.<P>
+
+<DT><CODE>bbdb-north-american-phone-numbers-p</CODE>
+<DD>
+<A NAME="IDX118"></A>
+<A NAME="IDX119"></A>
+<A NAME="IDX120"></A>
+Whether syntax-checking of phone numbers should be enforced. Default:
+<CODE>t</CODE>. This only works for Bell-system phone numbers. If this is true,
+then you can't enter invalid phone numbers, and all phone numbers are
+pretty-printed in the same way. European phone numbers don't have as
+strict a syntax, however, so this is a harder problem for them (on which
+I am punting). <P>
+
+You can have both styles of phone number in your database by providing a
+prefix argument to the <CODE>bbdb-insert-new-field</CODE> command. </P><P>
+
+<DT><CODE>bbdb-electric-p</CODE>
+<DD>
+<A NAME="IDX121"></A>
+<A NAME="IDX122"></A>
+Whether bbdb mode should be <I>"electric"</I> like <CODE>electric-buffer-list</CODE>.
+Default: <CODE>t</CODE>. Basically this means that when you type space after
+<KBD>M-x bbdb</KBD>, your window configuration will be restored to what it was
+before you invoked the db list. (The <CODE>bbdb-mode</CODE> commands still work as
+well.) <P>
+
+There are some problems with electric modes; for example, keyboard
+macros and incremental search don't work. (This is not a bug in BBDB,
+but in <TT>`electric.el'</TT>.)</P><P>
+
+<DT><CODE>bbdb-case-fold-search</CODE>
+<DD>
+<A NAME="IDX123"></A>
+Default: the same as <CODE>case-fold-search</CODE>. <CODE>case-fold-search</CODE> is
+bound to this by <KBD>M-x bbdb</KBD> and related commands. This variable lets
+the case-sensitivity of <KBD>^S</KBD> and of the bbdb searching commands be
+different.
+<P>
+
+<DT><CODE>bbdb/mail-auto-create-p</CODE>
+<DD>
+<A NAME="IDX124"></A>
+If this is <CODE>t</CODE> (the default), then <B>VM</B>, <B>MH</B>, and <B>RMAIL</B>
+will automatically create new bbdb records for people you receive mail
+from. If this variable is a function name or lambda expression, then it
+is called with no arguments to decide whether an entry should be
+automatically created. You can use this to, for example, not create
+records for messages which have reached you through a particular mailing
+list, or to only create records automatically if the mail has a
+particular subject. See the variables
+<CODE>bbdb-ignore-most-messages-alist</CODE> and
+<CODE>bbdb-ignore-some-messages-alist</CODE> (See section <A HREF="bbdb.html#SEC43">1.7.3 Predefined Hooks</A>) <P>
+
+<DT><CODE>bbdb/news-auto-create-p</CODE>
+<DD>
+<A NAME="IDX125"></A>
+<A NAME="IDX126"></A>
+If this is <CODE>t</CODE> (default: <CODE>nil</CODE>), then <B>GNUS</B> will
+automatically create new <B>BBDB</B> records for people you read messages
+by. If this is a function name or lambda expression, then it is called
+with no arguments to decide whether an entry should be automatically
+created. You can use this to, for example, create or not create
+messages which have a particular subject. See the variable
+<CODE>bbdb-auto-notes-alist</CODE> (See section <A HREF="bbdb.html#SEC43">1.7.3 Predefined Hooks</A>). <P>
+
+If you want to autocreate messages based on the current newsgroup, it's
+probably a better idea to set this variable to <CODE>t</CODE> or <CODE>nil</CODE> from your
+<CODE>gnus-select-group-hook</CODE> instead. </P><P>
+
+To automatically remember users in certain groups, you can do something
+like
+<PRE>
+(setq gnus-select-group-hook
+'(lambda ()
+(setq bbdb/news-auto-create-p
+(or (string= "some.news.group" gnus-newsgroup-name)
+(string= "other.news.group" gnus-newsgroup-name)))))
+</PRE>
+
+<DT><CODE>bbdb-quiet-about-name-mismatches</CODE>
+<DD>
+<A NAME="IDX127"></A>
+If this is false (the default), then <B>BBDB</B> will prompt you when it notices a
+name change, that is, when the "real name" in a message doesn't correspond
+to a record already in the database with the same network address. As in,
+<I>"John Smith <jqs@frob.com>"</I> versus
+<I>"John Q. Smith <jqs@frob.com>".</I> If this is true, then you will
+not be asked if you want to change it (and it will not be changed.) <P>
+
+<DT><CODE>bbdb-use-alternate-names</CODE>
+<DD>
+<A NAME="IDX128"></A>
+<A NAME="IDX129"></A>
+<A NAME="IDX130"></A>
+If this is false, then the <B>BBDB</B> will not use the <B>AKA</B> field.
+Otherwise (the default) then the mail and news interfaces will ask you
+if you want to add an alternate name when a name-change is noticed, and
+will ask you whether the new name should be made the primary one.
+Note that if <CODE>bbdb-quiet-about-name-mismatches</CODE> is true, you will
+not be asked any questions about alternate names.
+<P>
+
+<DT><CODE>bbdb-readonly-p</CODE>
+<DD>
+<A NAME="IDX131"></A>
+If this is true (default: <CODE>nil</CODE>), then nothing will attempt to change the
+database implicitly, and you will be prevented from doing it
+explicitly. If you have more than one emacs running at the same time,
+you might want to arrange for this to be set to <CODE>t</CODE> in all but one of
+them. <P>
+
+<DT><CODE>bbdb-auto-revert-p</CODE>
+<DD>
+<A NAME="IDX132"></A>
+If this variable is true (default: <CODE>nil</CODE>) and the <B>BBDB</B> file is noticed to
+have changed on disk, it will be automatically reverted without
+prompting you first. Otherwise you will be asked. (But if the file has
+changed and you have made changes in memory as well, you will always be
+asked.) <P>
+
+<DT><CODE>bbdb-notice-auto-save-file</CODE>
+<DD>
+<A NAME="IDX133"></A>
+<A NAME="IDX134"></A>
+If this is true (default: <CODE>nil</CODE>), then the <B>BBDB</B> will notice when its
+auto-save file is newer than the file is was read from, and will offer
+to revert. <P>
+
+<DT><CODE>bbdb-use-pop-up</CODE>
+<DD>
+<A NAME="IDX135"></A>
+<A NAME="IDX136"></A>
+If true (the default), display a continuously-updating <B>BBDB</B>
+window while in <B>VM</B>, <B>MH</B>, <B>RMAIL</B>, or <B>GNUS</B>.
+Each time a new message is selected, the record corresponding to
+that message's sender will be displayed in another window. The
+buffer in this other window will be in bbdb-mode, and all
+corresponding commands will be available. <P>
+
+This buffer will be positioned on the screen by finding the tallest
+of the windows present, and splitting it such that the bottom
+<CODE>bbdb-pop-up-target-lines</CODE> lines of the window display the
+<SAMP>`*BBDB*'</SAMP> buffer. With the default configurations of <B>VM</B>,
+<B>MH</B>, <B>RMAIL</B>, and <B>GNUS</B>, this means that the bbdb-list
+buffer will be just below the message-body buffer. </P><P>
+
+If this is the symbol <CODE>horiz</CODE>, then the <B>BBDB</B> window will be
+stacked horizontally instead of vertically, if there is room to do that
+tastefully. </P><P>
+
+<DT><CODE>bbdb-pop-up-target-lines</CODE>
+<DD>
+<A NAME="IDX137"></A>
+Desired number of lines in a <B>VM/MH/RMAIL/GNUS</B> pop-up <B>BBDB</B> window,
+default 5. <P>
+
+<DT><CODE>bbdb-completion-type</CODE>
+<DD>
+<A NAME="IDX138"></A>
+<A NAME="IDX139"></A>
+<A NAME="IDX140"></A>
+<A NAME="IDX141"></A>
+<A NAME="IDX142"></A>
+Controls the behavior of the <CODE>bbdb-complete-name</CODE> command. If <CODE>nil</CODE>
+(the default), completion is done across the set of all full-names and
+user-ids in the database; if the symbol <CODE>name</CODE>, completion is
+done on real-names only; if the symbol <CODE>net</CODE>, completion is done
+on network addresses only; if it is <CODE>primary</CODE>, then completion is
+done only across the set of primary network addresses (the first address
+in the list of addresses for a given user). If it is
+<CODE>primary-or-name</CODE>, completion is done across primaries and real
+names. <P>
+
+<DT><CODE>bbdb-user-mail-names</CODE>
+<DD>
+<A NAME="IDX143"></A>
+A regular expression identifying the addresses that belong to you. If a
+message from an address matching this is seen, the <B>BBDB</B> record for the
+<SAMP>`To:'</SAMP> line will be shown instead of the one for the <SAMP>`From:'</SAMP>
+line. If this is <CODE>nil</CODE>, it will default to the value of
+<CODE>(user-login-name)</CODE>. <P>
+
+<DT><CODE>bbdb-always-add-addresses</CODE>
+<DD>
+<A NAME="IDX144"></A>
+If this is <CODE>t</CODE>, then whenever the Insidious Big Brother Database
+notices a new email address corresponding to a person who is in the
+database, it will add it to the database. If this is <CODE>nil</CODE> (the
+default), then whenever a new network address is noticed for a person in
+the database, you will be asked whether to add the address. If this is
+the symbol <CODE>never</CODE> (really if it is not <CODE>t</CODE> and not <CODE>nil</CODE>)
+then new network addresses will never be automatically added. <P>
+
+<DT><CODE>bbdb-new-nets-always-primary</CODE>
+<DD>
+<A NAME="IDX145"></A>
+If this is <CODE>t</CODE>, then when the Insidious Big Brother Database adds a new
+address to a record, it will always add it to the front of the list of
+addresses, making it the primary address. If this is <CODE>nil</CODE> (the default),
+then you will be asked. If this is the symbol <CODE>never</CODE> (really if
+it is not <CODE>t</CODE> and not <CODE>nil</CODE>) then new network addresses will
+always be added to the end of the list. <P>
+
+<DT><CODE>bbdb-canonicalize-redundant-nets-p</CODE>
+<DD>
+<A NAME="IDX146"></A>
+If this is non-<CODE>nil</CODE>, redundant network addresses will be ignored.
+If a record has an address of the form <CODE>foo@baz.com</CODE>, setting this
+to <CODE>t</CODE> will cause subsequently-noticed addresses
+like <CODE>foo@bar.baz.com</CODE> to be ignored (since we already have a more
+general form of that address.) This is similar in function to one of
+the possible uses of the variable <CODE>bbdb-canonicalize-net-hook</CODE>
+but is somewhat more automatic. (This can't quite be implemented in
+terms of the canonicalize-net-hook because it needs access to the
+database to determine whether an address is redundant, and the
+canonicalize-net-hook is purely a textual manipulation which is
+performed before any database access.)
+<P>
+
+<DT><CODE>bbdb-message-caching-enabled</CODE>
+<DD>
+<A NAME="IDX147"></A>
+Whether caching of the message-&#62;bbdb-record association should be
+used for the interfaces which support it (<B>VM</B>, <B>MH</B>, and
+<B>RMAIL</B>). This can speed things up a lot. One implication of
+this variable being true (the default) is that the
+<CODE>bbdb-notice-hook</CODE> will not be called each time a message is
+selected, but only the first time. Likewise, if selecting a message
+would generate a question (whether to add an address, change the
+name, etc) you will only be asked that question the very first time
+the message is selected. <P>
+
+<DT><CODE>bbdb-elided-display</CODE>
+<DD>
+<A NAME="IDX148"></A>
+Default: <CODE>nil</CODE>. Set this to <CODE>t</CODE> to make the bbdb-display commands
+default to displaying one line per record instead of a full listing.
+Set this to a list of some of the symbols <CODE>'(address phone net
+notes)</CODE> to select those fields to be left out of the listing (you can't
+leave out the name field). <P>
+
+This is the default state for <KBD>M-x bbdb</KBD> and friends. You can have a
+different default for when the <B>BBDB</B> buffer is automatically updated by the
+mail and news interfaces by setting the variable
+<CODE>bbdb-pop-up-elided-display</CODE>. If that variable is unbound, this
+variable will be consulted instead.</P><P>
+
+<DT><CODE>bbdb-pop-up-elided-display</CODE>
+<DD>
+<A NAME="IDX149"></A>
+Default: unbound. Set this to <CODE>t</CODE> if to make the pop-up <B>BBDB</B> buffer
+default to displaying one line per record instead of a full listing.
+Set this to a list of some of the symbols <CODE>'(address phone net
+notes)</CODE> to select those fields to be left out of the listing (you can't
+leave out the name field). <P>
+
+The default state for <KBD>M-x bbdb</KBD> and friends is controlled by the
+variable <CODE>bbdb-elided-display</CODE>; this variable is the default for
+when the <B>BBDB</B> buffer is automatically updated by the mail and news
+interfaces. If bbdb-pop-up-elided-display is unbound, then
+bbdb-elided-display the former will be consulted instead by mail and
+news.</P><P>
+
+<DT><CODE>bbdb-offer-save</CODE>
+<DD>
+<A NAME="IDX150"></A>
+If <CODE>t</CODE> (the default), then certain actions will cause the <B>BBDB</B> to
+ask you whether you wish to save the database. If <CODE>nil</CODE>, then the
+offer to save will never be made. If not <CODE>t</CODE> and not <CODE>nil</CODE>, then
+any time it would ask you, it will just save it without asking. <P>
+
+</DL>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC42"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC41"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC43"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.7.2 Customization Hooks </H3>
+<!--docid::SEC42::-->
+<P>
+
+All of the hooks variables described below may be set to a symbol or
+lambda expression, which will be funcalled; or may be set to a list of
+symbols or lambda expressions, each of which will be funcalled in turn.
+Almost all hooks in Emacs work this way. But notice that some of the
+hooks described below are called with arguments.
+</P><P>
+
+<DL COMPACT>
+
+<DT><CODE>bbdb-list-hook</CODE>
+<DD>
+<A NAME="IDX151"></A>
+Hook or hooks invoked after the bbdb-list-buffer is filled in. Invoked
+with no arguments. <P>
+
+<DT><CODE>bbdb-create-hook</CODE>
+<DD>
+<A NAME="IDX152"></A>
+Hook or hooks invoked each time a new bbdb-record is created. Invoked
+with one argument, the new record. This is called <EM>before</EM> the record is
+added to the database. Note that <CODE>bbdb-change-hook</CODE> will be called as
+well. <P>
+
+<DT><CODE>bbdb-change-hook</CODE>
+<DD>
+<A NAME="IDX153"></A>
+Hook or hooks invoked each time a bbdb-record is altered. Invoked with
+one argument, the record. This is called <EM>before</EM> the database buffer
+is modified. Note that if a new bbdb record is created, both this hook and
+<CODE>bbdb-create-hook</CODE> will be called. <P>
+
+<DT><CODE>bbdb-mode-hook</CODE>
+<DD>
+<A NAME="IDX154"></A>
+Hook or hooks invoked when the <SAMP>`*BBDB*'</SAMP> buffer is created.
+<P>
+
+<DT><CODE>bbdb-notice-hook</CODE>
+<DD>
+<A NAME="IDX155"></A>
+Hook or hooks invoked each time a bbdb-record is "noticed," that
+is, each time it is displayed by the news or mail interfaces.
+Invoked with one argument, the new record. The record need not have
+been modified for this to be called - use <CODE>bbdb-change-hook</CODE> for that.
+You can use this to, for example, add something to the notes field
+based on the subject of the current message. It is up to your hook
+to determine whether it is running in <B>GNUS</B>, <B>VM</B>,
+<B>MH</B>, or <B>RMAIL</B>, and to act appropriately. <P>
+
+Also note that <CODE>bbdb-change-hook</CODE> will <EM>not</EM> be called as a
+result of any modifications you may make to the record inside this
+hook. </P><P>
+
+Beware that if the variable <CODE>bbdb-message-caching-enabled</CODE> is
+true (a good idea) then when you are using <B>VM</B>, <B>MH</B>, or
+<B>RMAIL</B>, this hook will be called only the first time that
+message is selected. (The <B>GNUS</B> interface does not use caching.)
+When debugging the value of this hook, it is a good idea to set
+caching-enabled to <CODE>nil</CODE>. </P><P>
+
+<DT><CODE>bbdb-after-read-db-hook</CODE>
+<DD>
+<A NAME="IDX156"></A>
+Hook or hooks invoked (with no arguments) just after the Insidious Big
+Brother Database is read in. Note that this can be called more than once if
+the <B>BBDB</B> is reverted. One possible use for this is to rename the
+<TT>`.bbdb'</TT> buffer; for example <P>
+
+<CODE>(setq bbdb-after-read-db-hook '(lambda () (rename-buffer " bbdb")))</CODE>
+</P><P>
+
+will cause the buffer visiting the <CODE>bbdb-file</CODE> to be
+called <CODE>" bbdb"</CODE>. The leading space in its name will prevent
+it from showing up in the buffer list.
+</P><P>
+
+<DT><CODE>bbdb-load-hook</CODE>
+<DD>
+<A NAME="IDX157"></A>
+Hook or hooks invoked (with no arguments) when the Insidious Big Brother
+Database code is first loaded. WARNING: Slow functions should not be
+put on this hook, as the <B>BBDB</B> code will, if not loaded before, be
+loaded during the first use of <B>BBDB</B>-related Customization
+functions. Slow functions should be put on <CODE>bbdb-initialize-hook</CODE>.
+<P>
+
+<DT><CODE>bbdb-initialize-hook</CODE>
+<DD>
+<A NAME="IDX158"></A>
+<A NAME="IDX159"></A>
+Hook or hooks invoked (with no arguments) when the
+<CODE>bbdb-initialize</CODE> function is called.
+<P>
+
+<DT><CODE>bbdb-canonicalize-net-hook</CODE>
+<DD>
+<A NAME="IDX160"></A>
+If this is non-<CODE>nil</CODE>, it should be a function of one argument: a
+network address string. (Note that, unlike the other hook-variables
+described above, this may not be a list of functions.) Whenever the
+Insidious Big Brother Database "notices" a message, the corresponding
+network address will be passed to this function first, as a kind of
+"filter" to do whatever transformations upon it you like before it is
+compared against or added to the database. For example: it is the case
+that <CODE>CS.CMU.EDU</CODE> is a valid return address for all mail
+originating at a machine in the <CODE>.CS.CMU.EDU</CODE> domain. So, if you
+wanted all such addresses to be canonically hashed as
+<CODE>user@CS.CMU.EDU</CODE>, instead of as <CODE>user@somehost.CS.CMU.EDU</CODE>,
+you might set this variable to a function like this: <P>
+
+
+<PRE>
+(setq bbdb-canonicalize-net-hook
+ '(lambda (addr)
+ (cond ((string-match
+ "\\`\\([^@]+@\\).*\\.\\(CS\\.CMU\\.EDU\\)\\'"
+ addr)
+ (concat (substring addr
+ (match-beginning 1) (match-end 1))
+ (substring addr
+ (match-beginning 2) (match-end 2))))
+ (t addr))))
+</PRE>
+
+You could also use this function to rewrite UUCP-style addresses into
+domain-style addresses, or any number of other things.<P>
+
+This function will be called repeatedly until it returns a value EQ to the
+value passed in. So multiple rewrite rules might apply to a single
+address.</P><P>
+
+There is an example of the use of this variable in the
+file <TT>`bbdb-hooks.el'</TT>: the function
+<CODE>sample-bbdb-canonicalize-net-hook</CODE>.</DL>
+<P>
+
+<A NAME="IDX161"></A>
+<A NAME="IDX162"></A>
+The <CODE>bbdb-canonicalize-net-hook</CODE> is powerful in that it allows
+arbitrary rewriting of addresses, however, in many cases that is
+overkill. The function <CODE>bbdb-delete-redundant-nets</CODE> can be
+used as a value of <CODE>bbdb-change-hook</CODE> to cause network addresses
+which appear to be "redundant" to be deleted each time a modification
+is made to a record. </P><P>
+
+This works as follows: suppose one gets mail from <CODE>user@foo.bar.com</CODE>,
+and then later gets mail from <CODE>user@bar.com</CODE>. At this point, one
+can generally delete the <CODE>user@foo.bar.com</CODE> address, since the
+<CODE>user@bar.com</CODE> address is more general. (See also the
+variable `bbdb-canonicalize-redundant-nets-p', which has the effect of
+ignoring subsequent addresses from <CODE>user@quux.bar.com</CODE> if the
+address <CODE>user@bar.com</CODE> is already known.)</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC43"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC42"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.7.3 Predefined Hooks </H3>
+<!--docid::SEC43::-->
+<P>
+
+<A NAME="IDX163"></A>
+<A NAME="IDX164"></A>
+If the variable <CODE>bbdb-change-hook</CODE> is set to the symbol
+<CODE>bbdb-timestamp-hook</CODE> (the default), then every record in the
+database will have a field named <SAMP>`timestamp'</SAMP>, which will always
+contain the date and time at which this record was created or last
+modified.
+</P><P>
+
+<A NAME="IDX165"></A>
+If the variable <CODE>bbdb-create-hook</CODE> is set to the symbol
+<CODE>bbdb-creation-date-hook</CODE> (the default), then every record in the
+database will have a field named <SAMP>`creation-date'</SAMP>, which will
+contain the date and time at which this record was added to the
+database.
+</P><P>
+
+<A NAME="IDX166"></A>
+<A NAME="IDX167"></A>
+<A NAME="IDX168"></A>
+If the variable <CODE>bbdb/mail-auto-create-p</CODE> is set to the symbol
+<CODE>bbdb-ignore-most-messages-hook</CODE>, then the variable
+<CODE>bbdb-ignore-most-messages-alist</CODE> will determine which messages
+should have records automatically created for them. The format of this
+alist is
+<PRE>
+(( <VAR>HEADER-NAME</VAR> . <VAR>REGEXP</VAR> ) ... )
+</PRE>
+
+for example,
+
+<PRE>
+(("From" . "@.*\\.maximegalon\\.edu")
+ ("Subject" . "time travel"))
+</PRE>
+
+will cause <B>BBDB</B> entries to be made only for messages sent by
+people at Maximegalon U., or (that's <EM>or</EM>) people posting
+about time travel. <P>
+
+There may be only one entry per header in this alist: that is, </P><P>
+
+
+<PRE>
+(("From" . "addr1\\|addr2") ... )
+</PRE>
+
+is legal, but
+<P>
+
+
+<PRE>
+(("From" . "addr1") ("From" . "addr2") ... )
+</PRE>
+
+is not.
+<P>
+
+<A NAME="IDX169"></A>
+<A NAME="IDX170"></A>
+<A NAME="IDX171"></A>
+<A NAME="IDX172"></A>
+If the variable <CODE>bbdb/mail-auto-create-p</CODE> is set to the symbol
+<CODE>bbdb-ignore-some-messages-hook</CODE>, then the variable
+<CODE>bbdb-ignore-some-messages-alist</CODE> will determine which messages
+should have records automatically created for them. This is the exact
+inverse of the semantics of the <CODE>bbdb-ignore-most-messages-alist</CODE>:
+the alist specifies which messages should <EM>not</EM> have records
+automatically created for them, instead of which should. For
+example, </P><P>
+
+
+<PRE>
+(("From" . "mailer.daemon")
+ ("To" . "mailing-list-1\\|mailing-list-2")
+ ("CC" . "mailing-list-1\\|mailing-list-2"))
+</PRE>
+
+will cause <B>BBDB</B> entries to not be made for messages from any mailer daemon,
+or messages sent to or <B>CC</B>ed to either of two mailing lists. <P>
+
+The variable <CODE>bbdb/news-auto-create-p</CODE> may be set to either of the
+above-mentioned functions as well, to get this behavior for netnews
+messages instead of mail messages.</P><P>
+
+<A NAME="IDX173"></A>
+<A NAME="IDX174"></A>
+<A NAME="IDX175"></A>
+If the variable <CODE>bbdb-notice-hook</CODE> is set to the symbol
+<CODE>bbdb-auto-notes-hook</CODE>, then the variable <CODE>bbdb-auto-notes-alist</CODE>
+may be used to automatically add text to the notes fields of the records
+corresponding to certain messages. The format of this alist is </P><P>
+
+
+<PRE>
+(( <VAR>HEADER-NAME</VAR>
+ (<VAR>REGEXP</VAR> . <VAR>STRING</VAR>) ... )
+ ... )
+</PRE>
+
+for example,
+<P>
+
+
+<PRE>
+(("To" ("-vm@" . "VM mailing list"))
+ ("Subject" ("sprocket" . "mail about sprockets")
+ ("you bonehead" . "called me a bonehead")))
+</PRE>
+
+will cause the text <CODE>"VM mailing list"</CODE> to be added to the notes field of
+the record corresponding to anyone you get mail from via one of the <B>VM</B>
+mailing lists. If, that is, <CODE>bbdb/mail-auto-create-p</CODE> is set such
+that the record would have been created, or if the record already
+existed.<P>
+
+The format of elements of this list may also be
+</P><P>
+
+
+<PRE>
+(<VAR>REGEXP</VAR> <VAR>FIELD-NAME</VAR> <VAR>STRING</VAR>)
+</PRE>
+
+or
+
+<PRE>
+(<VAR>REGEXP</VAR> <VAR>FIELD-NAME</VAR> <VAR>STRING</VAR> <VAR>REPLACE-P</VAR>)
+</PRE>
+
+meaning add the given string to the named field. The field-name may not
+be <SAMP>`name'</SAMP>, <SAMP>`aka'</SAMP>, <SAMP>`address'</SAMP>, <SAMP>`phone'</SAMP>, or <SAMP>`net'</SAMP>
+(builtin fields) but must be either <SAMP>`notes'</SAMP>, <SAMP>`company'</SAMP>, or the
+name of a user-defined note-field. <P>
+
+
+<PRE>
+("pattern" . "string to add")
+</PRE>
+
+is equivalent to
+<P>
+
+
+<PRE>
+("pattern" notes "string to add")
+</PRE>
+
+<VAR>STRING</VAR> can contain <CODE>\&#38;</CODE> or <CODE>\N</CODE> escapes like in the function
+<CODE>replace-match</CODE>. For example, to automatically add the contents of the
+<B>organization</B> field of a message to the <CODE>company</CODE> field of a <B>BBDB</B>
+record, you can use this: <P>
+
+
+<PRE>
+("Organization" (".*" company "\\&"))
+</PRE>
+
+(Note you need two \ to get a single \ into a lisp string literal.)
+<P>
+
+If STRING is an integer <I>N</I>, the <I>N</I>th matching subexpression is
+used, so the above example could be written more efficiently as </P><P>
+
+
+<PRE>
+("Organization" (".*" company 0))
+</PRE>
+
+If STRING is neither a string or an integer, it should be a function
+which is called with the contents of the field, and the result of the
+function call is used.
+<P>
+
+If the <VAR>REPLACE-P</VAR> flag is true, then the string replaces the old
+contents instead of being appended to it.
+</P><P>
+
+If multiple clauses match the message, all of the corresponding strings
+will be added. </P><P>
+
+If the string is being appended (<VAR>REPLACE-P</VAR> is false or not
+provided) then the new string is appended to the end of the existing
+field value, with an intervening newline. So each piece of text
+automatically added to this field will go on its own line. </P><P>
+
+You can control what the separator is by putting a <CODE>field-separator</CODE>
+property on the symbol naming the field. For example, to make text
+automatically added to a field named <CODE>newsgroups</CODE> be separated by
+commas, you could do </P><P>
+
+
+<PRE>
+(put 'newsgroups 'field-separator "; ")
+</PRE>
+
+This variable works for news as well. You might want to arrange for
+this to have a different value when in mail as when in news. <P>
+
+There may be only one entry per header in this alist: that is,</P><P>
+
+
+<PRE>
+ (("Subject" ("\\bfoo\\b" . "Foo!!")
+ ("bar" . "Bar!")))
+</PRE>
+
+will work, but
+<P>
+
+
+<PRE>
+ (("Subject" ("\\bfoo\\b" . "Foo!!"))
+ ("Subject" ("bar" . "Bar!")))
+</PRE>
+
+will not.
+<P>
+
+Here's a more complicated example: some people include bitmaps of
+themselves in their mail messages in an <B>X-Face:</B> header field.
+You can capture this field into the <SAMP>`*BBDB*'</SAMP> with the
+following:
+</P><P>
+
+
+<PRE>
+(setq bbdb-auto-notes-alist
+ (append bbdb-auto-notes-alist
+ (list "x-face"
+ (list (concat "[ \t\n]*\\([^ \t\n]*\\)"
+ "\\([ \t\n]+\\([^ \t\n]+\\)\\)?"
+ "\\([ \t\n]+\\([^ \t\n]+\\)\\)?"
+ "\\([ \t\n]+\\([^ \t\n]+\\)\\)?"
+ )
+ 'face
+ "\\1\\3\\5\\7"))))
+</PRE>
+
+(The calls to <CODE>list</CODE> and <CODE>concat</CODE> are just for readability, it
+could easily be a constant.) The tricky bit here is that it strips out
+the newlines and whitespace used for header continuation, which are not
+actually a part of the face data. So though the mail message may have
+the face data on multiple lines, the entry in the <SAMP>`*BBDB*'</SAMP> will
+be just one line.
+<P>
+
+<A NAME="IDX176"></A>
+<CODE>bbdb-auto-notes-ignore</CODE> is an alist of headers and regexps to
+ignore in <CODE>bbdb-auto-notes-hook</CODE>. Each element looks like </P><P>
+
+
+<PRE>
+(<VAR>HEADER</VAR> . <VAR>REGEXP</VAR>)
+</PRE>
+
+for example,
+<P>
+
+
+<PRE>
+("Organization" . "^Gatewayed from\\|^Source only")
+</PRE>
+
+would exclude the phony <CODE>Organization:</CODE> headers in GNU mailing-lists
+gatewayed to the <CODE>gnu.*</CODE> newsgroups. Note that this exclusion
+applies only to a single field, not to the entire message. For that,
+use the variable <CODE>bbdb-auto-notes-ignore-all</CODE>.
+<P>
+
+<A NAME="IDX177"></A>
+<CODE>bbdb-auto-notes-ignore-all</CODE> is an alist of headers and regexps
+which cause the entire message to be ignored in <CODE>bbdb-auto-notes-hook</CODE>.
+Each element looks like </P><P>
+
+
+<PRE>
+(<VAR>HEADER</VAR> . <VAR>REGEXP</VAR>)
+</PRE>
+
+for example,
+<P>
+
+
+<PRE>
+("From" . "BLAT\\.COM")
+</PRE>
+
+would exclude any notes recording for message coming from <CODE>BLAT.COM</CODE>.
+Note that this is different from <CODE>bbdb-auto-notes-ignore</CODE>, which
+applies only to a particular header field, rather than the entire message.
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC44"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC43"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC45"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC49"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H2> 1.8 Utilities </H2>
+<!--docid::SEC44::-->
+<P>
+
+This section describes <B>BBDB</B> functionality that does not fit neatly into
+other sections.
+</P><P>
+
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC45">bbdb-ftp</A></TD><TD ALIGN="left">Storing FTP sites in the <B>BBDB</B></TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC46">bbdb-print</A></TD><TD ALIGN="left">Print the <B>BBDB</B></TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC47">bbdb-snarf</A></TD><TD ALIGN="left">Record generation from raw text</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC48">bbdb-srv</A></TD><TD ALIGN="left">External control of the <B>BBDB</B></TD><TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC45"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC46"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.8.1 <CODE>bbdb-ftp</CODE> </H3>
+<!--docid::SEC45::-->
+<P>
+
+The <CODE>bbdb-ftp</CODE> utility enables the storage of FTP sites as <B>BBDB</B>
+records. The <CODE>bbdb-create-ftp-site</CODE> function is used to create a
+<B>BBDB</B> record for an FTP site. The command will prompt for information
+needed to create the record. The FTP site for a given record can be accessed
+with the <CODE>bbdb-ftp</CODE> command.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC46"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC45"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC47"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC49"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.8.2 <CODE>bbdb-print</CODE> </H3>
+<!--docid::SEC46::-->
+<P>
+
+<CODE>bbdb-print</CODE> is a utility for pretty-printing entries from the <B>BBDB</B>
+using TeX. It is invoked by pressing <KBD>P</KBD> in the <CODE>*BBDB*</CODE> buffer -
+this will cause all records in the <B>BBDB</B> to be printed as governed by the
+variables described below. If <KBD>P</KBD> is prefixed by a <KBD>*</KBD>, only the
+currently-displayed records will be printed. Once invoked, <CODE>bbdb-print</CODE>
+will generate the TeX output in a buffer named <TT>`~/bbdb.tex'</TT> (controlled
+by <CODE>bbdb-print-file-name</CODE>). The generated output will be shown, and must
+be <B>manually</B> saved.
+</P><P>
+
+For each record printed, <CODE>bbdb-print</CODE> will look for the presence of the
+<CODE>tex-name</CODE> field. If this field is found, its value will be printied
+instead of the <CODE>name</CODE> field for the record in question. This field is
+intended to allow the storage of names with accents or other characters that
+would be illegal in the address portion of a message. While other fields have
+special characters quoted by <CODE>bbdb-print</CODE> as described below, the
+contents of the <CODE>tex-name</CODE> field (if present) are used verbatim.
+</P><P>
+
+The following variables govern the printing of records (and of the printing of
+the fields therein):
+</P><P>
+
+<DL COMPACT>
+
+<DT><CODE>bbdb-print-elide</CODE>
+<DD>
+<A NAME="IDX178"></A>
+This variable should be set to a list of the fields that are not to be printed
+by <CODE>bbdb-print</CODE>. It defaults to:<BR>
+<center>
+ <CODE>(tex-name aka mail-alias)</CODE>
+</center>
+<P>
+
+<DT><CODE>bbdb-print-file-name</CODE>
+<DD>
+<A NAME="IDX179"></A>
+The name of the file where generated TeX output is to be stored. The default
+is <TT>`~/bbdb.tex'</TT>.
+<P>
+
+<DT><CODE>bbdb-print-require</CODE>
+<DD>
+<A NAME="IDX180"></A>
+The fields required for printing a record. This allows, for example, only
+records with phone numbers to be printed. The value of the value of the
+variable will be evaluated once for each record, and the record will be
+printed only if the evaluation returns a non-nil value. The symbols
+<CODE>name</CODE>, <CODE>company</CODE>, <CODE>net</CODE>, <CODE>phone</CODE>, <CODE>address</CODE>, and
+<CODE>notes</CODE> will be set to the appropriate values during evaluation; they
+will be nil if the field does not exist or is elided.
+<P>
+
+The value of this variable can be any lisp expression, but typically
+it will be used for a boolean combination of the field variables, as
+in the following simple examples:
+</P><P>
+
+
+<UL>
+<LI>Print only people whose phone numbers are known:<BR>
+
+<center>
+ <CODE>(setq bbdb-print-require 'phone)</CODE>
+</center>
+<LI>Print people whose names AND companies are known:<BR>
+
+<center>
+ <CODE>(setq bbdb-print-require '(and name company))</CODE>
+</center>
+<LI>Print people whose names, and either addresses OR phone numbers are
+
+known:<BR>
+<center>
+ <CODE>(setq bbdb-print-require '(and name (or address phone))).</CODE>
+</center>
+<P>
+
+The default value is:<BR>
+<center>
+ <CODE>(or address phone)</CODE>
+</center>
+</UL>
+
+<LI>bbdb-print-alist
+
+<A NAME="IDX181"></A>
+Formatting options for all formats of <CODE>bbdb-print</CODE>. The value is an
+alist of the form<BR>
+<center>
+ <CODE>((<VAR>OPTION</VAR> . <VAR>VALUE</VAR>) (<VAR>OPTION</VAR> . <VAR>VALUE</VAR>) ...)</CODE>
+</center>
+<P>
+
+Separate settings can be configured using <CODE>bbdb-print-brief-alist</CODE> and
+<CODE>bbdb-print-full-alist</CODE>. Settings in these variables will override the
+ones in <CODE>bbdb-print-alist</CODE>.
+</P><P>
+
+The possible options and legal settings are:
+<DL COMPACT>
+
+<DT><CODE>columns</CODE>
+<DD>
+<CODE>1</CODE>, <CODE>2</CODE>, <CODE>3</CODE>, <CODE>4</CODE>, <CODE>quad</CODE> (4 little
+2-column pages per sheet) or <CODE>grid</CODE> (12 credit-card-sized pages per
+sheet).
+<P>
+
+<DT><CODE>separator</CODE>
+<DD>
+<CODE>0</CODE>-<CODE>7</CODE>, the style of heading for each letter. <CODE>0</CODE>=none,
+<CODE>1</CODE>=line, <CODE>2</CODE>=boxed letters, <CODE>3</CODE>=large boxed letters,
+<CODE>4</CODE>=large letters, <CODE>5</CODE>=letters with lines, <CODE>6</CODE>=letters with
+suits, <CODE>7</CODE>=boxed letters with suits.
+<P>
+
+<DT><CODE>omit-area-code</CODE>
+<DD>
+A regular expression matching area codes to omit.
+<P>
+
+<DT><CODE>phone-on-first-line</CODE>
+<DD>
+If <CODE>t</CODE>, the first phone number will be put on the same line as the name.
+If <CODE>nil</CODE>, the name will be the only text on the line. If set to a
+string, the field of type <CODE>phone</CODE> whose name matches the string will be
+used. The string should be a valid regular expression.
+<P>
+
+<DT><CODE>n-phones</CODE>
+<DD>
+Maximum number of phone numbers to include.
+<P>
+
+<DT><CODE>n-addresses</CODE>
+<DD>
+Maximum number of addresses to include.
+<P>
+
+<DT><CODE>include-files</CODE>
+<DD>
+List of TeX files to <CODE>\input</CODE>. If the filenames are not absolute, the
+files must be located somewhere in the TeX input path.
+<P>
+
+<DT><CODE>ps-fonts</CODE>
+<DD>
+Postscript fonts will be used if the value is non-<CODE>nil</CODE>. Standard TeX
+fonts will be used otherwise.
+<P>
+
+<DT><CODE>font-size</CODE>
+<DD>
+The integer point size of the font to be used.
+<P>
+
+<DT><CODE>hsize</CODE>
+<DD>
+The horizontal dimension of the pages. The value must be a string, and must
+be a valid TeX dimension. Alternatively, the TeX default will be used if the
+value is <CODE>nil</CODE>.
+<P>
+
+<DT><CODE>vsize</CODE>
+<DD>
+The vertical dimension of the pages. The value must be a string, and must
+be a valid TeX dimension. Alternatively, the TeX default will be used if the
+value is <CODE>nil</CODE>.
+<P>
+
+<DT><CODE>hoffset</CODE>
+<DD>
+The TeX output will be offset to the right by the value of this option. The
+value must be either a string containing a valid TeX dimension or <CODE>nil</CODE>
+or <CODE>0</CODE> to use the default TeX horizontal offset.
+<P>
+
+<DT><CODE>voffset</CODE>
+<DD>
+The TeX output will be offset downward by the value of this option. The
+value must be either a string containing a valid TeX dimension or <CODE>nil</CODE>
+or <CODE>0</CODE> to use the default TeX vertical offset.
+<P>
+
+<DT><CODE>quad-hsize</CODE>
+<DD>
+Horizontal size to be used for the individual pages in the quad format. The
+value must be a string containing a valid TeX dimension.
+<P>
+
+<DT><CODE>quad-vsize</CODE>
+<DD>
+Vertical size to be used for the individual pages in the quad format. The
+value must be a string containing a valid TeX dimension.
+</DL>
+<P>
+
+The default value is
+
+<PRE>
+((omit-area-code . "(<VAR>AREA-CODE</VAR>)")
+ (phone-on-first-line . "^[ \t]*$")
+ (ps-fonts . nil)
+ (font-size . 6)
+ (quad-hsize . "3.15in")
+ (quad-vsize . "4.5in"))
+</PRE>
+
+Where <VAR>AREA-CODE</VAR> is the value of <CODE>bbdb-default-area-code</CODE> or
+<SAMP>`000'</SAMP> if there is no default area code.
+<P>
+
+<LI>bbdb-print-brief-alist
+
+<A NAME="IDX182"></A>
+Extra options for the <CODE>bbdb-print</CODE> brief format. The value(s) of
+this variable can either supplement or override the values in
+<CODE>bbdb-print-alist</CODE>. The format and possible values of this variable are
+as in <CODE>bbdb-print-alist</CODE>, described above.
+<P>
+
+The default value is
+
+<PRE>
+((columns . 1)
+ (separator . 1)
+ (n-phones . 2)
+ (n-addresses . 1)
+ (include-files "bbdb-print-brief" "bbdb-cols"))
+</PRE>
+
+<LI>bbdb-print-full-alist
+
+<A NAME="IDX183"></A>
+Extra options for the <CODE>bbdb-print</CODE> non-brief format. The value(s) of
+this variable can either supplement or override the values in
+<CODE>bbdb-print-alist</CODE>. The format and possible values of this variable are
+as in <CODE>bbdb-print-alist</CODE>, described above.
+<P>
+
+The default value is
+
+<PRE>
+((columns . 3)
+ (separator . 2)
+ (include-files "bbdb-print" "bbdb-cols"))
+</PRE>
+
+<LI>bbdb-print-prolog
+
+<A NAME="IDX184"></A>
+TeX statements to include at the beginning of the <CODE>bbdb-print</CODE> output
+file.
+<P>
+
+<LI>bbdb-print-epilog
+
+<A NAME="IDX185"></A>
+TeX statements to include at the end of the <CODE>bbdb-print</CODE> output file.
+<P>
+
+</DL>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC47"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC46"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC48"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC49"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.8.3 <CODE>bbdb-snarf</CODE> </H3>
+<!--docid::SEC47::-->
+<P>
+
+<CODE>bbdb-snarf</CODE> provides the ability to generate <B>BBDB</B> records from raw
+text. If invoked as <CODE>bbdb-snarf</CODE>, it attempts to generate the record
+from the information around point (the cursor). If invoked as
+<CODE>bbdb-snarf-region</CODE><A NAME="DOCF6" HREF="bbdb.html#FOOT6">(6)</A>, the active region is used to generate the record.
+</P><P>
+
+<B>Restrictions:</B>
+</P><P>
+
+
+<OL>
+<LI>
+
+<CODE>bbdb-snarf</CODE> currently recognizes only US-style phone numbers.
+<LI>
+
+<CODE>bbdb-snarf</CODE> works best with things that look like mailing addresses.
+</OL>
+
+Example of an address that <CODE>bbdb-snarf</CODE> will recognize:
+<P>
+
+
+<PRE>
+another test person
+1234 Gridley St.
+Los Angeles, CA 91342
+555-1212
+test@person.net
+http://www.foo.bar/
+other stuff about this person
+</PRE>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC48"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC47"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC49"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC49"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.8.4 <CODE>bbdb-srv</CODE> </H3>
+<!--docid::SEC48::-->
+<P>
+
+<CODE>bbdb-srv</CODE> provides the ability to initiate the display of <B>BBDB</B>
+records from outside of Emacs. This allows external programs to cause
+the <B>BBDB</B> record for a given person to appear in the running Emacs
+when, for example, mail is recieved from that person. One specific
+application, described below, is the integration of Netscape and the
+<B>BBDB</B>, allowing the display of <B>BBDB</B> records corresponding to Mail
+and/or News messages displayed in Netscape.
+</P><P>
+
+<CODE>bbdb-srv</CODE> is composed of two parts - an external Perl script
+(<TT>`utils/bbdb-srv.pl'</TT>), and an Emacs Lisp file
+(<TT>`lisp/bbdb-srv.el'</TT>). The external portion is used to send
+commands to the internal portion.
+</P><P>
+
+<B>NOTE:</B> <CODE>bbdb-srv</CODE> requires <CODE>gnuserv</CODE> and <CODE>itimer</CODE>,
+both included with XEmacs. <CODE>gnuserv</CODE> must be started with the
+<CODE>gnuserv-start</CODE> command before <CODE>bbdb-srv</CODE> can be used.
+</P><P>
+
+In it's most basic form, mail or news headers are passed to the Perl
+script. The Perl script then causes the <B>BBDB</B> record (if any)
+corresponding to the passed headers to be displayed in the running
+Emacs. While <CODE>bbdb-srv</CODE> will operate with just a <SAMP>`From:'</SAMP>
+field, it works better when passed both <SAMP>`From:'</SAMP> and <SAMP>`To:'</SAMP>
+headers. When <CODE>bbdb-srv</CODE> notices that the logged-in user is named
+in the <SAMP>`From:'</SAMP> header, it will attempt to display the record (if
+any) for the person named in the <SAMP>`To:'</SAMP> header. If no <SAMP>`To:'</SAMP>
+header is passed, it falls back on the record (if any) for the logged-in
+user (the person named in the <SAMP>`From:'</SAMP> header).
+</P><P>
+
+An example manual invocation of <CODE>bbdb-srv</CODE> is as follows:
+</P><P>
+
+
+<PRE>
+% cat |bbdb-srv.pl
+From: Jamie Zawinski &#60;jwz@netscape.com&#62;
+To: Matt Simmons &#60;simmonmt@acm.org&#62;
+<KBD>CTRL-D</KBD>
+</PRE>
+
+If the invoking user is Jamie Zawinski, the record for Matt Simmons (if
+any) will be displayed. If the invoking user is not Jamie Zawinski, the
+record for Jamie Zawinski (if any) will be displayed.
+<P>
+
+As mentioned above <CODE>bbdb-srv</CODE> can be used with Netscape Mail and
+Netscape News. Please note that it can only be used with the UNIX
+versions 3.0b2 and greater of these applications. To allow Netscape to
+use <CODE>bbdb-srv</CODE>, set the <SAMP>`NS_MSG_DISPLAY_HOOK'</SAMP> variable to
+<CODE>bbdb-srv.pl</CODE><A NAME="DOCF7" HREF="bbdb.html#FOOT7">(7)</A> as follows:
+</P><P>
+
+Bourne Shell (<TT>`/bin/sh'</TT>) and variants:
+
+<PRE>
+# NS_MSG_DISPLAY_HOOK bbdb-srv.pl
+# export NS_MSG_DISPLAY_HOOK
+</PRE>
+
+C-Shell (<TT>`/bin/csh'</TT>) and variants:
+
+<PRE>
+% setenv NS_MSG_DISPLAY_HOOK bbdb-srv.pl
+</PRE>
+
+The following variables can be used to customize the behavior of
+<CODE>bbdb-srv</CODE>:
+<P>
+
+<DL COMPACT>
+
+<DT><CODE>bbdb/srv-auto-create-p</CODE>
+<DD>
+<A NAME="IDX186"></A>
+
+This variable is similar to <CODE>bbdb/news-auto-create-p</CODE> and
+<CODE>bbdb/mail-auto-create-p</CODE>. That is, when headers are passed in to
+<CODE>bbdb-srv</CODE>, a new <B>BBDB</B> record can be created if none exists,
+depending on the value of this variable. Possible values are:
+<DL COMPACT>
+
+<DT><CODE>t</CODE>
+<DD>
+Automatically create new <B>BBDB</B> records if the headers passed in do
+not correspond to an already-existing record.
+<DT><CODE>nil</CODE>
+<DD>
+Do not automatically create new <B>BBDB</B> records.
+<DT><VAR>FUNCTION</VAR>
+<DD>
+<VAR>FUNCTION</VAR> is called. If it returns <CODE>t</CODE>, a record will be
+created for the person named in the <SAMP>`From:'</SAMP> header. If it returns
+<CODE>nil</CODE>, no record will be created.
+<P>
+
+A suggested function for use is
+<CODE>bbdb/srv-auto-create-mail-news-dispatcher</CODE>. This function will
+attempt to determine the source of the passed headers - whether they
+were part of a mail message or of a news article. The action (if any)
+dictated by the value of either <CODE>bbdb/mail-auto-create-p</CODE> or
+<CODE>bbdb/news-auto-create-p</CODE>, based on the determined source of the
+passed headers.
+</P><P>
+
+</DL>
+<P>
+
+<A NAME="IDX187"></A>
+<DT><CODE>bbdb/srv/display-delay</CODE>
+<DD>
+<CODE>bbdb-srv</CODE> pauses between displaying the records corresponding to
+each passed set of headers. This variable controls the length of time
+(in seconds) of the delay between the display of different records.
+Note when setting this variable that only one set of headers can be
+queued at a time. If three sets of headers are passed to
+<CODE>bbdb-srv</CODE> in less than the delay time, only the first and last
+will be displayed.
+</DL>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC49"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC48"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC50"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC57"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H2> 1.9 Internals </H2>
+<!--docid::SEC49::-->
+<P>
+
+<B>This section is currently a dumping ground for things that should
+eventually go here, but were found elsewhere in the file.</B>
+</P><P>
+
+<B>INFORMATION IN THIS SECTION IS FOR INFORMATIONAL PURPOSES ONLY. IT
+SHOULD NOT BE TAKEN AS DOCUMENTATION OF AN EXTERNAL API. EVERYTHING
+LISTED BELOW IS SUBJECT TO CHANGE WITHOUT NOTICE</B>
+</P><P>
+
+The first time you use
+one of the <B>BBDB</B> commands, this file is read into an emacs buffer, and
+remains there. As you make changes to the database, this buffer is
+changed as well, ensuring that if it is auto-saved, it will be saved in
+its most current state. </P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC50"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC49"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC51"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.9.1 BBDB data file format </H3>
+<!--docid::SEC50::-->
+<P>
+
+The data file is arranged in a hierarchical fashion. At the top level
+are vectors, with one vector per database record. It is <B>very</B>
+important that each vector be on its own line, as the BBDB builds and
+stores markers based on this layout. The markers are then used to
+increase the speed of database modifications (more on this later). The
+record vectors contain the individual fields of the record. These
+fields can be of any type, but are currently integers, strings, lists of
+strings, alists, vectors, or lists of vectors. In the case of fields
+that contain one or more vectors, they can be further broken down in
+terms of the fields of their component vectors.
+</P><P>
+
+In an effort to provide a more concrete example to illustrate the above,
+and to provide a reference for database accessor and modifier functions,
+we describe the database format below. This description starts with the
+fields of the individual record vectors, and drills down through the
+vectors used by some of the fields.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC51"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC50"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC52"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.9.1.1 Record Vectors </H4>
+<!--docid::SEC51::-->
+<P>
+
+<TABLE>
+
+<TR><TD><B>Name</B></TD>
+
+</TD><TD> <B>Type</B>
+</TD><TD> <B>Accessor and Modifier</B>
+</TD><TD> <B>Description</B>
+
+</TR>
+<TR><TD>First name</TD>
+
+</TD><TD> String
+</TD><TD> <CODE>bbdb-record-firstname</CODE><BR>
+ <CODE>bbdb-record-set-firstname</CODE>
+</TD><TD> Entity's first name
+
+</TR>
+<TR><TD>Last name</TD>
+
+</TD><TD> String
+</TD><TD> <CODE>bbdb-record-lastname</CODE><BR>
+ <CODE>bbdb-record-set-lastname</CODE>
+</TD><TD> Entity's last name
+
+</TR>
+<TR><TD>AKAs</TD>
+
+</TD><TD> List of Strings
+</TD><TD> <CODE>bbdb-record-aka</CODE><BR>
+ <CODE>bbdb-record-set-aka</CODE>
+</TD><TD> Alternate names for entity
+
+</TR>
+<TR><TD>Company</TD>
+
+</TD><TD> String
+</TD><TD> <CODE>bbdb-record-company</CODE><BR>
+ <CODE>bbdb-record-set-company</CODE>
+</TD><TD> Company with which entity is associated
+
+</TR>
+<TR><TD>Phones</TD>
+
+</TD><TD> List of Vectors
+</TD><TD> <CODE>bbdb-record-phones</CODE><BR>
+ <CODE>bbdb-record-set-phones</CODE>
+</TD><TD> List of phone number vectors
+
+</TR>
+<TR><TD>Addresses</TD>
+
+</TD><TD> List of Vectors
+</TD><TD> <CODE>bbdb-record-addresses</CODE><BR>
+ <CODE>bbdb-record-set-addresses</CODE>
+</TD><TD> List of address vectors
+
+</TR>
+<TR><TD>Net address</TD>
+
+</TD><TD> List of Strings
+</TD><TD> <CODE>bbdb-record-net</CODE><BR>
+ <CODE>bbdb-record-set-net</CODE>
+</TD><TD> List of network addresses
+
+</TR>
+<TR><TD>Notes</TD>
+
+</TD><TD> String or Alist
+</TD><TD> <CODE>bbdb-record-raw-notes</CODE><BR>
+ <CODE>bbdb-record-set-raw-notes</CODE>
+</TD><TD> String or Association list of note fields (strings)
+
+</TR>
+<TR><TD>Cache</TD>
+
+</TD><TD> Vector
+</TD><TD> <CODE>bbdb-record-cache</CODE><BR>
+ <CODE>bbdb-record-set-cache</CODE>
+</TD><TD> Record cache.<BR>
+ <I>Internal version only.</I>
+
+</TR></TABLE>
+<P>
+
+The phone, address and cache vector fields are described below. Please
+note that, as indicated in the table above, the cache is present only in
+the internal version of the database - it is not written out as part of
+the <TT>`.bbdb'</TT> file.
+</P><P>
+
+In addition, the accessor and modifier functions for the notes alist
+are described.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC52"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC51"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC53"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.9.1.2 Phone Vectors </H4>
+<!--docid::SEC52::-->
+<P>
+
+To access the fields in the below table, you must first get the list of
+phone vectors using the <CODE>bbdb-record-phones</CODE> function. Note that
+if you alter the phones field with the <CODE>bbdb-record-set-phones</CODE>
+function, you are altering the entire phones list for the given record.
+Use the modifier functions below for modifications to individual phone
+vectors.
+</P><P>
+
+<TABLE>
+
+<TR><TD><B>Name</B></TD>
+
+</TD><TD> <B>Type</B>
+</TD><TD> <B>Accessor and Modifier</B>
+</TD><TD> <B>Description</B>
+
+</TR>
+<TR><TD>Location</TD>
+
+</TD><TD> String
+</TD><TD> <CODE>bbdb-phone-location</CODE><BR>
+ <CODE>bbdb-phone-set-location</CODE>
+</TD><TD> Phone number identifier
+
+</TR>
+<TR><TD>Area</TD>
+
+</TD><TD> Integer
+</TD><TD> <CODE>bbdb-phone-area</CODE><BR>
+ <CODE>bbdb-phone-set-area</CODE>
+</TD><TD> Area code for phone number
+
+</TR>
+<TR><TD>Exchange</TD>
+
+</TD><TD> Integer
+</TD><TD> <CODE>bbdb-phone-exchange</CODE><BR>
+ <CODE>bbdb-phone-set-exchange</CODE>
+</TD><TD> Exchange (aka prefix) for phone number
+
+</TR>
+<TR><TD>Suffix</TD>
+
+</TD><TD> Integer
+</TD><TD> <CODE>bbdb-phone-suffix</CODE><BR>
+ <CODE>bbdb-phone-set-suffix</CODE>
+</TD><TD> Suffix for phone number
+
+</TR>
+<TR><TD>Extension</TD>
+
+</TD><TD> Integer
+</TD><TD> <CODE>bbdb-phone-extension</CODE><BR>
+ <CODE>bbdb-phone-set-extension</CODE>
+</TD><TD> Phone number extension (<SAMP>`0'</SAMP> if none)
+
+</TR></TABLE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC53"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC52"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC54"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.9.1.3 Address Vectors </H4>
+<!--docid::SEC53::-->
+<P>
+
+To access the fields in the below table, you must first get the list of
+address vectors using the <CODE>bbdb-record-addresses</CODE> function. Note
+that if you alter the addresses field with the
+<CODE>bbdb-record-set-addresses</CODE> function, you are altering the entire
+addresses list for the given record. Use the modifier functions below
+for modifications to individual address vectors.
+</P><P>
+
+<TABLE>
+
+<TR><TD><B>Name</B></TD>
+
+</TD><TD> <B>Type</B>
+</TD><TD> <B>Accessor and Modifier</B>
+</TD><TD> <B>Description</B>
+
+</TR>
+<TR><TD>Location</TD>
+
+</TD><TD> String
+</TD><TD> <CODE>bbdb-address-location</CODE><BR>
+ <CODE>bbdb-address-set-location</CODE>
+</TD><TD> Address identifier
+
+</TR>
+<TR><TD>Street1</TD>
+
+</TD><TD> String
+</TD><TD> <CODE>bbdb-address-street1</CODE><BR>
+ <CODE>bbdb-address-set-street1</CODE>
+</TD><TD> First line of street address. "" if none.
+
+</TR>
+<TR><TD>Street2</TD>
+
+</TD><TD> String
+</TD><TD> <CODE>bbdb-address-street2</CODE><BR>
+ <CODE>bbdb-address-set-street2</CODE>
+</TD><TD> Second line of street address. "" if none.
+
+</TR>
+<TR><TD>Street3</TD>
+
+</TD><TD> String
+</TD><TD> <CODE>bbdb-address-street3</CODE><BR>
+ <CODE>bbdb-address-set-street3</CODE>
+</TD><TD> Third line of street address. "" if none.
+
+</TR>
+<TR><TD>City</TD>
+
+</TD><TD> String
+</TD><TD> <CODE>bbdb-address-city</CODE><BR>
+ <CODE>bbdb-address-set-city</CODE>
+</TD><TD> City name
+
+</TR>
+<TR><TD>State</TD>
+
+</TD><TD> String
+</TD><TD> <CODE>bbdb-address-state</CODE><BR>
+ <CODE>bbdb-address-set-state</CODE>
+</TD><TD> State abbreviation
+
+</TR>
+<TR><TD>Zip</TD>
+
+</TD><TD> Integer
+</TD><TD> <CODE>bbdb-address-zip</CODE><BR>
+ <CODE>bbdb-address-set-zip</CODE>
+</TD><TD> Zip code
+
+</TR></TABLE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC54"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC53"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC55"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.9.1.4 Cache Vector </H4>
+<!--docid::SEC54::-->
+<P>
+
+This vector is present only in the internal database representation. It
+is not written out to the database file because it contains information
+aggregated from the rest of the record that is reconstructed when the
+database is read. To write the cache information to the database file
+would increase the risk of database inconsistency, and would violate the
+principles of normalization.
+</P><P>
+
+To access the cache fields using the functions listed below that begin
+with <CODE>bbdb-cache-</CODE>, you must first get the cache vector using the
+<CODE>bbdb-record-cache</CODE> function. The functions that begin with
+<CODE>bbdb-record-</CODE> get the cache vector internally. Note that if you
+alter the cache field in the high-level record with the
+<CODE>bbdb-record-set-cache</CODE> function, you are altering the entire cache
+vector for the given record. Use the modifier functions below for
+modifications to individual cache fields.
+</P><P>
+
+<TABLE>
+
+<TR><TD><B>Name</B></TD>
+
+</TD><TD> <B>Type</B>
+</TD><TD> <B>Accessor and Modifier</B>
+</TD><TD> <B>Description</B>
+
+</TR>
+<TR><TD>Name Cache</TD>
+
+</TD><TD> String
+</TD><TD> <CODE>bbdb-cache-namecache</CODE><BR>
+ <CODE>bbdb-cache-set-namecache</CODE>
+</TD><TD> Preconcatenated name of entity
+
+</TR>
+<TR><TD>Sort Key</TD>
+
+</TD><TD> String
+</TD><TD> <CODE>bbdb-cache-sortkey</CODE><BR>
+ <CODE>bbdb-cache-set-sortkey</CODE>
+</TD><TD> Preconcatenated sort key for record
+
+</TR>
+<TR><TD>Marker</TD>
+
+</TD><TD> Marker
+</TD><TD> <CODE>bbdb-cache-marker</CODE><BR>
+ <CODE>bbdb-record-marker</CODE><BR>
+ <CODE>bbdb-cache-set-marker</CODE><BR>
+ <CODE>bbdb-record-set-marker</CODE><BR>
+</TD><TD> Marker in <TT>`.bbdb'</TT> for start of record
+
+</TR>
+<TR><TD>Deleted</TD>
+
+</TD><TD> Boolean
+</TD><TD> <CODE>bbdb-cache-deleted-p</CODE><BR>
+ <CODE>bbdb-record-deleted-p</CODE><BR>
+ <CODE>bbdb-cache-set-deleted-p</CODE><BR>
+ <CODE>bbdb-record-set-deleted-p</CODE>
+</TD><TD> Set to <CODE>t</CODE> if record has been deleted, <CODE>nil</CODE> if not
+
+</TR></TABLE>
+<P>
+
+The functions listed above will return <CODE>nil</CODE> if their respective
+cache fields are not set. The functions listed below will return the
+value of their cache fields if set, but will also build (and set) the
+correct field values if the fields are unset:
+</P><P>
+
+<DL COMPACT>
+
+<DT><CODE>bbdb-record-name</CODE>
+<DD>
+Return the name in the Name Cache field of the cache (if set). If
+the name has not been built yet (if the field is <CODE>nil</CODE>), the name is
+built, stored in the Name Cache field, and returned.
+<P>
+
+<DT><CODE>bbdb-record-sortkey</CODE>
+<DD>
+Return the name it the Sort Key field of the cache (if set). If the
+Sort Key field has not yet been set (if the field is <CODE>nil</CODE>), the
+Sort Key is built, stored in the Sort Key field, and returned.
+<P>
+
+</DL>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC55"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC54"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC56"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.9.1.5 Notes String or Alist </H4>
+<!--docid::SEC55::-->
+<P>
+
+If there is only a single note for a given record, the notes field for
+that record will be a string. If there is more than one note, the notes
+field will be an association list (alist) with elements of the form
+</P><P>
+
+<center>
+ ( <VAR>NAME</VAR> . <VAR>VALUE</VAR> )
+</center>
+</P><P>
+
+where <VAR>NAME</VAR> is the symbol for the name of the note, and
+<VAR>VALUE</VAR> is the value of the note.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC56"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC55"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC57"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H4> 1.9.1.6 Example BBDB record </H4>
+<!--docid::SEC56::-->
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC57"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC56"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC58"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC49"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC58"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H2> 1.10 Mailing Lists </H2>
+<!--docid::SEC57::-->
+<P>
+
+There are two mailing lists for the <B>BBDB</B>. The first is
+<CODE>bbdb-announce@xemacs.org</CODE>, and is used for new release announcements, and as a
+result has very low traffic. To subscribe to <CODE>bbdb-announce@xemacs.org</CODE>, send mail
+to <CODE>bbdb-announce-request@xemacs.org</CODE> with <SAMP>`subscribe'</SAMP> as the subject.
+</P><P>
+
+The second mailing list, <CODE>bbdb-info@xemacs.org</CODE>, is gets moderate traffic, and is
+intended for the discussion and distribution of development versions of the
+<B>BBDB</B>. Users of development versions of the <B>BBDB</B> should be subscribed
+to this list. It is to this list that bugs should be reported. See section <A HREF="bbdb.html#SEC63">1.13.1 Known Bugs</A> for instructions on submitting bug reports.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC58"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC57"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC59"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC57"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC61"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H2> 1.11 Changes in this Version </H2>
+<!--docid::SEC58::-->
+<P>
+
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC59">Major Changes</A></TD><TD ALIGN="left">Major changes in this version</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC60">Other Changes</A></TD><TD ALIGN="left">Not-so-major changes</TD><TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC59"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC58"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC60"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC58"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC58"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC61"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.11.1 Major Changes </H3>
+<!--docid::SEC59::-->
+<P>
+
+
+<H4>Database File Version Change</H4>
+<P>
+
+(the following version-migration text will move in a future version. It is in
+this section currently because new users will likely not experience it)
+</P><P>
+
+There has been a version change in the <B>BBDB</B> database file. The date
+format was changed to make the <B>BBDB</B> Y2K-compliant, and to allow for easy
+sorting of database records based on dates.
+</P><P>
+
+An automatic version-migration mechanism has been implemented that allows
+older version <TT>`.bbdb'</TT> files to either be migrated to the new version, or
+used as-is without migrating. When the <B>BBDB</B> detects a database file with
+an old version, it will display the features that have been introduced <B>in
+the database file</B> from the time of the older version's implementation. It
+will offer the choice of migration or use of the <B>BBDB</B> with the
+older-version file.
+</P><P>
+
+If migration is chosen, the database file will be automatically changed to the
+new format. If migration is declined, the file will kept in the older format
+in the <CODE>.bbdb</CODE> buffer, but will be stored internally in the new format.
+When changes need to be made to the <CODE>.bbdb</CODE> buffer, changed records will
+be reverse-migrated from their internal version to that of the disk file.
+</P><P>
+
+
+<H4>Initialization Sequence Change</H4>
+<P>
+
+The initialization sequence has changed. Many of the forms that were required
+in 1.51 for initialization are no longer necessary. See section <A HREF="bbdb.html#SEC6">1.1.4 Initial Configuration</A>.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC60"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC59"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC61"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC58"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC58"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC61"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.11.2 Other Changes </H3>
+<!--docid::SEC60::-->
+<P>
+
+
+<UL>
+<LI>XEmacs packaging has been partially implemented.
+
+<LI>bbdb-gnus (support for Gnus scoring and Summary buffer rewriting) has
+
+been integrated
+<LI>Time-based functions have been introduced
+
+<LI>Web-browser functions (bbdb-w3) have been integrated.
+
+<LI>mail-abbrevs and mail-extr have been removed
+
+<LI>Supercite support (bbdb-sc) has been integrated
+
+<LI>And lots more...
+
+</UL>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC61"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC60"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC62"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC58"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC62"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H2> 1.12 The Latest Version </H2>
+<!--docid::SEC61::-->
+<P>
+
+Released versions of the <B>BBDB</B> can be found at the following
+sites:
+</P><P>
+
+
+<UL>
+<LI>
+
+WWW: <CODE>http://www.netcom.com/~simmonmt</CODE>
+<LI>
+
+WWW: <CODE>http://people.netscape.com/jwz/bbdb</CODE>
+<LI>
+
+FTP: <CODE>ftp.xemacs.org:/pub/bbdb/bbdb.tar.gz</CODE>
+</UL>
+
+Development versions of the <B>BBDB</B> can be found at the following
+sites:
+<P>
+
+
+<UL>
+<LI>
+
+WWW: <CODE>http://www.netcom.com/~simmonmt</CODE>
+</UL>
+
+Users of development versions of the <B>BBDB</B> should subscribe to the
+<CODE>info-bbdb</CODE> mailing list. See section <A HREF="bbdb.html#SEC57">1.10 Mailing Lists</A>.
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC62"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC61"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC63"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC61"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H2> 1.13 The Future </H2>
+<!--docid::SEC62::-->
+<P>
+
+The future consists of Bugs and Features.
+</P><P>
+
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC63">Known Bugs</A></TD><TD ALIGN="left">Known Bugs, and how to submit new ones</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC64">TODO List</A></TD><TD ALIGN="left">The TODO List</TD><TR>
+<TR><TD ALIGN="left"><A HREF="bbdb.html#SEC65">EOL Statements</A></TD><TD ALIGN="left">EOL (End Of Life) Statements</TD><TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC63"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC62"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC64"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC62"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC62"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.13.1 Known Bugs </H3>
+<!--docid::SEC63::-->
+<P>
+
+
+<OL>
+<LI><B><KBD>M-TAB</KBD> conflicts with ispell.</B> Workaround: The binding
+
+installed by the <B>BBDB</B> for address completion/expansion conflicts with
+that used by ispell. The suggested workarounds are to rebind the ispell
+key (the <B>BBDB</B> binding is not configurable at this time), to manually
+invoke ispell via <KBD>M-x</KBD>, or to not use ispell completion functionality
+in <B>BBDB</B>-enabled message composition buffers.
+<P>
+
+<LI><B><B>BBDB</B> and abbrev expansion is inconsistent.</B> Workaround:
+
+Currently, <KBD>M-TAB</KBD> must be used to expand/complete against <B>BBDB</B>
+names and net addresses, and <KBD>TAB</KBD> must be used to expand abbrevs (the
+values in the <CODE>mail-alias</CODE> field). Unification is planned for a
+future version.
+<P>
+
+<LI><B>The <CODE>*BBDB*</CODE> buffer does not always come up when the first
+
+article in a Gnus Summary Buffer is selected.</B> Workaround: Pressing
+<KBD>g</KBD> to reload the article. This will cause the <CODE>*BBDB*</CODE> buffer
+to be displayed.
+<P>
+
+<LI><B>Expansion will fail when the name to be expanded is a subset of
+
+the name for another record.</B> For example, if you have entries for
+<SAMP>`John'</SAMP> and <SAMP>`Johnathan'</SAMP>, you will not be able to expand the
+name for <SAMP>`John'</SAMP>. Workaround: Use the net address for the subset
+name (<SAMP>`John'</SAMP> in this example).
+<P>
+
+</OL>
+
+It is commonly known that there are no bugs in the <B>BBDB</B>. Bugs found in
+defiance of this rule should be submitted to the <CODE>info-bbdb</CODE> mailing
+list. To assist the developers, please include the version numbers of the
+various programs used when the bug occurred. An example report follows.
+
+
+<PRE>
+BBDB Version:
+Emacs/XEmacs Version:
+Mail/News reader (Gnus, VM, etc) used:
+Bug Description:
+</PRE>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC64"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC63"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC65"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC62"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC62"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.13.2 TODO List </H3>
+<!--docid::SEC64::-->
+<P>
+
+
+<H4>The Near Future</H4>
+<P>
+
+
+<UL>
+<LI>
+
+Add bbdb/<I>MUA</I>-delete-sender-record
+<P>
+
+<LI>
+
+Make completion more consistent so completing an email address gives both the
+name and the net address, as opposed to just completing the net
+address. See thread starting with
+<CODE>&#60;ilulnwci761.fsf@squid.pdc.kth.se&#62;</CODE> in <CODE>info-bbdb</CODE>.
+<P>
+
+<LI>
+
+Configurable completion. Should allow user to specify "complete on
+names first, then nets", etc.
+<P>
+
+<LI>
+
+More variables for upgrading. Specifically a variable that lets users
+specify extra fields for upgrading (an alist <SAMP>`(a . b)'</SAMP> that says
+field <SAMP>`a'</SAMP> should be upgraded the same way as field <SAMP>`b'</SAMP>.
+<P>
+
+<LI>
+
+Change all functions that switch on MUAs to use compose-mail (ex:
+<CODE>bbdb-send-mail-internal</CODE>).
+<P>
+
+<LI>
+
+Soren Dayton's method for generically extending the <B>BBDB</B> with
+special-purpose fields
+<P>
+
+<LI>
+
+Sorting records on alternate keys. <CODE>bbdb-sort-by</CODE> from Boris
+Goldowsky.
+<P>
+
+<LI>
+
+Sorting individual types of fields - Sam Steingold's method.
+<P>
+
+<LI>
+
+Button 3 menus (Mark Moll and Soren Dayton)
+<P>
+
+<LI>
+
+<B>BBDB</B>-controlled mail splitting in Gnus. Add hook for Soren to make
+splitting better. Routine from Brian Edmonds.
+<P>
+
+<LI>
+
+Conditionalized erasure of properties when text is pasted into the <B>BBDB</B>.
+<P>
+
+<LI>
+
+Should notice when there are <SAMP>`Reply-To:'</SAMP> addresses.<P>
+
+<LI>
+
+Should have a command for merging together two divergent copies of
+a <TT>`.bbdb'</TT> file (in case you read mail on one machine and news on
+another, for instance.)<P>
+
+<LI>
+
+The <SAMP>`*BBDB*'</SAMP> buffer should be resized to exactly fit what it's
+displaying, even when not in "electric" mode.<P>
+
+<LI>
+
+It should be possible to do completion on last names as well as first
+names.<P>
+
+<LI>
+
+The BBDB buffer is left at the top of the stack when GNUS is exited
+because GNUS runs its exit-hooks too early. This should be fixed.<P>
+
+<LI>
+
+String area codes (German area codes can begin with zeroes) patch from
+<CODE>Michael Sperber &#60;sperber@informatik.uni-tuebingen.de&#62;</CODE>
+<P>
+
+<LI>
+
+Internationalization of addresses. Country code to control formats for
+printing, etc. Country-&#62;Format mapping.
+<P>
+
+<LI>
+
+Default country variable, similar to <CODE>bbdb-default-area-code</CODE>.
+<P>
+
+<LI>
+
+Make format self-describing in comment
+<P>
+
+<LI>
+
+ISO-8859-x characters in records for printing.
+<P>
+
+<LI>
+
+Prefix for <KBD>W</KBD> (<CODE>bbdb-www</CODE>) command to allow selection of
+different addresses.
+<P>
+
+<LI>
+
+Generalized buttons (via extents) for fields. Example: <SAMP>`(a . b)'</SAMP>
+means create button that calls <SAMP>`b'</SAMP> for each entry in the <SAMP>`a'</SAMP>
+field.
+<P>
+
+<LI>
+
+Remove support for GNUS. Start with lisp Makefile (remove nntp and gnus
+loads).
+<P>
+
+<LI>
+
+More flexible auto-addition. Conditionalizing of addition (conditions
+or supplied function). Prompt if multiple records that meet criteria exist.
+<P>
+
+<LI>
+
+Different output formats. See Toby Speight's <CODE>&#60;s8iurdodvm.fsf@plato.ansa.co.uk&#62;</CODE>
+and Bin Mu's <CODE>&#60;199801221605.KAA23663@DerivaTech.Com&#62;</CODE>.
+<P>
+
+<LI>
+
+Generalized area-code-split program that could split, for example, based
+on input copied (or straight fetch of page) from the Bellcore NANP page.
+<P>
+
+<LI>
+
+Print multivalue (comma-separated) fields with one value per line
+<P>
+
+<LI>
+
+Easier BBDB extension. See <CODE>&#60;xcdyb30f3hb.fsf@ra.cs.uchicago.edu&#62;</CODE>
+from Soren Dayton.
+<P>
+
+<LI>
+
+Take birthdays from the <B>BBDB</B>, add them to calendar. From Boris
+Goldowsky.
+<P>
+
+<LI>
+
+Make mail aliases file for other mailers. From Boris Goldowsky.
+<P>
+
+<LI>
+
+Various patches from Boris Goldowsky in <TT>`bbdb-ext'</TT>.
+<P>
+
+<LI>
+
+Various other patches:
+
+<UL>
+<LI>
+
+<CODE>bbdb-filters-0.2</CODE>
+<LI>
+
+<CODE>bbdb-frame.el</CODE>
+<LI>
+
+<CODE>bbdb-letter-1.0</CODE>
+<LI>
+
+<CODE>bbdb-plz</CODE>
+<LI>
+
+<CODE>bbdb-query</CODE>
+<LI>
+
+<CODE>country</CODE>
+<LI>
+
+<CODE>country-info</CODE>
+</UL>
+
+Note that these files have not been investigated. They may or
+may not be incorporated.
+<P>
+
+<LI>
+
+Ability to remove all properties from copied strings.
+<P>
+
+</UL>
+
+
+<H4>Not-So-Near Future</H4>
+<P>
+
+
+<UL>
+<LI>
+
+Fix Gnus scoring so it rebuilds when gnus-score disappears
+<P>
+
+<LI>
+
+Multiline note fields
+<P>
+
+<LI>
+
+Change key to be some kind of unique number
+<P>
+
+<LI>
+
+There should be better support for non-American addresses and phone
+numbers. This might be Near Future if somebody volunteers to send me patches.
+<P>
+
+<LI>
+
+Should reimplement "electric" mode to not be so broken.<P>
+
+<LI>
+
+The <KBD>*C-o</KBD> keystroke should add a field to all displayed records.
+Perhaps <KBD>*;</KBD> should append some text to an arbitrary field of all
+displayed records. <P>
+
+<LI>
+
+Multiple <TT>`.bbdb'</TT> files with precedence relationships. See Wes
+Hardaker's <BR><CODE>&#60;sdu3awz75a.fsf@oakdale.ucdavis.edu&#62;</CODE>
+<P>
+
+<LI>
+
+Automatically grab information about a person from their sig. See
+Graham Clark's <CODE>info-bbdb</CODE> post
+<CODE>&#60;6282.199706161624@havra.dcs.ed.ac.uk&#62;</CODE> and Adrian Aichner's
+<CODE>info-bbdb</CODE> post
+<CODE>&#60;rxsiuzebpgp.fsf@midnight.ecf.teradyne.com&#62;</CODE>. Would like to have
+<CODE>bbdb-snarf</CODE> attack the sig then compare the snarfed data with the
+header data.
+<P>
+
+</UL>
+
+
+<H4>Thoughts</H4>
+<P>
+
+
+<UL>
+<LI>
+
+Are there enough hooks?
+<P>
+
+<LI>
+
+The interfaces should share more code. <P>
+
+<LI>
+
+The <CODE>bbdb-create-internal</CODE> function should be more forgiving.<P>
+
+<LI>
+
+More <KBD>*</KBD> commands in general, including <KBD>*d</KBD>.
+</UL>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC65"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC64"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC66"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC62"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC62"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H3> 1.13.3 End of Life (EOL) Statements </H3>
+<!--docid::SEC65::-->
+<P>
+
+The items in the following list describe items for which support will be
+removed in coming versions of the <B>BBDB</B>. The items listed are
+guaranteed to be supported and present only until the EOL date. They
+may be removed without warning at any time thereafter.
+</P><P>
+
+
+<OL>
+<LI><CODE>advertized-bbdb-delete-current-field-or-record</CODE><BR>
+
+Support for this function will be removed for version 2.2. It is
+recommended that all code depending on this variable be switched to use
+<CODE>bbdb-delete-current-field-or-record</CODE>. The two functions have the
+same calling conventions and effects. This EOL statement was added for
+version 2.1.
+<P>
+
+<LI>Support for the GNUS (not Gnus) newsreader<BR>
+
+The GNUS-specific parts of the <B>BBDB</B> will be actively removed for the
+2.2 release. No further maintenance and/or bugfixes are planned for
+GNUS code at this time. This EOL statement was added for version 2.1.
+</OL>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC66"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC65"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC67"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H2> 1.14 Thanks </H2>
+<!--docid::SEC66::-->
+<P>
+
+Thanks to everyone on the info-bbdb mailing list for many useful suggestions.
+This hack would be far less insidious without their input!
+</P><P>
+
+
+<H3>Thanks list for versions after 1.51</H3>
+<P>
+
+Thanks to Adrian Aichner, Kees de Bruin, David Carlton, Soren Dayton,
+Brian Edmonds, Boris Goldowsky, Seth Golub, John Heidemann, Christopher
+Kline, Carsten Leonhardt, Hrvoje Niksic, Jens-Ulrik Hoger Petersen,
+Colin Rafferty, Sam Steingold, Marco Walther, Christoph Wedler
+</P><P>
+
+Last, but not least, thanks to Jamie Zawinski for writing <B>BBDB</B> in the
+first place.
+</P><P>
+
+
+<H3>Thanks list for versions prior to and including 1.51.</H3>
+<P>
+
+And special thanks to Sebastian Kremer, Joe Wells, Todd Kaufmann, Andy
+Norman, Ivan Vazquez, Stewart Clamen, Roland McGrath, Dave Brennan,
+Kimball Collins, Dirk Grunwald, Philippe Queinnec, Boris Putanec, Dave
+Disser, Francois Felix Ingrand, Sean Owens, Guido Bosch, Lance Brown,
+Tom Emerson, George Hartzell, Luis Miguel Silveira, Kimmo Suominen,
+Derek Upham, David Zuhn, Rod Whitby, Richard Mlynarik.
+</P><P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC67"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC66"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC68"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H1> _ </H1>
+<!--docid::SEC67::-->
+
+<PRE>
+in.sid.i.ous aj \in-'sid-e-*s\
+ [L insidiosus, fr. insidiae ambush, fr. insidere to sit in, sit on,
+ fr. in- + sedere to sit -- more at SIT]
+ 1 a : awaiting a chance to entrap TREACHEROUS
+ b : harmful but enticing SEDUCTIVE
+ 2 a : having a gradual and cumulative effect SUBTLE
+ b of a disease
+ : developing so gradually as to be well established before
+ becoming apparent
+ in.sid.i.ous.ly av
+ in.sid.i.ous.ness n
+</PRE>
+
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC68"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC67"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC69"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC69"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H1> Concept Index </H1>
+<!--docid::SEC68::-->
+<H3>Jump to:</H3>
+<A HREF="#cindex_%">%</A>
+ &nbsp;
+<A HREF="#cindex_*">*</A>
+ &nbsp;
+<BR>
+<A HREF="#cindex_a">A</A>
+ &nbsp;
+<A HREF="#cindex_b">B</A>
+ &nbsp;
+<A HREF="#cindex_c">C</A>
+ &nbsp;
+<A HREF="#cindex_d">D</A>
+ &nbsp;
+<A HREF="#cindex_e">E</A>
+ &nbsp;
+<A HREF="#cindex_f">F</A>
+ &nbsp;
+<A HREF="#cindex_g">G</A>
+ &nbsp;
+<A HREF="#cindex_i">I</A>
+ &nbsp;
+<A HREF="#cindex_m">M</A>
+ &nbsp;
+<A HREF="#cindex_n">N</A>
+ &nbsp;
+<A HREF="#cindex_o">O</A>
+ &nbsp;
+<A HREF="#cindex_p">P</A>
+ &nbsp;
+<A HREF="#cindex_r">R</A>
+ &nbsp;
+<A HREF="#cindex_s">S</A>
+ &nbsp;
+<A HREF="#cindex_t">T</A>
+ &nbsp;
+<A HREF="#cindex_u">U</A>
+ &nbsp;
+<A HREF="#cindex_x">X</A>
+<P></P><P></P>
+<TABLE border=0>
+<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> section</TH></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_%">%</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX113">%F</A></TD><TD><A HREF="bbdb.html#SEC34">1.5.2.1 VM Message Summary Enhancements</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX114">%UB</A></TD><TD><A HREF="bbdb.html#SEC34">1.5.2.1 VM Message Summary Enhancements</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_*">*</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX25">*BBDB* buffer</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_a">A</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX34">Adding new fields</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX23">Adding new records</A></TD><TD><A HREF="bbdb.html#SEC20">1.2.4 Manual record addition</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX97">Address completion</A></TD><TD><A HREF="bbdb.html#SEC27">1.4.3 Mail Sending Interfaces</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX142">Address completion</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX130">AKA</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX129">Alternate names</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX89">Annotating the sender of the current message</A></TD><TD><A HREF="bbdb.html#SEC24">1.4 Interfaces</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX134">Auto-save files</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX136">Automatic display of the corresponding record</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX175">Automatically adding text to records</A></TD><TD><A HREF="bbdb.html#SEC43">1.7.3 Predefined Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX126">Automatically creating records</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX168">Automatically creating records</A></TD><TD><A HREF="bbdb.html#SEC43">1.7.3 Predefined Hooks</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_b">B</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX24">BBDB Mode</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX67">Browsing the Web page for the current record</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX1">Builtin field types</A></TD><TD><A HREF="bbdb.html#SEC17">1.2.1 Database Fields</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_c">C</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX28">Changing fields</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX71">Changing windows</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX139">Completion</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX22">Creating new records</A></TD><TD><A HREF="bbdb.html#SEC20">1.2.4 Manual record addition</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX72">Creating new records</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_d">D</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX31">Deleting fields</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX57">Dialing phone numbers</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX74">Displaying changed records</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_e">E</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX27">Editing fields</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX122">Electric display</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX15">Elided display</A></TD><TD><A HREF="bbdb.html#SEC18">1.2.2 Basic searching commands</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX39">European phone numbers</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX120">European phone numbers</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_f">F</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX61">Finger interface</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX53">Fixing mistakes</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_g">G</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX106">GNUS Subject-buffer</A></TD><TD><A HREF="bbdb.html#SEC32">1.5.1.3 GNUS Summary Buffer Enhancements</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_i">I</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#SEC6">Initial Configuration</A></TD><TD><A HREF="bbdb.html#SEC6">1.1.4 Initial Configuration</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX35">Inserting new fields</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#SEC2">Installation</A></TD><TD><A HREF="bbdb.html#SEC2">1.1 Installation</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_m">M</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX96">Mail address completion</A></TD><TD><A HREF="bbdb.html#SEC27">1.4.3 Mail Sending Interfaces</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX141">Mail address completion</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX102">Mail Aliases</A></TD><TD><A HREF="bbdb.html#SEC27">1.4.3 Mail Sending Interfaces</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX101">Mailing lists</A></TD><TD><A HREF="bbdb.html#SEC27">1.4.3 Mail Sending Interfaces</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#SEC2">Makefile</A></TD><TD><A HREF="bbdb.html#SEC2">1.1 Installation</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX107">mark-char</A></TD><TD><A HREF="bbdb.html#SEC32">1.5.1.3 GNUS Summary Buffer Enhancements</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX54">Merging records</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_n">N</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX95">Name completion</A></TD><TD><A HREF="bbdb.html#SEC27">1.4.3 Mail Sending Interfaces</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX140">Name completion</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#SEC4">Normal User Installation</A></TD><TD><A HREF="bbdb.html#SEC4">1.1.2 Normal User Installation</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX38">North American phone numbers</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX119">North American phone numbers</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_o">O</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX16">One-line display</A></TD><TD><A HREF="bbdb.html#SEC18">1.2.2 Basic searching commands</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_p">P</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX37">Phone numbers</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX117">Phone numbers</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX6">Printing records in the database</A></TD><TD><A HREF="bbdb.html#SEC17">1.2.1 Database Fields</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX69">Printing records in the database</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#SEC46">Printing records in the database</A></TD><TD><A HREF="bbdb.html#SEC46">1.8.2 <CODE>bbdb-print</CODE></A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_r">R</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX32">Removing fields</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX41">Reordering fields</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_s">S</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX51">Saving your changes</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX8">Searching the database</A></TD><TD><A HREF="bbdb.html#SEC18">1.2.2 Basic searching commands</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX76">Searching the database</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX78">Searching the database</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX48">Sending mail</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX100">Sending mail</A></TD><TD><A HREF="bbdb.html#SEC27">1.4.3 Mail Sending Interfaces</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX84">Showing the sender of the current message</A></TD><TD><A HREF="bbdb.html#SEC24">1.4 Interfaces</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX56">Sound support</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX2">Special Field Names</A></TD><TD><A HREF="bbdb.html#SEC17">1.2.1 Database Fields</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#SEC45">Storing FTP sites in the BBDB</A></TD><TD><A HREF="bbdb.html#SEC45">1.8.1 <CODE>bbdb-ftp</CODE></A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_t">T</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX164">Timestamping records</A></TD><TD><A HREF="bbdb.html#SEC43">1.7.3 Predefined Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX42">Transposing fields</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_u">U</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX14">User-defined fields</A></TD><TD><A HREF="bbdb.html#SEC18">1.2.2 Basic searching commands</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX36">User-defined fields</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cindex_x">X</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#SEC5">XEmacs Package Installation</A></TD><TD><A HREF="bbdb.html#SEC5">1.1.3 XEmacs Package Installation</A></TD></TR>
+</TABLE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="SEC69"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC68"> &lt </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC68"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+
+
+<H1> Variable Index </H1>
+<!--docid::SEC69::-->
+<H3>Jump to:</H3>
+<A HREF="#vindex_b">B</A>
+ &nbsp;
+<A HREF="#vindex_g">G</A>
+ &nbsp;
+<A HREF="#vindex_v">V</A>
+<P></P><P></P>
+<TABLE border=0>
+<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> section</TH></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vindex_b">B</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX179">bbd-print-file-name</A></TD><TD><A HREF="bbdb.html#SEC46">1.8.2 <CODE>bbdb-print</CODE></A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX156">bbdb-after-read-db-hook</A></TD><TD><A HREF="bbdb.html#SEC42">1.7.2 Customization Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX144">bbdb-always-add-addresses</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX174">bbdb-auto-notes-alist</A></TD><TD><A HREF="bbdb.html#SEC43">1.7.3 Predefined Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX176">bbdb-auto-notes-ignore</A></TD><TD><A HREF="bbdb.html#SEC43">1.7.3 Predefined Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX177">bbdb-auto-notes-ignore-all</A></TD><TD><A HREF="bbdb.html#SEC43">1.7.3 Predefined Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX132">bbdb-auto-revert-p</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX160">bbdb-canonicalize-net-hook</A></TD><TD><A HREF="bbdb.html#SEC42">1.7.2 Customization Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX146">bbdb-canonicalize-redundant-nets-p</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX123">bbdb-case-fold-search</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX153">bbdb-change-hook</A></TD><TD><A HREF="bbdb.html#SEC42">1.7.2 Customization Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX161">bbdb-change-hook</A></TD><TD><A HREF="bbdb.html#SEC42">1.7.2 Customization Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX98">bbdb-completion-display-record</A></TD><TD><A HREF="bbdb.html#SEC27">1.4.3 Mail Sending Interfaces</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX138">bbdb-completion-type</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX152">bbdb-create-hook</A></TD><TD><A HREF="bbdb.html#SEC42">1.7.2 Customization Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX116">bbdb-default-area-code</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX58">bbdb-dial-local-prefix</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX59">bbdb-dial-long-distance-prefix</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX121">bbdb-electric-p</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX148">bbdb-elided-display</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX115">bbdb-file</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX4">bbdb-finger-host-field</A></TD><TD><A HREF="bbdb.html#SEC17">1.2.1 Database Fields</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX62">bbdb-finger-host-field</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX167">bbdb-ignore-most-messages-alist</A></TD><TD><A HREF="bbdb.html#SEC43">1.7.3 Predefined Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX172">bbdb-ignore-some-messages-alist</A></TD><TD><A HREF="bbdb.html#SEC43">1.7.3 Predefined Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX66">bbdb-info-file</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX158">bbdb-initialize-hook</A></TD><TD><A HREF="bbdb.html#SEC42">1.7.2 Customization Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX151">bbdb-list-hook</A></TD><TD><A HREF="bbdb.html#SEC42">1.7.2 Customization Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX157">bbdb-load-hook</A></TD><TD><A HREF="bbdb.html#SEC42">1.7.2 Customization Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX147">bbdb-message-caching-enabled</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX154">bbdb-mode-hook</A></TD><TD><A HREF="bbdb.html#SEC42">1.7.2 Customization Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX145">bbdb-new-nets-always-primary</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX118">bbdb-north-american-phone-numbers-p</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX133">bbdb-notice-auto-save-file</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX155">bbdb-notice-hook</A></TD><TD><A HREF="bbdb.html#SEC42">1.7.2 Customization Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX173">bbdb-notice-hook</A></TD><TD><A HREF="bbdb.html#SEC43">1.7.3 Predefined Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX150">bbdb-offer-save</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX149">bbdb-pop-up-elided-display</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX137">bbdb-pop-up-target-lines</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX181">bbdb-print-alist</A></TD><TD><A HREF="bbdb.html#SEC46">1.8.2 <CODE>bbdb-print</CODE></A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX182">bbdb-print-brief-alist</A></TD><TD><A HREF="bbdb.html#SEC46">1.8.2 <CODE>bbdb-print</CODE></A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX178">bbdb-print-elide</A></TD><TD><A HREF="bbdb.html#SEC46">1.8.2 <CODE>bbdb-print</CODE></A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX185">bbdb-print-epilog</A></TD><TD><A HREF="bbdb.html#SEC46">1.8.2 <CODE>bbdb-print</CODE></A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX183">bbdb-print-full-alist</A></TD><TD><A HREF="bbdb.html#SEC46">1.8.2 <CODE>bbdb-print</CODE></A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX184">bbdb-print-prolog</A></TD><TD><A HREF="bbdb.html#SEC46">1.8.2 <CODE>bbdb-print</CODE></A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX180">bbdb-print-require</A></TD><TD><A HREF="bbdb.html#SEC46">1.8.2 <CODE>bbdb-print</CODE></A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX127">bbdb-quiet-about-name-mismatches</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX131">bbdb-readonly-p</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX49">bbdb-send-mail-style</A></TD><TD><A HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX128">bbdb-use-alternate-names</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX135">bbdb-use-pop-up</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX143">bbdb-user-mail-names</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX108">bbdb/gnus-header-prefer-real-names</A></TD><TD><A HREF="bbdb.html#SEC32">1.5.1.3 GNUS Summary Buffer Enhancements</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX109">bbdb/gnus-header-show-bbdb-names</A></TD><TD><A HREF="bbdb.html#SEC32">1.5.1.3 GNUS Summary Buffer Enhancements</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX110">bbdb/gnus-lines-and-from-length</A></TD><TD><A HREF="bbdb.html#SEC32">1.5.1.3 GNUS Summary Buffer Enhancements</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX105">bbdb/gnus-mark-known-posters</A></TD><TD><A HREF="bbdb.html#SEC32">1.5.1.3 GNUS Summary Buffer Enhancements</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#SEC30">bbdb/gnus-score-default</A></TD><TD><A HREF="bbdb.html#SEC30">1.5.1.1 Scoring</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX5">bbdb/gnus-score-field</A></TD><TD><A HREF="bbdb.html#SEC17">1.2.1 Database Fields</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#SEC30">bbdb/gnus-score-field</A></TD><TD><A HREF="bbdb.html#SEC30">1.5.1.1 Scoring</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX124">bbdb/mail-auto-create-p</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX169">bbdb/mail-auto-create-p</A></TD><TD><A HREF="bbdb.html#SEC43">1.7.3 Predefined Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX125">bbdb/news-auto-create-p</A></TD><TD><A HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX170">bbdb/news-auto-create-p</A></TD><TD><A HREF="bbdb.html#SEC43">1.7.3 Predefined Hooks</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX3">bbdb/sc-attribution-field</A></TD><TD><A HREF="bbdb.html#SEC17">1.2.1 Database Fields</A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX186">bbdb/srv-auto-create-p</A></TD><TD><A HREF="bbdb.html#SEC48">1.8.4 <CODE>bbdb-srv</CODE></A></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX187">bbdb/srv-display-delay</A></TD><TD><A HREF="bbdb.html#SEC48">1.8.4 <CODE>bbdb-srv</CODE></A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vindex_g">G</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#SEC30">gnus-score-find-score-files-function</A></TD><TD><A HREF="bbdb.html#SEC30">1.5.1.1 Scoring</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vindex_v">V</A>
+</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD><A HREF="bbdb.html#IDX111">vm-summary-format</A></TD><TD><A HREF="bbdb.html#SEC34">1.5.2.1 VM Message Summary Enhancements</A></TD></TR>
+</TABLE>
+<P>
+
+<BR> <HR SIZE="6"> <BR>
+<A NAME="bbdb.html"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+<H1></H1>
+<H3><A NAME="FOOT1" HREF="bbdb.html#DOCF1">(1)</A></H3>
+<P>"Core Functionality" is defined as the parts of
+the <B>BBDB</B> used to implement basic record creation (<SAMP>`M-x
+bbdb-create'</SAMP>) and searching (<SAMP>`M-x bbdb'</SAMP>).
+<H3><A NAME="FOOT2" HREF="bbdb.html#DOCF2">(2)</A></H3>
+<P>This
+documentation can be accessed by typing <KBD>C-h f bbdb-initialize RET</KBD>.
+<H3><A NAME="FOOT3" HREF="bbdb.html#DOCF3">(3)</A></H3>
+<P>If you are using GNUS (not Gnus),
+ and if your GNUS version is 3.14 or older, use the <CODE>Gnus</CODE> (note
+ the capitalization) symbol.
+<H3><A NAME="FOOT4" HREF="bbdb.html#DOCF4">(4)</A></H3>
+<P>For the VM
+ initialization to work properly, you must either call
+ <CODE>bbdb-initialize</CODE> with the <CODE>vm</CODE> symbol from within your VM
+ initialization file (<TT>`~/.vm'</TT>), or you must call
+ <CODE>bbdb-insinuate-vm</CODE> manually from within your VM initialization
+ file.
+<H3><A NAME="FOOT5" HREF="bbdb.html#DOCF5">(5)</A></H3>
+<P>While it is possible to put a multi-character mark
+in <CODE>bbdb-message-marker-field</CODE> and/or in
+<CODE>bbdb/gnus-summary-known-poster-mark</CODE>, the resulting summary buffer
+will be misaligned as a result. This misalignment will result from fact
+that at this time the character used to indicate posts whose authors are
+not in the <B>BBDB</B> is always a single character, and cannot be
+changed.
+<H3><A NAME="FOOT6" HREF="bbdb.html#DOCF6">(6)</A></H3>
+<P><CODE>bbdb-snarf</CODE> is actually a wrapper for
+<CODE>bbdb-snarf-region</CODE> that determines the relevant region and passes it
+on.
+<H3><A NAME="FOOT7" HREF="bbdb.html#DOCF7">(7)</A></H3>
+<P>Use the full path to <CODE>bbdb-srv.pl</CODE> if
+it is not in the default path.
+<HR SIZE=1>
+<BR>
+<A NAME="SEC_Contents"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+<H1>Table of Contents</H1>
+<UL>
+<LI><A NAME="TOC1" HREF="bbdb.html#SEC1">1. BBDB</A>
+</LI><UL>
+<LI><A NAME="TOC2" HREF="bbdb.html#SEC2">1.1 Installation</A>
+</LI><UL>
+<LI><A NAME="TOC3" HREF="bbdb.html#SEC3">1.1.1 General Prerequisites</A>
+</LI><LI><A NAME="TOC4" HREF="bbdb.html#SEC4">1.1.2 Normal User Installation</A>
+</LI><LI><A NAME="TOC5" HREF="bbdb.html#SEC5">1.1.3 XEmacs Package Installation</A>
+</LI><LI><A NAME="TOC6" HREF="bbdb.html#SEC6">1.1.4 Initial Configuration</A>
+</LI><UL>
+<LI><A NAME="TOC7" HREF="bbdb.html#SEC7">1.1.4.1 Initializing <B>BBDB</B> support for Gnus</A>
+</LI><LI><A NAME="TOC8" HREF="bbdb.html#SEC8">1.1.4.2 Initializing <B>BBDB</B> support for MH-E</A>
+</LI><LI><A NAME="TOC9" HREF="bbdb.html#SEC9">1.1.4.3 Initializing <B>BBDB</B> support for RMAIL</A>
+</LI><LI><A NAME="TOC10" HREF="bbdb.html#SEC10">1.1.4.4 Initializing <B>BBDB</B> support for Sendmail</A>
+</LI><LI><A NAME="TOC11" HREF="bbdb.html#SEC11">1.1.4.5 Initializing <B>BBDB</B> support for VM</A>
+</LI><LI><A NAME="TOC12" HREF="bbdb.html#SEC12">1.1.4.6 Initializing <B>BBDB</B> support for Message mode</A>
+</LI><LI><A NAME="TOC13" HREF="bbdb.html#SEC13">1.1.4.7 Initializing <B>BBDB</B> support for Reportmail</A>
+</LI><LI><A NAME="TOC14" HREF="bbdb.html#SEC14">1.1.4.8 Initializing <B>BBDB</B> support for Supercite</A>
+</LI><LI><A NAME="TOC15" HREF="bbdb.html#SEC15">1.1.4.9 Initializing <B>BBDB</B> support for Web Browsers</A>
+</LI></UL>
+</UL>
+<LI><A NAME="TOC16" HREF="bbdb.html#SEC16">1.2 The <B>BBDB</B></A>
+</LI><UL>
+<LI><A NAME="TOC17" HREF="bbdb.html#SEC17">1.2.1 Database Fields</A>
+</LI><LI><A NAME="TOC18" HREF="bbdb.html#SEC18">1.2.2 Basic searching commands</A>
+</LI><LI><A NAME="TOC19" HREF="bbdb.html#SEC19">1.2.3 Advanced searching commands</A>
+</LI><LI><A NAME="TOC20" HREF="bbdb.html#SEC20">1.2.4 Manual record addition</A>
+</LI></UL>
+<LI><A NAME="TOC21" HREF="bbdb.html#SEC21">1.3 BBDB Mode</A>
+</LI><UL>
+<LI><A NAME="TOC22" HREF="bbdb.html#SEC22">1.3.1 Functions bound to keys in <B>BBDB</B> Mode</A>
+</LI><LI><A NAME="TOC23" HREF="bbdb.html#SEC23">1.3.2 Other database manipulation functions</A>
+</LI></UL>
+<LI><A NAME="TOC24" HREF="bbdb.html#SEC24">1.4 Interfaces</A>
+</LI><UL>
+<LI><A NAME="TOC25" HREF="bbdb.html#SEC25">1.4.1 Mail Reading Interfaces</A>
+</LI><LI><A NAME="TOC26" HREF="bbdb.html#SEC26">1.4.2 News Reading Interfaces</A>
+</LI><LI><A NAME="TOC27" HREF="bbdb.html#SEC27">1.4.3 Mail Sending Interfaces</A>
+</LI></UL>
+<LI><A NAME="TOC28" HREF="bbdb.html#SEC28">1.5 Reader-specific Features</A>
+</LI><UL>
+<LI><A NAME="TOC29" HREF="bbdb.html#SEC29">1.5.1 Gnus-specific Features</A>
+</LI><UL>
+<LI><A NAME="TOC30" HREF="bbdb.html#SEC30">1.5.1.1 Scoring</A>
+</LI><LI><A NAME="TOC31" HREF="bbdb.html#SEC31">1.5.1.2 Gnus Summary Buffer Enhancements</A>
+</LI><LI><A NAME="TOC32" HREF="bbdb.html#SEC32">1.5.1.3 GNUS Summary Buffer Enhancements</A>
+</LI></UL>
+<LI><A NAME="TOC33" HREF="bbdb.html#SEC33">1.5.2 VM-specific features</A>
+</LI><UL>
+<LI><A NAME="TOC34" HREF="bbdb.html#SEC34">1.5.2.1 VM Message Summary Enhancements</A>
+</LI></UL>
+</UL>
+<LI><A NAME="TOC35" HREF="bbdb.html#SEC35">1.6 Using the <B>BBDB</B> with other packages</A>
+</LI><UL>
+<LI><A NAME="TOC36" HREF="bbdb.html#SEC36">1.6.1 Using the <B>BBDB</B> with Message Mode</A>
+</LI><LI><A NAME="TOC37" HREF="bbdb.html#SEC37">1.6.2 Using the <B>BBDB</B> with Reportmail</A>
+</LI><LI><A NAME="TOC38" HREF="bbdb.html#SEC38">1.6.3 Using the <B>BBDB</B> with Supercite</A>
+</LI><LI><A NAME="TOC39" HREF="bbdb.html#SEC39">1.6.4 Using the <B>BBDB</B> with Web Browsers</A>
+</LI></UL>
+<LI><A NAME="TOC40" HREF="bbdb.html#SEC40">1.7 Options</A>
+</LI><UL>
+<LI><A NAME="TOC41" HREF="bbdb.html#SEC41">1.7.1 Customization Parameters</A>
+</LI><LI><A NAME="TOC42" HREF="bbdb.html#SEC42">1.7.2 Customization Hooks</A>
+</LI><LI><A NAME="TOC43" HREF="bbdb.html#SEC43">1.7.3 Predefined Hooks</A>
+</LI></UL>
+<LI><A NAME="TOC44" HREF="bbdb.html#SEC44">1.8 Utilities</A>
+</LI><UL>
+<LI><A NAME="TOC45" HREF="bbdb.html#SEC45">1.8.1 <CODE>bbdb-ftp</CODE></A>
+</LI><LI><A NAME="TOC46" HREF="bbdb.html#SEC46">1.8.2 <CODE>bbdb-print</CODE></A>
+</LI><LI><A NAME="TOC47" HREF="bbdb.html#SEC47">1.8.3 <CODE>bbdb-snarf</CODE></A>
+</LI><LI><A NAME="TOC48" HREF="bbdb.html#SEC48">1.8.4 <CODE>bbdb-srv</CODE></A>
+</LI></UL>
+<LI><A NAME="TOC49" HREF="bbdb.html#SEC49">1.9 Internals</A>
+</LI><UL>
+<LI><A NAME="TOC50" HREF="bbdb.html#SEC50">1.9.1 BBDB data file format</A>
+</LI><UL>
+<LI><A NAME="TOC51" HREF="bbdb.html#SEC51">1.9.1.1 Record Vectors</A>
+</LI><LI><A NAME="TOC52" HREF="bbdb.html#SEC52">1.9.1.2 Phone Vectors</A>
+</LI><LI><A NAME="TOC53" HREF="bbdb.html#SEC53">1.9.1.3 Address Vectors</A>
+</LI><LI><A NAME="TOC54" HREF="bbdb.html#SEC54">1.9.1.4 Cache Vector</A>
+</LI><LI><A NAME="TOC55" HREF="bbdb.html#SEC55">1.9.1.5 Notes String or Alist</A>
+</LI><LI><A NAME="TOC56" HREF="bbdb.html#SEC56">1.9.1.6 Example BBDB record</A>
+</LI></UL>
+</UL>
+<LI><A NAME="TOC57" HREF="bbdb.html#SEC57">1.10 Mailing Lists</A>
+</LI><LI><A NAME="TOC58" HREF="bbdb.html#SEC58">1.11 Changes in this Version</A>
+</LI><UL>
+<LI><A NAME="TOC59" HREF="bbdb.html#SEC59">1.11.1 Major Changes</A>
+</LI><LI><A NAME="TOC60" HREF="bbdb.html#SEC60">1.11.2 Other Changes</A>
+</LI></UL>
+<LI><A NAME="TOC61" HREF="bbdb.html#SEC61">1.12 The Latest Version</A>
+</LI><LI><A NAME="TOC62" HREF="bbdb.html#SEC62">1.13 The Future</A>
+</LI><UL>
+<LI><A NAME="TOC63" HREF="bbdb.html#SEC63">1.13.1 Known Bugs</A>
+</LI><LI><A NAME="TOC64" HREF="bbdb.html#SEC64">1.13.2 TODO List</A>
+</LI><LI><A NAME="TOC65" HREF="bbdb.html#SEC65">1.13.3 End of Life (EOL) Statements</A>
+</LI></UL>
+<LI><A NAME="TOC66" HREF="bbdb.html#SEC66">1.14 Thanks</A>
+</LI></UL>
+<LI><A NAME="TOC67" HREF="bbdb.html#SEC67">_</A>
+</LI><LI><A NAME="TOC68" HREF="bbdb.html#SEC68">Concept Index</A>
+</LI><LI><A NAME="TOC69" HREF="bbdb.html#SEC69">Variable Index</A>
+</LI></UL>
+<HR SIZE=1>
+<BR>
+<A NAME="SEC_OVERVIEW"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+<H1>Short Table of Contents</H1>
+<A NAME="TOC1" HREF="bbdb.html#SEC1">1. BBDB</A>
+<BR>
+<A NAME="TOC67" HREF="bbdb.html#SEC67">_</A>
+<BR>
+<A NAME="TOC68" HREF="bbdb.html#SEC68">Concept Index</A>
+<BR>
+<A NAME="TOC69" HREF="bbdb.html#SEC69">Variable Index</A>
+<BR>
+<HR SIZE=1>
+<BR>
+<A NAME="SEC_About"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<HR SIZE=1>
+<H1>About this document</H1>
+This document was generated with <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html 1.60Beta</I></A> on February, 29 2000 by Ronan Waide.
+<P></P>
+The buttons in the navigation panels have the following meaning:
+<P></P>
+<table border = "1">
+<TR>
+<TH> Button </TH>
+<TH> Name </TH>
+<TH> Go to </TH>
+<TH> From 1.2.3 go to</TH>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &lt ] </TD>
+<TD ALIGN="CENTER">
+Back
+</TD>
+<TD>
+previous section in reading order
+</TD>
+<TD>
+1.2.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &gt; ] </TD>
+<TD ALIGN="CENTER">
+Forward
+</TD>
+<TD>
+next section in reading order
+</TD>
+<TD>
+1.2.4
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &lt;&lt; ] </TD>
+<TD ALIGN="CENTER">
+FastBack
+</TD>
+<TD>
+previous or up-and-previous section
+</TD>
+<TD>
+1.1
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ Up ] </TD>
+<TD ALIGN="CENTER">
+Up
+</TD>
+<TD>
+up section
+</TD>
+<TD>
+1.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &gt;&gt; ] </TD>
+<TD ALIGN="CENTER">
+FastForward
+</TD>
+<TD>
+next or up-and-next section
+</TD>
+<TD>
+1.3
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Top] </TD>
+<TD ALIGN="CENTER">
+Top
+</TD>
+<TD>
+cover (top) of document
+</TD>
+<TD>
+ &nbsp;
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Contents] </TD>
+<TD ALIGN="CENTER">
+Contents
+</TD>
+<TD>
+table of contents
+</TD>
+<TD>
+ &nbsp;
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Index] </TD>
+<TD ALIGN="CENTER">
+Index
+</TD>
+<TD>
+concept index
+</TD>
+<TD>
+ &nbsp;
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ ? ] </TD>
+<TD ALIGN="CENTER">
+About
+</TD>
+<TD>
+this page
+</TD>
+<TD>
+ &nbsp;
+</TD>
+</TR>
+</TABLE>
+<P></P>
+where the <STRONG> Example </STRONG> assumes that the current position
+is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of
+the following structure:
+<UL>
+<LI> 1. Section One </LI>
+<UL>
+<LI>1.1 Subsection One-One</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.2 Subsection One-Two</LI>
+<UL>
+<LI>1.2.1 Subsubsection One-Two-One
+</LI><LI>1.2.2 Subsubsection One-Two-Two
+</LI><LI>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp; <STRONG>
+&lt;== Current Position </STRONG>
+</LI><LI>1.2.4 Subsubsection One-Two-Four
+</LI></UL>
+<LI>1.3 Subsection One-Three</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.4 Subsection One-Four</LI>
+</UL>
+</UL>
+
+<HR SIZE=1>
+<BR>
+<FONT SIZE="-1">
+This document was generated using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+by <I>Ronan Waide &nbsp; on February, 29 2000</I>
+
+</BODY>
+</HTML>
diff --git a/html/images/bbi.gif b/html/images/bbi.gif
new file mode 100644
index 0000000..afc503e
--- /dev/null
+++ b/html/images/bbi.gif
Binary files differ
diff --git a/html/images/headleft.gif b/html/images/headleft.gif
new file mode 100644
index 0000000..bd44bf4
--- /dev/null
+++ b/html/images/headleft.gif
Binary files differ
diff --git a/html/images/headright.gif b/html/images/headright.gif
new file mode 100644
index 0000000..ee42108
--- /dev/null
+++ b/html/images/headright.gif
Binary files differ
diff --git a/html/index.html b/html/index.html
new file mode 100644
index 0000000..f7d04d0
--- /dev/null
+++ b/html/index.html
@@ -0,0 +1,239 @@
+<HTML>
+<HEAD>
+<TITLE>The Insidious Big Brother DataBase @ SourceForge</TITLE>
+</HEAD>
+
+ <body bgcolor="#faebd7"><!-- yeah, I kept the hideous page colour -->
+
+ <table align=center>
+ <tr>
+ <td><img src="images/headright.gif"></td>
+ <td><font size=5><b>The Insidious Big Brother Database</b></font></td>
+ <td><img src="images/headleft.gif"></td>
+ </tr>
+ </table>
+
+ <h2>NEWS: Live on SourceForge. Check out <a href="http://sourceforge.net/project/?group_id=4236">http://sourceforge.net/project/?group_id=4236</a></h2>
+
+ <p align="center">Quicklinks: <a href="index.html#get">get the bbdb</a> | <a
+ href="index.html#lists">mailing lists</a> | <a
+ href="index.html#links">links</a> | <a
+ href="index.html#manual">manual</a></p>
+
+ <h2>What is The Insidious Big Brother Database?</h2>
+
+ <p>The Insidious Big Brother Database (BBDB) is a contact
+ management utility created by <a
+ href="http://www.jwz.org/">Jamie Zawinski</a> for use with
+ Emacs. It is tightly integrated with several mail and news
+ readers (see below), allowing it to create database entries
+ directly from mail and news messages. As is usual with
+ applications for Emacs, this record creation can be configured
+ in many ways, ranging from a boolean create/don't create
+ setting to creation based on the result of a user-supplied
+ function.</p>
+
+ <p>Database records can be used to store many types of
+ information, from name and address to URLs and X-Face images.
+ This information can be displayed when a message from an entity
+ named in a database record is recieved. In addition, messages
+ from database members can be tagged in the Gnus Summary Buffer,
+ and Gnus scoring can be configured based on the contents of
+ database records. Supercite citations can even be preset
+ through the use of records in the BBDB.</p>
+
+ <h2>Requirements:</h2>
+
+ <h3>Supported versions of Emacs</h3>
+ <ul>
+ <li><a href="http://www.gnu.org/">Gnu</a> <a
+ href="ftp://ftp.gnu.org/pub/emacs/">Emacs</a> versions 19.34 and
+ above</li>
+
+ <li><a href="http://www.xemacs.org/">XEmacs</a> versions 19.16 and
+ above</li>
+ </ul>
+
+ <h3>Supported Mail and News readers</h3>
+
+ <p>The BBDB can be used without a mail- or news-reader. It has,
+ however, been optimized for use with one.</p>
+ <ul>
+ <li><a href="http://www.gnus.org/">Gnus</a></li>
+ <li><a href="http://www.wonderworks.com/vm/">VM</a></li>
+ <li>MH-e</li>
+ <li>Rmail</li>
+ <li>UNIX <a href="http://www.netscape.com/">Netscape</a> Mail
+ (via bbdb-srv)</li>
+ <li>UNIX <a href="http://www.netscape.com/">Netscape</a> News
+ (via bbdb-srv)</li>
+ </ul>
+
+ <a name="get"></a><h2>Getting the BBDB</h2>
+
+ <p>BBDB 2.00.06 is the current released version. It fixes a number
+ of things that emacs 20.x breaks in BBDB 2.00, such as key
+ mappings. You can get it <a href="bbdb-2.00.06.tar.gz">here</a>; the
+ <a href="bbdb-2.00.06.tar.gz.sig">PGP signature</a> is also
+ available. (the key is <a
+ href="../../../misc/waider@waider.ie.asc">here</a>).</p>
+
+ <h3>Current development version: Provisionally 2.2</h3>
+
+ <p>This is as-yet untagged; the change in not-quite-major number reflects
+ the following caveat:
+
+ <p><b>WARNING</b>: this modifies the BBDB file format. Anything
+ which relies on BBDB's current file format will no longer
+ work. Alex has also written a function to revert the file format
+ to the 2.00.06 variant - see the <a
+ href="index.html#links">links</a> section below. I've modified it
+ to handle the further hack I've inflicted on the streets field.</p>
+
+ <p>This is now in CVS at the head of the tree; you can grab a
+ tarball <a href="bbdb-2.2.tar.gz">here</a>. Note, the tarball
+ might have one or two things that aren't yet in CVS, most notably
+ updates to documentation. The code is solid, though, since it's my
+ live copy of BBDB.</p>
+
+ <h3>Compilation notes:</h3>
+ <ol>
+
+ <li>Compilation is known to work with Solaris make and with GNU
+ make. If you discover compilation problems with other
+ versions of make, please submit a bug report to <a
+ href="mailto:bbdb-info@lists.sourceforge.net">bbdb-info@lists.sourceforge.net</a>.
+ The make binary shipped with IRIX 6.2 is known not to work
+ with BBDB version 2.00. Also, some of the test targets don't
+ work with GNU make, since MAKEFLAGS doesn't include "-".
+
+ <li>Texinfo 3.11 (or later) is required to compile the texinfo
+ documentation. It is available at <a
+ href="ftp://ftp.gnu.org/pub/gnu">the GNU FTP site</a>.
+ Precompiled info files are included in the tarball.
+ </ol>
+
+ <h2>CVS tree</h2>
+
+ <p>The development and release versions are available via Anon-CVS
+ to the CVS tree at <tt>cvs.bbdb.sourceforge.net</tt>. To access the
+ tree, log in with the following command:
+
+ <pre>
+ cvs -d :pserver:anonymous@cvs.bbdb.sourceforge.net:/cvsroot/bbdb login
+ </pre>
+
+ The password is blank; just hit return at the prompt.</p>
+
+ To check out a version of the BBDB, use one of the following commands:
+
+ <pre>
+ cvs -d :pserver:anonymous@cvs.bbdb.sourceforge.net:/cvsroot/bbdb checkout bbdb
+ cvs -d :pserver:anonymous@cvs.bbdb.sourceforge.net:/cvsroot/bbdb checkout -r rev bbdb
+ </pre>
+
+ The first command will check out a copy of the latest version.
+ Usually this latest version will be a development version, but it
+ may fetch a release version if the command is executed soon enough
+ after a release version is made available.<p></p>
+
+ The second command allows control of the version retrieved,
+ through the <tt>-r rev</tt> argument. The <tt>rev</tt> portion of
+ the argument should be replaced with a word of the form:<p></p>
+
+ <center><tt>BBDB_</tt><i>x</i><tt>_</tt><i>yy</i></center><p></p>
+
+ <i>x</i> and <i>yy</i> are components of the version to be retrieved, as in
+ <i>x</i>.<i>yy</i>. <b>Note:</b> <tt>unoff</tt> should be appended to the
+ above word for all versions prior to 2.00.<p></p>
+
+ To retrieve version 1.90, use the following argument:<br>
+
+ <pre>
+ -r BBDB_1_90unoff
+ </pre>
+
+ To retrieve version 2.00.06, use the following argument:<br>
+
+ <pre>
+ -r BBDB_2_00_06
+ </pre>
+
+ <a name="manual"></a><h2>Manual</h2>
+
+ <a href="bbdb.html">This</a> is a HTML version of the texinfo
+ manual that accompanies BBDB. It's rough, but it'll do for the mo
+ until I organise myself some more.
+
+ <a name="get"></a><h2>Mailing Lists</h2>
+
+ There are two mailing lists for the BBDB:<p></p>
+
+ <ul>
+ <li><tt>bbdb-info</tt><br>
+ General discussion about the BBDB, both for users and
+ developers. Some of it is archived at <tt><a
+ href="ftp://ftp.xemacs.org/xemacs/bbdb/">ftp://ftp.xemacs.org/xemacs/bbdb/</a></tt>,
+ but this is very old (June 1996). A more current archive
+ can be found at <a
+ href="http://www.mail-archive.com/bbdb-info%40xemacs.org/">http://www.mail-archive.com/bbdb-info%40xemacs.org/</a>. SourceForge has built-in archiving which doesn't seem to be working just yet, which means some of the messages have been, well, not archived. Working on this.</li>
+
+ <li><tt>bbdb-announce</tt><br>
+ Announcements of new BBDB versions. This list is moderated,
+ and has very low volume.</li>
+
+ </ul>
+
+ To subscribe to either mailing list, send mail to
+ <i>listname</i><tt>-request@lists.sourceforge.org</tt> with
+ <tt>subscribe</tt> as the body. You will receive a reply
+ requesting confirmation of your subscription; return the
+ confirmation as described in the email, and you're on the
+ list. Alternatively you can visit the list signup page, linked
+ from the <a
+ href="http://sourceforge.net/project/?group_id=4236">sourceforge
+ project page</a>.
+
+ <a name="#links"></a><h2>Links</h2>
+ <p>Several people have been hacking at BBDB and have pages
+ describing what they're at.</p>
+
+ <p><b>Please note</b> that patches below are generally against the
+ 2.00.06 release. Also, check to see if patches are in CVS
+ before you try to apply them.</p>
+
+ <ul>
+ <li>My <a href="../bbdb-abuse.html">own page</a> currently
+ containing a half-hearted attempt at a "smart"
+ <tt>bbdb-snarf</tt>.</li>
+
+ <li><a href="http://hammer.prohosting.com/~gumbart/">Alex
+ Schroeder</a> has done some work on <a
+ href="http://hammer.prohosting.com/~gumbart/emacs.html#12">de-americanising
+ the address formats</a> and <a
+ href="http://hammer.prohosting.com/~gumbart/bbdb-funcs.html">some
+ other stuff</a>. This is now in the CVS tree.</li>
+
+ <li><a href="http://www.Jochen-Kuepper.de">Jochen
+ K&uuml;pper</a> has done some work on
+ <tt>bbdb-print</tt>, which is now in CVS.</li>
+
+ <li><a href="mailto:Thomas.DeWeese@Kodak.com?subject=BBDB">Thomas
+ DeWeese</a> has created a <a
+ href="patches/multi-record.patch">patch</a> to support multiple
+ records with the same name. This is in CVS.</li>
+
+ </ul>
+
+ <hr>
+ <address><a href="mailto:waider@waider.ie?subject=BBDB">Ronan
+ Waide</a> (based on <a
+ href="http://pweb.netcom.com/~simmonmt/bbdb/">Matt Simmons' bbdb
+ page</a>)</address>
+
+
+<p align="center">Hosted by <A href="http://sourceforge.net/"><IMG
+src="http://sourceforge.net/images/sflogo2-steel.png" vspace="0"
+border=0 width="143" height="70" alt="sourceforge.net"></A></p>
+</BODY>
+</HTML>
diff --git a/html/patches/bbdb-print.patch b/html/patches/bbdb-print.patch
new file mode 100644
index 0000000..8bcf89f
--- /dev/null
+++ b/html/patches/bbdb-print.patch
@@ -0,0 +1,27 @@
+--- bbdb-print.el-orig Mon Feb 28 10:42:52 2000
++++ bbdb-print.el Mon Feb 28 12:39:02 2000
+@@ -489,12 +489,18 @@
+ (bbdb-print-if-not-blank(bbdb-address-street1 addr) "\\\\\n")
+ (bbdb-print-if-not-blank(bbdb-address-street2 addr) "\\\\\n")
+ (bbdb-print-if-not-blank(bbdb-address-street3 addr) "\\\\\n")
+- (bbdb-address-city addr)
+- (if (and (not (equal "" (bbdb-address-city addr)))
+- (not (equal "" (bbdb-address-state addr))))
+- ", ")
+- (bbdb-print-if-not-blank (bbdb-address-state addr) " ")
+- (bbdb-address-zip-string addr)
++ (if (or (null (bbdb-address-state addr)) (equal "" (bbdb-address-state addr)))
++ (concat
++ (bbdb-address-zip-string addr)
++ " "
++ (bbdb-address-city addr))
++ (concat
++ (bbdb-address-city addr)
++ (if (and (not (equal "" (bbdb-address-city addr)))
++ (not (equal "" (bbdb-address-state addr))))
++ ", ")
++ (bbdb-print-if-not-blank (bbdb-address-state addr) " ")
++ (bbdb-address-zip-string addr)))
+ "\\\\")
+ "")))))
+ (setq address (cdr address)))
diff --git a/html/patches/multi-record.patch b/html/patches/multi-record.patch
new file mode 100644
index 0000000..e664ea2
--- /dev/null
+++ b/html/patches/multi-record.patch
@@ -0,0 +1,1493 @@
+I have split all my diffs into three sets:
+
+#1 Removed a number of unused variables (cleaned up builds so I
+ could see real errors). Small changes in a few auxiliary bbdb files.
+ Very low risk, but very little gain.
+
+#2 Small patch to bbdb-print.el adds support for abbreviating 'places'
+ in phone numbers. Fairly low risk, moderate gain.
+
+#3 Large patch to bbdb-com.el and bbdb.el (small patch to bbdb-gnus.el)
+ To support 'duplicate' entries in bbdb. This defines a new variable
+ bbdb-no-duplicates-p, when true bbdb will not allows new duplicate
+ records to be defined.
+
+ The largest single change is to the completing read support.
+ The format of the hash table is also changed.
+
+ Moderate risk (I've been using it daily for almost a year now),
+ significant gain in functionality.
+
+diff -ur bbdb-2.00.06/lisp/bbdb-gnus.el bbdb-2.01/lisp/bbdb-gnus.el
+--- bbdb-2.00.06/lisp/bbdb-gnus.el Tue Sep 28 09:56:40 1999
++++ bbdb-2.01/lisp/bbdb-gnus.el Tue Sep 28 11:01:14 1999
+@@ -42,8 +42,7 @@
+ (or (search-forward "\n\n" nil t)
+ (error "message unexists"))
+ (- (point) 2)))
+- (let ((from (mail-fetch-field "from"))
+- name net)
++ (let ((from (mail-fetch-field "from")))
+ (if (or (null from)
+ (string-match (bbdb-user-mail-names)
+ (mail-strip-quoted-names from)))
+diff -ur bbdb-2.00.06/lisp/bbdb-mhe.el bbdb-2.01/lisp/bbdb-mhe.el
+--- bbdb-2.00.06/lisp/bbdb-mhe.el Tue Sep 28 09:56:40 1999
++++ bbdb-2.01/lisp/bbdb-mhe.el Tue Sep 28 11:01:17 1999
+@@ -71,8 +71,7 @@
+ (let ((msg (bbdb/mh-cache-key buffer-file-name)))
+ (if (eq msg 0) (setq msg nil)) ; 0 could mean trouble; be safe.
+ (or (bbdb-message-cache-lookup msg nil) ; nil = current-buffer
+- (let ((from (bbdb/mh-get-field "^From[ \t]*:"))
+- name net)
++ (let ((from (bbdb/mh-get-field "^From[ \t]*:")))
+ (if (or (string= "" from)
+ (string-match (bbdb-user-mail-names)
+ (mail-strip-quoted-names from)))
+diff -ur bbdb-2.00.06/lisp/bbdb-migrate.el bbdb-2.01/lisp/bbdb-migrate.el
+--- bbdb-2.00.06/lisp/bbdb-migrate.el Tue Sep 28 09:56:40 1999
++++ bbdb-2.01/lisp/bbdb-migrate.el Tue Sep 28 11:01:17 1999
+@@ -97,7 +97,7 @@
+ (cond
+ ;; Version 2 -> 3
+ ((= (car bbdb-file-format-migration) 2)
+- (let (newrecs currec)
++ (let (newrecs)
+ (while records
+ (setq newrecs (append newrecs
+ (list (bbdb-migrate-record
+diff -ur bbdb-2.00.06/lisp/bbdb-rmail.el bbdb-2.01/lisp/bbdb-rmail.el
+--- bbdb-2.00.06/lisp/bbdb-rmail.el Tue Sep 28 09:56:40 1999
++++ bbdb-2.01/lisp/bbdb-rmail.el Tue Sep 28 11:01:18 1999
+@@ -51,8 +51,7 @@
+ (if rmail-current-message
+ (or (bbdb-message-cache-lookup rmail-current-message nil)
+ (save-excursion
+- (let ((from (mail-fetch-field "from"))
+- name net)
++ (let ((from (mail-fetch-field "from")))
+ (if (or (null from)
+ (string-match (bbdb-user-mail-names)
+ (mail-strip-quoted-names from)))
+
+--OqlPABmjKp
+Content-Type: text/plain
+Content-Description: Add support for 'places' abbreviations (ala palm)
+Content-Disposition: inline;
+ filename="bbdb-print-diffs"
+Content-Transfer-Encoding: 7bit
+
+diff -ur bbdb-2.00.06/lisp/bbdb-print.el bbdb-2.01/lisp/bbdb-print.el
+--- bbdb-2.00.06/lisp/bbdb-print.el Tue Sep 28 09:56:40 1999
++++ bbdb-2.01/lisp/bbdb-print.el Tue Sep 28 11:01:17 1999
+@@ -241,6 +241,11 @@
+ which should be a valid regular expression.
+ - n-phones: maximum number of phone numbers to include.
+ - n-addresses: maximum number of addresses to include.
++ - place-abbrev: Abbreviation for phone number 'places'. This is a
++ list of pairs the first element is the full string to be matched
++ the second element is the replacement text. This can be used in
++ any of the bbdb-print-*-alist variables. This allows you to
++ expand as well as contract 'place' names.
+ - include-files: list of TeX files to \\input. If these filenames are not
+ absolute, the files must be located somewhere that TeX will find them.
+ - ps-fonts: nonnil means to use them, nil to use standard TeX fonts.
+@@ -270,6 +275,8 @@
+ (separator . 1)
+ (n-phones . 2)
+ (n-addresses . 1)
++ (place-abbrev ("Work" . "W")
++ ("Home" . "H"))
+ (include-files "bbdb-print-brief" "bbdb-cols"))
+ "*Extra Options for bbdb-print, brief format.
+ These supplement or override entries in `bbdb-print-alist'; see description
+@@ -403,8 +410,7 @@
+ (bbdb-record-phones record)))
+ (address (and (bbdb-field-shown-p 'address)
+ (bbdb-record-addresses record)))
+- (notes (bbdb-record-raw-notes record))
+- (begin (point)))
++ (notes (bbdb-record-raw-notes record)))
+
+ (if (not (eval bbdb-print-require))
+ nil ; lacks required fields
+@@ -423,7 +429,10 @@
+ (setq name (bbdb-print-tex-quote company)
+ company nil))
+
+- (let ((rightside "") p)
++ ;; Expand Phone numbers if needed...
++ (if n-phones (setq phone (bbdb-print-firstn n-phones phone brief)))
++
++ (let ((rightside ""))
+ (cond ((null phone))
+ ((eq t pofl)
+ (setq rightside (bbdb-print-phone-string (car phone))
+@@ -431,7 +440,7 @@
+ ((stringp pofl)
+ (let ((p (bbdb-print-front-if
+ (function (lambda (ph)
+- (string-match pofl (aref ph 0))))
++ (if ph (string-match pofl (aref ph 0)))))
+ phone)))
+ (if p
+ (setq rightside (bbdb-print-phone-string (car p))
+@@ -443,19 +452,16 @@
+ (if company
+ (insert (format "\\comp{%s}\n" (bbdb-print-tex-quote company))))
+
+- ;; Phone numbers
+-
+- (if n-phones
+- (setq phone (bbdb-print-firstn (- n-phones (if pofl 1 0))
+- phone brief)))
+ (while phone
+ (if (car phone)
+- (let ((place (aref (car phone) 0))
++ (let ((place (bbdb-print-abbrev-place (aref (car phone) 0) brief))
+ (number (bbdb-print-phone-string (car phone))))
+ (insert (format "\\phone{%s%s}\n"
+ (bbdb-print-tex-quote
+- (bbdb-print-if-not-blank place ": "))
+- (bbdb-print-tex-quote number))))
++ (bbdb-print-if-not-blank place ":"))
++ (bbdb-print-tex-quote number)
++ ))
++ )
+ (insert (format "\\phone{}\n")))
+ (setq phone (cdr phone)))
+
+@@ -522,6 +528,27 @@
+ (setq current-letter first-letter)))
+
+ current-letter)
++
++(defun bbdb-print-abbrev-place (place &optional brief)
++ "See if there is an abbreviation for PLACE if so return that"
++
++ (let* ((alist (append (if brief bbdb-print-brief-alist bbdb-print-full-alist)
++ bbdb-print-alist))
++ (abbrevs (cdr (assoc 'place-abbrev alist)))
++ (ret place)
++ abbrev)
++ (while abbrevs
++ (setq abbrev (car abbrevs))
++ (if (string-match (car abbrev) place)
++ (setq abbrevs '()
++ ret (cdr abbrev))
++ (setq abbrevs (cdr abbrevs))
++ )
++ )
++ ret
++ )
++ )
++
+
+ (defun bbdb-print-phone-string (phone)
+ "Format PHONE-NUMBER as a string, obeying omit-area-code setting.
+
+--OqlPABmjKp
+Content-Type: text/plain
+Content-Description: Add support for duplicate records to bbdb.
+Content-Disposition: inline;
+ filename="bbdb-duplicate-diffs"
+Content-Transfer-Encoding: 7bit
+
+diff -ur bbdb-2.00.06/lisp/bbdb-com.el bbdb-2.01/lisp/bbdb-com.el
+--- bbdb-2.00.06/lisp/bbdb-com.el Tue Sep 28 09:56:39 1999
++++ bbdb-2.01/lisp/bbdb-com.el Tue Feb 29 11:20:07 2000
+@@ -201,10 +201,10 @@
+ (bbdb-with-db-buffer
+ bbdb-changed-records))))
+
+-(defun bbdb-display (record)
++(defun bbdb-display (records)
+ "Prompts for and displays a single record (this is faster than searching.)"
+ (interactive (list (bbdb-completing-read-record "Display record of: ")))
+- (bbdb-display-records (list record)))
++ (bbdb-display-records records))
+
+ (defun bbdb-display-some (function)
+ "Display records according to FUNCTION. FUNCTION is called with one
+@@ -366,9 +366,10 @@
+ lastname (nth 1 names))))
+ (if (string= firstname "") (setq firstname nil))
+ (if (string= lastname "") (setq lastname nil))
+- (if (bbdb-gethash (downcase (if (and firstname lastname) (concat firstname " " lastname)
+- (or firstname lastname ""))))
+- (error "%s %s is already in the database" (or firstname "") (or lastname "")))))
++ (if (and bbdb-no-duplicates-p
++ (bbdb-gethash (bbdb-build-name firstname lastname)))
++ (error "%s %s is already in the database"
++ (or firstname "") (or lastname "")))))
+ (let ((company (bbdb-read-string "Company: "))
+ (net (bbdb-split (bbdb-read-string "Network Address: ") ","))
+ (addrs (let (L L-tail str addr)
+@@ -456,26 +457,28 @@
+ [\"location\" \"phone-number\"]
+ NOTES is a string, or an alist associating symbols with strings."
+ (let (firstname lastname aka)
+- (while (progn
+- (setq name (and name (bbdb-divide-name name)))
+- (setq firstname (car name) lastname (nth 1 name))
+- (bbdb-gethash (downcase (if (and firstname lastname)
+- (concat firstname " " lastname)
+- (or firstname lastname "")))))
++ (while (and (progn
++ (setq name (and name (bbdb-divide-name name))
++ firstname (car name)
++ lastname (nth 1 name))
++ (bbdb-gethash (bbdb-build-name firstname lastname)))
++ bbdb-no-duplicates-p)
+ (setq name (signal 'error
+ (list (format "%s %s is already in the database"
+ (or firstname "") (or lastname ""))))))
+ (and company (bbdb-check-type company stringp))
+ (if (stringp net)
+ (setq net (bbdb-split net ",")))
+- (let ((rest net))
+- (while rest
+- (while (bbdb-gethash (downcase (car rest)))
+- (setcar rest
+- (signal 'error (list (format
+- "%s is already in the database"
+- (car rest))))))
+- (setq rest (cdr rest))))
++ (if bbdb-no-duplicates-p
++ (let ((rest net))
++ (while rest
++ (while (bbdb-gethash (downcase (car rest)))
++ (setcar rest
++ (signal 'error (list (format
++ "%s is already in the database"
++ (car rest))))))
++ (setq rest (cdr rest))))
++ )
+ (setq addrs
+ (mapcar
+ (function (lambda (addr)
+@@ -587,7 +590,8 @@
+ ;; get to beginning of this record
+ (beginning-of-line)
+ (let ((p (point)))
+- (while (not (or (eobp) (bobp) (looking-at "^[^ \t\n]")))
++ ;; ' - ' is the start of a record with no name.
++ (while (not (or (eobp) (bobp) (looking-at "^\\([^ \t\n]\\| - \\)")))
+ (forward-line -1))
+ (let* ((record (or (bbdb-current-record planning-on-modifying)
+ (error "unperson")))
+@@ -704,14 +708,17 @@
+ (if (stringp contents)
+ (setq contents (bbdb-split contents ",")))
+ ;; first detect any conflicts....
+- (let ((nets contents))
+- (while nets
+- (let ((old (bbdb-gethash (downcase (car nets)))))
+- (if (and old (not (eq old record)))
+- (error "net address \"%s\" is used by \"%s\""
+- (car nets)
+- (or (bbdb-record-name old) (car (bbdb-record-net old))))))
+- (setq nets (cdr nets))))
++ (if bbdb-no-duplicates-p
++ (let ((nets contents))
++ (while nets
++ (let ((old (bbdb-gethash (downcase (car nets)))))
++ (if (and old (not (eq old record)))
++ (error "net address \"%s\" is used by \"%s\""
++ (car nets)
++ (or (bbdb-record-name old)
++ (car (bbdb-record-net old))))))
++ (setq nets (cdr nets))))
++ )
+ ;; then store.
+ (let ((nets contents))
+ (while nets
+@@ -725,15 +732,17 @@
+ (if (stringp contents)
+ (setq contents (bbdb-split contents ";")))
+ ;; first detect any conflicts....
+- (let ((aka contents))
+- (while aka
+- (let ((old (bbdb-gethash (downcase (car aka)))))
+- (if (and old (not (eq old record)))
+- (error "alternate name \"%s\" is used by \"%s\""
+- (car aka)
+- (or (bbdb-record-name old)
+- (car (bbdb-record-net old))))))
+- (setq aka (cdr aka))))
++ (if bbdb-no-duplicates-p
++ (let ((aka contents))
++ (while aka
++ (let ((old (bbdb-gethash (downcase (car aka)))))
++ (if (and old (not (eq old record)))
++ (error "alternate name \"%s\" is used by \"%s\""
++ (car aka)
++ (or (bbdb-record-name old)
++ (car (bbdb-record-net old))))))
++ (setq aka (cdr aka))))
++ )
+ ;; then store.
+ (let ((aka contents))
+ (while aka
+@@ -832,7 +841,8 @@
+ (setq new-name (if (and fn ln) (concat fn " " ln)
+ (or fn ln))
+ old-name (bbdb-record-name bbdb-record))
+- (if (and new-name
++ (if (and bbdb-no-duplicates-p
++ new-name
+ (not (and old-name (string= (downcase new-name)
+ (downcase old-name))))
+ (bbdb-gethash (downcase new-name)))
+@@ -847,8 +857,13 @@
+ ""))))))
+ ;;
+ ;; delete the old hash entry
+- (and (bbdb-record-name bbdb-record)
+- (bbdb-remhash (downcase (bbdb-record-name bbdb-record))))
++ (let ((name (bbdb-record-name bbdb-record))
++ (company (bbdb-record-company bbdb-record)))
++ (if (> (length name) 0)
++ (bbdb-remhash (downcase name) bbdb-record))
++ (if (> (length company) 0)
++ (bbdb-remhash (downcase company) bbdb-record))
++ )
+ (bbdb-record-set-namecache bbdb-record nil)
+ (bbdb-record-set-firstname bbdb-record fn)
+ (bbdb-record-set-lastname bbdb-record ln)
+@@ -906,17 +921,19 @@
+ (let ((oldnets (bbdb-record-net bbdb-record))
+ (newnets (bbdb-split str ",")))
+ ;; first check for any conflicts...
+- (let ((rest newnets))
+- (while rest
+- (let ((old (bbdb-gethash (downcase (car rest)))))
+- (if (and old (not (eq old bbdb-record)))
+- (error "net address \"%s\" is used by \"%s\""
+- (car rest) (bbdb-record-name old))))
+- (setq rest (cdr rest))))
++ (if bbdb-no-duplicates-p
++ (let ((rest newnets))
++ (while rest
++ (let ((old (bbdb-gethash (downcase (car rest)))))
++ (if (and old (not (eq old bbdb-record)))
++ (error "net address \"%s\" is used by \"%s\""
++ (car rest) (bbdb-record-name old))))
++ (setq rest (cdr rest))))
++ )
+ ;; then update.
+ (let ((rest oldnets))
+ (while rest
+- (bbdb-remhash (downcase (car rest)))
++ (bbdb-remhash (downcase (car rest)) bbdb-record)
+ (setq rest (cdr rest))))
+ (let ((nets newnets))
+ (while nets
+@@ -934,17 +951,19 @@
+ (let ((oldaka (bbdb-record-aka bbdb-record))
+ (newaka (bbdb-split str ";")))
+ ;; first check for any conflicts...
+- (let ((rest newaka))
+- (while rest
+- (let ((old (bbdb-gethash (downcase (car rest)))))
+- (if (and old (not (eq old bbdb-record)))
+- (error "alternate name address \"%s\" is used by \"%s\""
+- (car rest) (bbdb-record-name old))))
+- (setq rest (cdr rest))))
++ (if bbdb-no-duplicates-p
++ (let ((rest newaka))
++ (while rest
++ (let ((old (bbdb-gethash (downcase (car rest)))))
++ (if (and old (not (eq old bbdb-record)))
++ (error "alternate name address \"%s\" is used by \"%s\""
++ (car rest) (bbdb-record-name old))))
++ (setq rest (cdr rest))))
++ )
+ ;; then update.
+ (let ((rest oldaka))
+ (while rest
+- (bbdb-remhash (downcase (car rest)))
++ (bbdb-remhash (downcase (car rest)) bbdb-record)
+ (setq rest (cdr rest))))
+ (let ((aka newaka))
+ (while aka
+@@ -1115,7 +1134,7 @@
+ ((memq type '(net aka))
+ (let ((rest (bbdb-record-get-field-internal record type)))
+ (while rest
+- (bbdb-remhash (downcase (car rest)))
++ (bbdb-remhash (downcase (car rest)) record)
+ (setq rest (cdr rest))))
+ (bbdb-record-store-field-internal record type nil))
+ ((eq type 'property)
+@@ -1276,6 +1295,140 @@
+ string1
+ string2))
+
++(defun bbdb-merge-lists! (l1 l2 cmp &optional mod)
++ "Merge two lists l1 l2 (modifies l1) only adds elements from l2
++if cmp returns false for all elements of l1. If optional mod
++is provided it is applied to each element of l1 and l2 prior to cmp"
++ (if (null l1)
++ l2
++ (let ((end (last l1))
++ (src2 l2)
++ (chk (if mod (mapcar mod l1) (append l1 '()))))
++ (while src2
++ (let ((fail '())
++ (src1 chk)
++ (val (if mod (apply mod (car src2) '()) (car src2))))
++ (while src1
++ (if (apply cmp (car src1) val '())
++ (setq src1 '()
++ fail 't)
++ (setq src1 (cdr src1))))
++ (if fail '()
++ (setcdr end (cons (car src2) '()))
++ (setq end (cdr end)))
++ (setq src2 (cdr src2))))
++ l1)))
++
++(defun bbdb-merge-records (old-record new-record)
++"Merge the contents of old-record into new-record, old-record
++remains unchanged. For name and company it queries about which to use
++if they differ. All other fields are concatinated. Idealy this would
++be better about checking for duplicate entires in other fields, as
++well as possibly querying about differing values.
++
++This function does nothing to ensure the integrity of the rest of the
++database, that is somebody elses problem (something like
++bbdb-refile-record)."
++
++ (if (or (null new-record) (eq old-record new-record))
++ (error "those are the same"))
++ (let ((new-name (bbdb-record-name new-record))
++ (new-co (bbdb-record-company new-record))
++ (old-name (bbdb-record-name old-record))
++ (old-co (bbdb-record-company old-record))
++ (old-nets (bbdb-record-net old-record))
++ (old-aka (bbdb-record-aka old-record))
++ extra-name)
++ (let ((name
++ (cond ((= 0 (length old-name))
++ (cons (bbdb-record-firstname new-record)
++ (bbdb-record-lastname new-record)))
++ ((= 0 (length new-name))
++ (cons (bbdb-record-firstname old-record)
++ (bbdb-record-lastname old-record)))
++ ((string-equal (downcase old-name) (downcase new-name))
++ (cons (bbdb-record-firstname new-record)
++ (bbdb-record-lastname new-record)))
++ (t (prog1
++ (if (bbdb-y-or-n-p
++ (format "Use name \"%s\" instead of \"%s\"? "
++ old-name new-name))
++ (progn
++ (setq extra-name new-record)
++ (cons (bbdb-record-firstname old-record)
++ (bbdb-record-lastname old-record)))
++ (setq extra-name old-record)
++ (cons (bbdb-record-firstname new-record)
++ (bbdb-record-lastname new-record)))
++ (or (and bbdb-use-alternate-names
++ (bbdb-y-or-n-p
++ (format "Keep \"%s\" as an alternate name? "
++ (bbdb-record-name extra-name))))
++ (setq extra-name nil))
++ ))
++ ))
++ (comp (cond ((= 0 (length old-co)) new-co)
++ ((= 0 (length new-co)) old-co)
++ ((string-equal old-co new-co) new-co)
++ (t (if (bbdb-y-or-n-p
++ (format "Use company \"%s\" instead of \"%s\"? "
++ old-co new-co))
++ old-co new-co))))
++ )
++
++ (if extra-name
++ (setq old-aka (cons (bbdb-record-name extra-name) old-aka)))
++
++ (bbdb-record-set-phones new-record
++ (bbdb-merge-lists!
++ (bbdb-record-phones new-record)
++ (bbdb-record-phones old-record)
++ 'equal))
++ (bbdb-record-set-addresses new-record
++ (bbdb-merge-lists!
++ (bbdb-record-addresses new-record)
++ (bbdb-record-addresses old-record)
++ 'equal))
++ (bbdb-record-set-company new-record comp)
++
++ (let ((n1 (bbdb-record-raw-notes new-record))
++ (n2 (bbdb-record-raw-notes old-record))
++ tmp)
++ (or (equal n1 n2)
++ (progn
++ (or (listp n1) (setq n1 (list (cons 'notes n1))))
++ (or (listp n2) (setq n2 (list (cons 'notes n2))))
++ (while n2
++ (if (setq tmp (assq (car (car n2)) n1))
++ (setcdr tmp
++ (funcall (or (cdr (assq (car (car n2))
++ bbdb-refile-notes-generate-alist))
++ bbdb-refile-notes-default-merge-function)
++ (cdr tmp) (cdr (car n2))))
++ (setq n1 (nconc n1 (list (car n2)))))
++ (setq n2 (cdr n2)))
++ (bbdb-record-set-raw-notes new-record n1)
++ )
++ )
++ )
++
++ (bbdb-record-set-firstname new-record (car name))
++ (bbdb-record-set-lastname new-record (cdr name))
++ (bbdb-record-set-namecache new-record nil)
++
++ (bbdb-record-set-net new-record
++ (bbdb-merge-lists!
++ (bbdb-record-net new-record) old-nets
++ 'string= 'downcase))
++ (bbdb-record-set-aka new-record
++ (bbdb-merge-lists!
++ (bbdb-record-aka new-record) old-aka
++ 'string= 'downcase))
++ new-record
++ )
++ )
++ )
++
+ ;;;###autoload
+ (defun bbdb-refile-record (old-record new-record)
+ "Merge the current record into some other record; that is, delete the
+@@ -1290,99 +1443,27 @@
+ (interactive
+ (let ((r (bbdb-current-record)))
+ (list r
+- (bbdb-completing-read-record
++ (bbdb-completing-read-one-record
+ (format "merge record \"%s\" into: "
+ (or (bbdb-record-name r) (car (bbdb-record-net r))
+- "???"))))))
++ "???")) (list r)))))
+ (if (or (null new-record) (eq old-record new-record))
+ (error "those are the same"))
+- (let*(extra-name
+- (name
+- (cond ((and (/= 0 (length (bbdb-record-name old-record)))
+- (/= 0 (length (bbdb-record-name new-record))))
+- (prog1
+- (if (bbdb-y-or-n-p
+- (format "Use name \"%s\" instead of \"%s\"? "
+- (bbdb-record-name old-record)
+- (bbdb-record-name new-record)))
+- (progn
+- (setq extra-name new-record)
+- (cons (bbdb-record-firstname old-record)
+- (bbdb-record-lastname old-record)))
+- (setq extra-name old-record)
+- (cons (bbdb-record-firstname new-record)
+- (bbdb-record-lastname new-record)))
+- (or (and bbdb-use-alternate-names
+- (bbdb-y-or-n-p
+- (format "Keep \"%s\" as an alternate name? "
+- (bbdb-record-name extra-name))))
+- (setq extra-name nil))
+- ))
+- ((= 0 (length (bbdb-record-name old-record)))
+- (cons (bbdb-record-firstname new-record)
+- (bbdb-record-lastname new-record)))
+- (t (cons (bbdb-record-firstname old-record)
+- (bbdb-record-lastname old-record)))))
+- (comp
+- (cond ((and (/= 0 (length (bbdb-record-company old-record)))
+- (/= 0 (length (bbdb-record-company new-record))))
+- (if (bbdb-y-or-n-p (format
+- "Use company \"%s\" instead of \"%s\"? "
+- (bbdb-record-company old-record)
+- (bbdb-record-company new-record)))
+- (bbdb-record-company old-record)
+- (bbdb-record-company new-record)))
+- ((= 0 (length (bbdb-record-company old-record)))
+- (bbdb-record-company new-record))
+- (t (bbdb-record-company old-record))))
+- (old-nets (bbdb-record-net old-record))
+- (old-aka (bbdb-record-aka old-record))
+- )
+- (if extra-name
+- (setq old-aka (cons (bbdb-record-name extra-name) old-aka)))
+- (bbdb-record-set-phones new-record
+- (nconc (bbdb-record-phones new-record)
+- (bbdb-record-phones old-record)))
+- (bbdb-record-set-addresses new-record
+- (nconc (bbdb-record-addresses new-record)
+- (bbdb-record-addresses old-record)))
+- (bbdb-record-set-company new-record comp)
+- (let ((n1 (bbdb-record-raw-notes new-record))
+- (n2 (bbdb-record-raw-notes old-record))
+- tmp)
+- (or (equal n1 n2)
+- (progn
+- (or (listp n1) (setq n1 (list (cons 'notes n1))))
+- (or (listp n2) (setq n2 (list (cons 'notes n2))))
+- (while n2
+- (if (setq tmp (assq (car (car n2)) n1))
+- (setcdr tmp
+- (funcall (or (cdr (assq (car (car n2))
+- bbdb-refile-notes-generate-alist))
+- bbdb-refile-notes-default-merge-function)
+- (cdr tmp) (cdr (car n2))))
+- (setq n1 (nconc n1 (list (car n2)))))
+- (setq n2 (cdr n2)))
+- (bbdb-record-set-raw-notes new-record n1))))
+- (bbdb-delete-current-record old-record 'noprompt)
+- (bbdb-record-set-net new-record
+- (nconc (bbdb-record-net new-record) old-nets))
+- (bbdb-record-set-firstname new-record (car name))
+- (bbdb-record-set-lastname new-record (cdr name))
+- (bbdb-record-set-namecache new-record nil)
+- (bbdb-record-set-aka new-record
+- (nconc (bbdb-record-aka new-record) old-aka))
+- (bbdb-change-record new-record t) ; don't always need-to-sort...
+- (let ((bbdb-elided-display nil))
+- (if (assq new-record bbdb-records)
+- (bbdb-redisplay-one-record new-record))
+- (bbdb-with-db-buffer
+- (if (not (memq new-record bbdb-changed-records))
+- (setq bbdb-changed-records
+- (cons new-record bbdb-changed-records))))
+- (if (null bbdb-records) ; nothing displayed, display something.
+- (bbdb-display-records (list new-record)))))
+- (message "records merged."))
++ (setq new-record (bbdb-merge-records old-record new-record))
++
++ (bbdb-delete-current-record old-record 'noprompt)
++ (bbdb-change-record new-record t) ; don't always need-to-sort...
++ (let ((bbdb-elided-display nil))
++ (if (assq new-record bbdb-records)
++ (bbdb-redisplay-one-record new-record))
++ (bbdb-with-db-buffer
++ (if (not (memq new-record bbdb-changed-records))
++ (setq bbdb-changed-records
++ (cons new-record bbdb-changed-records))))
++ (if (null bbdb-records) ; nothing displayed, display something.
++ (bbdb-display-records (list new-record))))
++ (message "records merged.")
++ )
+
+
+ ;;; Send-Mail interface
+@@ -1613,47 +1694,97 @@
+
+ ;;; completion
+
++(defun bbdb-completion-check-record (sym rec)
++ (let ((name (downcase (or (bbdb-record-name rec)
++ (bbdb-record-company rec))))
++ (nets (bbdb-record-net rec))
++ ok)
++
++ (if (null bbdb-completion-type)
++ (setq ok 't)
++ (if (memq bbdb-completion-type
++ '(name primary-or-name name-or-primary))
++ (setq ok (string= sym name)))
++
++ ;; #### handle AKA, mail-name or mail-alias here?
++ (if ok '()
++ (if (eq bbdb-completion-type 'net)
++ (while (and nets (not ok))
++ (setq ok (string= sym (downcase (car nets)))
++ nets (cdr nets))))
++ (if (memq bbdb-completion-type
++ '(primary primary-or-name name-or-primary))
++ (setq ok (string= sym (downcase (car nets))))
++ )
++ )
++ )
++ ok
++ )
++ )
++
++
+ ;;;###autoload
+ (defun bbdb-completion-predicate (symbol)
+ "For use as the third argument to completing-read, to obey the
+ semantics of bbdb-completion-type."
+- (let (name r n)
+- (and (boundp symbol)
+- (setq name (symbol-name symbol)
+- r (symbol-value symbol))
+- (or (null bbdb-completion-type)
+- (and (memq bbdb-completion-type
+- '(name primary-or-name name-or-primary))
+- (setq n (or (bbdb-record-name r)
+- (bbdb-record-company r)))
+- (string= name (downcase n)))
+- ;; #### do something about AKA or mail-name or mail-alias here?
+- (and (setq n (bbdb-record-net r))
+- (or (and (memq bbdb-completion-type
+- '(primary primary-or-name name-or-primary))
+- (string= name (downcase (car n))))
+- (and (eq bbdb-completion-type 'net)
+- (let ((done nil))
+- (while (and n (not done))
+- (if (string= name (downcase (car n)))
+- (setq done t))
+- (setq n (cdr n)))
+- done))))))))
++ (cond ((null bbdb-completion-type) 't)
++ ((not (boundp symbol)) '())
++ (t (let ((sym (symbol-name symbol))
++ (recs (symbol-value symbol))
++ ok)
++ (while (and recs (not ok))
++ (setq ok (bbdb-completion-check-record sym (car recs))
++ recs (cdr recs)))
++ ok))
++ ))
+
+-(defun bbdb-completing-read-record (prompt)
++(defun bbdb-completing-read-record (prompt &optional omit-records)
+ "Prompt for and return a record from the bbdb; completion is done according
+ to bbdb-completion-type. If the user just hits return, nil is returned.
+ Otherwise, a valid response is forced."
+ (let* ((ht (bbdb-hashtable))
++ (completion-ignore-case 't)
+ (string (completing-read prompt ht 'bbdb-completion-predicate t))
+ (symbol (and (not (= 0 (length string)))
+ (intern-soft string ht))))
+ (if symbol
+ (if (and (boundp symbol) (symbol-value symbol))
+- (symbol-value symbol)
+- (error "selecting deleted (unhashed) record \"%s\"!" symbol))
++ (let ((recs (symbol-value symbol)) ret)
++ (while recs
++ (if (and (not (memq (car recs) omit-records))
++ (bbdb-completion-check-record (symbol-name symbol)
++ (car recs)))
++ (setq ret (cons (car recs) ret)))
++ (setq recs (cdr recs)))
++ ret)
++ (error "selecting deleted (unhashed) record \"%s\"!" symbol))
+ nil)))
+
++(defun bbdb-completing-read-one-record (prompt &optional omit-records)
++ "Prompt for and return a single record from the bbdb;
++completion is done according to bbdb-completion-type. If the user
++just hits return, nil is returned. Otherwise, a valid response is forced.
++if omit-records is non-nil it should be a list of records to dis-allow
++completion with."
++ (let ((records (bbdb-remove-memq-duplicates
++ (bbdb-completing-read-record prompt omit-records))))
++ (if (eq (length records) 1)
++ (car records)
++ (let ((count (length records))
++ prompts result)
++ (bbdb-display-records records)
++ (while (> count 0)
++ (setq prompts (cons (list (number-to-string count) count) prompts)
++ count (1- count)))
++ (setq result
++ (completing-read (format "Which duplicate record (1-%s): "
++ (length records))
++ prompts nil t "1"))
++ (nth (1- (string-to-number result)) records)
++ )
++ )
++ )
++ )
+
+ (defvar bbdb-read-addresses-with-completion-map
+ (let ((map (copy-keymap minibuffer-local-completion-map)))
+@@ -1697,7 +1828,23 @@
+ (insert (extent-string extent))
+ (bbdb-complete-name beg)))
+
+-
++
++(defun bbdb-list-overlap (l1 l2)
++ (let (ok)
++ (while (and (not ok) l1)
++ (if (memq (car l1) l2) (setq ok t l1 '())
++ (setq l1 (cdr l1))))
++ ok))
++
++(defun bbdb-remove-assoc-duplicates (l)
++ (if (null l) '()
++ (if (assoc (car (car l)) (cdr l))
++ (bbdb-remove-assoc-duplicates (cdr l))
++ (cons (car l) (bbdb-remove-assoc-duplicates (cdr l)))
++ )
++ )
++)
++
+ ;;;###autoload
+ (defun bbdb-complete-name (&optional start-pos)
+ "Complete the user full-name or net-address before point (up to the
+@@ -1724,19 +1871,26 @@
+ (yeah-yeah-this-one nil)
+ (only-one-p t)
+ (all-the-completions nil)
+- (pred (function (lambda (sym)
+- (and (bbdb-completion-predicate sym)
+- (let* ((rec (symbol-value sym))
+- (net (bbdb-record-net rec)))
+- (if (and yeah-yeah-this-one
+- (not (eq rec yeah-yeah-this-one)))
+- (setq only-one-p nil))
+- (setq all-the-completions
+- (cons sym all-the-completions))
+- (if (eq rec yeah-yeah-this-one)
+- nil
+- (and net (setq yeah-yeah-this-one rec))
+- net))))))
++ (pred (function
++ (lambda (sym)
++ (and (bbdb-completion-predicate sym)
++ (let* ((recs (and (boundp sym) (symbol-value sym)))
++ nets)
++ (while (and (not nets) recs)
++ (if (not (setq nets (bbdb-record-net (car recs))))
++ ()
++ (if (memq (car recs) yeah-yeah-this-one)
++ (setq nets '()) ;; already have it...
++ (setq only-one-p nil
++ yeah-yeah-this-one
++ (cons (car recs) yeah-yeah-this-one)))
++ (if (not (memq sym all-the-completions))
++ (setq all-the-completions
++ (cons sym all-the-completions)))
++ )
++ (setq recs (cdr recs)))
++ nets))
++ )))
+ (completion (try-completion pattern ht pred)))
+ ;; If there were multiple completions for this record, the one that was
+ ;; picked is random (hash order.) So canonicalize that to be the one
+@@ -1744,8 +1898,12 @@
+ (if (and (stringp completion)
+ yeah-yeah-this-one
+ only-one-p)
+- (let ((addrs (bbdb-record-net yeah-yeah-this-one))
+- (rest all-the-completions))
++ (let ((rest all-the-completions) addrs)
++ (while yeah-yeah-this-one
++ (setq addrs (append addrs
++ (bbdb-record-net (car yeah-yeah-this-one)))
++ yeah-yeah-this-one (cdr yeah-yeah-this-one))
++ )
+ (while rest
+ (if (member (symbol-name (car rest)) addrs)
+ (setq completion (symbol-name (car rest))
+@@ -1753,94 +1911,146 @@
+ (setq rest (cdr rest)))))
+ (setq yeah-yeah-this-one nil
+ all-the-completions nil)
+- (cond ((eq completion t)
+- (let* ((sym (intern-soft pattern ht))
+- (val (symbol-value sym)))
+- (delete-region beg end)
+- (insert (bbdb-dwim-net-address val
+- (if (string= (symbol-name sym)
+- (downcase (or (bbdb-record-name val) "")))
+- nil
+- ;; get the case right
+- (let ((nets (bbdb-record-net val))
+- (want (symbol-name sym))
+- (the-one nil))
+- (while (and nets (not the-one))
+- (if (string= want (downcase (car nets)))
+- (setq the-one (car nets))
+- (setq nets (cdr nets))))
+- the-one))))
+- ;;
+- ;; if we're past fill-column, wrap at the previous comma.
+- (if (and
+- (if (boundp 'auto-fill-function) ; the emacs19 name.
+- auto-fill-function
+- auto-fill-hook)
+- (>= (current-column) fill-column))
+- (let ((p (point))
+- bol)
+- (save-excursion
+- (beginning-of-line)
+- (setq bol (point))
+- (goto-char p)
+- (if (search-backward "," bol t)
+- (progn
+- (forward-char 1)
+- (insert "\n "))))))
+- ;;
+- ;; Update the *BBDB* buffer if desired.
+- (if bbdb-completion-display-record
+- (let ((bbdb-gag-messages t))
+- (bbdb-display-records-1 (list val) t)))
+- (bbdb-complete-name-cleanup)
+- ))
+- ((null completion)
+- (bbdb-complete-name-cleanup)
+- (message "completion for \"%s\" unfound." pattern)
+- (ding))
+- ((not (string= pattern completion))
+- (delete-region beg end)
+- (insert completion)
+- (setq end (point))
+- (let ((last ""))
+- (while (and (stringp completion)
+- (not (string= completion last))
+- (setq last completion
+- pattern (downcase (buffer-substring beg end))
+- completion (try-completion pattern ht pred)))
+- (if (stringp completion)
+- (progn (delete-region beg end)
+- (insert completion))))
+- (bbdb-complete-name beg)
+- ))
+- (t
+- (or (eq (selected-window) (minibuffer-window))
+- (message "Making completion list..."))
+- (let* ((list (all-completions pattern ht pred))
+-;; (recs (delq nil (mapcar (function (lambda (x)
+-;; (symbol-value (intern-soft x ht))))
+-;; list)))
++ (cond
++ ;; No match
++ ((null completion)
++ (bbdb-complete-name-cleanup)
++ (message "completion for \"%s\" unfound." pattern)
++ (ding))
++
++ ;; Perfect match...
++ ((eq completion t)
++ (let* ((sym (intern-soft pattern ht))
++ (recs (symbol-value sym))
++ the-net match-recs lst primary matched)
++ (while recs
++ (if (not (bbdb-record-net (car recs))) ()
++
++ (if (string= pattern
++ (downcase (or (bbdb-record-name (car recs)) "")))
++ (setq match-recs (cons (car recs) match-recs)
++ matched t))
++
++ ;; put aka's at end of match list...
++ (setq lst (bbdb-record-aka (car recs)))
++ (if (not matched)
++ (while lst
++ (if (string= pattern (downcase (car lst)))
++ (setq match-recs (append match-recs (list (car recs)))
++ matched t
++ lst '())
++ (setq lst (cdr lst))
++ )
+ )
+- (if (and (not (eq bbdb-completion-type 'net))
+- (= 2 (length list))
+- (eq (symbol-value (intern (car list) ht))
+- (symbol-value (intern (nth 1 list) ht)))
+- (not (string= completion (car list))))
+- (progn
+- (delete-region beg end)
+- (insert (car list))
+- (message " ")
+- (bbdb-complete-name beg))
+- (if (not (get-buffer-window "*Completions*"))
+- (setq bbdb-complete-name-saved-window-config
+- (current-window-configuration)))
+- (let ((arg (list (current-buffer)
+- (set-marker (make-marker) beg)
+- (set-marker (make-marker) end))))
+- (with-output-to-temp-buffer "*Completions*"
+- (bbdb-display-completion-list list 'bbdb-complete-clicked-name arg)))
+- (or (eq (selected-window) (minibuffer-window))
+- (message "Making completion list...done"))))))))
++ )
++
++ ;; Name didn't match name so check net matching
++ (setq lst (bbdb-record-net (car recs)))
++ (setq primary 't);; primary wins over secondary...
++ (if (not matched)
++ (while lst
++ (if (string= pattern (downcase (car lst)))
++ (setq the-net (car lst)
++ lst nil
++ match-recs
++ (if primary (cons (car recs) match-recs)
++ (append match-recs (list (car recs))))))
++ (setq lst (cdr lst)
++ primary nil)))
++ )
++ (setq recs (cdr recs)
++ matched nil))
++
++ (if (and (null the-net)
++ (> (length match-recs) 1))
++ (let ((lst (mapcar (lambda (x)
++ (cons (car (bbdb-record-net x)) x))
++ match-recs))
++ (completion-ignore-case 't)
++ comp)
++ (setq lst (bbdb-remove-assoc-duplicates lst)
++ comp (completing-read "Which primary net: " lst '() 't
++ (cons (car (car lst)) 0))
++ match-recs (list (cdr (assoc comp lst)))
++ the-net comp)
++ )
++ )
++
++
++ (delete-region beg end)
++ (insert (bbdb-dwim-net-address (car match-recs) the-net))
++ ;;
++ ;; if we're past fill-column, wrap at the previous comma.
++ (if (and
++ (if (boundp 'auto-fill-function) ; the emacs19 name.
++ auto-fill-function
++ auto-fill-hook)
++ (>= (current-column) fill-column))
++ (let ((p (point))
++ bol)
++ (save-excursion
++ (beginning-of-line)
++ (setq bol (point))
++ (goto-char p)
++ (if (search-backward "," bol t)
++ (progn
++ (forward-char 1)
++ (insert "\n "))))))
++
++ ;;
++ ;; Update the *BBDB* buffer if desired.
++ (if bbdb-completion-display-record
++ (let ((bbdb-gag-messages t))
++ (bbdb-display-records-1 match-recs t)))
++ (bbdb-complete-name-cleanup)
++ ))
++
++ ;; Partial match
++ ((not (string= pattern completion))
++ (delete-region beg end)
++ (insert completion)
++ (setq end (point))
++ (let ((last ""))
++ (while (and (stringp completion)
++ (not (string= completion last))
++ (setq last completion
++ pattern (downcase (buffer-substring beg end))
++ completion (try-completion pattern ht pred)))
++ (if (stringp completion)
++ (progn (delete-region beg end)
++ (insert completion))))
++ (bbdb-complete-name beg)
++ ))
++
++ ;; Matched again and got no new chars so show options...
++ (t
++ (or (eq (selected-window) (minibuffer-window))
++ (message "Making completion list..."))
++ (let* ((list (all-completions pattern ht pred))
++ ;; (recs (delq nil (mapcar (function (lambda (x)
++ ;; (symbol-value (intern-soft x ht))))
++ ;; list)))
++ )
++ (if (and (not (eq bbdb-completion-type 'net))
++ (= 2 (length list))
++ (eq (symbol-value (intern (car list) ht))
++ (symbol-value (intern (nth 1 list) ht)))
++ (not (string= completion (car list))))
++ (progn
++ (delete-region beg end)
++ (insert (car list))
++ (message " ")
++ (bbdb-complete-name beg))
++ (if (not (get-buffer-window "*Completions*"))
++ (setq bbdb-complete-name-saved-window-config
++ (current-window-configuration)))
++ (let ((arg (list (current-buffer)
++ (set-marker (make-marker) beg)
++ (set-marker (make-marker) end))))
++ (with-output-to-temp-buffer "*Completions*"
++ (bbdb-display-completion-list list 'bbdb-complete-clicked-name arg)))
++ (or (eq (selected-window) (minibuffer-window))
++ (message "Making completion list...done"))))))))
+
+ ;;;###autoload
+ (defun bbdb-yank ()
+@@ -2135,6 +2345,61 @@
+ (setq bbdb-remaining-addrs-to-finger (cdr addrs))
+ (bbdb-finger-internal (car addrs))))))
+
++
++(defun bbdb-find-duplicates (&optional fields)
++ "*Find all records that have duplicate entries for given FIELDS.
++FIELDS should be a list of the symbols `name', `net', and/or `aka'.
++Note that overlap between these fields is noted if either is selected
++(most common case `aka' and `name'). If FIELDS is not given it
++defaults to all of them.
++
++The results of the search is returned as a list of records."
++ (setq fields (or fields '(name net aka)))
++ (let ((records (bbdb-records))
++ rec hash ret)
++ (while records
++ (setq rec (car records))
++
++ (and (memq 'name fields)
++ (setq hash (bbdb-gethash (downcase (bbdb-record-name rec))))
++ (> (length hash) 1)
++ (setq ret (append hash ret)))
++
++ (if (memq 'net fields)
++ (let ((nets (bbdb-record-net rec)))
++ (while nets
++ (setq hash (bbdb-gethash (downcase (car nets))))
++ (if (> (length hash) 1)
++ (setq ret (append hash ret)))
++ (setq nets (cdr nets))
++ )))
++
++ (if (memq 'aka fields)
++ (let ((aka (bbdb-record-aka rec)))
++ (while aka
++ (setq hash (bbdb-gethash (downcase (car aka))))
++ (if (> (length hash) 1)
++ (setq ret (append hash ret)))
++ (setq aka (cdr aka))
++ )))
++ (setq records (cdr records))
++ )
++ (bbdb-remove-memq-duplicates ret)
++ )
++)
++
++(defun bbdb-show-duplicates (&optional fields)
++"*Find all records that have duplicate entries for given FIELDS.
++FIELDS should be a list of the symbols `name', `net', and/or `aka'.
++Note that overlap between these fields is noted if either is selected
++(most common case `aka' and `name'). If FIELDS is not given it
++defaults to all of them.
++
++The results are displayed in the bbdb buffer."
++ (interactive)
++ (setq fields (or fields '(name net aka)))
++ (bbdb-display-records (bbdb-find-duplicates fields))
++)
+
+ ;;; Time-based functions
+ (defun bbdb-kill-older (date &optional compare function)
+diff -ur bbdb-2.00.06/lisp/bbdb-ftp.el bbdb-2.01/lisp/bbdb-ftp.el
+--- bbdb-2.00.06/lisp/bbdb-ftp.el Tue Sep 28 09:56:40 1999
++++ bbdb-2.01/lisp/bbdb-ftp.el Tue Sep 28 11:01:14 1999
+@@ -172,7 +172,8 @@
+ (progn
+ (setq site (bbdb-read-string "Ftp Site: "))
+ (setq site (concat bbdb-ftp-site-name-designator-prefix site))
+- (if (bbdb-gethash (downcase site))
++ (if (and bbdb-no-duplicates-p
++ (bbdb-gethash (downcase site)))
+ (error "%s is already in the database" site))))
+ (let* ((dir (bbdb-read-string "Ftp Directory: "
+ bbdb-default-ftp-dir))
+diff -ur bbdb-2.00.06/lisp/bbdb.el bbdb-2.01/lisp/bbdb.el
+--- bbdb-2.00.06/lisp/bbdb.el Tue Sep 28 09:56:42 1999
++++ bbdb-2.01/lisp/bbdb.el Tue Feb 29 09:09:18 2000
+@@ -49,6 +49,11 @@
+ nil if the database was read in and is to be written in the current
+ version.")
+
++(defvar bbdb-no-duplicates-p '()
++ "Should BBDB allow entries with duplicate names. This may lead to
++confusion when doing completion. If 't it will prompt the users on how
++to merge records when duplicates are detected.")
++
+ ;; This nonsense is to get the definition of defsubst loaded in when this file
+ ;; is loaded,without necessarily forcing the compiler to be loaded if we're
+ ;; running in an emacs with bytecomp-runtime.el predumped. We are using
+@@ -900,11 +905,15 @@
+ (save-window-excursion
+ (if (and (boundp 'epoch::version) epoch::version)
+ nil ; this breaks epoch...
+- (let ((w (selected-window)))
+- (select-window (minibuffer-window))
+- (enlarge-window (max 0 (- n (window-height))))
+- (sit-for 0) ; avoid redisplay glitch
+- (select-window w)))
++ (let ((w (selected-window))
++ (mini (minibuffer-window)))
++ (if (eq mini (next-window mini 't (window-frame mini)))
++ nil ;; Can't enlarge if only window in frame...
++ (select-window mini)
++ (enlarge-window (max 0 (- n (window-height))))
++ (sit-for 0) ; avoid redisplay glitch
++ (select-window w)
++ )))
+ (bbdb-string-trim
+ (read-string prompt default))))))
+
+@@ -1186,7 +1195,7 @@
+ (catch 'Blow-off-the-error
+ (setq bbdb-electric-completed-normally nil)
+ (unwind-protect
+- (progn
++ (progn
+ (catch 'electric-bbdb-list-select
+ (Electric-command-loop 'electric-bbdb-list-select
+ "-> " t))
+@@ -1268,37 +1277,95 @@
+ (defun bbdb-changed-records ()
+ (bbdb-with-db-buffer (bbdb-records nil t) bbdb-changed-records))
+
++(defmacro bbdb-build-name (f l)
++ (list 'downcase
++ (list 'if (list 'and f l)
++ (list 'concat f " " l)
++ (list 'or f l "")))
++ )
++
++(defun bbdb-remove! (e l)
++ (if (null l) l
++ (let ((ret l)
++ (n (cdr l)))
++ (while n
++ (if (eq e (car n))
++ (setcdr l (cdr n)) ; skip n
++ (setq l n)) ; keep n
++ (setq n (cdr n))
++ )
++ (if (eq e (car ret)) (cdr ret)
++ ret)
++ ))
++ )
++
++(defun bbdb-remove-memq-duplicates (l)
++ (let (ret tail)
++ (setq ret (cons '() '())
++ tail ret)
++ (while l
++ (if (not (memq (car l) ret))
++ (setq tail (setcdr tail (cons (car l) '()))))
++ (setq l (cdr l)))
++ (cdr ret)
++ )
++)
++
+ (defmacro bbdb-gethash (name &optional ht)
+ (list 'symbol-value
+ (list 'intern-soft name
+ (or ht '(bbdb-hashtable)))))
+
+ (defmacro bbdb-puthash (name record &optional ht)
+- (list 'set (list 'intern name
+- (or ht '(bbdb-hashtable)))
+- record))
++ (list 'let (list (list 'sym (list 'intern name (or ht '(bbdb-hashtable)))))
++ (list 'set 'sym (list 'cons record
++ '(and (boundp sym) (symbol-value sym))))
++ )
++ )
+
+-(defmacro bbdb-remhash (name &optional ht)
++(defmacro bbdb-remhash (name record &optional ht)
+ (list 'let (list (list 's (list 'intern-soft name
+ (or ht '(bbdb-hashtable)))))
+- '(and s (set s nil))))
+-
++ (list 'and 's (list 'set 's (list 'bbdb-remove! record
++ (list 'symbol-value 's))))))
+
+ (defsubst bbdb-search-simple (name net)
+ "name is a string; net is a string or list of strings."
+ (if (eq 0 (length name)) (setq name nil))
+ (if (eq 0 (length net)) (setq net nil))
+ (bbdb-records t) ; make sure db is parsed; don't check disk (faster)
+- (or (and name (bbdb-gethash (downcase name)))
+- (and net
+- (if (stringp net)
+- (bbdb-gethash (downcase net))
+- (let ((answer nil))
+- (while (and net (null answer))
+- (setq answer (bbdb-gethash (downcase (car net)))
+- net (cdr net)))
+- answer)))))
+-
++ (let ((name-recs (and name
++ (bbdb-gethash (downcase name))))
++ (net-recs (if (stringp net) (bbdb-gethash (downcase net))
++ (let (answer)
++ (while (and net (null answer))
++ (setq answer (bbdb-gethash (downcase (car net)))
++ net (cdr net)))
++ answer)))
++ ret)
++ (if (not (and name-recs net-recs))
++ (or (and name-recs (car name-recs))
++ (and net-recs (car net-recs)))
++
++ (while name-recs
++ (let ((name-rec (car name-recs))
++ (nets net-recs))
++ (while nets
++ (if (eq (car nets) name-rec)
++ (setq nets '()
++ name-recs '()
++ ret name-rec)
++ (setq nets (cdr nets))
++ )
++ )
++ (if name-recs (setq name-recs (cdr name-recs))
++ name-rec)
++ )
++ )
++ ret
++ )
++ )
++ )
+
+ (defun bbdb-net-convert (record)
+ "Given a record whose net field is a comma-separated string, convert it to
+@@ -1333,25 +1400,21 @@
+ (defsubst bbdb-hash-record (record)
+ "Insert the record in the appropriate hashtables. This must be called
+ while the .bbdb buffer is selected."
+- (let ((name (bbdb-record-name-1 record)) ; faster version
++ (let ((name (bbdb-record-name-1 record)) ; faster version
+ (company (bbdb-record-company record))
+- (aka (bbdb-record-aka record))
+- (net (bbdb-record-net record)))
+- (if (not (= 0 (length name))) ; could be nil or ""
+- (bbdb-puthash (downcase name) record bbdb-hashtable))
+- ;; #### we don't do hash collision detection on company names, so this
+- ;; is a potentially dangerous thing to do I guess. But it's useful.
+- ;; This makes completion possible on company fields of records that
+- ;; have a company but no name.
+- (if (and (= 0 (length name))
+- (not (= 0 (length company))))
++ (aka (bbdb-record-aka record))
++ (net (bbdb-record-net record)))
++ (if (> (length name) 0)
++ (bbdb-puthash (downcase name) record bbdb-hashtable))
++ (if (> (length company) 0)
+ (bbdb-puthash (downcase company) record bbdb-hashtable))
+ (while aka
+ (bbdb-puthash (downcase (car aka)) record bbdb-hashtable)
+ (setq aka (cdr aka)))
+ (while net
+ (bbdb-puthash (downcase (car net)) record bbdb-hashtable)
+- (setq net (cdr net)))))
++ (setq net (cdr net)))
++ ))
+
+
+ ;;; Reading the BBDB
+@@ -1568,36 +1631,45 @@
+ (forward-line 1))
+ (widen)
+ (bbdb-debug (message "Parsing BBDB... (frobnicating...)"))
+- (let ((rest records)
++ (setq bbdb-records records)
++ (let* ((head (cons '() records))
++ (rest head)
+ record)
+- (while rest
+- (setq record (car rest))
++ (while (cdr rest)
++ (setq record (car (cdr rest)))
+ ;; yow, are we stack-driven yet?? Damn byte-compiler...
+ ;; Make a cache. Put it in the record. Put a marker in the cache.
+ ;; Add record to hash tables.
+ (bbdb-cache-set-marker
+ (bbdb-record-set-cache record (make-vector bbdb-cache-length nil))
+ (point-marker))
+- (bbdb-debug
+- (let ((name (bbdb-record-name record))
+- tmp)
+- (if (and name
+- (setq tmp (bbdb-gethash (setq name (downcase name))
+- bbdb-hashtable)))
+- (signal 'error (list "duplicate bbdb entries" record tmp)))))
+- (bbdb-hash-record record)
+ (forward-line 1)
+- (setq rest (cdr rest))
++
++ (if bbdb-no-duplicates-p
++ ;; warn the user that there is a duplicate...
++ (let* ((name (bbdb-record-name record))
++ (tmp (and name (bbdb-gethash (downcase name)
++ bbdb-hashtable))))
++ (if tmp (message "Duplicate BBDB record encountered: %s" name))
++ )
++ )
++
++ (bbdb-hash-record record)
++ (setq rest (cdr rest))
++
+ (bbdb-debug
+- (if (and rest (not (looking-at "[\[]")))
++ (if (and (cdr rest) (not (looking-at "[\[]")))
+ (error "bbdb corrupted: junk between records at %s" (point))))
+- ))
++ )
++ ;; In case we removed some of the leading entries...
++ (setq bbdb-records (cdr head))
++ )
+ ;; all done.
+- (setq bbdb-records records)
+ (setq bbdb-end-marker (point-marker))
+ (run-hooks 'bbdb-after-read-db-hook)
+ (bbdb-debug (message "Parsing BBDB... (frobnicating...done)"))
+- records)
++ bbdb-records
++)
+
+ (defmacro bbdb-user-mail-names ()
+ "Returns a regexp matching the address of the logged-in user"
+@@ -1632,17 +1704,21 @@
+ (if (cdr tail)
+ (bbdb-record-marker (car (cdr tail)))
+ bbdb-end-marker))
+- (if (bbdb-record-name record)
+- (let ((name (downcase (bbdb-record-name record))))
+- (bbdb-remhash name bbdb-hashtable)))
+- (let ((nets (bbdb-record-net record)))
++ (let ((name (bbdb-record-name record))
++ (company (bbdb-record-company record))
++ (aka (bbdb-record-aka record))
++ (nets (bbdb-record-net record)))
++ (if (> (length name) 0)
++ (bbdb-remhash (downcase name) record bbdb-hashtable))
++ (if (> (length company) 0)
++ (bbdb-remhash (downcase company) record bbdb-hashtable))
+ (while nets
+- (bbdb-remhash (downcase (car nets)) bbdb-hashtable)
+- (setq nets (cdr nets))))
+- (let ((aka (bbdb-record-aka record)))
++ (bbdb-remhash (downcase (car nets)) record bbdb-hashtable)
++ (setq nets (cdr nets)))
+ (while aka
+- (bbdb-remhash (downcase (car aka)) bbdb-hashtable)
+- (setq aka (cdr aka))))
++ (bbdb-remhash (downcase (car aka)) record bbdb-hashtable)
++ (setq aka (cdr aka)))
++ )
+ (bbdb-record-set-sortkey record nil)
+ (setq bbdb-modified-p t))))
+
+@@ -2333,7 +2409,7 @@
+ old-name))
+ (bbdb-record-set-aka record
+ (cons old-name (bbdb-record-aka record)))
+- (bbdb-remhash (downcase old-name))))
++ (bbdb-remhash (downcase old-name) record)))
+ (bbdb-record-set-namecache record nil)
+ (bbdb-record-set-firstname record fname)
+ (bbdb-record-set-lastname record lname)
+@@ -2820,6 +2896,7 @@
+ (defun bbdb-insinuate-sendmail ()
+ "Call this function to hook BBDB into sendmail (that is, M-x mail)."
+ (define-key mail-mode-map "\M-\t" 'bbdb-complete-name)
++ (define-key mail-mode-map [(meta tab)] 'bbdb-complete-name)
+ )
+
+