Hi Daniel,
I think it is a good idea to add such a function to org-mode. But I
am not sure if skipping holidays is the best, because Universities
also have lecture-free weeks etc.
So I am more thinking about a function like this (untested)
(defun org-diary-class (m1 d1 y1 m2 d2 y2 dayname &rest skip-weeks)
"Entry applies if date is between dates on DAYNAME, but skips SKIP-
WEEKS.
Order of the parameters is M1, D1, Y1, M2, D2, Y2 if
`european-calendar-style' is nil, and D1, M1, Y1, D2, M2, Y2 if
`european-calendar-style' is t. The weeks are ISO week numbers where
the item should not apply."
(let* ((date1 (calendar-absolute-from-gregorian
(if european-calendar-style
(list d1 m1 y1)
(list m1 d1 y1))))
(date2 (calendar-absolute-from-gregorian
(if european-calendar-style
(list d2 m2 y2)
(list m2 d2 y2))))
(d (calendar-absolute-from-gregorian date)))
(and
(<= date1 d)
(<= d date2)
(= (calendar-day-of-week date) dayname)
(or (not skip-weeks)
(progn
(require 'cal-iso)
(not (member (car (calendar-iso-from-absolute d)) skip-weeks))))
entry)))
What do you think?
- Carsten
On Dec 21, 2009, at 4:54 PM, Daniel Martins wrote:
In fact, it helps! Thanks
However a sentence like this:
+# a class that meets every Monday evening between February 16 and
April 20, 2009
** Class 7:00pm-9:00pm
<%%(and (= 1 (calendar-day-of-week date)) (diary-block 2 16 2009 4
20 2009))>
is not an example of simplicity and visibility for a quite common
feature!
Maybe as a suggestion we could encapsulate such a huge expression in a
simpler org-mode function ?
Daniel
PS In
http://www.emacswiki.org/cgi-bin/wiki/DiaryMode#toc12
I found another suggestion which I do not know how to include in org-
mode
------------------------------------
Schedule
If you want to write a schedule for school or university, you need to
define a block (it’s derived from diary-block) between two dates and a
weekday. The following function also recognizes holidays and won’t
send you to school on those days… :)
(defun diary-schedule (m1 d1 y1 m2 d2 y2 dayname)
"Entry applies if date is between dates on DAYNAME.
Order of the parameters is M1, D1, Y1, M2, D2, Y2 if
`european-calendar-style' is nil, and D1, M1, Y1, D2, M2, Y2 if
`european-calendar-style' is t. Entry does not apply on a history."
(let ((date1 (calendar-absolute-from-gregorian
(if european-calendar-style
(list d1 m1 y1)
(list m1 d1 y1))))
(date2 (calendar-absolute-from-gregorian
(if european-calendar-style
(list d2 m2 y2)
(list m2 d2 y2))))
(d (calendar-absolute-from-gregorian date)))
(if (and
(<= date1 d)
(<= d date2)
(= (calendar-day-of-week date) dayname)
(not (check-calendar-holidays date))
)
entry)))
Then: "&%%(diary-schedule 22 4 2003 1 8 2003 2) 18:00 History"
------------------------------------
2009/12/20 Matt Lundin <m...@imapmail.org>:
Daniel Martins <daniel...@gmail.com> writes:
All academics here present (including of course Carsten) suffer from
the same problem, I think
*** Math classes
<2009-12-10 Thu 11:00-14:00 +1w>
will repeat forever and ever...
We need to create a schedule for a period.
The package "remind" (and its simple interface "wyrd") do this job
wonderfully but I do not know how to deal with this problem in Org
mode
The following FAQ should help:
http://orgmode.org/worg/org-faq.php#diary-sexp-in-org-files
- Matt
_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode