Caveat: this README is aspirational. The code doesn't do anything useful yet.
Impulse is a workflow, described here, for managing your intentions as a stack. Impulse can be used for lots of purposes:
- As a replacement for traditional to-do lists
- As a lightweight project planning tool
- To work effectively in the face of ADHD and anxiety.
impulse
is a CLI tool that implements the Impulse workflow.
Suppose you set out to cook some pasta. You write cook pasta
on a sheet of paper. You place that
sheet of paper on a desk. Cooking pasta is a multi-step process, and the first step is to put water
in a pot. So you take another sheet of paper and write on it, put water in pot
. You place this
sheet on top of the cook pasta
sheet. You now have a stack of papers that looks like this:
put water in pot
cook pasta
There is a cook pasta
task on the stack. Above the cook pasta
task is a put water in pot
task. So, working from the top of the stack down: you want to put water in the pot, and then return
to the cook pasta frame.
So, once you've put water in the pot, you remove that sheet and return to the next task down, cook pasta
. You're left with this:
cook pasta
With Impulse, we always work from the top of the stack. Therefore, what you want to do next is
continue to cook pasta
.
Are you done cooking pasta? Well no. So you need to put some more sheets onto the stack:
place pot on burner
turn on burner
wait for water to boil
cook pasta
There are now 4 sheets of paper on the stack. Again: you always work from the top of the stack. So
the next thing you have to do is place pot on burner
. After doing this and removing the place pot on burner
sheet from the stack, you are now on to turn on burner
. So you turn on the burner,
removing that frame from the stack. Now your task is wait for water to boil
.
wait for water to boil
cook pasta
There are now 2 sheets of paper on the stack. But water takes a while to boil. Maybe while you're
waiting for the water to boil, you decide to check Twitter. So you write check Twitter
on a new
sheet of paper, and place it on top of the stack:
check Twitter
wait for water to boil
cook pasta
There are 3 tasks on the stack. The top sheet, check Twitter
, has
interrupted the cook pasta … wait for water to boil
tasks. It is now the thing you're doing. If
you want to be really precise, you can add more sheets for the Twitter task:
check Twitter notifications
check Twitter timeline
check Twitter
wait for water to boil
cook pasta
So now the thing you're doing is check Twitter notifications
. When you finish that, you'll take it
off the stack and proceed to check Twitter timeline
. And finally you'll remove that, and get
back to check Twitter
. There are no more tasks involved in check[ing] Twitter
, so nothing more
needs to be added. Instead, check Twitter
itself is now removed, returning us to wait for water to boil
. If the water hasn't boiled yet, we may add another interrupt, such as text Mom
. If the
water is boiling, then we remove the wait for water to boil
task and return to cook pasta
:
cook pasta
which now necessitates adding new frames onto the stack (namely, open pasta box
and pour pasta in pot
.)
open pasta box
pour pasta in pot
cook pasta
You continue like this until you're done, at which point you move on to whatever task is beneath
cook pasta
(for example, eat dinner
).
Reminder: this README is aspirational. Don't expect the code to do what I'm describing here yet.
This repo is home to a CLI tool called impulse
that implements the Impulse workflow described
above. You use it like so:
--- Moving the Cursor
j ↓ move cursor down
k ↑ move cursor up
h ← move cursor to parent
l → move cursor to child
t move cursor to top
--- Moving tasks
J ⇧↓ move task down (among its siblings)
K ⇧↑ move task up (among its siblings)
H ⇧← move task left (make it a child of the task that's currently its grandparent)
L ⇧→ move task right (make it a child of the sibling directly above it)
--- Changing tasks
c add child task(s)
s add sibling task(s)
d delete task
Enter edit task name
--- Etc.
? help (this message)