From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?Q?=C5=81ukasz?= Stelmach Subject: [PATCH] sexp may retrurn a list Date: Tue, 19 Oct 2010 15:38:48 +0200 Message-ID: <87hbgicnfb.fsf@dasa3.iem.pw.edu.pl> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: Received: from [140.186.70.92] (port=41612 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P8CPo-00076L-Sy for emacs-orgmode@gnu.org; Tue, 19 Oct 2010 09:40:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1P8CPT-0007HI-UF for emacs-orgmode@gnu.org; Tue, 19 Oct 2010 09:39:44 -0400 Received: from lo.gmane.org ([80.91.229.12]:42581) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1P8CPS-0007Fr-Tp for emacs-orgmode@gnu.org; Tue, 19 Oct 2010 09:39:23 -0400 Received: from list by lo.gmane.org with local (Exim 4.69) (envelope-from ) id 1P8CPL-0001fM-5n for emacs-orgmode@gnu.org; Tue, 19 Oct 2010 15:39:15 +0200 Received: from dasa3.iem.pw.edu.pl ([194.29.147.110]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 19 Oct 2010 15:39:14 +0200 Received: from lukasz.stelmach by dasa3.iem.pw.edu.pl with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 19 Oct 2010 15:39:14 +0200 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org Hi. 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) So i decided to introduce little modifications so that a sexp may return a list of strings and org-agenda-get-sexps and org-diary-sexp-entry functions accept that. I've modified org-bbdb-anniversaries too, so it returns a list no matter how many anniversaries there are on a particular day. It looks better now, doesn't it? Anniversaries: John Doe's 10th wedding anniversary Anniversaries: Jane Doe's 10th wedding anniversary The patch is backward compatible of course and if a sexp returns a string than the output is the same as it used to be. Behold The Patch: --8<---------------cut here---------------start------------->8--- 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 6ea9d25..62ccf1c 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -15020,7 +15020,7 @@ D may be an absolute day number, or a calendar-type list (month day year)." (org-current-line) (buffer-file-name) sexp) (sleep-for 2)))))) - (cond ((stringp result) result) + (cond ((or (listp result) (stringp result)) result) ((and (consp result) (stringp (cdr result))) (cdr result)) (result entry) --8<---------------cut here---------------end--------------->8--- -- Miłego dnia, Łukasz Stelmach