terminal-based personal organizer
WARNING: this is alpha, and the default keybinds are still weird because I use colemak on top of tmux. You may want to change them, by setting the KEYFILE
env var to the path to a key remap file. In the future, I may add optional modal editing to bring it more in-line with vim. Right now I'm not sure it's worth the extra keystrokes.
Feedback encouraged! If you have a hard time with something, let me know about it, and I'll work to smooth out the experience!
This is an attempt to address several common situations:
#task
, all children of marked nodes are implicitly subtasks#prio=<n>
, all children implicitly inherit the lowest ancestor's priority#plot=done
or #plot=new
, in combination with #n=10
for sparkline size, #since=7d
/ #until=1d
for specifying time window.EDITOR
env var.#tagged=climbing #since=30d #plot=done
#prio=<n>
tags on the storiesC-v
) to pick an incomplete task child from one of the storiesC-a
)cargo install voidmap
if you don't have cargo, an easy way to get and manage
it is via rustup. Ensure that ~/.cargo/bin
is in your $PATH
afterward, so that you can use the rustup
and cargo
commands.
If you get errors along the lines of error: the `?' operator is not stable
then
you need to update your rust compiler. If you installed rust with rustup, this can
be accomplished with rustup update
. Requires a recent stable rust compiler,
1.14.0
or higher is recommended. This can be checked with rustc --version
.
If you have installed rust with rustup, but you have an old version, there may be
an older version previously installed on your system. Verify that which cargo
outputs a path that belongs to your .cargo/bin
directory.
void
this attempts to use $HOME/.void.db
as a storage file.
if you'd like to specify a different storage file:
void [/path/to/savefile]
feature | control | feature | control |
---|---|---|---|
new node | C-n | new node (child of selected) | Tab |
new node (freeform) | click blank space | new node (sibling of selected) | Enter |
delete selected node and its children | Delete | move subtree | drag parent to new location |
undo delete | C-z | auto arrange nodes in view | C-p |
mark selected node complete | C-a | drill-down into selected node | C-w |
pop up selection | C-q | hide children of selected | C-t |
open text editor for txt:... node |
C-k | prefix-jump with no selection | type a letter |
prefix-jump with other selected | C-f | hide completed children of node | C-h |
select arrow start/destination | C-r | erase arrow | select start, C-r, then destination, C-r |
show debug log | C-l | reparent node | drag node to new parent |
scroll up | PgUp | scroll down | PgDn |
select up | Up | select down | Down |
select subtree to left | Left | select subtree to right | Right |
de-select node | Esc | save | C-x |
exit | Esc with nothing selected | exit | C-c |
jump to weighted next task | C-v | cut / paste node | C-y |
move selected up in child list | C-g | move selected down in child list | C-d |
search for node at or below current view | C-u | Select parent | A-S-p (alt shift) |
Select next sibling | A-n | select previous sibling | A-p |
can be customized by setting the KEYFILE
env var to the path of a key configuration file
doesn't properly handle very long text. if you want to embed
an essay, create a node that begins with txt:
and hit C-k
to open its contents in an external text editor, specifiable
by setting the EDITOR
env var.
setting the LOGFILE
environment variable will allow you to
log debugging info to a file.
setting the EDITOR
environment variable will allow you to
specify which text editor is opened when hitting C-k
on a
node whose name begins with txt:
. defaults to vim.
setting the KEYFILE
environment variable to the path of a
keyfile allows you to customize the controls
setting the LOCATION_QUERY
environment variable to anything
will enable an http request that is sent out at startup to
get approximate latitude and longitude coordinates associated
with your internet-facing IP. this is added to any nodes created
during a session, and eventually will allow you to trace the
rough path you've taken over time. aimed mostly at users who
travel a lot, may eventually have a more interesting implementation.
This came about in the midst of an (ongoing) obsessive inquiry into a cluster of topics roughly related to "effectiveness" while stumbling through various mountain ranges and cities in central europe and the american northeast.
The primary thing when you take a sword in your hands is your intention to cut the enemy, whatever the means. Whenever you parry, hit, spring, strike or touch the enemy’s cutting sword, you must cut the enemy in the same movement. It is essential to attain this. If you think only of hitting, springing, striking or touching the enemy, you will not be able actually to cut him. More than anything, you must be thinking of carrying your movement through to cutting him... When you appreciate the power of nature, knowing the rhythm of any situation, you will be able to hit the enemy naturally and strike naturally. All this is the Way of the Void. - Miyamoto Musashi