diff options
author | Ronan Waide <waider@waider.ie> | 2000-05-01 22:39:03 +0000 |
---|---|---|
committer | Ronan Waide <waider@waider.ie> | 2000-05-01 22:39:03 +0000 |
commit | 6e36601186ee4231be705116651c59ebb1cf3d98 (patch) | |
tree | 30617e302e8a8711bf5c79b495cdc8380a3350bd /html | |
parent | cfd0dd8fe240fbb2727f9ee4e7b1ca4be61c3162 (diff) |
Initial checkin
Diffstat (limited to 'html')
-rw-r--r-- | html/bbdb.html | 6045 | ||||
-rw-r--r-- | html/images/bbi.gif | bin | 0 -> 1324 bytes | |||
-rw-r--r-- | html/images/headleft.gif | bin | 0 -> 197 bytes | |||
-rw-r--r-- | html/images/headright.gif | bin | 0 -> 199 bytes | |||
-rw-r--r-- | html/index.html | 239 | ||||
-rw-r--r-- | html/patches/bbdb-print.patch | 27 | ||||
-rw-r--r-- | html/patches/multi-record.patch | 1493 |
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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC3"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC4"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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 >=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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC6"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC7"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC8"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC9"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC10"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC11"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC12"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC13"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC14"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC15"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC5"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC17"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC2"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC18"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC19"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC20"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC21"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC22"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC16"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC23"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC24"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC25"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC21"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC26"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC24"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC27"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC24"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC24"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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 <email-address></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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC29"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC24"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC30"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC31"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC32"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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 <jwz@netscape.com></CODE><BR> + +<B>BBDB</B>: No record +<LI>Message: <CODE>From: Matt <simmonmt@acm.org></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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC33"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC34"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC29"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC29"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC36"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC28"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC37"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC38"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC39"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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 <jwz@netscape.com>'</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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC41"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC35"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC42"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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->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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC43"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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>\&</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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC45"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC40"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC46"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC47"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC48"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC49"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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 <jwz@netscape.com> +To: Matt Simmons <simmonmt@acm.org> +<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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC50"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC44"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC51"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC52"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC53"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC54"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC55"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC56"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC57"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC58"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC49"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC59"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC57"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC60"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC58"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC61"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC58"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC62"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC58"> << </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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC63"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC61"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC64"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC62"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC62"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC65"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC62"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC62"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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><ilulnwci761.fsf@squid.pdc.kth.se></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 <sperber@informatik.uni-tuebingen.de></CODE> +<P> + +<LI> + +Internationalization of addresses. Country code to control formats for +printing, etc. Country->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><s8iurdodvm.fsf@plato.ansa.co.uk></CODE> +and Bin Mu's <CODE><199801221605.KAA23663@DerivaTech.Com></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><xcdyb30f3hb.fsf@ra.cs.uchicago.edu></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><sdu3awz75a.fsf@oakdale.ucdavis.edu></CODE> +<P> + +<LI> + +Automatically grab information about a person from their sig. See +Graham Clark's <CODE>info-bbdb</CODE> post +<CODE><6282.199706161624@havra.dcs.ed.ac.uk></CODE> and Adrian Aichner's +<CODE>info-bbdb</CODE> post +<CODE><rxsiuzebpgp.fsf@midnight.ecf.teradyne.com></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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC66"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC62"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC62"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC67"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC68"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC69"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</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"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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> + +<A HREF="#cindex_*">*</A> + +<BR> +<A HREF="#cindex_a">A</A> + +<A HREF="#cindex_b">B</A> + +<A HREF="#cindex_c">C</A> + +<A HREF="#cindex_d">D</A> + +<A HREF="#cindex_e">E</A> + +<A HREF="#cindex_f">F</A> + +<A HREF="#cindex_g">G</A> + +<A HREF="#cindex_i">I</A> + +<A HREF="#cindex_m">M</A> + +<A HREF="#cindex_n">N</A> + +<A HREF="#cindex_o">O</A> + +<A HREF="#cindex_p">P</A> + +<A HREF="#cindex_r">R</A> + +<A HREF="#cindex_s">S</A> + +<A HREF="#cindex_t">T</A> + +<A HREF="#cindex_u">U</A> + +<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"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ > ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC68"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bbdb.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <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> + +<A HREF="#vindex_g">G</A> + +<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"> + [ < ] </TD> +<TD ALIGN="CENTER"> +Back +</TD> +<TD> +previous section in reading order +</TD> +<TD> +1.2.2 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ > ] </TD> +<TD ALIGN="CENTER"> +Forward +</TD> +<TD> +next section in reading order +</TD> +<TD> +1.2.4 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ << ] </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"> + [ >> ] </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> + +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [Contents] </TD> +<TD ALIGN="CENTER"> +Contents +</TD> +<TD> +table of contents +</TD> +<TD> + +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [Index] </TD> +<TD ALIGN="CENTER"> +Index +</TD> +<TD> +concept index +</TD> +<TD> + +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ ? ] </TD> +<TD ALIGN="CENTER"> +About +</TD> +<TD> +this page +</TD> +<TD> + +</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 <STRONG> +<== 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 on February, 29 2000</I> + +</BODY> +</HTML> diff --git a/html/images/bbi.gif b/html/images/bbi.gif Binary files differnew file mode 100644 index 0000000..afc503e --- /dev/null +++ b/html/images/bbi.gif diff --git a/html/images/headleft.gif b/html/images/headleft.gif Binary files differnew file mode 100644 index 0000000..bd44bf4 --- /dev/null +++ b/html/images/headleft.gif diff --git a/html/images/headright.gif b/html/images/headright.gif Binary files differnew file mode 100644 index 0000000..ee42108 --- /dev/null +++ b/html/images/headright.gif 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ü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) + ) + + |