unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [PATCH] iCalendar export of diary-float and retaining uid created by e.g. org-mode
@ 2011-02-18 12:22 Niels Giesen
  2011-02-19 10:36 ` Ulf Jasper
  2011-03-12 19:08 ` Ulf Jasper
  0 siblings, 2 replies; 10+ messages in thread
From: Niels Giesen @ 2011-02-18 12:22 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1420 bytes --]

Hello,

Attached are two patches to icalendar.el, and one to org-icalendar.el
(to illustrate the first icalendar patch, see below).

1. The first is a patch to `icalendar--create-uid', to read out a uid
from a text-property on the first character in the entry. This allows
for code to add its own uid to the entry.

For instance org-mode uses icalendar export to export some diary-*
entries in org-mode buffers, but creates and stores uids itself,
possibly allowing for two-way synchronization between ical and org-mode.

I have already provided a patch storing the org-mode uids to the
org-mode mailing list. Bastien Guerry has been so kind to test this
patch together with the patches to icalendar.el and said they worked
fine.

2. The second patch adds export of `diary-float'-entries save for those
with the optional DAY argument.

The current date is used as the start date (but excluded (using EXDATE)
if the current date does not match the `diary-float' arguments).

NOTE that the use of the current date as the start date is quite
arbitrary, in the same way as the start dates for weekly and yearly
events are arbitrary. It might be wise to bring the behaviour for these
different entries more in line with each other, perhaps leaving the user
a choice via customization.

Regards,

Niels Giesen


PS: I hope I have attached the files in the correct manner, as I am new
to this list.
-- 
http://pft.github.com/


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Read out uid from text-property --]
[-- Type: text/x-diff, Size: 1636 bytes --]

From 9958d2783887dde8bcd6d50a28ecbafca31eb7c1 Mon Sep 17 00:00:00 2001
From: Niels Giesen <niels.giesen@gmail.com>
Date: Fri, 11 Feb 2011 14:23:33 +0100
Subject: [PATCH 1/2] Pick up uid that may have been set by another application, e.g.
 org-mode.

* lisp/calendar/icalendar.el (icalendar--create-uid): get a value for
uid from 'uid text-property from first character of the entry, if
existing, otherwise create the uid as before.
---
 lisp/calendar/icalendar.el |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el
index ca88548..b1d2bba 100644
--- a/lisp/calendar/icalendar.el
+++ b/lisp/calendar/icalendar.el
@@ -925,7 +925,10 @@ ENTRY-FULL is the full diary entry string.  CONTENTS is the
 current iCalendar object, as a string.  Increase
 `icalendar--uid-count'.  Returns the UID string."
   (let ((uid icalendar-uid-format))
-    
+    (if
+	;;Allow other apps (such as org-mode) to create its own uid
+	(get-text-property 0 'uid entry-full)
+	(setq uid (get-text-property 0 'uid entry-full))
     (setq uid (replace-regexp-in-string
 	       "%c"
 	       (format "%d" icalendar--uid-count)
@@ -945,7 +948,7 @@ current iCalendar object, as a string.  Increase
     (let ((dtstart (if (string-match "^DTSTART[^:]*:\\([0-9]*\\)" contents)
                        (substring contents (match-beginning 1) (match-end 1))
                    "DTSTART")))
-          (setq uid (replace-regexp-in-string "%s" dtstart uid t t)))
+          (setq uid (replace-regexp-in-string "%s" dtstart uid t t))))
 
     ;; Return the UID string
     uid))
-- 
1.7.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: Export diary-float entries --]
[-- Type: text/x-diff, Size: 4950 bytes --]

From a2db198dae5210fa3d2a4353667f2c75d28cd16a Mon Sep 17 00:00:00 2001
From: Niels Giesen <niels.giesen@gmail.com>
Date: Sat, 12 Feb 2011 18:12:16 +0100
Subject: [PATCH 2/2] Export `diary-float' entries.

* lisp/calendar/icalendar.el (require 'diary-lib): diary-lib required
by code now used in `icalendar--convert-float-to-ical'.
* lisp/calendar/icalendar.el (icalendar--convert-float-to-ical):
Implement the body of this function instead of backing out.

This change implements the export of `diary-float' entries save for
those with the optional day entry.

The current date is used as the start date (but excluded if the
current date does not match the `diary-float' arguments).

The use of the current date as the start date is quite arbitrary, in
the same way as the start dates for weekly and yearly events are
arbitrary. It might be wise to bring the behaviour for these different
entries more in line with each other, perhaps leaving the user a
choice via customization.
---
 lisp/calendar/icalendar.el |   74 ++++++++++++++++++++++++++++++++++++-------
 1 files changed, 62 insertions(+), 12 deletions(-)

diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el
index b1d2bba..38a74df 100644
--- a/lisp/calendar/icalendar.el
+++ b/lisp/calendar/icalendar.el
@@ -34,6 +34,8 @@
 ;;   week of the year 2000 when they are exported.
 ;; - Yearly diary entries are assumed to occur the first time in the year
 ;;   1900 when they are exported.
+;; - Float diary entries are assumed to occur the first time on the
+;;   day when they are exported.
 
 ;;; History:
 
@@ -241,6 +243,7 @@ code for the event, and your personal domain name."
 ;; all the other libs we need
 ;; ======================================================================
 (require 'calendar)
+(require 'diary-lib)
 
 ;; ======================================================================
 ;; misc
@@ -1548,18 +1551,65 @@ entries.  ENTRY-MAIN is the first line of the diary entry."
     nil))
 
 (defun icalendar--convert-float-to-ical (nonmarker entry-main)
-  "Convert float diary entry to icalendar format -- unsupported!
-
-FIXME!
-
-NONMARKER is a regular expression matching the start of non-marking
-entries.  ENTRY-MAIN is the first line of the diary entry."
-  (if (string-match (concat nonmarker
-                            "%%(diary-float \\([^)]+\\))\\s-*\\(.*?\\) ?$")
-                    entry-main)
-      (progn
-        (icalendar--dmsg "diary-float %s" entry-main)
-        (error "`diary-float' is not supported yet"))
+  "Convert float diary entry to icalendar format -- partially unsupported!
+  
+  FIXME! DAY from diary-float yet unimplemented.
+  
+  NONMARKER is a regular expression matching the start of non-marking
+  entries.  ENTRY-MAIN is the first line of the diary entry."
+  (if (string-match (concat nonmarker "%%\\((diary-float .+\\) ?$") entry-main)
+      (with-temp-buffer
+        (insert (match-string 1 entry-main))
+        (goto-char (point-min))
+        (let* ((sexp (read (current-buffer))) ;using `read' here
+					      ;easier than regexp
+					      ;matching, esp. with
+					      ;different forms of
+					      ;MONTH
+               (month (nth 1 sexp))
+               (dayname (nth 2 sexp))
+               (n (nth 3 sexp))
+               (day (nth 4 sexp))
+               (summary
+		(replace-regexp-in-string 
+		 "\\(^\s+\\|\s+$\\)" "" 
+		 (buffer-substring (point) (point-max)))))
+
+          (when day
+            (progn
+              (icalendar--dmsg "diary-float %s" entry-main)
+              (error "Don't know if or how to implement day in `diary-float'")))
+
+          (list (concat
+                 ;;Start today (yes this is an arbitrary choice):
+                 "\nDTSTART;VALUE=DATE:"
+                 (format-time-string "%Y%m%d" (current-time))
+                 ;;BUT remove today if `diary-float'
+                 ;;expression does not hold true for today:
+                 (when
+                     (null (let ((date (calendar-current-date))
+                                 (entry entry-main))
+                             (diary-float month dayname n)))
+                   (concat 
+                    "\nEXDATE;VALUE=DATE:"
+                    (format-time-string "%Y%m%d" (current-time))))
+                 "\nRRULE:"
+                 (if (or (numberp month) (listp month))
+                     "FREQ=YEARLY;BYMONTH="
+                   "FREQ=MONTHLY")
+                 (when
+                     (listp month)
+                   (mapconcat
+                    (lambda (m)
+                      (number-to-string m))
+                    (cadr month) ","))
+                 (when
+                     (numberp month)
+                   (number-to-string month))
+                 ";BYDAY="
+                 (number-to-string n)
+		 (aref icalendar--weekday-array dayname))
+                summary)))
     ;; no match
     nil))
 
-- 
1.7.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: Add uid text property to diary-entries in org-mode --]
[-- Type: text/x-diff, Size: 1264 bytes --]

From 4ed18aa7aa13ac02784ad536fff5d5719f2942b9 Mon Sep 17 00:00:00 2001
From: Niels Giesen <niels.giesen@gmail.com>
Date: Fri, 11 Feb 2011 13:59:12 +0100
Subject: [PATCH] Add uid text property to diary entries

* lisp/org-icalendar.el (org-print-icalendar-entries): Add 'uid text
  property based on the ID property of the org entry to the first
  character of the diary entry.

This text property can be used by `icalendar--create-uid', instead
of creating a uid by itself.

NOTE: `icalendar--create-uid' should be patched to pick up this uid.

TINYCHANGE
---
 lisp/org-icalendar.el |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/lisp/org-icalendar.el b/lisp/org-icalendar.el
index 3583e6a..093ff93 100644
--- a/lisp/org-icalendar.el
+++ b/lisp/org-icalendar.el
@@ -412,7 +412,10 @@ When COMBINE is non nil, add the category to each line."
 	  (if scheduledp (setq summary (concat "S: " summary)))
 	  (if (string-match "\\`<%%" ts)
 	      (with-current-buffer sexp-buffer
-		(insert (substring ts 1 -1) " " summary "\n"))
+		(let ((entry (substring ts 1 -1)))
+		  (put-text-property 0 1 'uid
+				     (concat " " prefix uid) entry)
+		  (insert entry " " summary "\n")))
 	    (princ (format "BEGIN:VEVENT
 UID: %s
 %s
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH] iCalendar export of diary-float and retaining uid created by e.g. org-mode
  2011-02-18 12:22 [PATCH] iCalendar export of diary-float and retaining uid created by e.g. org-mode Niels Giesen
@ 2011-02-19 10:36 ` Ulf Jasper
  2011-02-26 12:25   ` Niels Giesen
  2011-03-12 19:08 ` Ulf Jasper
  1 sibling, 1 reply; 10+ messages in thread
From: Ulf Jasper @ 2011-02-19 10:36 UTC (permalink / raw)
  To: Niels Giesen; +Cc: emacs-devel

Hi Niels,

thanks for the patches. I shall have a look at them the next days.

Best
Ulf



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] iCalendar export of diary-float and retaining uid created by e.g. org-mode
  2011-02-19 10:36 ` Ulf Jasper
@ 2011-02-26 12:25   ` Niels Giesen
  0 siblings, 0 replies; 10+ messages in thread
From: Niels Giesen @ 2011-02-26 12:25 UTC (permalink / raw)
  To: Ulf Jasper; +Cc: emacs-devel

Ulf Jasper <ulf.jasper@web.de> writes:

> thanks for the patches. I shall have a look at them the next days.

Thanks Ulf, I'll be looking forward to your findings!

-- 
http://pft.github.com/



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] iCalendar export of diary-float and retaining uid created by e.g. org-mode
  2011-02-18 12:22 [PATCH] iCalendar export of diary-float and retaining uid created by e.g. org-mode Niels Giesen
  2011-02-19 10:36 ` Ulf Jasper
@ 2011-03-12 19:08 ` Ulf Jasper
  2011-03-12 19:20   ` Glenn Morris
  1 sibling, 1 reply; 10+ messages in thread
From: Ulf Jasper @ 2011-03-12 19:08 UTC (permalink / raw)
  To: Niels Giesen, Glenn Morris; +Cc: emacs-devel

Hi Niels,

Niels Giesen <niels.giesen@gmail.com> writes:
> Attached are two patches to icalendar.el, and one to org-icalendar.el
> (to illustrate the first icalendar patch, see below).

Thanks for the patches.  I think we should include them. However, your
contribution appears to be large enough to make it necessary to sign a
copyright agreement.  As you are new to the list, I assume you haven't
done that already.  Glenn, could you please trigger that?  Thanks!

For the org-icalendar patch: I think it may be better to send it to the
org-developers directly.

Best,
Ulf



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] iCalendar export of diary-float and retaining uid created by e.g. org-mode
  2011-03-12 19:08 ` Ulf Jasper
@ 2011-03-12 19:20   ` Glenn Morris
  2011-04-20  6:13     ` Niels Giesen
  0 siblings, 1 reply; 10+ messages in thread
From: Glenn Morris @ 2011-03-12 19:20 UTC (permalink / raw)
  To: Ulf Jasper; +Cc: emacs-devel, Niels Giesen

Ulf Jasper wrote:

> Thanks for the patches.  I think we should include them. However, your
> contribution appears to be large enough to make it necessary to sign a
> copyright agreement.  As you are new to the list, I assume you haven't
> done that already.  Glenn, could you please trigger that?  Thanks!

I will send the form off-list. Niels, please ask if you have any
questions.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] iCalendar export of diary-float and retaining uid created by e.g. org-mode
  2011-03-12 19:20   ` Glenn Morris
@ 2011-04-20  6:13     ` Niels Giesen
  2011-04-22  7:19       ` Ulf Jasper
  0 siblings, 1 reply; 10+ messages in thread
From: Niels Giesen @ 2011-04-20  6:13 UTC (permalink / raw)
  To: Glenn Morris; +Cc: Ulf Jasper, emacs-devel

Happy to announce that the assigment process has just been completed,
so from a legal point of view it is possible to include the patches now.

Regards,
Niels Giesen.

On Sat, Mar 12, 2011 at 8:20 PM, Glenn Morris <rgm@gnu.org> wrote:
> Ulf Jasper wrote:
>
>> Thanks for the patches.  I think we should include them. However, your
>> contribution appears to be large enough to make it necessary to sign a
>> copyright agreement.  As you are new to the list, I assume you haven't
>> done that already.  Glenn, could you please trigger that?  Thanks!
>
> I will send the form off-list. Niels, please ask if you have any
> questions.
>



-- 
http://pft.github.com



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] iCalendar export of diary-float and retaining uid created by e.g. org-mode
  2011-04-20  6:13     ` Niels Giesen
@ 2011-04-22  7:19       ` Ulf Jasper
  2011-04-22  7:52         ` Niels Giesen
  0 siblings, 1 reply; 10+ messages in thread
From: Ulf Jasper @ 2011-04-22  7:19 UTC (permalink / raw)
  To: Niels Giesen; +Cc: emacs-devel

Niels Giesen <niels.giesen@gmail.com> writes:

> Happy to announce that the assigment process has just been completed,
> so from a legal point of view it is possible to include the patches now.

Glad to hear that.  I'll take care of the patches the next days.

Ulf



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] iCalendar export of diary-float and retaining uid created by e.g. org-mode
  2011-04-22  7:19       ` Ulf Jasper
@ 2011-04-22  7:52         ` Niels Giesen
  2011-04-27 17:52           ` Ulf Jasper
  0 siblings, 1 reply; 10+ messages in thread
From: Niels Giesen @ 2011-04-22  7:52 UTC (permalink / raw)
  To: Ulf Jasper; +Cc: emacs-devel

Ulf Jasper <ulf.jasper@web.de> writes:

> Niels Giesen <niels.giesen@gmail.com> writes:
>
>> Happy to announce that the assigment process has just been completed,
>> so from a legal point of view it is possible to include the patches now.
>
> Glad to hear that.  I'll take care of the patches the next days.

Great! Please let me know once you have done so, so I can inform Bastien
he can apply the org-mode patch.

Niels.

-- 
http://pft.github.com/



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] iCalendar export of diary-float and retaining uid created by e.g. org-mode
  2011-04-22  7:52         ` Niels Giesen
@ 2011-04-27 17:52           ` Ulf Jasper
  2011-04-28 13:07             ` Niels Giesen
  0 siblings, 1 reply; 10+ messages in thread
From: Ulf Jasper @ 2011-04-27 17:52 UTC (permalink / raw)
  To: Niels Giesen; +Cc: emacs-devel

Niels Giesen <niels.giesen@gmail.com> writes:

> Ulf Jasper <ulf.jasper@web.de> writes:
>
>> Niels Giesen <niels.giesen@gmail.com> writes:
>>
>>> Happy to announce that the assigment process has just been completed,
>>> so from a legal point of view it is possible to include the patches now.
>>
>> Glad to hear that.  I'll take care of the patches the next days.
>
> Great! Please let me know once you have done so, so I can inform Bastien
> he can apply the org-mode patch.

Done.

Cheers,
Ulf



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] iCalendar export of diary-float and retaining uid created by e.g. org-mode
  2011-04-27 17:52           ` Ulf Jasper
@ 2011-04-28 13:07             ` Niels Giesen
  0 siblings, 0 replies; 10+ messages in thread
From: Niels Giesen @ 2011-04-28 13:07 UTC (permalink / raw)
  To: Ulf Jasper, Bastien Guerry; +Cc: emacs-devel

On Wed, Apr 27, 2011 at 7:52 PM, Ulf Jasper <ulf.jasper@web.de> wrote:
> Niels Giesen <niels.giesen@gmail.com> writes:
>
>> Ulf Jasper <ulf.jasper@web.de> writes:
>>
>>> Niels Giesen <niels.giesen@gmail.com> writes:
>>>
>>>> Happy to announce that the assigment process has just been completed,
>>>> so from a legal point of view it is possible to include the patches now.
>>>
>>> Glad to hear that.  I'll take care of the patches the next days.
>>
>> Great! Please let me know once you have done so, so I can inform Bastien
>> he can apply the org-mode patch.
>
> Done.

Thanks Ulf. Bastien, could you apply the patch to org-mode?

-- 
http://pft.github.com



^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2011-04-28 13:07 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-18 12:22 [PATCH] iCalendar export of diary-float and retaining uid created by e.g. org-mode Niels Giesen
2011-02-19 10:36 ` Ulf Jasper
2011-02-26 12:25   ` Niels Giesen
2011-03-12 19:08 ` Ulf Jasper
2011-03-12 19:20   ` Glenn Morris
2011-04-20  6:13     ` Niels Giesen
2011-04-22  7:19       ` Ulf Jasper
2011-04-22  7:52         ` Niels Giesen
2011-04-27 17:52           ` Ulf Jasper
2011-04-28 13:07             ` Niels Giesen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).