2014-11-26 02:12:57 +00:00
---
title: Getting Organized with Org Mode
author: Correl Roush
---
< p >
< img src = "/images/org-mode-unicorn-logo.png" alt = "Org mode logo" style = "float: right; margin-top: -50px;" / >
< / p >
< p >
I've been using Emacs Org mode for nearly a year now. For a while I
mostly just used it to take and organize notes, but over time I've
discovered it's an incredibly useful tool for managing projects and
tasks, writing and publishing documents, keeping track of time and
todo lists, and maintaining a journal.
< / p >
< div id = "outline-container-sec-1" class = "outline-2" >
< h2 id = "sec-1" > Project Management< / h2 >
< div class = "outline-text-2" id = "text-1" >
< p >
Most of what I've been using < a href = "http://orgmode.org/" > Org mode< / a > for has been breaking down large
projects at work into tasks and subtasks. It's really easy to enter
projects in as a hierarchy of tasks and task groupings. Using
< a href = "http://orgmode.org/worg/org-tutorials/org-column-view-tutorial.html" > Column View< / a > , I was able to dive right into scoping them individually
and reporting total estimates for each major segment of work.
< / p >
< p >
< img src = "/images/emacs-projects.png" alt = "Example projects org file" / >
< / p >
< p >
Because Org Mode makes building and modifying an outline structure
like this so quick and easy, I usually build and modify the project
org document while planning it out with my team. Once done, I then
manually load that information into our issue tracker and get
underway. Occasionally I'll also update tags and progress status in
the org document as well as the project progresses, so I can use the
same document to plan subsequent development iterations.
< / p >
< / div >
< / div >
< div id = "outline-container-sec-2" class = "outline-2" >
< h2 id = "sec-2" > Organizing Notes and Code Exercises< / h2 >
< div class = "outline-text-2" id = "text-2" >
< p >
More recently, I've been looking into various ways to get more
things organized with Org mode. I've been stepping through
< a href = "http://sarabander.github.io/sicp/" > Structure and Interpretation of Computer Programs< / a > with some other
folks from work, and discovered that Org mode was an ideal fit for
keeping my notes and exercise work together. The latter is neatly
managed by < a href = "http://orgmode.org/worg/org-contrib/babel/intro.html" > Babel< / a > , which let me embed and edit source examples and
my excercise solutions right in the org document itself, and even
export them to one or more scheme files to load into my
interpreter.
< / p >
< / div >
< / div >
< div id = "outline-container-sec-3" class = "outline-2" >
< h2 id = "sec-3" > Exporting and Publishing Documents< / h2 >
< div class = "outline-text-2" id = "text-3" >
< p >
Publishing my notes with org is also a breeze. I've published
project plans and proposals to PDF to share with colleagues, and
exported my < a href = "https://github.com/correl/sicp" > SICP notes< / a > to html and < a href = "http://sicp.phoenixinquis.net/" > dropped them into a site< / a > built
with < a href = "http://jekyllrb.com/" > Jekyll< / a > . Embedding graphs and diagrams into exported documents
using < a href = "http://www.graphviz.org/" > Graphviz< / a > , < a href = "http://www.mcternan.me.uk/mscgen/" > Mscgen< / a > , and < a href = "http://plantuml.sourceforge.net/" > PlantUML< / a > has also really helped with
putting together some great project plans and documentation. A lot of
great examples using those tools (and more!) can be found < a href = "http://home.fnal.gov/~neilsen/notebook/orgExamples/org-examples.html" > here< / a > .
< / p >
< / div >
< / div >
< div id = "outline-container-sec-4" class = "outline-2" >
< h2 id = "sec-4" > Emacs Configuration< / h2 >
< div class = "outline-text-2" id = "text-4" >
< p >
While learning all the cool things I could do with Org mode and Babel,
it was only natural I'd end up using it to reorganize my < a href = "https://github.com/correl/dotfiles/tree/master/.emacs.d" > Emacs
configuration< / a > . Up until that point, I'd been managing my configuration
in a single init.el file, plus a directory full of mode or
purpose-specific elisp files that I'd loop through and load. Inspired
primarily by the blog post, < a href = "http://zeekat.nl/articles/making-emacs-work-for-me.html" > "Making Emacs Work For Me"< / a > , and later by
others such as < a href = "http://pages.sachachua.com/.emacs.d/Sacha.html" > Sacha Chua's Emacs configuration< / a > , I got all my configs
neatly organized into a single org file that gets loaded on
startup. I've found it makes it far easier to keep track of what I've
got configured, and gives me a reason to document and organize things
neatly now that it's living a double life as a < a href = "https://github.com/correl/dotfiles/blob/master/.emacs.d/emacs.org" > published document< / a > on
GitHub. I've still got a directory lying around with autoloaded
scripts, but now it's simply reserved for < a href = "https://github.com/correl/dotfiles/blob/master/.emacs.d/emacs.org#auto-loading-elisp-files" > tinkering and sensitive
configuration< / a > .
< / p >
< / div >
< / div >
< div id = "outline-container-sec-5" class = "outline-2" >
< h2 id = "sec-5" > Tracking Habits< / h2 >
< div class = "outline-text-2" id = "text-5" >
< p >
Another great feature of Org mode that I've been taking advantage
of a lot more lately is the < a href = "http://orgmode.org/manual/Agenda-Views.html" > Agenda< / a > . By defining some org files as
being agenda files, Org mode can examine these files for TODO
entries, scheduled tasks, deadlines and more to build out useful
agenda views to get a quick handle on what needs to be done and
when. While at first I started by simply syncing down my google
2014-11-26 03:13:08 +00:00
calendars as org-files (using < a href = "http://orgmode.org/worg/code/awk/ical2org.awk" > ical2org.awk< / a > ), I've started
2014-11-26 02:12:57 +00:00
managing TODO lists in a dedicated org file. By adding tasks to
this file, scheduling them, and setting deadlines, I've been doing
a much better job of keeping track of things I need to get done
and (even more importantly) < i > when< / i > I need to get them done.
< / p >
< p >
< img src = "/images/emacs-org-agenda.png" alt = "Agenda view snippet" / >
< / p >
< p >
This works not only for one-shot tasks, but also < a href = "http://orgmode.org/manual/Tracking-your-habits.html" > habits and other
repetitive tasks< / a > . It's possible to schedule a task that should be
done every day, every few days, or maybe every first sunday of a
month. For example, I've set up repeating tasks to write a blog
post at least once a month, practice guitar every two to three
days, and to do the dishes every one or two days. The agenda view
can even show a small, colorized graph next to each repeating task
that paints a picture of how well (or not!) I've been getting
those tasks done on time.
< / p >
< / div >
< / div >
< div id = "outline-container-sec-6" class = "outline-2" >
< h2 id = "sec-6" > Keeping a Journal and Tracking Work< / h2 >
< div class = "outline-text-2" id = "text-6" >
< p >
The last thing I've been using (which I'm still getting a handle
on) is using < a href = "http://orgmode.org/manual/Capture.html" > Capture< / a > to take and store notes, keep a journal, and
even < a href = "http://orgmode.org/manual/Clocking-work-time.html" > track time on tasks at work< / a > .
< / p >
< div class = "org-src-container" >
< pre class = "src src-emacs-lisp" > < span style = "color: #2aa198;" > (< / span > < span style = "color: #a7aac0;" > setq< / span > < span style = "color: #e0d0a0;" > org-capture-templates< / span >
'< span style = "color: #b58900;" > (< / span > < span style = "color: #268bd2;" > (< / span > < span style = "color: #2aa198;" > "j"< / span > < span style = "color: #2aa198;" > "Journal Entry"< / span > < span style = "color: #a3e0a0;" > plain< / span >
< span style = "color: #6c71c4;" > (< / span > < span style = "color: #b6a0e0;" > file+datetree< / span > < span style = "color: #2aa198;" > "~/org/journal.org"< / span > < span style = "color: #6c71c4;" > )< / span >
< span style = "color: #2aa198;" > "%U\n\n%?"< / span > < span style = "color: #839496; font-weight: bold;" > :empty-lines-before< / span > < span style = "color: #9999bb;" > 1< / span > < span style = "color: #268bd2;" > )< / span >
< span style = "color: #268bd2;" > (< / span > < span style = "color: #2aa198;" > "w"< / span > < span style = "color: #2aa198;" > "Log Work Task"< / span > < span style = "color: #e0d0a0;" > entry< / span >
< span style = "color: #6c71c4;" > (< / span > < span style = "color: #b6a0e0;" > file+datetree< / span > < span style = "color: #2aa198;" > "~/org/worklog.org"< / span > < span style = "color: #6c71c4;" > )< / span >
< span style = "color: #2aa198;" > "* TODO %^{Description} %^g\n%?\n\nAdded: %U"< / span >
< span style = "color: #839496; font-weight: bold;" > :clock-in< / span > < span style = "color: #a0d6e0;" > t< / span >
< span style = "color: #839496; font-weight: bold;" > :clock-keep< / span > < span style = "color: #a0d6e0;" > t< / span > < span style = "color: #268bd2;" > )< / span > < span style = "color: #b58900;" > )< / span > < span style = "color: #2aa198;" > )< / span >
< span style = "color: #2aa198;" > (< / span > < span style = "color: #b3c0a7;" > global-set-key< / span > < span style = "color: #b58900;" > (< / span > < span style = "color: #99bbb4;" > kbd< / span > < span style = "color: #2aa198;" > "C-c c"< / span > < span style = "color: #b58900;" > )< / span > '< span style = "color: #a6bb99;" > org-capture< / span > < span style = "color: #2aa198;" > )< / span >
< span style = "color: #2aa198;" > (< / span > < span style = "color: #a7aac0;" > setq< / span > < span style = "color: #9999bb;" > org-clock-persist< / span > '< span style = "color: #a7c0b9;" > history< / span > < span style = "color: #2aa198;" > )< / span >
< span style = "color: #2aa198;" > (< / span > < span style = "color: #9999bb;" > org-clock-persistence-insinuate< / span > < span style = "color: #2aa198;" > )< / span >
< / pre >
< / div >
< p >
For my journal, I've configured a capture template that I can use
to write down a new entry that will be stored with a time stamp
appended into its own org file, organized under headlines by year,
month and date.
< / p >
< p >
For work tasks, I have another capture template configured that
will log and tag a task into another org file, also organized by
date, which will automatically start tracking time for that
task. Once done, I can simply clock out and check the time I've
spent, and can easily find it later to clock in again, add notes,
or update its status. This helps me keep track of what I've gotten
done during the day, keep notes on what I was doing at any point
in time, and get a better idea of how long it takes me to do
different types of tasks.
< / p >
< / div >
< / div >
< div id = "outline-container-sec-7" class = "outline-2" >
< h2 id = "sec-7" > Conclusion< / h2 >
< div class = "outline-text-2" id = "text-7" >
< p >
There's a lot that can be done with Org mode, and I've only just
scratched the surface. The simple outline format provided by Org mode
lends itself to doing all sorts of things, be it organizing notes,
keeping a private or work journal, or writing a book or technical
document. I've even written this blog post in Org mode! There's tons
of functionality that can be built on top of it, yet the underlying
format itself remains simple and easy to work with. I've never been
great at keeping myself organized, but Org mode is such a delight to
use that I can't help trying anyway. If it can work for me, maybe it
can work for you, too!
< / p >
< p >
There's tons of resources for finding new ways for using Org mode, and
I'm still discovering cool things I can track and integrate with it. I
definitely recommend reading through < a href = "http://sachachua.com/blog/" > Sacha Chua's Blog< / a > , as well as
posts from < a href = "http://newartisans.com/2007/08/using-org-mode-as-a-day-planner/" > John Wiegley< / a > . I'm always looking for more stuff to try
out. Feel free to drop me a line if you find or are using something
you think is cool or useful!
< / p >
< / div >
< / div >