jrnl is a personal journal management application.
Set up your journal by printing out a config file, like so:
jrnl --setup
and fill out the path to the root of your journal.
Open up today's journal entry with
jrnl
which will open up today's journal entry in your favourite text editor.
jrnl also comes with a grep wrapper which you can invoke as follows:
jrnl grep [OPTIONS] PATTERN
where OPTIONS
are normal grep
options.
You can generate a timestamp before opening the entry by using the -t
flag:
jrnl -t
or you can have timestamps always written by specifying so in your config file.
You can open up another date's journal entry by specifying a date as an argument. One way of doing this is with negative date offsets: for example, to open up yesterday's journal run
jrnl -1
Another way to pass a date to jrnl is with a date string (wrapped in
quotes if it contains spaces). jrnl uses
dateutil's fuzzy date parser to
parse the strings you pass in, which lets you specify dates like "Nov 7 2017"
:
jrnl "Nov 7 2017"
dateutil can do more: for example, specifying the 4th of the current month's date with
jrnl 4
You can open the latest existing journal entry with HEAD
like so:
jrnl HEAD
Aliases for HEAD
are LAST
and LATEST
—all of which are case
insensitive.
You can access the ancestor of an existing entry with suffixes ^
or
~N
(for the Nth ancestor). These work almost identically to the same
suffixes in git
. For example, to find the fifth last existing journal
enty, you can do
jrnl HEAD~5
To access the closest existing journal entry for a given date, add the
@
prefix to the date. For example, to find the closest entry to
2017-01-01, you'd do
jrnl @2017-01-01
To open up multiple entries simply pass in multiple date arguments. For example,
jrnl -7 "Jan 01 2016" 20180504
will open entries for a week ago, 2018-01-01, and 2018-05-04.
If in your config file you have
hours_past_midnight_included_in_date: N
where N
is some postive integer; then for a given date, at 0N
:00 or
earlier, jrnl will open up the day before's journal entry.
😕 What? Here's the motivation:
When it's 02:00, we're likely to refer to this time as night, rather than morning. Likewise, you might want a journal chunk (for lack of a better term) written at 02:00 to be in the same entry as chunks from (technically) the previous day. If you do want such a thing, you can specify a time in your config file: at any time before this specified time (inclusive), jrnl will open up the day before's journal entry.
Right now you're constrained to having a journal structure like so:
journal_root/
journal_root/2017/
journal_root/2017/2017-07-05.txt
journal_root/2017/2017-09-01.txt
and if you want to use all the features you're going to need to be okay with ISO 8601-based timestamps:
2017-09-01
21:06
You'd write stuff here.
22:30
And more stuff here.
pix install jrnl-mw
or just run the run_jrnl.py
script directly.