summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Groth <cwg@falma.de>2011-02-07 16:43:15 +0000
committerBastien Guerry <bzg@altern.org>2011-02-08 16:57:53 +0100
commit22147885282db88a8c36221838f3e21ec38aa43e (patch)
treea172f4f8f90c3a53231e2cfec0f825b403733a54
parent4ec289e1c40510a8e0104215d2303e103b28a11d (diff)
downloadorg-mode-22147885282db88a8c36221838f3e21ec38aa43e.tar.gz
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.
-rw-r--r--doc/org.texi11
-rw-r--r--lisp/org-bbdb.el27
2 files changed, 24 insertions, 14 deletions
diff --git a/doc/org.texi b/doc/org.texi
index b406d29..bfcef06 100644
--- a/doc/org.texi
+++ b/doc/org.texi
@@ -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
diff --git a/lisp/org-bbdb.el b/lisp/org-bbdb.el
index 4155f58..c04b7ff 100644
--- a/lisp/org-bbdb.el
+++ b/lisp/org-bbdb.el
@@ -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))