As I mentioned before, I pretend ideas are on a virtual index card, and process them as I move them around organizational boxes. After creating a flowchart, I simplified it into more of a workflow:

What are the red letters, you ask? Those are the key bindings I use to move the virtual index cards from my inbox to other boxes (files or directories). You’ll see where I specify these and their implementation later.

Perhaps an example of using this workflow would be helpful.

I may notice that I’m running low on personal supplies, and quickly jot a note in Orgzly:

This puts a line in my Inbox:

* Buy toothpaste and eye drops

The next morning, as I’m reviewing the entries, I hit t to refile (move) the entry into my Task List. After I’ve been shopping, and later review the task list, I hit a to archive it, or c to archive it the completed file, which for me, is that day’s journal entry (however, you could specify a file like, accomplishments-yay-me.org ). Completed tasks in org are typically archived and I discuss the details of this later on.

How about another example? The other day while noticing the large number of uncommitted text files (why yes, my org directories are under git control), I thought of an idea. I quickly kick off an Org capture and put another entry in my Inbox:

* Can I do a git commit automatically (at least, more regularly)?

When reviewing my Inbox the next day, I realize, while a good idea, I have no clue how to accomplish it. Since it isn’t ready, I refile it to my incubate file (by typing i ). Returning to my incubating entries I hatch a plan (which in this example involves a little web searching). With a plan, the wish becomes a project, I update the entry:

* TODO Git commit on Sleep SCHEDULED: <2018-12-28 Fri> Certain directories under git-control often go weeks or months between commits, as "projects" containing text notes don't really have a *change* to commit. What about a checkpoint? Perhaps closing laptop or system sleeps, we commit all files. * On a Mac, checkout [[https://www.bernhard-baehr.de/][SleepWatcher]] * On Linux, checkout [[https://launchpad.net/ubuntu/+source/pm-utils][pm-utils]] Goal should be to have a script that both programs can run, e.g. #+BEGIN_SRC shell ~/bin/sleepwatcher -d -s ~/bin/on-sleep #+END_SRC

Note the TODO label and scheduled date, as these make it show on my agenda.

As a real project, I refile it from incubate to tasks using t , or if it’s a larger, involved project, to its own file in projects using m P . Completion of a project moves it again, but since this project contains notes I may have to reference later, I shuffle the entire file to my technical directory.

Why so many steps and so many files? In a large project management system, tasks are typically associated with states in a database where views present tasks in different states. I’m working with text files, so tasks in different states live in different files. Normally, this would be painful, but not with org-mode. Single key sequences shuffle the text to different files, allowing me to view state by simply viewing a file.

If this concept is clear, the remaining sections include my procedures (and Emacs functions) for processing ideas from inception to completion using the examples described above.

See all those destinations in the workflow illustration above? Let’s create constant variables, where the functions can use them later:

( defvar org-default-projects-dir "~/projects" "Primary GTD directory" ) ( defvar org-default-technical-dir "~/technical" "Directory of shareable notes" ) ( defvar org-default-personal-dir "~/personal" "Directory of un-shareable, personal notes" ) ( defvar org-default-completed-dir "~/projects/trophies" "Directory of completed project files" ) ( defvar org-default-inbox-file "~/projects/breathe.org" "New stuff collects in this file" ) ( defvar org-default-tasks-file "~/projects/tasks.org" "Tasks, TODOs and little projects" ) ( defvar org-default-incubate-file "~/projects/incubate.org" "Ideas simmering on back burner" ) ( defvar org-default-completed-file nil "Ideas simmering on back burner" ) ( defvar org-default-notes-file "~/personal/general-notes.org" "Non-actionable, personal notes" ) ( defvar org-default-media-file "~/projects/media.org" "White papers and links to other things to check out" )

Why yes, if you steal my code, you’ll want to change those values.

Oh, and since some of these are pretty cool and could have items that would show up on an agenda, we may want to add them:

( add-to-list 'org-agenda-files org-default-inbox-file ) ( add-to-list 'org-agenda-files org-default-tasks-file )

Or, you can use code like this to add all files in the projects directory as potential agenda files: