Herewith a first-pass attempt at a doco patch. I don't really expect
this to be merged, it's more for discussion to give me guidance on
what to do in edge/corner cases.
checkdoc-minor-mode by its nature is inflexible. This patch treats it
as our master rather than our servant, which leads to some contrived
doc strings in order to get a clean bill of health from checkdoc.
diff --git a/lisp/bbdb.el b/lisp/bbdb.el
index 44c4181..497be70 100644
--- a/lisp/bbdb.el
+++ b/lisp/bbdb.el
@@ -166,8 +166,8 @@ When nil, ask."
:type 'boolean)
(defcustom bbdb-read-only nil
- "If t then BBDB will not modify `bbdb-file'
-If you have more than one emacs running at the same time, you might want
+ "If t then BBDB will not modify `bbdb-file'.
+If you have more than one Emacs running at the same time, you might want
to set this to t in all but one of them."
:group 'bbdb
:type '(choice (const :tag "Database is read-only" t)
@@ -259,8 +259,7 @@ Note that this can be called more than once if the BBDB is
reverted."
:type 'hook)
(defcustom bbdb-initialize-hook nil
- "Hook run (with no arguments) when the BBDB initialization function
-`bbdb-initialize' is run."
+ "No-argument hook run after the BBDB initialization function
`bbdb-initialize'."
:group 'bbdb
:type 'hook)
@@ -319,10 +318,10 @@ OPTION-ALIST specifies the options for the layout. Valid
options are:
(display-p . FUNCTION) + + nil
- toggle: controls if this layout is included when toggeling the layout
-- order: defines a user specific order for the fields, where `t' is a place
+- order: defines a user specific order for the fields, where t is a place
holder for all remaining fields
- omit: is a list of notes fields which should not be displayed
- or `t' to exclude all fields except those listed in the order option
+ or t to exclude all fields except those listed in the order option
- name-end: sets the column where the name should end in one-line layout.
- indentation: sets the level of indentation for multi-line display.
- primary: controls wether only the primary mail is shown or all are shown.
@@ -408,7 +407,7 @@ layout function, the multi-line layout will be used."
(defcustom bbdb-case-fold-search (default-value 'case-fold-search)
"Value of `case-fold-search' used by BBDB and friends.
This variable lets the case-sensitivity of the BBDB commands
-be different from standard commands like `isearch-forward'."
+be different from standard commands like command `isearch-forward'."
:group 'bbdb-record-display
:type 'boolean)
@@ -944,10 +943,11 @@ manipulation which is performed before any database
access.)"
(const :tag "Do not ignore redundant addresses" nil)))
(defcustom bbdb-message-caching t
- "Whether caching of the message->record association should be used
-for the interfaces which support it (VM, MH, and RMAIL). This can speed
-things up a lot. One implication of this variable being t is that
-`bbdb-notice-mail-hook' and `bbdb-notice-record-hook' will not be called
+ "Whether to cache the message->record association for supporting interfaces.
+These are VM, MH, and RMAIL.
+
+This can speed things up a lot. One implication of this variable being t is
+that `bbdb-notice-mail-hook' and `bbdb-notice-record-hook' 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
@@ -1011,6 +1011,9 @@ Hook is run with one argument, the record."
(if value (append (list (car value)) (cadr value)))))
(defun bbdb-alist-with-header-match (widget value)
+ "TODO Fill in.
+Argument WIDGET ???
+Argument VALUE ???"
(widget-group-match widget
(widget-apply widget :value-to-internal value)))
@@ -1204,21 +1207,21 @@ weights more than 100 will be in the end."
Allowed values are those allowed for `mail-user-agent'."
:group 'bbdb-sendmail
:type '(radio (function-item :tag "Message package"
- :format "%t\n"
- message-user-agent)
- (function-item :tag "Mail package"
- :format "%t\n"
- sendmail-user-agent)
- (function-item :tag "Emacs interface to MH"
- :format "%t\n"
- mh-e-user-agent)
- (function-item :tag "Message with full Gnus features"
- :format "%t\n"
- gnus-user-agent)
- (function-item :tag "VM"
- :format "%t\n"
- vm-user-agent)
- (function :tag "Other")
+ :format "%t\n"
+ message-user-agent)
+ (function-item :tag "Mail package"
+ :format "%t\n"
+ sendmail-user-agent)
+ (function-item :tag "Emacs interface to MH"
+ :format "%t\n"
+ mh-e-user-agent)
+ (function-item :tag "Message with full Gnus features"
+ :format "%t\n"
+ gnus-user-agent)
+ (function-item :tag "VM"
+ :format "%t\n"
+ vm-user-agent)
+ (function :tag "Other")
(const :tag "Default" nil)))
(defcustom bbdb-mail-alias-field 'mail-alias
@@ -1280,8 +1283,7 @@ If nil, no completion is offered."
(const mail)))))
(defcustom bbdb-complete-mail-allow-cycling nil
- "Whether to allow cycling of mail addresses when calling
-`bbdb-complete-mail' on a completed address in a composition buffer."
+ "Non-nil means allow cycling of mail addresses when calling
`bbdb-complete-mail' on a completed address in a composition buffer."
:group 'bbdb-sendmail
:type 'boolean)
@@ -1299,8 +1301,7 @@ of corresponding mail addresses."
:type 'function)
(defcustom bbdb-completion-display-record t
- "Whether `bbdb-complete-mail' displays the BBDB record
-whose mail address has just been inserted."
+ "Non-nil means `bbdb-complete-mail' displays the BBDB record whose mail
address has just been inserted."
:group 'bbdb-sendmail
:type '(choice (const :tag "Update the BBDB buffer" t)
(const :tag "Do not update the BBDB buffer" nil)))
@@ -1479,12 +1480,10 @@ Calls of `bbdb-change-hook' are suppressed when this is
non-nil.")
"Store the window configuration before we pop up the completion buffer.")
(defvar bbdb-offer-to-create nil
- "Used for communication between `bbdb-update-records'
- and `bbdb-prompt-for-create'.")
+ "For communication between `bbdb-update-records' and
`bbdb-prompt-for-create'.")
(defvar bbdb-update-records-address nil
- "Used for communication between `bbdb-update-records'
-and `bbdb-prompt-for-create'.
+ "For communication between `bbdb-update-records' and
`bbdb-prompt-for-create'.
It is a list (NAME MAIL HEADER HEADER-CLASS MUA).")
;;; Buffer-local variables for the database.
@@ -1679,6 +1678,8 @@ This is a child of `special-mode-map'.")
;;; Helper functions
(defun bbdb-warn (&rest args)
+ "TODO Fill in.
+Optional argument ARGS ???"
(ding t)
(apply 'message args))
@@ -1699,7 +1700,7 @@ If STRING is nil return an empty string."
(eq t (compare-strings str1 0 nil str2 0 nil t))))
(defun bbdb-split (separator string)
- "Return a list by splitting STRING at SEPARATOR.
+ "Return a list using SEPARATOR to split STRING.
SEPARATOR may be a regexp. SEPARATOR may also be a symbol
\(a field name). Then look up the value in `bbdb-separator-alist'
or use `bbdb-default-separator'.
@@ -1715,11 +1716,12 @@ Almost the inverse function of `bbdb-concat'."
(split-string (bbdb-string-trim string) separator t))
(defun bbdb-concat (separator &rest strings)
- "Concatenate STRINGS to a string where STRINGS are separated by SEPARATOR.
-STRINGS may be strings or lists of strings. Empty strings are ignored.
+ "Concatenate SEPARATOR -separated STRINGS to a string.
SEPARATOR may be a string.
SEPARATOR may also be a symbol (a field name). Then look up the value
of SEPARATOR in `bbdb-separator-alist' or use `bbdb-default-separator'.
+STRINGS may be strings or lists of strings. Empty strings are ignored.
+
The inverse function of `bbdb-split'."
(if (symbolp separator)
(setq separator (nth 1 (or (cdr (assq separator bbdb-separator-alist))
@@ -1739,16 +1741,17 @@ This happens in addition to any pre-defined indentation
of STRING."
string))
(defun bbdb-read-string (prompt &optional default collection)
- "Read a string, trimming whitespace and text properties.
+ "Read a string with prompt PROMPT, trimming whitespace and text properties.
DEFAULT appears as initial input, which is convenient for editing
-existing BBDB records."
+existing BBDB records.
+Optional argument COLLECTION provides completion options."
(bbdb-string-trim
(if collection
(completing-read prompt collection nil nil default)
(read-string prompt default))))
(defun bbdb-current-record (&optional full)
- "Returns the record which point is at.
+ "Return the record which point is at.
If FULL is non-nil record includes the display information."
(unless (eq major-mode 'bbdb-mode)
(error "This only works while in BBDB buffers."))
@@ -1767,7 +1770,8 @@ If FULL is non-nil record includes the display
information."
(defmacro bbdb-debug (&rest body)
"Turn on debugging if variable `bbdb-debug' is non-nil during compile.
-You really should not disable debugging. But it will speed things up."
+You really should not disable debugging. But it will speed things up.
+Optional argument BODY is the conditionally instrumented code."
(declare (indent 0))
(if bbdb-debug ; compile-time switch
`(let ((debug-on-error t))
@@ -1775,7 +1779,7 @@ You really should not disable debugging. But it will
speed things up."
(defun bbdb-timestamp (record)
"For use as a `bbdb-change-hook'.
-Maintains a notes-field `timestamp' for the given record which contains
+Maintains a notes-field `timestamp' for RECORD which contains
the time when it was last modified. If such a field already exists,
it is changed, otherwise it is added."
(bbdb-record-set-note record 'timestamp
@@ -1783,7 +1787,7 @@ it is changed, otherwise it is added."
(defun bbdb-creation-date (record)
"For use as a `bbdb-create-hook'.
-Adds a notes-field `creation-date' which is the current time string."
+Adds a notes-field `creation-date' for RECORD which is the current time
string."
(bbdb-record-set-note record 'creation-date
(format-time-string bbdb-time-stamp-format nil t)))
@@ -1861,7 +1865,7 @@ Return new value."
;; `bbdb-hashtable' associates with each FIELD a list of matching records.
(defsubst bbdb-puthash (field record)
- "Associate RECORD with FIELD in `bbdb-hashtable'."
+ "Associate FIELD with RECORD in `bbdb-hashtable'."
(let ((sym (intern (downcase field) bbdb-hashtable)))
(if (boundp sym)
(unless (memq record (symbol-value sym))
@@ -1874,7 +1878,7 @@ Return new value."
(symbol-value (intern-soft (downcase field) bbdb-hashtable))))
(defsubst bbdb-remhash (field record)
- "Remove RECORD from list of records associated with FIELD."
+ "Remove FIELD's association with RECORD."
(let ((sym (intern-soft (downcase field) bbdb-hashtable)))
(if sym
(let ((val (delq record (symbol-value sym))))
@@ -1883,7 +1887,7 @@ Return new value."
(unintern sym bbdb-hashtable))))))
(defun bbdb-hash-record (record)
- "Insert the record in `bbdb-hashtable'."
+ "Insert RECORD in `bbdb-hashtable'."
(bbdb-record-name record)
(dolist (organization (bbdb-record-organization record))
(bbdb-puthash organization record))
@@ -1900,7 +1904,7 @@ Return new value."
(bbdb-puthash elt record)))
(defun bbdb-record-name (record)
- "Record cache function: Return the full name of a record.
+ "Record cache function: Return the full name of RECORD.
If the name is not available in the name cache, the name cache value
is generated and stored."
(or (bbdb-cache-fl-name (bbdb-record-cache record))
@@ -1908,7 +1912,7 @@ is generated and stored."
(bbdb-record-set-name record)))
(defun bbdb-record-name-lf (record)
- "Record cache function: Return the full name of a record.
+ "Record cache function: Return the full name of RECORD.
If the name is not available in the name cache, the name cache value
is generated and stored."
(or (bbdb-cache-lf-name (bbdb-record-cache record))
@@ -1918,7 +1922,9 @@ is generated and stored."
(defun bbdb-record-set-name (record &optional first last)
"Record cache function: Set the full name of RECORD.
-Set full name in cache and hash. Return first-last name."
+Set full name in cache and hash. Return first-last name.
+Optional argument FIRST explicitly sets the first name field of RECORD.
+Optional argument LAST explicitly sets the last name field of RECORD."
(let* ((cache (bbdb-record-cache record))
(fl-name (bbdb-cache-fl-name cache))
(lf-name (bbdb-cache-lf-name cache)))
@@ -1943,7 +1949,7 @@ Set full name in cache and hash. Return first-last name."
fl))
(defun bbdb-record-sortkey (record)
- "Record cache function: Return the sortkey for a record.
+ "Record cache function: Return the sortkey for RECORD.
Build and store it if necessary."
(or (bbdb-cache-sortkey (bbdb-record-cache record))
(bbdb-cache-set-sortkey (bbdb-record-cache record)
@@ -1953,19 +1959,19 @@ Build and store it if necessary."
(bbdb-record-organization record))))))
(defsubst bbdb-record-set-sortkey (record sortkey)
- "Record cache function: Set and return the sortkey for a record."
+ "Record cache function: Set and return RECORD's SORTKEY."
(bbdb-cache-set-sortkey (bbdb-record-cache record) sortkey))
(defsubst bbdb-record-marker (record)
- "Record cache function: Return the marker for a record."
+ "Record cache function: Return the marker for RECORD."
(bbdb-cache-marker (bbdb-record-cache record)))
(defsubst bbdb-record-set-marker (record marker)
- "Record cache function: Set and return the marker for a record."
+ "Record cache function: Set and return RECORD's MARKER."
(bbdb-cache-set-marker (bbdb-record-cache record) marker))
(defsubst bbdb-record-deleted-p (record)
- "Record cache function: Return the `deleted' flag for a record."
+ "Record cache function: Return the `deleted' flag for RECORD."
(bbdb-cache-deleted-p (bbdb-record-cache record)))
;; `bbdb-record-set-deleted-p' is used exactly once by `bbdb-delete-records'
@@ -1973,7 +1979,8 @@ Build and store it if necessary."
;; Do we need this?? When would we want to set the deleted flag without
;; actually performing the deletion?
(defsubst bbdb-record-set-deleted-p (record val)
- "Record cache function: Set and return the `deleted' flag for a record."
+ "Record cache function: Set and return the `deleted' flag for RECORD.
+Argument VAL ???"
(bbdb-cache-set-deleted-p (bbdb-record-cache record) val))
(defsubst bbdb-record-note (record label)
@@ -2211,7 +2218,7 @@ This function also updates the hash table."
;; Currently unused (but possible entry for `bbdb-merge-notes-function-alist')
(defun bbdb-merge-concat (string1 string2 &optional separator)
- "Returns the concatenation of STRING1 and STRING2.
+ "Return the concatenation of STRING1 and STRING2.
SEPARATOR defaults to \"\\n\"."
(concat string1 (or separator "\n") string2))
@@ -2225,13 +2232,13 @@ SEPARATOR defaults to \"\\n\"."
(bbdb-concat "\n" note1)))
(defun bbdb-merge-string-least (string1 string2)
- "Returns the string that is lessp."
+ "Return the string that is `lessp' out of STRING1 and STRING2."
(if (string-lessp string1 string2)
string1
string2))
(defun bbdb-merge-string-most (string1 string2)
- "Returns the string that is not lessp."
+ "Return the string that is not `lessp' out of STRING1 and STRING2."
(if (string-lessp string1 string2)
string2
string1))
@@ -2307,6 +2314,8 @@ Do this only if `bbdb-check-postcode' is non-nil."
string))
(defun bbdb-phone-string (phone)
+ ;; TODO Detail standard format
+ "Massage PHONE into a standard format."
;; Phone numbers should come in two forms:
(if (= 2 (length phone))
;; (1) ["where" "the number"]
@@ -2330,10 +2339,13 @@ Do this only if `bbdb-check-postcode' is non-nil."
""))))
(defsubst bbdb-record-lessp (record1 record2)
+ "Return t if key of RECORD1 is `string<' than the key of RECORD2."
(string< (bbdb-record-sortkey record1)
(bbdb-record-sortkey record2)))
(defmacro bbdb-error-retry (&rest body)
+ "TODO Fill in.
+Optional argument BODY ???"
`(catch '--bbdb-error-retry--
(while t
(condition-case --c--
@@ -2407,6 +2419,8 @@ copy it to `bbdb-file'."
(setq bbdb-buffer (find-file-noselect bbdb-file t))))
(defmacro bbdb-with-db-buffer (&rest body)
+ "TODO Fill in.
+Optional argument BODY ???"
(declare (indent 0))
(if bbdb-debug ;; compile-time switch
;; If we are debugging, and `bbdb-file' is visible in
@@ -2532,8 +2546,9 @@ If FACE is non-nil, also add face FACE."
(defun bbdb-display-list (list field &optional terminator face indent)
"Insert elements of LIST at point.
-For inserted text, set text property bbdb-field to field.
+For inserted text, set text property bbdb-field to FIELD.
If TERMINATOR is non-nil use it to terminate the inserted text.
+Optional argument FACE ???
If INDENT and `bbdb-wrap-column' are integers, insert line breaks in between
elements of LIST if otherwise inserted text exceeds `bbdb-wrap-column'."
;; `truncate-lines' is fine for one-line layout. But it is annyoing
@@ -2612,8 +2627,10 @@ corresponding cdr is used. If none of these schemes
succeeds the face
(insert-image image)))))
(defun bbdb-display-record-one-line (record layout field-list)
- "Record formatting function for the one-line layout.
-See `bbdb-layout-alist' for more info."
+ "Format RECORD for the one-line layout.
+See `bbdb-layout-alist' for more info.
+Argument LAYOUT ???
+Argument FIELD-LIST ???"
;; Name, affix, and organizations
(bbdb-display-name-organization record)
(let ((name-end (or (bbdb-layout-get-option layout 'name-end)
@@ -2672,8 +2689,10 @@ See `bbdb-layout-alist' for more info."
(insert "\n")))
(defun bbdb-display-record-multi-line (record layout field-list)
- "Record formatting function for the multi-line layout.
-See `bbdb-layout-alist' for more."
+ "Format RECORD for the multi-line layout.
+See `bbdb-layout-alist' for more.
+Argument LAYOUT ???
+Argument FIELD-LIST ???"
(bbdb-display-name-organization record)
(insert "\n")
(let* ((indent (or (bbdb-layout-get-option layout 'indentation) 21))
@@ -2799,7 +2818,11 @@ Move point to the end of the inserted record."
(defun bbdb-display-records (&optional records layout append
select horiz-p electric-p)
- "Display RECORDS using LAYOUT."
+ "Display RECORDS using LAYOUT.
+Optional argument APPEND ???
+Optional argument SELECT ???
+Optional argument HORIZ-P ???
+Optional argument ELECTRIC-P ???"
(interactive (list (bbdb-completing-read-records "Display records: ")
(bbdb-layout-prefix)))
(let ((bbdb-window (get-buffer-window bbdb-buffer-name)))
@@ -2817,7 +2840,12 @@ Move point to the end of the inserted record."
(defun bbdb-display-records-internal (records &optional layout append
select horiz-p)
- "Low-level function overlooking the setup of the *BBDB* buffer."
+ "Low-level function overlooking the setup of the *BBDB* buffer.
+Argument RECORDS ???
+Optional argument LAYOUT ???
+Optional argument APPEND ???
+Optional argument SELECT ???
+Optional argument HORIZ-P ???"
(if (bbdb-append-display-p) (setq append t))
;; `bbdb-redisplay-records' calls `bbdb-display-records-internal'
@@ -2910,7 +2938,8 @@ Move point to the end of the inserted record."
(defun bbdb-redisplay-record (record &optional delete-p)
"Redisplay one RECORD.
Append RECORD to currently displayed records if necessary.
-The *BBDB* buffer must be current when this is called."
+The *BBDB* buffer must be current when this is called.
+Optional argument DELETE-P ???"
;; For deletion in the *BBDB* buffer we use the full information
;; about the record in the database. Therefore, we need to delete
;; the record in the *BBDB* buffer before deleting the record in
@@ -2981,7 +3010,8 @@ The *BBDB* buffer must be current when this is called."
;;; window configuration hackery
(defun bbdb-pop-up-window (&optional select horiz-p)
- "Find the largest window on the screen, and split it, displaying the
+ "Intelligently choose, split and optionally select a window for buffer
*BBDB*.
+Find the largest window on the screen, and split it, displaying the
*BBDB* buffer in the bottom `bbdb-pop-up-window-size' lines (unless
the *BBDB* buffer is already visible, in which case do nothing.)
Select this window if SELECT is non-nil.
@@ -3053,6 +3083,8 @@ will be split vertically rather than horizontally."
;;; Electric display stuff
(defun bbdb-electric-display-records (records)
+ "TODO Fill in.
+Argument RECORDS ???"
(require 'electric)
(let (bbdb-electric-execute) ; Alert! `bbdb-electric-throw' sets this!
(let ((bbdb-inside-electric-display t)
@@ -3087,7 +3119,7 @@ will be split vertically rather than horizontally."
nil)
(defun bbdb-electric-throw (form)
- "Exit the `electric-command-loop' and evaluate the given form."
+ "Exit the `electric-command-loop' and evaluate FORM."
;; Hack alert! These variables are bound only within the scope of
;; `bbdb-electric-display-records'!
(unless (boundp 'bbdb-electric-execute)
@@ -3097,10 +3129,12 @@ will be split vertically rather than horizontally."
(throw 'electric-bbdb-list-select t))
(defun bbdb-electric-done ()
+ "TODO Fill in."
(interactive)
(throw 'electric-bbdb-list-select t))
(defun bbdb-quit-window ()
+ "TODO Fill in."
(interactive)
(if bbdb-inside-electric-display
(bbdb-electric-done)
@@ -3193,7 +3227,9 @@ This function also notices if the disk file has been
modified."
"The `revert-buffer-function' for `bbdb-file'.
Return t if the BBDB buffer and file are now consistent
because the reversion was successful (or not needed).
-Return nil otherwise."
+Return nil otherwise.
+Optional argument IGNORE-AUTO ???
+Optional argument NOCONFIRM ???"
(interactive)
(let ((buf (bbdb-buffer)))
(with-current-buffer buf
@@ -3226,6 +3262,7 @@ Return nil otherwise."
t)))))
(defun bbdb-parse-internal ()
+ "TODO Fill in."
(unless bbdb-silent (message "Parsing BBDB..."))
(save-excursion
(save-restriction
@@ -3283,6 +3320,8 @@ Return nil otherwise."
(forward-char -1)))
(defun bbdb-parse-frobnicate (records)
+ "TODO Fill in.
+Argument RECORDS ???"
;; now we have to come up with a marker for each record. Rather than
;; calling `read' for each record, we read them at once (already done) and
;; assume that the markers are at each newline. If this is not the case,
@@ -3613,6 +3652,8 @@ There are numerous hooks. M-x apropos ^bbdb.*hook RET
(defun bbdb-sendmail-menu (record)
+ "TODO Fill in.
+Argument RECORD ???"
(let ((mails (bbdb-record-mail record)))
(if (cdr mails)
(cons "Send mail to..."
@@ -3626,7 +3667,7 @@ There are numerous hooks. M-x apropos ^bbdb.*hook RET
t))))
(defun bbdb-field-menu (record field)
- "Menu items specifically for FIELD of RECORD."
+ "Menu items specifically for RECORD's FIELD."
(let ((type (car field)))
(nconc
(list
@@ -3667,6 +3708,8 @@ There are numerous hooks. M-x apropos ^bbdb.*hook RET
'("--") bbdb-notes-label-list))))
(defun bbdb-mouse-menu (event)
+ "TODO Fill in.
+Argument EVENT ???"
(interactive "e")
(mouse-set-point event)
(let* ((record (bbdb-current-record))
@@ -3764,7 +3807,9 @@ With prefix N move backwards N (sub)fields."
(bbdb-next-field (- n)))
(defun bbdb-save (&optional prompt-first noisy)
- "Save the BBDB if it is modified."
+ "Save the BBDB if it is modified.
+Optional argument PROMPT-FIRST if non-nil means prompt before saving.
+Optional argument NOISY if non-nil means feed back if the BBDB is not
modified."
(interactive (list nil t))
(bbdb-with-db-buffer
(if (and (buffer-modified-p)
--
Phil Hudson http://hudson-it.no-ip.biz
@UWascalWabbit PGP/GnuPG ID: 0x887DCA63
------------------------------------------------------------------------------
Learn Windows Azure Live! Tuesday, Dec 13, 2011
Microsoft is holding a special Learn Windows Azure training event for
developers. It will provide a great way to learn Windows Azure and what it
provides. You can attend the event by watching it streamed LIVE online.
Learn more at http://p.sf.net/sfu/ms-windowsazure
_______________________________________________
bbdb-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bbdb-info
BBDB Home Page: http://bbdb.sourceforge.net/