* calfw-org, view single org file; very ugly hack
@ 2014-04-20 1:04 Brady Trainor
2014-04-20 6:33 ` Bastien
0 siblings, 1 reply; 3+ messages in thread
From: Brady Trainor @ 2014-04-20 1:04 UTC (permalink / raw)
To: emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 6511 bytes --]
I'm basically showing this horrible hack for any that might like how I
setup a cloud calendar, and as a catalyst for the topic "will calfw for
org find improvement?".
(Meta: also, a test to see if pics can be included on gmane, the
graphviz source is at bottom. What's the best way to use graphics in
discussion? Links?)
---
So I think I'm gravitating to the org-caldav package, with an easy to
acquire owncloud calendar.
This will allow me to work on my use of orgmode sheltered from outside
awkward apps in a convenient and effective way. For now I will probably
just cut and paste between the org files I'm really working in, and the
org-caldav result pulled in from a cloud calendar.
So I think of the owncloudcalendar.org file as being sandboxed from all
my org-agenda-files that I'm really working in.
Further, I have a feeling having the calfw calendar framework view would
be really nice to have as an option. Unfortunately, It doesn't seem to
interact very natively with Org-modes multitudinous options and filters.
I wanted to be able to include calfw "sources" optionally from agenda
files versus the owncloudcalendar.org file.
So I searched for what seems to be a linear string of functions between
`cfw:org-create-source' and `org-agenda-files', and made these horrible
modifications which do the trick for me.
Was there a better way (outside of joining development of calfw-org)?
my road map:
org-agenda-files (var) -> org-agenda-files (func) ->
cfw:org-collect-schedules-period -> cfw:org-schedule-period-to-calendar
-> cfw:org-create-source-> cfw:open-org-calendar
(Word search on sandbox and brady will reveal where I made edits below.
For example, `cfw:org-collect-schedules-period' |-->
`cfw:brady-org-collect-schedules-period'.)
____________
/
#+BEGIN_SRC emacs-lisp
(setq sandboxed-org-caldav-file '("/e/org/owndrivecalendar.org"))
#+END_SRC
#+BEGIN_SRC emacs-lisp
(defun sandboxed-org-caldav-file (&optional unrestricted archives)
"Get the list of agenda files.
Optional UNRESTRICTED means return the full list even if a restriction
is currently in place.
When ARCHIVES is t, include all archive files that are really being
used by the agenda files. If ARCHIVE is `ifmode', do this only if
`org-agenda-archives-mode' is t."
(let ((files
(cond
((and (not unrestricted) (get 'sandboxed-org-caldav-file 'org-restrict)))
((stringp sandboxed-org-caldav-file) (org-read-agenda-file-list))
((listp sandboxed-org-caldav-file) sandboxed-org-caldav-file)
(t (error "Invalid value of `sandboxed-org-caldav-file'")))))
(setq files (apply 'append
(mapcar (lambda (f)
(if (file-directory-p f)
(directory-files
f t org-agenda-file-regexp)
(list f)))
files)))
(when org-agenda-skip-unavailable-files
(setq files (delq nil
(mapcar (function
(lambda (file)
(and (file-readable-p file) file)))
files))))
(when (or (eq archives t)
(and (eq archives 'ifmode) (eq org-agenda-archives-mode t)))
(setq files (org-add-archive-files files)))
files))
#+END_SRC
#+BEGIN_SRC emacs-lisp
(defun cfw:brady-org-collect-schedules-period (begin end)
"[internal] Return org schedule items between BEGIN and END."
(let ((org-agenda-prefix-format " ")
(span 'day))
(setq org-agenda-buffer
(when (buffer-live-p org-agenda-buffer)
org-agenda-buffer))
(org-compile-prefix-format nil)
(loop for date in (cfw:enumerate-days begin end) append
(loop for file in (or cfw:org-icalendars
(sandboxed-org-caldav-file nil 'ifmode))
append
(progn
(org-check-agenda-file file)
(apply 'org-agenda-get-day-entries
file date
cfw:org-agenda-schedule-args))))))
#+END_SRC
#+BEGIN_SRC emacs-lisp
(defun cfw:brady-org-schedule-period-to-calendar (begin end)
"[internal] Return calfw calendar items between BEGIN and END
from the org schedule data."
(loop
with cfw:org-todo-keywords-regexp = (regexp-opt
org-todo-keywords-for-agenda) ; dynamic bind
with contents = nil with periods = nil
for i in (cfw:brady-org-collect-schedules-period begin end)
for date = (cfw:org-tp i 'date)
for line = (funcall cfw:org-schedule-summary-transformer i)
for range = (cfw:org-get-timerange line)
if range do
(unless (member range periods)
(push range periods))
else do
(setq contents (cfw:contents-add
(cfw:org-normalize-date date)
line contents))
finally return (nconc contents (list (cons 'periods periods)))))
#+END_SRC
#+BEGIN_SRC emacs-lisp
(defun cfw:brady-org-create-source (&optional color)
"Create org-agenda source."
(make-cfw:source
:name "org-agenda"
:color (or color "Seagreen4")
:data 'cfw:brady-org-schedule-period-to-calendar))
#+END_SRC
#+BEGIN_SRC emacs-lisp
(defun cfw:brady-open-org-calendar ()
"Open an org schedule calendar in the new buffer."
(interactive)
(let* ((source1 (cfw:brady-org-create-source))
(cp (cfw:create-calendar-component-buffer
:view 'month
:contents-sources (list source1)
:custom-map cfw:org-schedule-map
:sorter 'cfw:org-schedule-sorter)))
(switch-to-buffer (cfw:cp-get-buffer cp))))
#+END_SRC
\____________
/
(defun my-calfw-both ()
(interactive)
(cfw:open-calendar-buffer
:contents-sources
(list (cfw:brady-org-create-source "Green")
(cfw:org-create-source "Blue")
)))
\____________
/
#+BEGIN_SRC dot :file ./gv/caldiagram.png :cache yes :cmdline -Tpng
digraph {
{ rank = same
orgmode
diary
}
gcal -> ics [ dir = "both" label = "GCALDaemon (sync)" ]
owncloud -> ics2 [ dir = "both" ]
ics2 -> orgmode [ dir = "both" label = "org-caldav" ]
ics2 [ label = "ics" ]
ics -> diary [ dir = "both"
// label = "icalendar.el (manual)"
]
diary -> agendaview
orgmode -> ics [ constraint = false
// label =
"org-export-icalendar-combine-agenda-files"
]
orgmode -> agendaview
diary -> calendar
diary -> calfw
ics -> calfw
orgmode -> calfw
}
#+END_SRC
\____________
Brady
[-- Attachment #2: caldiagram.png --]
[-- Type: image/png, Size: 43677 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: calfw-org, view single org file; very ugly hack
2014-04-20 1:04 calfw-org, view single org file; very ugly hack Brady Trainor
@ 2014-04-20 6:33 ` Bastien
2014-04-21 7:04 ` Brady Trainor
0 siblings, 1 reply; 3+ messages in thread
From: Bastien @ 2014-04-20 6:33 UTC (permalink / raw)
To: Brady Trainor; +Cc: emacs-orgmode
Brady Trainor <algebrat@uw.edu> writes:
> Was there a better way (outside of joining development of
> calfw-org)?
PS: Joining forces for development always seems like a good idea :)
--
Bastien
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: calfw-org, view single org file; very ugly hack
2014-04-20 6:33 ` Bastien
@ 2014-04-21 7:04 ` Brady Trainor
0 siblings, 0 replies; 3+ messages in thread
From: Brady Trainor @ 2014-04-21 7:04 UTC (permalink / raw)
To: Bastien; +Cc: emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 2532 bytes --]
On 04/19/2014 11:33 PM, Bastien wrote:
> Brady Trainor <algebrat@uw.edu> writes:
>
>> Was there a better way (outside of joining development of
>> calfw-org)?
>
> PS: Joining forces for development always seems like a good idea :)
>
Of course, Bastien you have answered this question well in 2007. Link:
http://lists.gnu.org/archive/html/help-gnu-emacs/2007-10/msg00708.html
That is, I tried several things, and I'm ending up with pretty much the
recipe you describe.
I can use icalendar.el to simply convert .ics files to diary format.
I can cut and paste between a diary and org-mode file if I want to. I
can simply edit the .ics calendar from another app if I feel it's
easier. I could even view the .ics file in Emacs with calfw-ical. I
could compare these dates with plain text (diary and org-mode),
calfw-ical, calfw-cal, calfw-org, and agenda-view.
I found the org-caldav too limiting in the syntax, as I'd like the
freedom to use more diary sexp in my org files (won't allow times with
diary sexp at this time). My use of org-mode is just to organic right
now, so I prefer less restrictions by my use of .ics files. There seem
to be many ical2org scripts out there, but I think I'd prefer at this
point to just shoot for a cleaner break between .ics and Emacs formats.
I do find the conversion from .ics to diary to be sufficient, and will
probably use this to empty out my .ics files from time to time and keep
records in plain text diary format.
I think this is more or less a simple enough and effective system for my
needs for now. And it should be flexible enough as well, if I want to
try a different calendaring system down the road.
Brady
#+BEGIN_SRC dot :file ./gv/caldiagram.png :cache yes :cmdline -Tpng
digraph {
{ rank = same
orgmode
diary
}
gcal -> ics [ dir = "both" label = "GCALDaemon (sync)" ]
// owncloud -> ics2 [ dir = "both" ]
// ics2 -> orgmode [ dir = "both" label = "org-caldav" ]
// ics2 [ label = "ics" ]
ics -> diary [ dir = "both"
label = "icalendar.el (manual)"
]
diary -> agendaview
// orgmode -> ics [ constraint = false
// label =
"org-export-icalendar-combine-agenda-files"
// ]
orgmode -> agendaview
// diary -> calendar
diary -> calfw
ics -> calfw
orgmode -> calfw [ constraint = false ]
}
#+END_SRC
[-- Attachment #2: caldiagram.png --]
[-- Type: image/png, Size: 29551 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-04-21 7:05 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-20 1:04 calfw-org, view single org file; very ugly hack Brady Trainor
2014-04-20 6:33 ` Bastien
2014-04-21 7:04 ` Brady Trainor
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.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).