emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Brady Trainor <algebrat@uw.edu>
To: emacs-orgmode@gnu.org
Subject: calfw-org, view single org file; very ugly hack
Date: Sat, 19 Apr 2014 18:04:17 -0700	[thread overview]
Message-ID: <liv6f5$oq9$1@ger.gmane.org> (raw)

[-- 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' |--> 


#+BEGIN_SRC emacs-lisp
(setq sandboxed-org-caldav-file '("/e/org/owndrivecalendar.org"))
#+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
	  ((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)
				      f t org-agenda-file-regexp)
				   (list f)))
     (when org-agenda-skip-unavailable-files
       (setq files (delq nil
			(mapcar (function
				 (lambda (file)
				   (and (file-readable-p file) file)))
     (when (or (eq archives t)
	      (and (eq archives 'ifmode) (eq org-agenda-archives-mode t)))
       (setq files (org-add-archive-files files)))
#+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-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))
                   (org-check-agenda-file file)
                   (apply 'org-agenda-get-day-entries
                          file date
#+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."
    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)))))
#+BEGIN_SRC emacs-lisp
(defun cfw:brady-org-create-source (&optional color)
   "Create org-agenda source."
    :name "org-agenda"
    :color (or color "Seagreen4")
    :data 'cfw:brady-org-schedule-period-to-calendar))
#+BEGIN_SRC emacs-lisp
(defun cfw:brady-open-org-calendar ()
   "Open an org schedule calendar in the new buffer."
   (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))))


(defun my-calfw-both ()
    (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
         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 = 
         orgmode -> agendaview
         diary -> calendar
         diary -> calfw
         ics -> calfw
         orgmode -> calfw



[-- Attachment #2: caldiagram.png --]
[-- Type: image/png, Size: 43677 bytes --]

             reply	other threads:[~2014-04-20  1:05 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-20  1:04 Brady Trainor [this message]
2014-04-20  6:33 ` calfw-org, view single org file; very ugly hack Bastien
2014-04-21  7:04   ` Brady Trainor

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='liv6f5$oq9$1@ger.gmane.org' \
    --to=algebrat@uw.edu \
    --cc=emacs-orgmode@gnu.org \


* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox


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).