Category Archives: wickedcoolemacs

Writing progress

2For the chapter on task management, I have 10,715 words or 38 pages of raw text that still need be edited. This probably means I’m going to miss my goal of December 31. I still need to write two more sections on using tags and projects, which will be roughly another 2,000 words. I’ll try to write another 1,000 words today. I’m planning to spend the evenings and all of January 1 working on this. I think I can finish it this week. I’ll e-mail my editor to adjust my goal one week forward.

The next chapter is the one on taking notes. It’s also 35 pages, and I’ve budgeted a month for it. If I push my current deadline forward one week, I might still be able to make it to my next deadline of January 31, 2008. The raw text should take me about six days of writing 2,000 words each. I’m planning to write about the one-file approach, Remember, Org, Planner, Howm, Records, and blogging from Emacs. Budget in maybe one weekend for editing, and that comes out to writing for three hours every other weekday and doing a little more work on it during weekends. This kind of schedule will help me avoid the mistake I did this month, which was focusing on work during weekday evenings and working on the book only during weekends.

I’m also happy to say that I’m getting the hang of dictating to Dragon NaturallySpeaking. I’ve trained it to recognize things like Emacs and C-c, and I’m getting used to working with a combination of typing and speaking. I carry a portable voice recorder with me, and I dictate into it after I’ve taken off my contact lenses and can’t work at the computer. I’ve been using it for blog posts, chapter drafts, and the occasional rant about Emacs versioning. I’m also getting the hang of not freaking out about the ungrammatical things that Dragon NaturallySpeaking thinks I’ve said.

And I like not having to type.

Projects in Emacs Org

Introduction

Organizing your tasks into projects can help you plan ahead, track
your progress, and stay motivated. Working from a project list allows
you to plan your day or week instead of just reacting to other
people’s requests. Keeping your projects and tasks in Org makes it
easier for you to review your completed tasks and plan the next step.
If you include some text describing why you want to do the project and
what your intended outcome is, this can help you stay motivated
throughout a long project.

Projects can take a single day or several years. They can be large
projects involving lots of other people and resources, or small
projects that you do on your own. Projects may involve a handful of
separate steps or a hundred things you need to do in order to achieve
your goal. The important thing is that there is more than one step.
If you organize your task list so that related tasks are together,
then you’ll find it easier to get a sense of where you are, where
you’re going, and what you need to do next.

In this section, you will learn how to:

  • Create projects,
  • Organize your tasks into projects,
  • Review your ongoing projects, and
  • Mark projects as finished.

I’ll assume that you’re using Emacs 22, and that you’ve set up Org
using an ~/organizer.org agenda file and the basic configuration
suggested in either “Org and GTD” or “Org as a Day Planner.” I’ll also
assume that you’re familiar with switching between the Org agenda view
and the Org organizer file, and that you’re comfortable navigating
around Emacs.

The examples I’ll use focus on yearly goals. You might also have
short-term projects or long-term plans. Feel free to adapt the
examples as needed.

Open your ~/organizer.org file. If you’ve collected your tasks as
suggested in the previous sections on Using Org as a Day Planner or
Using Org for GTD, your ~/organizer.org file might look something like
this:

 * Inbox
 ** TODO Read Emacs Lisp intro
 ** TODO Write yearly review
 ** TODO Exercise
 ** TODO Browse the Emacs Wiki

Create new top-level headings for this year’s goals or the projects
that you’re working on. You can create a top-level heading by
typing * and the heading, like this:

 * Learn more about Emacs
 * Go on vacation
 ...
 * Inbox
 ** TODO Read Emacs manual
 ...

It’s a good idea to add the projects to the beginning of the file
(before your Inbox) because M-x remember adds new tasks or notes to
the end of the file. If the last major heading as * Inbox, then the
tasks and notes are automatically added to it. If the last major
heading is a project, the tasks and notes may get misfiled.

What are your projects?
Yearly goals? I’ve got twenty-year plans!

If you’re a top-down planner, you’ll find it easy to list your
projects. In fact, you might have a ten- or even twenty-year plan
already written down. You’ll find this section straightforward,
because you’re already used to planning in terms of projects.
Go ahead and adapt the examples to your long-term plans.

Yearly goals? I live day by day!

If you’re a bottom-up planner, you might be giving me a weird look
right now. “Yearly goals? I’m lucky if I can figure out how to get
through the next day!” This section will also show you how to find the
recurring themes in your task list and organize them into projects.
Give project-based planning a try for a month. If this way of thinking
doesn’t work for you, Org will work just fine without projects.

You probably have projects, even if you can’t think of any right
now. Review your ~/organizer.org file. If you haven’t written down
everything you needed to do yet, go through the section on basic
configuration for your planning style (GTD or day planning). Once you
have a list of things to do, you can then review it for big tasks,
related tasks, and other project clues.

Read your tasks and ask yourself the following questions:

  • *Can I do this in one sitting?* Big tasks such as “Write a book” are often projects in disguise. Use projects so that you can break them down into smaller, doable tasks.
  • *Is this related to other tasks?* Related tasks such as “Book a flight” and “Plan my itinerary” are often clues to a project like “Go on vacation”. Use projects so that you can review related tasks together.
  • *Why am I doing this?* When you think about the reason why you’re doing something, you’ll often find a bigger project. For example, if one of your tasks is “Set up an automatic retirement savings plan”, then the question “Why am I doing this?” may lead you to the project “Plan for retirement”. Use projects to help you think of other ways to move towards that goal.

Big tasks need to be broken down into smaller tasks anyway, and
organizing them into projects will help you make them more
manageable. You may not want to organize all of your other tasks into
projects. If you can pick some major themes to focus on, though, then
you’ll be able to see how the different things you do are related to
each other, and you’ll be able to think of other ways to work on those
projects. If you’re starting out with project-based thinking, maybe
you can pick three to five projects and try to do a little work on
each of them every day.

If you still don’t identify any projects, that’s okay. You can use Org
as a straightforward task list. Jump ahead to the section on “Tags”,
as you’ll probably find that useful.

On the other hand, if this step turns up plenty of projects, resist
the temptation to over-correct and end up with hundreds of projects. I
find that more than 7 active projects gets hard to manage. Pick a few
main themes that you’d like to work on, and make everthing else
something you plan to do someday.

Project tasks

Creating tasks

Now that you have project headings, think of the next thing you need
to do in order to move those projects forward. If you’ve already
written down those tasks, move them under the appropriate project
heading. If not, type them in.

In order for a task to belong to a project, it needs to be under the
heading and at a lower level. For example, if your project heading has
one star, like this:

 * Learn Emacs

then your TODO headings should have two stars, like this:

 * Learn Emacs
 ** TODO Read the Emacs manual
 ** TODO Read the Emacs Lisp Intro manual (eintr)
 ** TODO Install the Emacs source code

If your tasks are not at the right level, you can add the star
manually by editing the heading. You can also use M-right and M-left
(org-metaright and org-metaleft) while on a heading in order to
promote or demote it, and you can use M-S-right and M-S-left
(org-shift-metaright and org-shift-metaleft) to promote or demote
entire subtrees.

To move tasks up and down within the project, you can copy and paste
the text. You can use M-Up and M-Down (org-metaup and org-metadown) to
move subtrees.

Think of tasks you can do within the next week in order to move each
of your projects forward. Add next actions to all of your active
projects. Creating next actions for each of your projects makes it
easier to remember to keep moving forward.

Organizing tasks

If you have many tasks in a project, you may want to organize them
into sub-projects. For example, you might divide a software project
into components. If you’re starting from scratch, you can create the
project structure by typing in more stars for sub-project
headings. For example:

 * Learn Emacs
 ** Read mail
 *** TODO Choose a mail client
 *** TODO Install and configure the mail client
 *** TODO Send a message
 ...
 ** Browse the Web
 *** Read through the w3m documentation
 ...

You can also demote an existing project into a subproject.
Use M-S-right (org-shift-metaright) on the
current project headline in order to demote it to a sub-project. This
will also demote the tasks within the project. For example, demoting
this:

 * Learn Emacs
 ** TODO Choose a mail client
 ** TODO Install and configure the mail client
 ** TODO Send a message

will result in this:

 ** Learn Emacs
 *** TODO Choose a mail client
 *** TODO Install and configure the mail client
 *** TODO Send a message

Then you can change the heading and add another heading above it, like this:

 * Learn Emacs
 ** Read mail
 *** TODO Choose a mail client
 *** TODO Install and configure the mail client
 *** TODO Send a message

This kind of organization is optional, but it can help you get an idea
of the overall structure of your project. Using different levels
allows you to hide and show groups of headings by pressing TAB on the
heading.

Now that you’ve created your project tasks and organized them the way
you want, it’s time to actually do the work.

Working on tasks

If you use Org as a day planner, you may also want to schedule the
tasks onto specific days with C-c C-s (org-schedule). You can review
your daily or weekly agenda with C-c a a (org-agenda,
org-agenda-list), switching between daily and weekly views with d and
w (org-agenda-day-view and org-agenda-week-view).

You can work with the next actions in the same way you work with other
tasks, rescheduling them or marking them as STARTED, WAITING or DONE
with the keyboar shortcuts introduced in the previous section on Org
and GTD or Org as a Day Planner.

When you finish a project task, think of the next action you can do in
order to move that project forward. If you use Org as a day planner,
schedule the next action onto your calendar as well.

Reviewing projects

You can review your projects by opening your ~/organizer.org and
browsing through the headings. S-tab (org-shifttab) changes the
visibility of headings, so you can see just the top-level headings or
all the details. You can use TAB (org-cycle) on a headline to show or
hide subtrees.

Reviewing a list of projects

If you have many projects, you’ll want a shorter view of just your
active projects. To make it easier to review projects, add a PROJECT
tag to all your active project headlines. You can add a tag by
editing your ~/organizer.org and moving your cursor to the headline
and typing C-c C-c (org-ctrl-c-ctrl-c), followed by the name of the
tag (PROJECT). You can also manually type :TAGNAME: at the end of the
headings, like this:

 * Learn more about Emacs        :PROJECT:
 ** TODO Read the Emacs manual
 ** TODO Read the Emacs Lisp Intro manual (eintr)
 ...
 * Go on vacation                :PROJECT:
 ...
 * Inbox
 ...

You might classify some of your projects as someday/maybe – things
that are nice to think about, but which you aren’t acting on right
now. Tag your inactive or someday/maybe projects with PROJECT and
MAYBE. If you’re editing the ~/organizer.org file, just
add :PROJECT:MAYBE: to the heading. If you’re tagging it with C-c C-c
(org-ctrl-c-ctrl-c), specify PROJECT:MAYBE as the tag.

 * Learn more about Emacs        :PROJECT:
 * Go on vacation                :PROJECT:MAYBE:
 ...
 * Inbox
 ** TODO Read Emacs manual
 ...

Now that you’ve tagged your projects, you can view just your project
headlines with a custom agenda command. Custom agenda views are a
terrific feature in Org, and you can do a lot with them if you know a
little Emacs Lisp. Here’s what you need to add to your ~/.emacs in
order to get a list of your active projects and your someday/maybe
projects:

(setq org-agenda-custom-commands
      '(("p" tags "PROJECT-MAYBE-DONE" nil)  ;; (1)
        ("m" tags "PROJECT&MAYBE" nil)       ;; (2)
        ;; ... put your other custom commands here
       ))
  • (1) This makes C-c a p (org-agenda, p) show your active projects.
  • (2) This makes C-c a m (org-agenda, m) show your “maybe” projects.

With these two commands, you can quickly review your active and
inactive projects. To jump to a project from the agenda view, move
your cursor to the heading and press RET (org-agenda-switch-to). If
you want to scan through the projects quickly, use f
(org-agenda-follow-mode) in the agenda view to turn on follow mode,
then move to different headlines. Another window will show the
headline at point.

If you review your projects at least once a week, you’ll find it
easier to make regular progress. If you want to combine your
weekly/daily review with your project list, you can do that with
org-agenda-custom-commands as well. Here’s what you’d put in your
~/.emacs:

(setq org-agenda-custom-commands
      '(("p" tags "PROJECT-MAYBE-DONE" nil)
        ("m" tags "PROJECT&MAYBE" nil)
        ("a" "My agenda"                            ;; (1)
         ((org-agenda-list)                         ;; (2)
          (tags "PROJECT-MAYBE-DONE")))             ;; (3)
        ;; ... put your other custom commands here
       ))
  • (1) The first argument is the shortcut key, the second is a name for the agenda view
  • (2) Your daily or weekly agenda. The d and w (org-agenda-day-view and org-agenda-week-view) shortcuts work if the point is within this section
  • (3) A list of your active projects

This configures C-c a a (org-agenda, “My agenda”) to display your
agenda and a list of your project headings. Again, you can press RET
(org-agenda-switch-to) to jump to a project from its heading in the
agenda view.

Reviewing your stuck projects

You might have forgotten to create next actions for some of your
active projects. Org can help you find projects which don’t have next actions.
You can then decide if the project is complete or if it needs further action.

To list stuck projects, you first need to tell Org what a stuck
project is. The following code defines a stuck project as an active
project (not tagged “maybe” or “done”) that doesn’t have a TODO or
STARTED action, if the body of the project doesn’t contain “*lt;IGNORE>”. Add this to your ~/.emacs and evaluate it:

(setq org-stuck-projects
      '("+PROJECT/-MAYBE-DONE" ("TODO" "STARTED") nil "\\<IGNORE\\>"))

Then you can use M-x org-agenda-list-stuck-projects or C-a a #
(org-agenda, org-agenda-list-stuck-projects) to show only the stuck
projects. Review this list and jump to the headlines.

Want to add that to your custom agenda view? Modify the org-agenda-custom-commands value in your ~/.emacs to be like this:

(setq org-agenda-custom-commands
      '(("p" tags "PROJECT-MAYBE-DONE" nil)
        ("m" tags "PROJECT&MAYBE" nil)
        ("a" "My agenda"
         ((org-agenda-list)
          (org-agenda-list-stuck-projects)          ;; (1)
          (tags "PROJECT-MAYBE-DONE")))
        ;; ... put your other custom commands here
       ))
  • (1) It’s a good idea to put it before your regular project list so that you can see what needs your attention.

What about finished projects? You might want to keep them in your Org
file, but they shouldn’t show up in your active and inactive project
lists. Org can keep track of those projects too.

Marking projects as done

If you look at the custom commands above, you’ll notice the “-DONE”
specifier. “DONE” is the tag we’ll use to indicate done projects. To
tag a project as done, move the point to the project heading and type
C-c C-c (org-ctrl-c-ctrl-c). The tag prompt will default to the
current tags. Just add “DONE” and press Enter. With the custom
commands we’ve set up, projects tagged DONE will not show in your
active, inactive, or stuck project lists.

You can also add the tag manually. For example, if the project heading is

 * Learn Emacs    :PROJECT:

and you’re happy with your level of Emacs proficiency, then you can
mark it as done by changing it to

 * Learn Emacs    :PROJECT:DONE:

If you have plenty of completed projects, your Org file might be quite
large. You can mark a subtree for archiving by typing C-c C-x C-a
(org-toggle-archive-tag). This hides it from most Org commands. You
can also archive a tree into a different file with C-c C-x C-s
(org-advertized-archive-subtree).

Wrapping up

Now you can create projects, manage your project tasks, and review
your active, inactive, and stuck projects in Org. You know how to mark
projects as completed and how to archive them. You’ve also started
using tags to dynamically generate reports from your Org file.

Tags can do a lot more. To find out what else you can do with tags,
read the next section on “Tagging in Org”.

On Technorati: , ,

Writing plans for the chapter on managing notes

- [ ] Keeping Notes in Emacs
Structured vs Unstructured (outline, free-form)
Flat vs Hyperlinked
Private vs Public
File structure (one file, daily, snippets)

In this section, you’ll learn about the different kinds of notes you take, and you will be able to choose one or two Emacs modules to start learning.

– [ ] Capture and retrieve – Remember, search

Getting the ideas out of your head and into your note-taking system; searching your notes (basic), searching your notes (specific)

Wicked cool code: Remembering to different note-taking systems, searching different note-taking systems

– [ ] Outline Notes with Org, Blorg

In this section, you’ll learn how to keep outlined notes using Org.  You’ll be able to create headings, sub-headings, and text notes. You’ll also learn how to manage outline items by promoting, demoting, and rearranging them. These basic editing commands are covered in the Emacs Org manual, so I’ll just give a brief summary..

You’ll also get tips on how to capture text quickly (M-x remember, dabbrev), work with large outline files (split windows are useful), and search your notes efficiently (searching headings or text).

Lastly, you’ll learn how to publish your Org file as HTML or LaTeX.

Wicked cool code would be: searching, how to import to and export from Freemind, a graphical mind-mapping program.

– [ ] Daily Notes with Planner

In this section, you’ll learn how to write a day-based journal using Planner. In addition to free-form notes on the page, you’ll also be able to keep semi-structured notes typed in manually or captured using Remember. You’ll also learn how to publish the resulting pages as HTML and RSS, and how to customize the output.

Wicked cool code would be: searching notes and displaying matching headlines, private notes, publishing note headlines, and publishing a note index.

– [ ] Hyperlinked Notes with Muse

In this section, you’ll learn how to create a personal wiki using Muse.  You’ll learn how to create pages, link to pages, and publish your wiki.

Wicked cool code: Capturing notes to specific pages using Remember and keyword matches, private pages, publishing pages when you save them.

– [ ] Snippets with Howm

In this section, you’ll learn how to manage random snippets of information using Howm.

– [ ] Blogging from Emacs – WordPress, LJ, Blogger,Muse-Blosxom, EmacsAtomAPI

In this section, you’ll learn how to use Emacs as a blogging client for many popular platforms. This is mainly for keeping other blogs in sync, although I’ll also talk about the possibility of using planner-rss + something like Feedwordpress.

– [ ] Encrypted Notes (full file, segments) – MOSTLY WRITTEN

In this section, you’ll learn how to encrypt your notes. Actually, this will probably be split up into the different tools…

Note-taking: Random notes, journal entries, outlines, and hyperlinks

I take at least three different kinds of notes, and I need to manage them differently. Here are some rough thoughts on the different kinds of notes I work with and how I manage them. I’d love to hear about your note-management strategies in comments or e-mail!

Random notes

When I worked on my thesis, I filed hundreds of lines from my literature review. I needed to quickly pull together just the notes matching a certain keyword or belonging to a particular section. I also needed to be able to properly cite each note. Lastly, I structured my notes so that I could get a random note, which turned out to be really helpful for breaking me out of writing ruts and for helping me see creative connections.

Writers and public speakers keep similar databases of story ideas and great quotations. They need to be able to search their databases for matching records, and they might not think of these categories ahead of time.

Random information management isn’t just for word geeks and researchers. If you’ve got scraps of paper or a text file with notes from meetings, clips from interesting articles, and thoughts to yourself, you’re already managing random information. You just might not have a good system for capturing and searching the information.

Important things for a random information manager:

  • You should be able to easily capture information.
  • You should be able to easily search for information.

(An ideal random information manager might even suggest relevant entries.
Come to think of it, I should find out if I can get the Remembrance Agent running again. That was really cool.)

I started using Howm for this before. It was a great random information manager for Emacs. I haven’t been using it lately, though, as I hadn’t set it up on my work laptop. I might do so soon.

Journal entries

Journal entries tend to be short, chronological notes. They can be private or public, or a mix of both. They can be also be retrospective or forward-looking. Journal entries are more structured than random information snippets because they’re associated with a specific date and are generally about activities, experiences, or goals.

My blog is an example of a journal. It has public and private entries. The private entries are removed from the blog before publishing.

Important things for a journal manager or a blog:

  • You shouldn’t have to enter date and time yourself.
  • You should be able to flip through your entries or search them for keywords.
  • You should be able to get an overview of your notes for a time period.

I use Planner for this because Planner makes it easy to publish day pages and RSS. I also write some entries directly on a WordPress blog, which also imports my Planner blog entries.

Outlines

Some notes belong to a bigger structure. For example, if you’re drafting a document, you might work on different sections that will ultimately be merged. Random information management and journals are not enough because you need structure. An outline helps you see how things fit together.

The draft for this book is an example of an outline. I sometimes work top-down by starting with the headings and defining more detail. I also work bottom-up by writing blocks of content and then fitting them into my outline.

Important things for an outline:

  • You should be able to structure your notes into headings and subheadings.
  • You should be able to promote, demote, and rearrange those headings quickly.
  • You should be able to quickly get an overview or drill down into detail.

I use Org for outlined text because Org makes it really easy to manipulate outlines.

Hyperlinked Text

The structure of hyperlinked text can actually be applied to the other three types of notes. Random notes benefit from freely-defined hyperlinks, where you can specify keywords that will automatically be linked without needing to edit each note where the keyword occurs. Journal entries can link to other journal entries or to topic-oriented pages. Outlines and other documents may allow people to jump to related sections through hyperlinks. Hyperlinks allow you to work with more freedom than a strict hierarchy of topics would permit.

An example of a hyperlinked note system would be the way the posts on my blog are often linked with plan pages that focus on specific topics. (These links are only on my hard disk, so don’t worry if you don’t see them!) Topic pages allow me to review my topic-related notes as well as other freeform notes I’ve added.

Important things for hyperlinks:

  • You should be able to link to resources outside the note-taking system.
  • You should be able to link to other notes in the note-taking system.
  • You may want to be able to link to other sections of the same note.

I tend to use Muse with Planner for hyperlinked pages, but I’ve also tried it with Howm.

Search

A note-taking system good at capturing journal entries may not necessarily be good at capturing and searching random information or managing outlines. It helps to have different note-taking systems, each optimized for different tasks, or a tool that adapts to what you need at that time. A search that spans your different note-taking systems is also a great help.

Currently, I don’t have a unified search system. Well, aside from grep… This is one of the things I plan to work on while writing this chapter. =)

Feedback?

Do you keep other types of notes, and/or do you have tips for managing notes? Please share them here so that I can think about how Emacs can be tweaked to support them!

How I got hooked

I fell in love with Emacs because of Planner and Remember. I got hooked. By that, I mean that I discovered the joys of modifying the behavior of other people’s code through hooks. Well-written Emacs code has plenty of entry points so that you can change things without rewriting everything, and both Planner and Remember were well-written. The flexibility that John Wiegley had built into Planner and Remember (in his spare time!) convinced me that I absolutely needed to learn Emacs Lisp. I e-mailed John, singing high praises about Planner and volunteering to help track down any bug reports so that I could learn in the process of helping others.

What did he do? He made me the maintainer for Planner, the go-to person, the buck-stops-here person. Was I terrified? My first time being in charge of an open source project, a language that I had just begun to learn, and schoolwork to do on top of all of that… Of course I was scared. I found a way to make working on Planner part of my final-year project (might as well get academic credit for hacking on it!), made the Emacs Lisp Intro and the Emacs Lisp manuals my weekend, bedtime, and mealtime reading. Back then, Planner.el was one file, which made it a little less intimidating.

At first, I found it hard to think of a way to improve Planner, which was already a great way to track my tasks. Remember was also a good way to jot down short notes that were automatically added to my Planner day page. Both Planner and Remember had some support for picking up hyperlinks to whatever I was looking at when I created the task or note. What was missing? Timestamps so that I could tell when I wrote a note; more link support so that I could automatically link to a file or a mail message or a contact record; private, perhaps even encrypted segments; copying a note to another page; publishing a blog as RSS… For the next few years, I worked with incredible people who had thought
long and hard about how they managed their tasks and their notes, and
who taught me how they did things through their feature requests and
their code. I became more comfortable in Emacs Lisp than in any other computer language I knew (eventually maintaining Remember as well), I had formed a thriving community of about 200 people around the world who also contributed ideas and code, and I was hooked.

Because I could change so much about Emacs, I had so much fun
coming up with creative applications. When a friend and I
were studying Japanese, she wanted to know if I could set up Emacs with
flashcards and example sentences so that we could learn words in
context. I knew that Jim Breen had a huge database of example Japanese
sentences with their English translations and that this was freely
available on the Net. I downloaded the database and–one crazy idea
fueled by another in that natural sugar high that can happen when two
geeks start brainstorming–I made our learning fun by
extracting all the cat- and kitten-related sentences. This is how I
learned about such wonderfully onomatopeic words as “fuwafuwashita”,
which means “fluffy”. We both adored cute little kitties, and reading
example sentences about these furballs would make our studies
delightful. Now, where could we put these sentences so that we’d run
into them often? Aha! Remember! Every time we wrote a blog post or
needed a scratch pad to store some information, we would be rewarded by a
short sentence in Japanese about cute little kittens, and we could look
up the meaning and pronunciation with custom keyboard shortcuts. And
hey, it worked for me–I found myself writing because I wanted to see
what sentence would come up, and I found myself learning because I’d
run into all these cool words. For variety, I switched to sentences
about computers and other topics that I wanted to be able to discuss.
Try getting your blog editor or note manager to reward you each time you share a story or write down a tidbit of information. There is incredible power in customizing your note-taking system to just the way you think, and when you combine that with the delight of a surprise, you have something that is difficult to do with any other system–paper-based or electronic, text-based or graphical, commercial or free.

I turned the projects over to other maintainers when I started with graduate school, but as you can see, I still love working with Emacs. My mind does this little somersault of joy when I pull off a particularly nifty tweak or when I run across a beautiful piece of code. And yes, one of the reasons why I’m writing this book about Emacs is because I’d love to have an opportunity to explore all the nooks and crevices of this piece of software–well, not all, because by the time the book hits press, people will have added even more.

In this chapter on notetaking, I hope to be able to show you the mechanics of note-taking in Emacs–but more than that, I hope to show the sheer joy of having a system that you can play with, of not just filing notes in a database but M-x remember-ing in a system that will make you smile or laugh, of shaping and reshaping things until they fit you like clay fits your hand. Come and have fun.

Capturing Notes with Remember

Ideas come from everywhere. While reading this blog, you might come across interesting snippets that you’d like to save. While writing code, you might be hit by an idea for something you want to do with the program. While on a phone call, you might need to write down what you need to prepare for a meeting the next day.

How do you take notes now? Do you jot your notes on a scrap of paper or into a leather notebook? Do you copy and paste what you’re looking at into a plain text file or document? Do you scribble things into a personal digital assistant?

I’ve tried different note-taking strategies: colorful mindmaps, outlined text files, even voice recordings. I felt frustrated every time I had to write down whose e-mail or which webpage prompted the note (shouldn’t the computer do that automatically?), but I was even more frustrated when I’d come across a note and not remember why I wrote it.

Remember changed all that for me. The key ideas behind Remember are that you should be able to write notes with minimal distraction, and that as the context should be automatically picked up so that you don’t have to write it down. If you’re writing a note based on a mail message, Remember will pick up the details of the message and create a hyperlink so that you can view the original message when reviewing your notes. If you’re working on a file, Remember will link to it so that you can jump back to it. If you’re browsing a web page (in Emacs, of course), Remember will remember the title and URL, so that you can go back to the page when you want to clarify something in your notes. After you save the note, you’ll be back in the same environment you were: no need to switch applications and no need to remember different keyboard shortcuts.

You might think that Remember’s only worth it if you do _everything_ in Emacs. For me, it worked the other way around. I started by using Remember to take notes in Planner, a personal information manager available for Emacs. As I got accustomed to the way Remember and Planner just automatically hyperlinked to whatever I was looking at, I thought: Why doesn’t my mail client do this? Why doesn’t my web browser do this? Why doesn’t my chat client do this? So I ended up reading through the manuals, figuring out how to do all these things in Emacs—and I loved it, eventually doing most of my work (and play!) within an Emacs frame. Although I use other applications now, like Lotus Notes for work mail and Mozilla Firefox for browsing, I still switch back to Emacs for my notes.

In this section, you’ll learn how to set up Remember and take quick notes in Emacs. We’ll start by configuring Remember to save your notes to a file, and how to configure Remember to save to different places depending on the content. You’ll also learn how to quickly search your notes file for entries.

You can also integrate Remember into other note-taking systems in Emacs. The sections that cover those systems will also show you how to configure Remember to save your notes there.

Setting Up Remember

Remember is a separate package, which you can download from https://gna.org/projects/remember-el . As of this writing, the latest stable release is Remember 1.9. Download the latest version and unpack it into your ~/elisp directory. You should end up with a new directory, ~/elisp/remember-1.9 .

To configure Remember to save to plain text files, add this code to your ~/.emacs and evaluate it:

(add-to-list 'load-path "~/elisp/remember-1.9") ;; (1)
(require 'remember-autoloads)
(setq remember-data-file "~/notes.txt")  ;; (2)
(global-set-key (kbd "C-c r") 'remember) ;; (3)

(defun wicked/remember-review-file ()
 "Open `remember-data-file'."
 (interactive)
 (find-file-other-window remember-data-file))
(global-set-key (kbd "C-c R") 'wicked/remember-review-file) ;; (4)
;; Not (global-set-key (kbd "C-c r")... as originally written... Thanks for catching that, Seth!

  • 1: Change this to the directory that contains remember.el
  • 2: Notes will be saved to this file. You can change this if you want; just keep in mind that this section refers to ~/notes.txt.
  • 3: C-c r (remember) is a handy shortcut key for remember. You can also bind it to other shortcut keys such as F9 r.
  • 4: This shortcut makes it easy to check your remembered notes.

After you’ve configured Remember, try it out by typing C-c r (remember). Your Emacs frame will be split in two, and one of the windows will be a *Remember* buffer. Type your note. The first line will be the headline, and the rest of the buffer will be the body of the note. If you call C-c r (remember) from a file, the filename will automatically be included at the end of the buffer. Type C-c C-c (remember-buffer) to save the note.

Try it now by typing C-c r (remember) to bring up the buffer, typing in a short note, and using C-c c (remember-buffer) to save it. If you open ~/notes.txt to review your note, you’ll find something like this:

 ** Sat Jan 12 14:43:02 2008 (Your headline goes here)

 Your note body goes here

 /home/sacha/.emacs

You can even save yourself some copying and pasting. Mark a region of text and use C-u C-c r (remember). The selected text will be included in the buffer, so all you have to do is comment on it.

Make a habit of typing C-c C-r or C-u C-c C-r (remember) when you need to remember something. Type C-c C-c (remember-buffer) to get back to work, knowing that your notes have been safely saved in your ~/notes.txt file.

Reviewing Your Notes

Use C-c R (wicked/remember-review-file) to check your notes, or open ~/notes.txt yourself.
To search your notes, use C-c R (wicked/remember-review-file) to open the file, then use C-s (isearch-forward) to search for words interactively, or use M-x occur to find all lines containing a word.

You may notice that the default format that Remember uses is an outline format that is compatible with Org and Allout, both of which have powerful outline-editing tools. I prefer Org’s outline-editing commands, and you’ll learn about them in the “Outline Notes with Org” section. Here’s a quick summary.

First, you need to switch the buffer to Org mode by typing M-x org-mode. To automatically open your notes file in Org mode, add

-*- mode: org -*-

to the first line of your ~/notes.txt. Then, when you open your ~/notes.txt file, it will be in Org mode.

You can quickly collapse or expand all the outline entries by pressing S-TAB (org-shifttab). To collapse or expand a single entry, move the point to the headline (the line beginning with *, **, or any number of asterisks), then press TAB (org-cycle). To move an entry up or down, move the point to the headline and press S-UP (org-shiftup) or S-DOWN (org-shiftdown). To demote or promote a heading, press M-RIGHT (org-metaright) or M-LEFT (org-metaleft).

You can treat ~/notes.txt as your inbox, and keep your organized notes in another file or groups of files. Cut and paste the text between the files to clear your inbox, and use M-x grep to search multiple files. Alternatively, you can keep all of your notes in one large text file, and use C-s (isearch-forward) and M-x occur to search for information.

Now you know the basics of remembering information, saving it into a file, and reviewing the file. By default, Remember annotates your notes with a filename, if you were looking at a file when you called C-c r (remember). As you learn more about Emacs, you may want to configure Remember to add more intelligent annotations and other text to the Remember buffer. The more work Remember does for you, the less work you have to do!

Enabling annotation functions

The easiest way to get Remember to automatically understand mail messages, Web pages, info files, BBDB contact records, and other sources of information in Emacs is to use either Org or Planner. To learn how to integrate Remember with either Org or Planner, read the section on “Outline Your Notes with Org” and “Writing Your Journal with Planner”.

You can also define your own annotation functions. When you call C-c r (remember) from a buffer, Remember goes through each of the functions in remember-annotation-functions, and it uses the first non-nil value returned.

For example, you may work with many temporary buffers that don’t have filenames. To create an annotation function that adds buffer names, add the following code to your ~/.emacs after the basic Remember configuration code:

(eval-after-load 'remember
  '(progn
    (add-to-list 'remember-annotation-functions 'buffer-name t)))

This adds buffer-name to the end of the annotation list, making it a last resort.

What if you want line numbers included with the filename or buffer name? You could replace the previous code with this:

(defun wicked/remember-line-numbers-and-file-names ()
 "Return FILENAME line NUMBER."
 (save-restriction
  (widen)
   (format " %s line %d"
    (or (buffer-file-name) (buffer-name))
    (line-number-at-pos))))
(eval-after-load 'remember
  '(progn
     (add-to-list 'remember-annotation-functions
                  'wicked/remember-line-numbers-and-file-names)))

With that code, C-c r (remember) will automatically pick up the line number from your file or buffer.

By default, Remember saves your notes to a plain-text file, so you’ll have to open the files manually. The command M-x ffap or find-find-file-at-point may be convenient. If you want hyperlinks that you can visit easily, consider saving your notes in an Org or Planner file instead.

Now you’ve got context. What else can you do with the Remember buffer?

Adding Other Text to the Remember Buffer

Remember has plenty of hooks that let you modify the behavior. For example, you might want to insert a random tagline or fortune-cookie saying whenever you create a note. This is a fun way to encourage yourself to write more, because then there’s a little surprise every time you open a Remember buffer.

Here is a totally small-scale way to use random lines from a text file. Let’s say that you have a text file made up of movie quotes, taglines, knock-knock jokes, or short fortune-cookie sayings. When I wrote this code, I used Japanese/English sentence pairs about cats, because I was studying Japanese. You can use whatever tickles your fancy, as long as this text file (~/taglines.txt) has one line per saying.

(defun wicked/random-tagline (&optional file)
  "Return a random tagline."
  (with-current-buffer (find-file-noselect (or file "~/taglines.txt"))
    (goto-char (random (point-max)))
    (let ((string
           (buffer-substring (line-beginning-position)
                             (line-end-position))))
      string)))

(eval-after-load 'remember
  '(progn
     (defadvice remember (after wicked activate)
       "Add random tagline."
       (save-excursion
         (goto-char (point-max))
         (insert "\n\n" (wicked/random-tagline) "\n\n")))))

If you want multi-line sayings, look into the Emacs fortune cookie package, and replace wicked/random-tagline with a function that returns a random string.

This code modifies the behavior of C-c r (remember) by inserting a random tagline after the buffer has been prepared. You can use the same idea to insert a timestamp noting the time you started, use a template, or modify the text in other ways.

Saving to Different Places

You can also change how Remember saves its notes. For example, if you want all of the notes that contain the word “:EMACS:” or “:WORK:” to go into separate files, you can add this code to your ~/.emacs:

(defvar wicked/remember-keywords
  '((":EMACS:" . "~/emacs.txt")
    (":WORK:" . "~/work.txt"))
  "*List of (REGEXP . FILENAME).
If an entry matches REGEXP, it will be storied in FILENAME.
The first regular expression that matches is used.")
(eval-after-load 'remember
  '(progn
     (defadvice remember-region (around wicked activate)
       "Save notes matching `wicked/remember-keywords' elsewhere."
       (let* ((b (or beg (min (point) (or (mark) (point-min)))))
	      (e (or end (max (point) (or (mark) (point-max)))))
	      (string (buffer-substring-no-properties b e))
	      (done nil)
	      (keywords wicked/remember-keywords))
	 (while keywords
	   (when (string-match (caar keywords) string)
	     (let ((remember-data-file (cdar keywords)))
	       ad-do-it)
	     (setq keywords nil done t))
	   (setq keywords (cdr keywords)))
	 (unless done
	   ad-do-it)))))

You can even configure Remember to use different handler functions. This chapter covers several note-taking systems for Emacs, and you may want to use Remember to save to more than one note-taking system. For example, you can set up C-c r p to start a Remember buffer that saves to Planner, and C-c r o to start a Remember buffer that saves to Org. Here’s the code for your ~/.emacs:

(defun wicked/remember-to-org ()
  "Remember to Org."
  (let ((remember-annotation-functions   ;; (1)
	 (cons 'org-remember-annotation
	       remember-annotation-functions)))
    (remember)
    (set (make-variable-buffer-local
	  'remember-handler-functions)
	 '(org-remember-handler))))      ;; (2)

(defun wicked/remember-to-planner ()
  "Remember to Planner."
  (let ((remember-annotation-functions   ;; (3)
	 (append planner-annotation-functions
		 remember-annotation-functions)))
    (remember)
    (set (make-variable-buffer-local
	  'remember-handler-functions)
	 '(remember-planner-append))))      ;; (4)

(global-unset-key (kbd "C-c r"))  ;; (5)
(global-set-key (kbd "C-c r o") 'wicked/remember-to-org)
(global-set-key (kbd "C-c r p") 'wicked/remember-to-planner)
  • 1: We need to make sure that Org-compatible links are created.
  • 2: This makes C-c C-c save the note to the Org file.
  • 3: Planner uses a list of annotation functions, so we add all of them to the beginning of the list.
  • 4: This makes C-c C-c save the note to the Planner page.
  • 5: We need to unset keyboard shortcuts before we can set longer keyboard shortcuts that start with the same sequence.

To learn more about configuring Remember with the different note-taking systems, read the sections for those systems.

On Technorati: , , ,

Random Emacs symbol: compilation-find-file – Function: Find a buffer for file FILENAME.