Quantcast
Channel: CodeSection,代码区,Linux操作系统:Ubuntu_Centos_Debian - CodeSec
Viewing all articles
Browse latest Browse all 11063

Pragmatic Emacs: How I view my google calendar agenda in Emacs

$
0
0

JCS over on Irreal describes a couple of ways of syncing a google calendar with yourorg-mode agenda. I prefer to keep my google calendar separate from my agenda, as I use the latter to track tasks rather than appointments. I still want to see my google calendar agenda in Emacs though so I have a fairly simple work around.

I use gcalcli to access my google calendar from the command line, and run it as a cron job using gcalcli agenda and redirecting the output to a file. Then in Emacs I have a simple function to display the contents of that file.

Firstly though, the output of gcalcli contains ansi colour codes to colour-code the calendars in the agenda. Emacs won’t display these colours unless we tell it to. We use the following code to define a function display-ansi-colors to do this for us ( source ):

;; define function to display ansi colours for a buffer ;; http://stackoverflow.com/questions/23378271/how-do-i-display-ansi-color-codes-in-emacs-for-any-mode (require 'ansi-color) (defun display-ansi-colors () (interactive) (ansi-color-apply-on-region (point-min) (point-max)))

Now, here is the code to display the agenda:

(defun bjm/open-gcal-agenda () "Open my google calendar agenda file. The agenda is displayed in the buffer *gcal*." (interactive) ;; set name of calendar buffer and location of file containing my agenda (let ((tmp-buff-name "*gcal*") (cal-file (expand-file-name "/homeb/bjm/tmp/gcal"))) ;; switch to calendar buffer (switch-to-buffer tmp-buff-name) ;; turn off read only to overwrite if buffer exists (read-only-mode -1) ;; clear buffer (erase-buffer) ;; insert agenda file (insert-file-contents cal-file) ;; turn on colours (display-ansi-colors) ;; turn on special mode (special-mode) ;; turn off line wrapping (visual-line-mode -1)))

There are a couple of points worth noting here…

Firstly, I could easily just call gcalcli on a timer in Emacs, but I use the agenda file for other things so it is helpful to do that externally.

Secondly, after inserting the contents of the agenda file to the buffer I set it to special mode , which is basically a read only mode with some common key bindings, and is useful for buffers that are not associated with editing files. Related to this, I call the buffer *gcal* , which follows the convention that buffers not associated with files have names starting and ending with * .

Now by calling my bjm/open-gcal-agenda function, I see something like this:


Pragmatic Emacs: How I view my google calendar agenda in Emacs

Viewing all articles
Browse latest Browse all 11063

Trending Articles