summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorƁukasz Stelmach <lukasz.stelmach@iem.pw.edu.pl>2010-10-24 22:01:47 +0200
committerCarsten Dominik <carsten.dominik@gmail.com>2010-10-26 07:27:19 +0200
commit47107b661224e696611a2bb7cbab3204444403e0 (patch)
treeaa235386dc10e3875cacee2b24d8f9edd04393a8
parent3ffb50b0b7dc092a8d718e06ad0843100d82078b (diff)
downloadorg-mode-47107b661224e696611a2bb7cbab3204444403e0.tar.gz
Sexp diary entries may retrurn a list
* lisp/org-agenda.el (org-agenda-get-sexps): Handle lists as return values from diary entries * lisp/org-bbdb.el (org-bbdb-anniversaries): Handle lists of anniversaries * lisp/org.el (org-diary-sexp-entry): Handle lists as return values from diary entries. ukasz Stelmach <lukasz.stelmach@iem.pw.edu.pl> writes: > I've disovered, that %%(org-bbdb-anniversaries) returns (as every other > sexp) a string. Which is OK if there is only one. > > Anniversaries: John Doe's 10th wedding anniversary > > Unfortunately the agenda view becomes awful if we have noted Jane's > weeding date too > > Anniversaries: John Doe's 10th wedding anniversary; Jane Doe's 10th wedding anniversary > > And what if we know 3 Eves and 5 Adams and it's Christmas Eve? (Hint: > their name day) [...] As Thomas Bauman pointed out, there are functions that can be used in sexps which return cons cells like this (nil . "Full Moon 3:35am (CEST)") (this one is diary-lunar-phases), these aren't properly supported by the previous version of my patch. This one can distinguish between such a cons cell and a "real" list. ("John Doe's 10th wedding anniversary" "Jane Doe's 10th wedding anniversary") This is because (consp (cdr '(a . b))) ; => nil so org-diary-sexp-entry can be made return (cdr result) only in case of the former cons cell. The third condition in the `cond' block is IMHO enough as it is now, but if you think adding (listp (cdr result)) may help then be it.
-rw-r--r--lisp/org-agenda.el25
-rw-r--r--lisp/org-bbdb.el3
-rw-r--r--lisp/org.el3
3 files changed, 18 insertions, 13 deletions
diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index ede62e8..8544a62 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -4499,17 +4499,20 @@ the documentation of `org-diary'."
category (org-get-category beg)
todo-state (org-get-todo-state))
- (if (string-match "\\S-" result)
- (setq txt result)
- (setq txt "SEXP entry returned empty string"))
-
- (setq txt (org-format-agenda-item
- "" txt category tags 'time))
- (org-add-props txt props 'org-marker marker)
- (org-add-props txt nil
- 'org-category category 'date date 'todo-state todo-state
- 'type "sexp")
- (push txt ee))))
+ (dolist (r (if (stringp result)
+ (list result)
+ result)) ;; we expect a list here
+ (if (string-match "\\S-" r)
+ (setq txt r)
+ (setq txt "SEXP entry returned empty string"))
+
+ (setq txt (org-format-agenda-item
+ "" txt category tags 'time))
+ (org-add-props txt props 'org-marker marker)
+ (org-add-props txt nil
+ 'org-category category 'date date 'todo-state todo-state
+ 'type "sexp")
+ (push txt ee)))))
(nreverse ee)))
(defun org-diary-class (m1 d1 y1 m2 d2 y2 dayname &rest skip-weeks)
diff --git a/lisp/org-bbdb.el b/lisp/org-bbdb.el
index 53514f7..0d3134d 100644
--- a/lisp/org-bbdb.el
+++ b/lisp/org-bbdb.el
@@ -338,8 +338,7 @@ This is used by Org to re-create the anniversary hash table."
(setq text (append text (list tmp)))
(setq text (list tmp)))))
))
- (when text
- (mapconcat 'identity text "; "))))
+ text))
(defun org-bbdb-complete-link ()
"Read a bbdb link with name completion."
diff --git a/lisp/org.el b/lisp/org.el
index 4a037fe..c4c64ee 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -15026,7 +15026,10 @@ D may be an absolute day number, or a calendar-type list (month day year)."
(sleep-for 2))))))
(cond ((stringp result) result)
((and (consp result)
+ (not (consp (cdr result)))
(stringp (cdr result))) (cdr result))
+ ((and (consp result)
+ (stringp (car result))) result)
(result entry)
(t nil))))