org-e-icalendar: Remove over-zealous tasks filter
authorNicolas Goaziou <n.goaziou@gmail.com>
Mon, 5 Nov 2012 13:02:07 +0000 (14:02 +0100)
committerNicolas Goaziou <n.goaziou@gmail.com>
Mon, 5 Nov 2012 13:03:57 +0000 (14:03 +0100)
* contrib/lisp/org-e-icalendar.el (org-e-icalendar-include-todo): New
  variable.
(org-e-icalendar-with-tasks): Remove variable.
(org-e-icalendar-entry): Handle new variable.

contrib/lisp/org-e-icalendar.el

index d317f61..a785e70 100644 (file)
@@ -144,27 +144,6 @@ This is a list of symbols, the following are valid:
           (const :tag "Tags defined in current line" local-tags)
           (const :tag "All tags, including inherited ones" all-tags))))
 
-(defcustom org-e-icalendar-with-tasks nil
-  "Non-nil means export to iCalendar files should also cover TODO items.
-
-Valid values are:
-t                    include tasks independent of state.
-`todo'               include only tasks that are not yet done.
-`done'               include only tasks that are already done.
-nil                  ignore all tasks.
-list of keywords     include tasks with these keywords.
-`unblocked'          include all TODO items that are not blocked.
-
-This variable has precedence over `org-export-with-tasks'.  It
-can also be set with the #+OPTIONS line,
-e.g. \"tasks:unblocked\"."
-  :group 'org-export-e-icalendar
-  :type '(choice
-         (const :tag "None" nil)
-         (const :tag "Unfinished" t)
-         (const :tag "Unblocked" unblocked)
-         (const :tag "All" all)))
-
 (defcustom org-e-icalendar-with-timestamps 'active
   "Non-nil means make an event from plain time stamps.
 
@@ -181,6 +160,23 @@ It can also be set with the #+OPTIONS line, e.g. \"<:t\"."
          (const :tag "Only inactive timestamps" inactive)
          (const :tag "No timestamp" nil)))
 
+(defcustom org-e-icalendar-include-todo nil
+  "Non-nil means create VTODO components from TODO items.
+
+Valid values are:
+nil                  don't include any task.
+t                    include tasks that are not in DONE state.
+`unblocked'          include all TODO items that are not blocked.
+`all'                include both done and not done items."
+  :group 'org-export-e-icalendar
+  :type '(choice
+         (const :tag "None" nil)
+         (const :tag "Unfinished" t)
+         (const :tag "Unblocked" unblocked)
+         (const :tag "All" all)
+         (repeat :tag "Specific TODO keywords"
+                 (string :tag "Keyword"))))
+
 (defcustom org-e-icalendar-include-bbdb-anniversaries nil
   "Non-nil means a combined iCalendar file should include anniversaries.
 The anniversaries are defined in the BBDB database."
@@ -268,8 +264,8 @@ re-read the iCalendar file.")
   :options-alist
   ((:exclude-tags
     "ICALENDAR_EXCLUDE_TAGS" nil org-e-icalendar-exclude-tags split)
-   (:with-tasks nil "tasks" org-e-icalendar-with-tasks)
    (:with-timestamps nil "<" org-e-icalendar-with-timestamps)
+   (:with-vtodo nil nil org-e-icalendar-include-todo)
    ;; The following property will be non-nil when export has been
    ;; started from org-agenda-mode.  In this case, any entry without
    ;; a non-nil "ICALENDAR_MARK" property will be ignored.
@@ -577,10 +573,13 @@ inlinetask within the section."
            ;; If so, call `org-e-icalendar--vtodo' to transcode it
            ;; into a "VTODO" component.
            (when (and todo-type
-                      (not (and (eq (plist-get info :with-tasks) 'unblocked)
-                                (eq (org-element-type entry) 'headline)
-                                (org-e-icalendar-blocked-headline-p
-                                 entry info))))
+                      (case (plist-get info :with-vtodo)
+                        (all t)
+                        (unblocked
+                         (and (eq type 'headline)
+                              (not (org-e-icalendar-blocked-headline-p
+                                    entry info))))
+                        ('t (eq todo-type 'todo))))
              (org-e-icalendar--vtodo entry uid summary loc desc cat))
            ;; Diary-sexp: Collect every diary-sexp element within
            ;; ENTRY and transcode them.  If ENTRY is an headline,