org-bbdb: allow anniversaries with unknown years

Anniversaries in BBDB can be now also specified in the format MM-DD
next to YYYY-MM-DD.
This commit is contained in:
Christoph Groth 2011-02-07 16:43:15 +00:00 committed by Bastien Guerry
parent 4ec289e1c4
commit 2214788528
2 changed files with 24 additions and 14 deletions

View File

@ -7098,14 +7098,15 @@ following to one your your agenda files:
You can then go ahead and define anniversaries for a BBDB record. Basically,
you need to press @kbd{C-o anniversary @key{RET}} with the cursor in a BBDB
record and then add the date in the format @code{YYYY-MM-DD}, followed by a
space and the class of the anniversary (@samp{birthday} or @samp{wedding}, or
a format string). If you omit the class, it will default to @samp{birthday}.
Here are a few examples, the header for the file @file{org-bbdb.el} contains
more detailed information.
record and then add the date in the format @code{YYYY-MM-DD} or @code{MM-DD},
followed by a space and the class of the anniversary (@samp{birthday} or
@samp{wedding}, or a format string). If you omit the class, it will default to
@samp{birthday}. Here are a few examples, the header for the file
@file{org-bbdb.el} contains more detailed information.
@example
1973-06-22
06-22
1955-08-02 wedding
2008-04-14 %s released version 6.01 of org-mode, %d years ago
@end example

View File

@ -136,12 +136,12 @@
'(("birthday" lambda
(name years suffix)
(concat "Birthday: [[bbdb:" name "][" name " ("
(number-to-string years)
(format "%s" years) ; handles numbers as well as strings
suffix ")]]"))
("wedding" lambda
(name years suffix)
(concat "[[bbdb:" name "][" name "'s "
(number-to-string years)
(format "%s" years)
suffix " wedding anniversary]]")))
"How different types of anniversaries should be formatted.
An alist of elements (STRING . FORMAT) where STRING is the name of an
@ -239,11 +239,16 @@ italicized, in all other cases it is left unchanged."
(defun org-bbdb-anniv-extract-date (time-str)
"Convert YYYY-MM-DD to (month date year).
Argument TIME-STR is the value retrieved from BBDB."
(multiple-value-bind (y m d) (values-list (bbdb-split time-str "-"))
(list (string-to-number m)
(string-to-number d)
(string-to-number y))))
Argument TIME-STR is the value retrieved from BBDB. If YYYY- is omitted
it will be considered unknown."
(multiple-value-bind (a b c) (values-list (bbdb-split time-str "-"))
(if (eq c nil)
(list (string-to-number a)
(string-to-number b)
nil)
(list (string-to-number b)
(string-to-number c)
(string-to-number a)))))
(defun org-bbdb-anniv-split (str)
"Split multiple entries in the BBDB anniversary field.
@ -326,8 +331,12 @@ This is used by Org to re-create the anniversary hash table."
class org-bbdb-anniversary-format-alist t))
class)) ; (as format string)
(name (nth 1 rec))
(years (- y (car rec)))
(suffix (diary-ordinal-suffix years))
(years (if (eq (car rec) nil)
"unknown"
(- y (car rec))))
(suffix (if (eq (car rec) nil)
""
(diary-ordinal-suffix years)))
(tmp (cond
((functionp form)
(funcall form name years suffix))