mirror of
https://github.com/correl/correl.github.io.git
synced 2024-12-28 03:00:04 +00:00
Publish "Getting Organized with Org Mode"
This commit is contained in:
parent
f5b9da49d0
commit
e36c2af946
3 changed files with 204 additions and 4 deletions
201
_posts/2014-11-25-getting-organized-with-org-mode.html
Normal file
201
_posts/2014-11-25-getting-organized-with-org-mode.html
Normal file
|
@ -0,0 +1,201 @@
|
||||||
|
---
|
||||||
|
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
|
||||||
|
calendars as org-files (using <a href="http://orgmode.org/worg/code/awk/ical2org.awk">icadl2org.awk</a>), I've started
|
||||||
|
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>
|
|
@ -3,16 +3,15 @@
|
||||||
#+STARTUP: indent
|
#+STARTUP: indent
|
||||||
#+OPTIONS: toc:nil num:nil
|
#+OPTIONS: toc:nil num:nil
|
||||||
|
|
||||||
|
#+ATTR_HTML: style="float: right; margin-top: -50px;"
|
||||||
|
[[img:org-mode-unicorn-logo.png][Org mode logo]]
|
||||||
|
|
||||||
I've been using Emacs Org mode for nearly a year now. For a while I
|
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
|
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
|
discovered it's an incredibly useful tool for managing projects and
|
||||||
tasks, writing and publishing documents, keeping track of time and
|
tasks, writing and publishing documents, keeping track of time and
|
||||||
todo lists, and maintaining a journal.
|
todo lists, and maintaining a journal.
|
||||||
|
|
||||||
#+BEGIN_HTML
|
|
||||||
<!--more-->
|
|
||||||
#+END_HTML
|
|
||||||
|
|
||||||
* Project Management
|
* Project Management
|
||||||
Most of what I've been using [[http://orgmode.org/][Org mode]] for has been breaking down large
|
Most of what I've been using [[http://orgmode.org/][Org mode]] for has been breaking down large
|
||||||
projects at work into tasks and subtasks. It's really easy to enter
|
projects at work into tasks and subtasks. It's really easy to enter
|
BIN
images/org-mode-unicorn-logo.png
Normal file
BIN
images/org-mode-unicorn-logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.7 KiB |
Loading…
Reference in a new issue