3797 lines
108 KiB
Groff
3797 lines
108 KiB
Groff
.\"t
|
|
|
|
.TH "hledger" "1" "September 2019" "hledger 1.15.2" "hledger User Manuals"
|
|
|
|
|
|
|
|
.SH NAME
|
|
.PP
|
|
hledger - a command-line accounting tool
|
|
.SH SYNOPSIS
|
|
.PP
|
|
\f[C]hledger [-f FILE] COMMAND [OPTIONS] [ARGS]\f[R]
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
\f[C]hledger [-f FILE] ADDONCMD -- [OPTIONS] [ARGS]\f[R]
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
\f[C]hledger\f[R]
|
|
.SH DESCRIPTION
|
|
.PP
|
|
hledger is a cross-platform program for tracking money, time, or any
|
|
other commodity, using double-entry accounting and a simple, editable
|
|
file format.
|
|
hledger is inspired by and largely compatible with ledger(1).
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Tested on unix, mac, windows, hledger aims to be a reliable, practical
|
|
tool for daily use.
|
|
.PP
|
|
This is hledger\[cq]s command-line interface (there are also curses and
|
|
web interfaces).
|
|
Its basic function is to read a plain text file describing financial
|
|
transactions (in accounting terms, a general journal) and print useful
|
|
reports on standard output, or export them as CSV.
|
|
hledger can also read some other file formats such as CSV files,
|
|
translating them to journal format.
|
|
Additionally, hledger lists other hledger-* executables found in the
|
|
user\[cq]s $PATH and can invoke them as subcommands.
|
|
.PP
|
|
hledger reads data from one or more files in hledger journal, timeclock,
|
|
timedot, or CSV format specified with \f[C]-f\f[R], or
|
|
\f[C]$LEDGER_FILE\f[R], or \f[C]$HOME/.hledger.journal\f[R] (on windows,
|
|
perhaps \f[C]C:/Users/USER/.hledger.journal\f[R]).
|
|
If using \f[C]$LEDGER_FILE\f[R], note this must be a real environment
|
|
variable, not a shell variable.
|
|
You can specify standard input with \f[C]-f-\f[R].
|
|
.PP
|
|
Transactions are dated movements of money between two (or more) named
|
|
accounts, and are recorded with journal entries like this:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
2015/10/16 bought food
|
|
expenses:food $10
|
|
assets:cash
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
For more about this format, see hledger_journal(5).
|
|
.PP
|
|
Most users use a text editor to edit the journal, usually with an editor
|
|
mode such as ledger-mode for added convenience.
|
|
hledger\[cq]s interactive add command is another way to record new
|
|
transactions.
|
|
hledger never changes existing transactions.
|
|
.PP
|
|
To get started, you can either save some entries like the above in
|
|
\f[C]\[ti]/.hledger.journal\f[R], or run \f[C]hledger add\f[R] and
|
|
follow the prompts.
|
|
Then try some commands like \f[C]hledger print\f[R] or
|
|
\f[C]hledger balance\f[R].
|
|
Run \f[C]hledger\f[R] with no arguments for a list of commands.
|
|
.SH EXAMPLES
|
|
.PP
|
|
Two simple transactions in hledger journal format:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
2015/9/30 gift received
|
|
assets:cash $20
|
|
income:gifts
|
|
|
|
2015/10/16 farmers market
|
|
expenses:food $10
|
|
assets:cash
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Some basic reports:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger print
|
|
2015/09/30 gift received
|
|
assets:cash $20
|
|
income:gifts $-20
|
|
|
|
2015/10/16 farmers market
|
|
expenses:food $10
|
|
assets:cash $-10
|
|
\f[R]
|
|
.fi
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger accounts --tree
|
|
assets
|
|
cash
|
|
expenses
|
|
food
|
|
income
|
|
gifts
|
|
\f[R]
|
|
.fi
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance
|
|
$10 assets:cash
|
|
$10 expenses:food
|
|
$-20 income:gifts
|
|
--------------------
|
|
0
|
|
\f[R]
|
|
.fi
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger register cash
|
|
2015/09/30 gift received assets:cash $20 $20
|
|
2015/10/16 farmers market assets:cash $-10 $10
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
More commands:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger # show available commands
|
|
$ hledger add # add more transactions to the journal file
|
|
$ hledger balance # all accounts with aggregated balances
|
|
$ hledger balance --help # show detailed help for balance command
|
|
$ hledger balance --depth 1 # only top-level accounts
|
|
$ hledger register # show account postings, with running total
|
|
$ hledger reg income # show postings to/from income accounts
|
|
$ hledger reg \[aq]assets:some bank:checking\[aq] # show postings to/from this checking account
|
|
$ hledger print desc:shop # show transactions with shop in the description
|
|
$ hledger activity -W # show transaction counts per week as a bar chart
|
|
\f[R]
|
|
.fi
|
|
.SH OPTIONS
|
|
.SS General options
|
|
.PP
|
|
To see general usage help, including general options which are supported
|
|
by most hledger commands, run \f[C]hledger -h\f[R].
|
|
.PP
|
|
General help options:
|
|
.TP
|
|
.B \f[C]-h --help\f[R]
|
|
show general usage (or after COMMAND, command usage)
|
|
.TP
|
|
.B \f[C]--version\f[R]
|
|
show version
|
|
.TP
|
|
.B \f[C]--debug[=N]\f[R]
|
|
show debug output (levels 1-9, default: 1)
|
|
.PP
|
|
General input options:
|
|
.TP
|
|
.B \f[C]-f FILE --file=FILE\f[R]
|
|
use a different input file.
|
|
For stdin, use - (default: \f[C]$LEDGER_FILE\f[R] or
|
|
\f[C]$HOME/.hledger.journal\f[R])
|
|
.TP
|
|
.B \f[C]--rules-file=RULESFILE\f[R]
|
|
Conversion rules file to use when reading CSV (default: FILE.rules)
|
|
.TP
|
|
.B \f[C]--separator=CHAR\f[R]
|
|
Field separator to expect when reading CSV (default: \[aq],\[aq])
|
|
.TP
|
|
.B \f[C]--alias=OLD=NEW\f[R]
|
|
rename accounts named OLD to NEW
|
|
.TP
|
|
.B \f[C]--anon\f[R]
|
|
anonymize accounts and payees
|
|
.TP
|
|
.B \f[C]--pivot FIELDNAME\f[R]
|
|
use some other field or tag for the account name
|
|
.TP
|
|
.B \f[C]-I --ignore-assertions\f[R]
|
|
ignore any failing balance assertions
|
|
.PP
|
|
General reporting options:
|
|
.TP
|
|
.B \f[C]-b --begin=DATE\f[R]
|
|
include postings/txns on or after this date
|
|
.TP
|
|
.B \f[C]-e --end=DATE\f[R]
|
|
include postings/txns before this date
|
|
.TP
|
|
.B \f[C]-D --daily\f[R]
|
|
multiperiod/multicolumn report by day
|
|
.TP
|
|
.B \f[C]-W --weekly\f[R]
|
|
multiperiod/multicolumn report by week
|
|
.TP
|
|
.B \f[C]-M --monthly\f[R]
|
|
multiperiod/multicolumn report by month
|
|
.TP
|
|
.B \f[C]-Q --quarterly\f[R]
|
|
multiperiod/multicolumn report by quarter
|
|
.TP
|
|
.B \f[C]-Y --yearly\f[R]
|
|
multiperiod/multicolumn report by year
|
|
.TP
|
|
.B \f[C]-p --period=PERIODEXP\f[R]
|
|
set start date, end date, and/or reporting interval all at once using
|
|
period expressions syntax
|
|
.TP
|
|
.B \f[C]--date2\f[R]
|
|
match the secondary date instead (see command help for other effects)
|
|
.TP
|
|
.B \f[C]-U --unmarked\f[R]
|
|
include only unmarked postings/txns (can combine with -P or -C)
|
|
.TP
|
|
.B \f[C]-P --pending\f[R]
|
|
include only pending postings/txns
|
|
.TP
|
|
.B \f[C]-C --cleared\f[R]
|
|
include only cleared postings/txns
|
|
.TP
|
|
.B \f[C]-R --real\f[R]
|
|
include only non-virtual postings
|
|
.TP
|
|
.B \f[C]-NUM --depth=NUM\f[R]
|
|
hide/aggregate accounts or postings more than NUM levels deep
|
|
.TP
|
|
.B \f[C]-E --empty\f[R]
|
|
show items with zero amount, normally hidden (and vice-versa in
|
|
hledger-ui/hledger-web)
|
|
.TP
|
|
.B \f[C]-B --cost\f[R]
|
|
convert amounts to their cost at transaction time (using the transaction
|
|
price, if any)
|
|
.TP
|
|
.B \f[C]-V --value\f[R]
|
|
convert amounts to their market value on the report end date (using the
|
|
most recent applicable market price, if any)
|
|
.TP
|
|
.B \f[C]--auto\f[R]
|
|
apply automated posting rules to modify transactions.
|
|
.TP
|
|
.B \f[C]--forecast\f[R]
|
|
apply periodic transaction rules to generate future transactions, to 6
|
|
months from now or report end date.
|
|
.PP
|
|
When a reporting option appears more than once in the command line, the
|
|
last one takes precedence.
|
|
.PP
|
|
Some reporting options can also be written as query arguments.
|
|
.SS Command options
|
|
.PP
|
|
To see options for a particular command, including command-specific
|
|
options, run: \f[C]hledger COMMAND -h\f[R].
|
|
.PP
|
|
Command-specific options must be written after the command name, eg:
|
|
\f[C]hledger print -x\f[R].
|
|
.PP
|
|
Additionally, if the command is an addon, you may need to put its
|
|
options after a double-hyphen, eg: \f[C]hledger ui -- --watch\f[R].
|
|
Or, you can run the addon executable directly:
|
|
\f[C]hledger-ui --watch\f[R].
|
|
.SS Command arguments
|
|
.PP
|
|
Most hledger commands accept arguments after the command name, which are
|
|
often a query, filtering the data in some way.
|
|
.SS Argument files
|
|
.PP
|
|
You can save a set of command line options/arguments in a file, one per
|
|
line, and then reuse them by writing \f[C]\[at]FILENAME\f[R] in a
|
|
command line.
|
|
To prevent this expansion of \f[C]\[at]\f[R]-arguments, precede them
|
|
with a \f[C]--\f[R] argument.
|
|
For more, see Save frequently used options.
|
|
.SS Special characters in arguments and queries
|
|
.PP
|
|
In shell command lines, option and argument values which contain
|
|
\[dq]problematic\[dq] characters, ie spaces, and also characters
|
|
significant to your shell such as \f[C]<\f[R], \f[C]>\f[R], \f[C](\f[R],
|
|
\f[C])\f[R], \f[C]|\f[R] and \f[C]$\f[R], should be escaped by enclosing
|
|
them in quotes or by writing backslashes before the characters.
|
|
Eg:
|
|
.PP
|
|
\f[C]hledger register -p \[aq]last year\[aq] \[dq]accounts receivable (receivable|payable)\[dq] amt:\[rs]>100\f[R].
|
|
.SS More escaping
|
|
.PP
|
|
Characters significant both to the shell and in regular expressions may
|
|
need one extra level of escaping.
|
|
These include parentheses, the pipe symbol and the dollar sign.
|
|
Eg, to match the dollar symbol, bash users should do:
|
|
.PP
|
|
\f[C]hledger balance cur:\[aq]\[rs]$\[aq]\f[R]
|
|
.PP
|
|
or:
|
|
.PP
|
|
\f[C]hledger balance cur:\[rs]\[rs]$\f[R]
|
|
.SS Even more escaping
|
|
.PP
|
|
When hledger runs an addon executable (eg you type \f[C]hledger ui\f[R],
|
|
hledger runs \f[C]hledger-ui\f[R]), it de-escapes command-line options
|
|
and arguments once, so you might need to \f[I]triple\f[R]-escape.
|
|
Eg in bash, running the ui command and matching the dollar sign,
|
|
it\[aq]s:
|
|
.PP
|
|
\f[C]hledger ui cur:\[aq]\[rs]\[rs]$\[aq]\f[R]
|
|
.PP
|
|
or:
|
|
.PP
|
|
\f[C]hledger ui cur:\[rs]\[rs]\[rs]\[rs]$\f[R]
|
|
.PP
|
|
If you asked why \f[I]four\f[R] slashes above, this may help:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l l.
|
|
T{
|
|
unescaped:
|
|
T}@T{
|
|
\f[C]$\f[R]
|
|
T}
|
|
T{
|
|
escaped:
|
|
T}@T{
|
|
\f[C]\[rs]$\f[R]
|
|
T}
|
|
T{
|
|
double-escaped:
|
|
T}@T{
|
|
\f[C]\[rs]\[rs]$\f[R]
|
|
T}
|
|
T{
|
|
triple-escaped:
|
|
T}@T{
|
|
\f[C]\[rs]\[rs]\[rs]\[rs]$\f[R]
|
|
T}
|
|
.TE
|
|
.PP
|
|
(The number of backslashes in fish shell is left as an exercise for the
|
|
reader.)
|
|
.PP
|
|
You can always avoid the extra escaping for addons by running the addon
|
|
directly:
|
|
.PP
|
|
\f[C]hledger-ui cur:\[rs]\[rs]$\f[R]
|
|
.SS Less escaping
|
|
.PP
|
|
Inside an argument file, or in the search field of hledger-ui or
|
|
hledger-web, or at a GHCI prompt, you need one less level of escaping
|
|
than at the command line.
|
|
And backslashes may work better than quotes.
|
|
Eg:
|
|
.PP
|
|
\f[C]ghci> :main balance cur:\[rs]$\f[R]
|
|
.SS Command line tips
|
|
.PP
|
|
If in doubt, keep things simple:
|
|
.IP \[bu] 2
|
|
write options after the command (\f[C]hledger CMD -OPTIONS ARGS\f[R])
|
|
.IP \[bu] 2
|
|
run add-on executables directly (\f[C]hledger-ui -OPTIONS ARGS\f[R])
|
|
.IP \[bu] 2
|
|
enclose problematic args in single quotes
|
|
.IP \[bu] 2
|
|
if needed, also add a backslash to escape regexp metacharacters
|
|
.PP
|
|
To find out exactly how a command line is being parsed, add
|
|
\f[C]--debug=2\f[R] to troubleshoot.
|
|
.SS Unicode characters
|
|
.PP
|
|
hledger is expected to handle non-ascii characters correctly:
|
|
.IP \[bu] 2
|
|
they should be parsed correctly in input files and on the command line,
|
|
by all hledger tools (add, iadd, hledger-web\[aq]s search/add/edit
|
|
forms, etc.)
|
|
.IP \[bu] 2
|
|
they should be displayed correctly by all hledger tools, and on-screen
|
|
alignment should be preserved.
|
|
.PP
|
|
This requires a well-configured environment.
|
|
Here are some tips:
|
|
.IP \[bu] 2
|
|
A system locale must be configured, and it must be one that can decode
|
|
the characters being used.
|
|
In bash, you can set a locale like this:
|
|
\f[C]export LANG=en_US.UTF-8\f[R].
|
|
There are some more details in Troubleshooting.
|
|
This step is essential - without it, hledger will quit on encountering a
|
|
non-ascii character (as with all GHC-compiled programs).
|
|
.IP \[bu] 2
|
|
your terminal software (eg Terminal.app, iTerm, CMD.exe, xterm..) must
|
|
support unicode
|
|
.IP \[bu] 2
|
|
the terminal must be using a font which includes the required unicode
|
|
glyphs
|
|
.IP \[bu] 2
|
|
the terminal should be configured to display wide characters as double
|
|
width (for report alignment)
|
|
.IP \[bu] 2
|
|
on Windows, for best results you should run hledger in the same kind of
|
|
environment in which it was built.
|
|
Eg hledger built in the standard CMD.EXE environment (like the binaries
|
|
on our download page) might show display problems when run in a cygwin
|
|
or msys terminal, and vice versa.
|
|
(See eg #961).
|
|
.SS Input files
|
|
.PP
|
|
hledger reads transactions from a data file (and the add command writes
|
|
to it).
|
|
By default this file is \f[C]$HOME/.hledger.journal\f[R] (or on Windows,
|
|
something like \f[C]C:/Users/USER/.hledger.journal\f[R]).
|
|
You can override this with the \f[C]$LEDGER_FILE\f[R] environment
|
|
variable:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ setenv LEDGER_FILE \[ti]/finance/2016.journal
|
|
$ hledger stats
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
or with the \f[C]-f/--file\f[R] option:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger -f /some/file stats
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
The file name \f[C]-\f[R] (hyphen) means standard input:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ cat some.journal | hledger -f-
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Usually the data file is in hledger\[aq]s journal format, but it can
|
|
also be one of several other formats, listed below.
|
|
hledger detects the format automatically based on the file extension, or
|
|
if that is not recognised, by trying each built-in \[dq]reader\[dq] in
|
|
turn:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
lw(7.6n) lw(31.2n) lw(31.2n).
|
|
T{
|
|
Reader:
|
|
T}@T{
|
|
Reads:
|
|
T}@T{
|
|
Used for file extensions:
|
|
T}
|
|
_
|
|
T{
|
|
\f[C]journal\f[R]
|
|
T}@T{
|
|
hledger\[aq]s journal format, also some Ledger journals
|
|
T}@T{
|
|
\f[C].journal\f[R] \f[C].j\f[R] \f[C].hledger\f[R] \f[C].ledger\f[R]
|
|
T}
|
|
T{
|
|
\f[C]timeclock\f[R]
|
|
T}@T{
|
|
timeclock files (precise time logging)
|
|
T}@T{
|
|
\f[C].timeclock\f[R]
|
|
T}
|
|
T{
|
|
\f[C]timedot\f[R]
|
|
T}@T{
|
|
timedot files (approximate time logging)
|
|
T}@T{
|
|
\f[C].timedot\f[R]
|
|
T}
|
|
T{
|
|
\f[C]csv\f[R]
|
|
T}@T{
|
|
comma-separated values (data interchange)
|
|
T}@T{
|
|
\f[C].csv\f[R]
|
|
T}
|
|
.TE
|
|
.PP
|
|
If needed (eg to ensure correct error messages when a file has the
|
|
\[dq]wrong\[dq] extension), you can force a specific reader/format by
|
|
prepending it to the file path with a colon.
|
|
Examples:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger -f csv:/some/csv-file.dat stats
|
|
$ echo \[aq]i 2009/13/1 08:00:00\[aq] | hledger print -ftimeclock:-
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
You can also specify multiple \f[C]-f\f[R] options, to read multiple
|
|
files as one big journal.
|
|
There are some limitations with this:
|
|
.IP \[bu] 2
|
|
directives in one file will not affect the other files
|
|
.IP \[bu] 2
|
|
balance assertions will not see any account balances from previous files
|
|
.PP
|
|
If you need those, either use the include directive, or concatenate the
|
|
files, eg: \f[C]cat a.journal b.journal | hledger -f- CMD\f[R].
|
|
.SS Smart dates
|
|
.PP
|
|
hledger\[aq]s user interfaces accept a flexible \[dq]smart date\[dq]
|
|
syntax (unlike dates in the journal file).
|
|
Smart dates allow some english words, can be relative to today\[aq]s
|
|
date, and can have less-significant date parts omitted (defaulting to
|
|
1).
|
|
.PP
|
|
Examples:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l l.
|
|
T{
|
|
\f[C]2004/10/1\f[R], \f[C]2004-01-01\f[R], \f[C]2004.9.1\f[R]
|
|
T}@T{
|
|
exact date, several separators allowed.
|
|
Year is 4+ digits, month is 1-12, day is 1-31
|
|
T}
|
|
T{
|
|
\f[C]2004\f[R]
|
|
T}@T{
|
|
start of year
|
|
T}
|
|
T{
|
|
\f[C]2004/10\f[R]
|
|
T}@T{
|
|
start of month
|
|
T}
|
|
T{
|
|
\f[C]10/1\f[R]
|
|
T}@T{
|
|
month and day in current year
|
|
T}
|
|
T{
|
|
\f[C]21\f[R]
|
|
T}@T{
|
|
day in current month
|
|
T}
|
|
T{
|
|
\f[C]october, oct\f[R]
|
|
T}@T{
|
|
start of month in current year
|
|
T}
|
|
T{
|
|
\f[C]yesterday, today, tomorrow\f[R]
|
|
T}@T{
|
|
-1, 0, 1 days from today
|
|
T}
|
|
T{
|
|
\f[C]last/this/next day/week/month/quarter/year\f[R]
|
|
T}@T{
|
|
-1, 0, 1 periods from the current period
|
|
T}
|
|
T{
|
|
\f[C]20181201\f[R]
|
|
T}@T{
|
|
8 digit YYYYMMDD with valid year month and day
|
|
T}
|
|
T{
|
|
\f[C]201812\f[R]
|
|
T}@T{
|
|
6 digit YYYYMM with valid year and month
|
|
T}
|
|
.TE
|
|
.PP
|
|
Counterexamples - malformed digit sequences might give surprising
|
|
results:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l l.
|
|
T{
|
|
\f[C]201813\f[R]
|
|
T}@T{
|
|
6 digits with an invalid month is parsed as start of 6-digit year
|
|
T}
|
|
T{
|
|
\f[C]20181301\f[R]
|
|
T}@T{
|
|
8 digits with an invalid month is parsed as start of 8-digit year
|
|
T}
|
|
T{
|
|
\f[C]20181232\f[R]
|
|
T}@T{
|
|
8 digits with an invalid day gives an error
|
|
T}
|
|
T{
|
|
\f[C]201801012\f[R]
|
|
T}@T{
|
|
9+ digits beginning with a valid YYYYMMDD gives an error
|
|
T}
|
|
.TE
|
|
.SS Report start & end date
|
|
.PP
|
|
Most hledger reports show the full span of time represented by the
|
|
journal data, by default.
|
|
So, the effective report start and end dates will be the earliest and
|
|
latest transaction or posting dates found in the journal.
|
|
.PP
|
|
Often you will want to see a shorter time span, such as the current
|
|
month.
|
|
You can specify a start and/or end date using \f[C]-b/--begin\f[R],
|
|
\f[C]-e/--end\f[R], \f[C]-p/--period\f[R] or a \f[C]date:\f[R] query
|
|
(described below).
|
|
All of these accept the smart date syntax.
|
|
.PP
|
|
Some notes:
|
|
.IP \[bu] 2
|
|
As in Ledger, end dates are exclusive, so you need to write the date
|
|
\f[I]after\f[R] the last day you want to include.
|
|
.IP \[bu] 2
|
|
As noted in reporting options: among start/end dates specified with
|
|
\f[I]options\f[R], the last (i.e.
|
|
right-most) option takes precedence.
|
|
.IP \[bu] 2
|
|
The effective report start and end dates are the intersection of the
|
|
start/end dates from options and that from \f[C]date:\f[R] queries.
|
|
That is, \f[C]date:2019-01 date:2019 -p\[aq]2000 to 2030\[aq]\f[R]
|
|
yields January 2019, the smallest common time span.
|
|
.PP
|
|
Examples:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l l.
|
|
T{
|
|
\f[C]-b 2016/3/17\f[R]
|
|
T}@T{
|
|
begin on St.
|
|
Patrick\[aq]s day 2016
|
|
T}
|
|
T{
|
|
\f[C]-e 12/1\f[R]
|
|
T}@T{
|
|
end at the start of december 1st of the current year (11/30 will be the
|
|
last date included)
|
|
T}
|
|
T{
|
|
\f[C]-b thismonth\f[R]
|
|
T}@T{
|
|
all transactions on or after the 1st of the current month
|
|
T}
|
|
T{
|
|
\f[C]-p thismonth\f[R]
|
|
T}@T{
|
|
all transactions in the current month
|
|
T}
|
|
T{
|
|
\f[C]date:2016/3/17-\f[R]
|
|
T}@T{
|
|
the above written as queries instead
|
|
T}
|
|
T{
|
|
\f[C]date:-12/1\f[R]
|
|
T}@T{
|
|
T}
|
|
T{
|
|
\f[C]date:thismonth-\f[R]
|
|
T}@T{
|
|
T}
|
|
T{
|
|
\f[C]date:thismonth\f[R]
|
|
T}@T{
|
|
T}
|
|
.TE
|
|
.SS Report intervals
|
|
.PP
|
|
A report interval can be specified so that commands like register,
|
|
balance and activity will divide their reports into multiple subperiods.
|
|
The basic intervals can be selected with one of \f[C]-D/--daily\f[R],
|
|
\f[C]-W/--weekly\f[R], \f[C]-M/--monthly\f[R], \f[C]-Q/--quarterly\f[R],
|
|
or \f[C]-Y/--yearly\f[R].
|
|
More complex intervals may be specified with a period expression.
|
|
Report intervals can not be specified with a query.
|
|
.SS Period expressions
|
|
.PP
|
|
The \f[C]-p/--period\f[R] option accepts period expressions, a shorthand
|
|
way of expressing a start date, end date, and/or report interval all at
|
|
once.
|
|
.PP
|
|
Here\[aq]s a basic period expression specifying the first quarter of
|
|
2009.
|
|
Note, hledger always treats start dates as inclusive and end dates as
|
|
exclusive:
|
|
.PP
|
|
\f[C]-p \[dq]from 2009/1/1 to 2009/4/1\[dq]\f[R]
|
|
.PP
|
|
Keywords like \[dq]from\[dq] and \[dq]to\[dq] are optional, and so are
|
|
the spaces, as long as you don\[aq]t run two dates together.
|
|
\[dq]to\[dq] can also be written as \[dq]-\[dq].
|
|
These are equivalent to the above:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l.
|
|
T{
|
|
\f[C]-p \[dq]2009/1/1 2009/4/1\[dq]\f[R]
|
|
T}
|
|
T{
|
|
\f[C]-p2009/1/1to2009/4/1\f[R]
|
|
T}
|
|
T{
|
|
\f[C]-p2009/1/1-2009/4/1\f[R]
|
|
T}
|
|
.TE
|
|
.PP
|
|
Dates are smart dates, so if the current year is 2009, the above can
|
|
also be written as:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l.
|
|
T{
|
|
\f[C]-p \[dq]1/1 4/1\[dq]\f[R]
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]january-apr\[dq]\f[R]
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]this year to 4/1\[dq]\f[R]
|
|
T}
|
|
.TE
|
|
.PP
|
|
If you specify only one date, the missing start or end date will be the
|
|
earliest or latest transaction in your journal:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l l.
|
|
T{
|
|
\f[C]-p \[dq]from 2009/1/1\[dq]\f[R]
|
|
T}@T{
|
|
everything after january 1, 2009
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]from 2009/1\[dq]\f[R]
|
|
T}@T{
|
|
the same
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]from 2009\[dq]\f[R]
|
|
T}@T{
|
|
the same
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]to 2009\[dq]\f[R]
|
|
T}@T{
|
|
everything before january 1, 2009
|
|
T}
|
|
.TE
|
|
.PP
|
|
A single date with no \[dq]from\[dq] or \[dq]to\[dq] defines both the
|
|
start and end date like so:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l l.
|
|
T{
|
|
\f[C]-p \[dq]2009\[dq]\f[R]
|
|
T}@T{
|
|
the year 2009; equivalent to \[dq]2009/1/1 to 2010/1/1\[dq]
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]2009/1\[dq]\f[R]
|
|
T}@T{
|
|
the month of jan; equivalent to \[dq]2009/1/1 to 2009/2/1\[dq]
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]2009/1/1\[dq]\f[R]
|
|
T}@T{
|
|
just that day; equivalent to \[dq]2009/1/1 to 2009/1/2\[dq]
|
|
T}
|
|
.TE
|
|
.PP
|
|
The argument of \f[C]-p\f[R] can also begin with, or be, a report
|
|
interval expression.
|
|
The basic report intervals are \f[C]daily\f[R], \f[C]weekly\f[R],
|
|
\f[C]monthly\f[R], \f[C]quarterly\f[R], or \f[C]yearly\f[R], which have
|
|
the same effect as the
|
|
\f[C]-D\f[R],\f[C]-W\f[R],\f[C]-M\f[R],\f[C]-Q\f[R], or \f[C]-Y\f[R]
|
|
flags.
|
|
Between report interval and start/end dates (if any), the word
|
|
\f[C]in\f[R] is optional.
|
|
Examples:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l.
|
|
T{
|
|
\f[C]-p \[dq]weekly from 2009/1/1 to 2009/4/1\[dq]\f[R]
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]monthly in 2008\[dq]\f[R]
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]quarterly\[dq]\f[R]
|
|
T}
|
|
.TE
|
|
.PP
|
|
Note that \f[C]weekly\f[R], \f[C]monthly\f[R], \f[C]quarterly\f[R] and
|
|
\f[C]yearly\f[R] intervals will always start on the first day on week,
|
|
month, quarter or year accordingly, and will end on the last day of same
|
|
period, even if associated period expression specifies different
|
|
explicit start and end date.
|
|
.PP
|
|
For example:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l.
|
|
T{
|
|
\f[C]-p \[dq]weekly from 2009/1/1 to 2009/4/1\[dq]\f[R] -- starts on
|
|
2008/12/29, closest preceeding Monday
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]monthly in 2008/11/25\[dq]\f[R] -- starts on 2018/11/01
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]quarterly from 2009-05-05 to 2009-06-01\[dq]\f[R] - starts
|
|
on 2009/04/01, ends on 2009/06/30, which are first and last days of Q2
|
|
2009
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]yearly from 2009-12-29\[dq]\f[R] - starts on 2009/01/01,
|
|
first day of 2009
|
|
T}
|
|
.TE
|
|
.PP
|
|
The following more complex report intervals are also supported:
|
|
\f[C]biweekly\f[R], \f[C]bimonthly\f[R],
|
|
\f[C]every day|week|month|quarter|year\f[R],
|
|
\f[C]every N days|weeks|months|quarters|years\f[R].
|
|
.PP
|
|
All of these will start on the first day of the requested period and end
|
|
on the last one, as described above.
|
|
.PP
|
|
Examples:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l.
|
|
T{
|
|
\f[C]-p \[dq]bimonthly from 2008\[dq]\f[R] -- periods will have
|
|
boundaries on 2008/01/01, 2008/03/01, ...
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]every 2 weeks\[dq]\f[R] -- starts on closest preceeding
|
|
Monday
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]every 5 month from 2009/03\[dq]\f[R] -- periods will have
|
|
boundaries on 2009/03/01, 2009/08/01, ...
|
|
T}
|
|
.TE
|
|
.PP
|
|
If you want intervals that start on arbitrary day of your choosing and
|
|
span a week, month or year, you need to use any of the following:
|
|
.PP
|
|
\f[C]every Nth day of week\f[R], \f[C]every <weekday>\f[R],
|
|
\f[C]every Nth day [of month]\f[R],
|
|
\f[C]every Nth weekday [of month]\f[R], \f[C]every MM/DD [of year]\f[R],
|
|
\f[C]every Nth MMM [of year]\f[R], \f[C]every MMM Nth [of year]\f[R].
|
|
.PP
|
|
Examples:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l.
|
|
T{
|
|
\f[C]-p \[dq]every 2nd day of week\[dq]\f[R] -- periods will go from Tue
|
|
to Tue
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]every Tue\[dq]\f[R] -- same
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]every 15th day\[dq]\f[R] -- period boundaries will be on
|
|
15th of each month
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]every 2nd Monday\[dq]\f[R] -- period boundaries will be on
|
|
second Monday of each month
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]every 11/05\[dq]\f[R] -- yearly periods with boundaries on
|
|
5th of Nov
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]every 5th Nov\[dq]\f[R] -- same
|
|
T}
|
|
T{
|
|
\f[C]-p \[dq]every Nov 5th\[dq]\f[R] -- same
|
|
T}
|
|
.TE
|
|
.PP
|
|
Show historical balances at end of 15th each month (N is exclusive end
|
|
date):
|
|
.PP
|
|
\f[C]hledger balance -H -p \[dq]every 16th day\[dq]\f[R]
|
|
.PP
|
|
Group postings from start of wednesday to end of next tuesday (N is
|
|
start date and exclusive end date):
|
|
.PP
|
|
\f[C]hledger register checking -p \[dq]every 3rd day of week\[dq]\f[R]
|
|
.SS Depth limiting
|
|
.PP
|
|
With the \f[C]--depth N\f[R] option (short form: \f[C]-N\f[R]), commands
|
|
like account, balance and register will show only the uppermost accounts
|
|
in the account tree, down to level N.
|
|
Use this when you want a summary with less detail.
|
|
This flag has the same effect as a \f[C]depth:\f[R] query argument (so
|
|
\f[C]-2\f[R], \f[C]--depth=2\f[R] or \f[C]depth:2\f[R] are basically
|
|
equivalent).
|
|
.SS Pivoting
|
|
.PP
|
|
Normally hledger sums amounts, and organizes them in a hierarchy, based
|
|
on account name.
|
|
The \f[C]--pivot FIELD\f[R] option causes it to sum and organize
|
|
hierarchy based on the value of some other field instead.
|
|
FIELD can be: \f[C]code\f[R], \f[C]description\f[R], \f[C]payee\f[R],
|
|
\f[C]note\f[R], or the full name (case insensitive) of any tag.
|
|
As with account names, values containing \f[C]colon:separated:parts\f[R]
|
|
will be displayed hierarchically in reports.
|
|
.PP
|
|
\f[C]--pivot\f[R] is a general option affecting all reports; you can
|
|
think of hledger transforming the journal before any other processing,
|
|
replacing every posting\[aq]s account name with the value of the
|
|
specified field on that posting, inheriting it from the transaction or
|
|
using a blank value if it\[aq]s not present.
|
|
.PP
|
|
An example:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
2016/02/16 Member Fee Payment
|
|
assets:bank account 2 EUR
|
|
income:member fees -2 EUR ; member: John Doe
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Normal balance report showing account names:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance
|
|
2 EUR assets:bank account
|
|
-2 EUR income:member fees
|
|
--------------------
|
|
0
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Pivoted balance report, using member: tag values instead:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance --pivot member
|
|
2 EUR
|
|
-2 EUR John Doe
|
|
--------------------
|
|
0
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
One way to show only amounts with a member: value (using a query,
|
|
described below):
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance --pivot member tag:member=.
|
|
-2 EUR John Doe
|
|
--------------------
|
|
-2 EUR
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Another way (the acct: query matches against the pivoted \[dq]account
|
|
name\[dq]):
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance --pivot member acct:.
|
|
-2 EUR John Doe
|
|
--------------------
|
|
-2 EUR
|
|
\f[R]
|
|
.fi
|
|
.SS Valuation
|
|
.SS -B: Cost
|
|
.PP
|
|
The \f[C]-B/--cost\f[R] flag converts amounts to their cost (or selling
|
|
price) at transaction time, if they have a transaction price specified.
|
|
This flag is equivalent to \f[C]--value=cost\f[R], described below.
|
|
.SS -V: Market value
|
|
.PP
|
|
The \f[C]-V/--market\f[R] flag converts reported amounts to their market
|
|
value in a default valuation commodity, using the market prices in
|
|
effect on a default valuation date.
|
|
For single period reports, the valuation date is today (equivalent to
|
|
\f[C]--value=now\f[R]); for multiperiod reports, it is the last day of
|
|
each subperiod (equivalent to \f[C]--value=end\f[R]).
|
|
.PP
|
|
The default valuation commodity is the one referenced in the latest
|
|
applicable market price dated on or before the valuation date.
|
|
If most of your P declarations lead to a single home currency, this will
|
|
usually be what you want.
|
|
(To specify the commodity, see -X below.)
|
|
.PP
|
|
Note that in hledger, market prices are always declared explicitly with
|
|
P directives; we do not infer them from transaction prices as Ledger
|
|
does.
|
|
.PP
|
|
Here\[aq]s a quick example of -V:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
; one euro is worth this many dollars from nov 1
|
|
P 2016/11/01 \[Eu] $1.10
|
|
|
|
; purchase some euros on nov 3
|
|
2016/11/3
|
|
assets:euros \[Eu]100
|
|
assets:checking
|
|
|
|
; the euro is worth fewer dollars by dec 21
|
|
P 2016/12/21 \[Eu] $1.03
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
How many euros do I have ?
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger -f t.j bal -N euros
|
|
\[Eu]100 assets:euros
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
What are they worth at end of nov 3 ?
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger -f t.j bal -N euros -V -e 2016/11/4
|
|
$110.00 assets:euros
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
What are they worth after 2016/12/21 ?
|
|
(no report end date specified, defaults to today)
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger -f t.j bal -N euros -V
|
|
$103.00 assets:euros
|
|
\f[R]
|
|
.fi
|
|
.SS -X: Market value in specified commodity
|
|
.PP
|
|
The \f[C]-X/--exchange\f[R] option is like \f[C]-V\f[R], except it
|
|
specifies the target commodity you would like to convert to.
|
|
It is equivalent to \f[C]--value=now,COMM\f[R] or
|
|
\f[C]--value=end,COMM\f[R].
|
|
.SS --value: Flexible valuation
|
|
.PP
|
|
\f[I](experimental, added 201905)\f[R]
|
|
.PP
|
|
\f[C]-B\f[R], \f[C]-V\f[R] and \f[C]-X\f[R] are special cases of the
|
|
more general \f[C]--value\f[R] option:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
--value=TYPE[,COMM] TYPE is cost, end, now or YYYY-MM-DD.
|
|
COMM is an optional commodity symbol.
|
|
Shows amounts converted to:
|
|
- cost commodity using transaction prices (then optionally to COMM using market prices at period end(s))
|
|
- default valuation commodity (or COMM) using market prices at period end(s)
|
|
- default valuation commodity (or COMM) using current market prices
|
|
- default valuation commodity (or COMM) using market prices at some date
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
The TYPE part basically selects either \[dq]cost\[dq], or \[dq]market
|
|
value\[dq] plus a valuation date:
|
|
.TP
|
|
.B \f[C]--value=cost\f[R]
|
|
Convert amounts to cost, using the prices recorded in transactions.
|
|
.TP
|
|
.B \f[C]--value=end\f[R]
|
|
Convert amounts to their value in a default valuation commodity, using
|
|
market prices on the last day of the report period (or if unspecified,
|
|
the journal\[aq]s end date); or in multiperiod reports, market prices on
|
|
the last day of each subperiod.
|
|
.TP
|
|
.B \f[C]--value=now\f[R]
|
|
Convert amounts to their value in default valuation commodity using
|
|
current market prices (as of when report is generated).
|
|
.TP
|
|
.B \f[C]--value=YYYY-MM-DD\f[R]
|
|
Convert amounts to their value in default valuation commodity using
|
|
market prices on this date.
|
|
.PP
|
|
The default valuation commodity is the commodity mentioned in the most
|
|
recent applicable market price declaration.
|
|
When all your price declarations lead to a single home currency, this
|
|
will usually do what you want.
|
|
.PP
|
|
To select a different valuation commodity, add the optional
|
|
\f[C],COMM\f[R] part: a comma, then the target commodity\[aq]s symbol.
|
|
Eg: \f[B]\f[CB]--value=now,EUR\f[B]\f[R].
|
|
hledger will do its best to convert amounts to this commodity, using:
|
|
.IP \[bu] 2
|
|
declared prices (from source commodity to valuation commodity)
|
|
.IP \[bu] 2
|
|
reverse prices (declared prices from valuation to source commodity,
|
|
inverted)
|
|
.IP \[bu] 2
|
|
indirect prices (prices calculated from the shortest chain of declared
|
|
or reverse prices from source to valuation commodity)
|
|
.PP
|
|
in that order.
|
|
.PP
|
|
Here are some examples showing the effect of \f[C]--value\f[R] as seen
|
|
with \f[C]print\f[R]:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
P 2000-01-01 A 1 B
|
|
P 2000-02-01 A 2 B
|
|
P 2000-03-01 A 3 B
|
|
P 2000-04-01 A 4 B
|
|
|
|
2000-01-01
|
|
(a) 1 A \[at] 5 B
|
|
|
|
2000-02-01
|
|
(a) 1 A \[at] 6 B
|
|
|
|
2000-03-01
|
|
(a) 1 A \[at] 7 B
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Show the cost of each posting:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger -f- print --value=cost
|
|
2000/01/01
|
|
(a) 5 B
|
|
|
|
2000/02/01
|
|
(a) 6 B
|
|
|
|
2000/03/01
|
|
(a) 7 B
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Show the value as of the last day of the report period (2000-02-29):
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger -f- print --value=end date:2000/01-2000/03
|
|
2000-01-01
|
|
(a) 2 B
|
|
|
|
2000-02-01
|
|
(a) 2 B
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
With no report period specified, that shows the value as of the last day
|
|
of the journal (2000-03-01):
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger -f- print --value=end
|
|
2000/01/01
|
|
(a) 3 B
|
|
|
|
2000/02/01
|
|
(a) 3 B
|
|
|
|
2000/03/01
|
|
(a) 3 B
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Show the current value (the 2000-04-01 price is still in effect today):
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger -f- print --value=now
|
|
2000-01-01
|
|
(a) 4 B
|
|
|
|
2000-02-01
|
|
(a) 4 B
|
|
|
|
2000-03-01
|
|
(a) 4 B
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Show the value on 2000/01/15:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger -f- print --value=2000-01-15
|
|
2000/01/01
|
|
(a) 1 B
|
|
|
|
2000/02/01
|
|
(a) 1 B
|
|
|
|
2000/03/01
|
|
(a) 1 B
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
You may need to explicitly set a commodity\[aq]s display style, when
|
|
reverse prices are used.
|
|
Eg this output might be surprising:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
P 2000-01-01 A 2B
|
|
|
|
2000-01-01
|
|
a 1B
|
|
b
|
|
\f[R]
|
|
.fi
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger print -x -X A
|
|
2000/01/01
|
|
a 0
|
|
b 0
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Explanation: because there\[aq]s no amount or commodity directive
|
|
specifying a display style for A, 0.5A gets the default style, which
|
|
shows no decimal digits.
|
|
Because the displayed amount looks like zero, the commodity symbol and
|
|
minus sign are not displayed either.
|
|
Adding a commodity directive sets a more useful display style for A:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
P 2000-01-01 A 2B
|
|
commodity 0.00A
|
|
|
|
2000-01-01
|
|
a 1B
|
|
b
|
|
\f[R]
|
|
.fi
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger print -X A
|
|
2000/01/01
|
|
a 0.50A
|
|
b -0.50A
|
|
\f[R]
|
|
.fi
|
|
.SS Effect of --value on reports
|
|
.PP
|
|
Here is a reference for how \f[C]--value\f[R] currently affects each
|
|
part of hledger\[aq]s reports.
|
|
It\[aq]s work in progress, but may be useful for troubleshooting or
|
|
reporting bugs.
|
|
See also the definitions and notes below.
|
|
If you find problems, please report them, ideally with a reproducible
|
|
example.
|
|
Related: #329, #1083.
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
lw(14.4n) lw(13.8n) lw(14.6n) lw(15.2n) lw(12.0n).
|
|
T{
|
|
Report type
|
|
T}@T{
|
|
\f[C]-B\f[R], \f[C]--value=cost\f[R]
|
|
T}@T{
|
|
\f[C]-V\f[R], \f[C]-X\f[R]
|
|
T}@T{
|
|
\f[C]--value=end\f[R]
|
|
T}@T{
|
|
\f[C]--value=DATE\f[R], \f[C]--value=now\f[R]
|
|
T}
|
|
_
|
|
T{
|
|
\f[B]print\f[R]
|
|
T}@T{
|
|
T}@T{
|
|
T}@T{
|
|
T}@T{
|
|
T}
|
|
T{
|
|
posting amounts
|
|
T}@T{
|
|
cost
|
|
T}@T{
|
|
value at report end or today
|
|
T}@T{
|
|
value at report or journal end
|
|
T}@T{
|
|
value at DATE/today
|
|
T}
|
|
T{
|
|
balance assertions / assignments
|
|
T}@T{
|
|
unchanged
|
|
T}@T{
|
|
unchanged
|
|
T}@T{
|
|
unchanged
|
|
T}@T{
|
|
unchanged
|
|
T}
|
|
T{
|
|
T}@T{
|
|
T}@T{
|
|
T}@T{
|
|
T}@T{
|
|
T}
|
|
T{
|
|
\f[B]register\f[R]
|
|
T}@T{
|
|
T}@T{
|
|
T}@T{
|
|
T}@T{
|
|
T}
|
|
T{
|
|
starting balance (with -H)
|
|
T}@T{
|
|
cost
|
|
T}@T{
|
|
value at day before report or journal start
|
|
T}@T{
|
|
value at day before report or journal start
|
|
T}@T{
|
|
value at DATE/today
|
|
T}
|
|
T{
|
|
posting amounts (no report interval)
|
|
T}@T{
|
|
cost
|
|
T}@T{
|
|
value at report end or today
|
|
T}@T{
|
|
value at report or journal end
|
|
T}@T{
|
|
value at DATE/today
|
|
T}
|
|
T{
|
|
summary posting amounts (with report interval)
|
|
T}@T{
|
|
summarised cost
|
|
T}@T{
|
|
value at period ends
|
|
T}@T{
|
|
value at period ends
|
|
T}@T{
|
|
value at DATE/today
|
|
T}
|
|
T{
|
|
running total/average
|
|
T}@T{
|
|
sum/average of displayed values
|
|
T}@T{
|
|
sum/average of displayed values
|
|
T}@T{
|
|
sum/average of displayed values
|
|
T}@T{
|
|
sum/average of displayed values
|
|
T}
|
|
T{
|
|
T}@T{
|
|
T}@T{
|
|
T}@T{
|
|
T}@T{
|
|
T}
|
|
T{
|
|
\f[B]balance (bs, bse, cf, is..)\f[R]
|
|
T}@T{
|
|
T}@T{
|
|
T}@T{
|
|
T}@T{
|
|
T}
|
|
T{
|
|
balances (no report interval)
|
|
T}@T{
|
|
sums of costs
|
|
T}@T{
|
|
value at report end or today of sums of postings
|
|
T}@T{
|
|
value at report or journal end of sums of postings
|
|
T}@T{
|
|
value at DATE/today of sums of postings
|
|
T}
|
|
T{
|
|
balances (with report interval)
|
|
T}@T{
|
|
sums of costs
|
|
T}@T{
|
|
value at period ends of sums of postings
|
|
T}@T{
|
|
value at period ends of sums of postings
|
|
T}@T{
|
|
value at DATE/today of sums of postings
|
|
T}
|
|
T{
|
|
starting balances (with report interval and -H)
|
|
T}@T{
|
|
sums of costs of postings before report start
|
|
T}@T{
|
|
sums of postings before report start
|
|
T}@T{
|
|
sums of postings before report start
|
|
T}@T{
|
|
sums of postings before report start
|
|
T}
|
|
T{
|
|
budget amounts with --budget
|
|
T}@T{
|
|
like balances
|
|
T}@T{
|
|
like balances
|
|
T}@T{
|
|
like balances
|
|
T}@T{
|
|
like balances
|
|
T}
|
|
T{
|
|
grand total (no report interval)
|
|
T}@T{
|
|
sum of displayed values
|
|
T}@T{
|
|
sum of displayed values
|
|
T}@T{
|
|
sum of displayed values
|
|
T}@T{
|
|
sum of displayed values
|
|
T}
|
|
T{
|
|
row totals/averages (with report interval)
|
|
T}@T{
|
|
sums/averages of displayed values
|
|
T}@T{
|
|
sums/averages of displayed values
|
|
T}@T{
|
|
sums/averages of displayed values
|
|
T}@T{
|
|
sums/averages of displayed values
|
|
T}
|
|
T{
|
|
column totals
|
|
T}@T{
|
|
sums of displayed values
|
|
T}@T{
|
|
sums of displayed values
|
|
T}@T{
|
|
sums of displayed values
|
|
T}@T{
|
|
sums of displayed values
|
|
T}
|
|
T{
|
|
grand total/average
|
|
T}@T{
|
|
sum/average of column totals
|
|
T}@T{
|
|
sum/average of column totals
|
|
T}@T{
|
|
sum/average of column totals
|
|
T}@T{
|
|
sum/average of column totals
|
|
T}
|
|
T{
|
|
T}@T{
|
|
T}@T{
|
|
T}@T{
|
|
T}@T{
|
|
T}
|
|
.TE
|
|
.PP
|
|
\f[B]Additional notes\f[R]
|
|
.TP
|
|
.B \f[I]cost\f[R]
|
|
calculated using price(s) recorded in the transaction(s).
|
|
.TP
|
|
.B \f[I]value\f[R]
|
|
market value using available market price declarations, or the unchanged
|
|
amount if no conversion rate can be found.
|
|
.TP
|
|
.B \f[I]report start\f[R]
|
|
the first day of the report period specified with -b or -p or date:,
|
|
otherwise today.
|
|
.TP
|
|
.B \f[I]report or journal start\f[R]
|
|
the first day of the report period specified with -b or -p or date:,
|
|
otherwise the earliest transaction date in the journal, otherwise today.
|
|
.TP
|
|
.B \f[I]report end\f[R]
|
|
the last day of the report period specified with -e or -p or date:,
|
|
otherwise today.
|
|
.TP
|
|
.B \f[I]report or journal end\f[R]
|
|
the last day of the report period specified with -e or -p or date:,
|
|
otherwise the latest transaction date in the journal, otherwise today.
|
|
.TP
|
|
.B \f[I]report interval\f[R]
|
|
a flag (-D/-W/-M/-Q/-Y) or period expression that activates the
|
|
report\[aq]s multi-period mode (whether showing one or many subperiods).
|
|
.SS Combining -B, -V, -X, --value
|
|
.PP
|
|
The rightmost of these flags wins.
|
|
.SS Output destination
|
|
.PP
|
|
Some commands (print, register, stats, the balance commands) can write
|
|
their output to a destination other than the console.
|
|
This is controlled by the \f[C]-o/--output-file\f[R] option.
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance -o - # write to stdout (the default)
|
|
$ hledger balance -o FILE # write to FILE
|
|
\f[R]
|
|
.fi
|
|
.SS Output format
|
|
.PP
|
|
Some commands can write their output in other formats.
|
|
Eg print and register can output CSV, and the balance commands can
|
|
output CSV or HTML.
|
|
This is controlled by the \f[C]-O/--output-format\f[R] option, or by
|
|
specifying a \f[C].csv\f[R] or \f[C].html\f[R] file extension with
|
|
\f[C]-o/--output-file\f[R].
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance -O csv # write CSV to stdout
|
|
$ hledger balance -o FILE.csv # write CSV to FILE.csv
|
|
\f[R]
|
|
.fi
|
|
.SS Regular expressions
|
|
.PP
|
|
hledger uses regular expressions in a number of places:
|
|
.IP \[bu] 2
|
|
query terms, on the command line and in the hledger-web search form:
|
|
\f[C]REGEX\f[R], \f[C]desc:REGEX\f[R], \f[C]cur:REGEX\f[R],
|
|
\f[C]tag:...=REGEX\f[R]
|
|
.IP \[bu] 2
|
|
CSV rules conditional blocks: \f[C]if REGEX ...\f[R]
|
|
.IP \[bu] 2
|
|
account alias directives and options:
|
|
\f[C]alias /REGEX/ = REPLACEMENT\f[R],
|
|
\f[C]--alias /REGEX/=REPLACEMENT\f[R]
|
|
.PP
|
|
hledger\[aq]s regular expressions come from the regex-tdfa library.
|
|
In general they:
|
|
.IP \[bu] 2
|
|
are case insensitive
|
|
.IP \[bu] 2
|
|
are infix matching (do not need to match the entire thing being matched)
|
|
.IP \[bu] 2
|
|
are POSIX extended regular expressions
|
|
.IP \[bu] 2
|
|
also support GNU word boundaries (\[rs]<, \[rs]>, \[rs]b, \[rs]B)
|
|
.IP \[bu] 2
|
|
and parenthesised capturing groups and numeric backreferences in
|
|
replacement strings
|
|
.IP \[bu] 2
|
|
do not support mode modifiers like (?s)
|
|
.PP
|
|
Some things to note:
|
|
.IP \[bu] 2
|
|
In the \f[C]alias\f[R] directive and \f[C]--alias\f[R] option, regular
|
|
expressions must be enclosed in forward slashes (\f[C]/REGEX/\f[R]).
|
|
Elsewhere in hledger, these are not required.
|
|
.IP \[bu] 2
|
|
In queries, to match a regular expression metacharacter like \f[C]$\f[R]
|
|
as a literal character, prepend a backslash.
|
|
Eg to search for amounts with the dollar sign in hledger-web, write
|
|
\f[C]cur:\[rs]$\f[R].
|
|
.IP \[bu] 2
|
|
On the command line, some metacharacters like \f[C]$\f[R] have a special
|
|
meaning to the shell and so must be escaped at least once more.
|
|
See Special characters.
|
|
.SH QUERIES
|
|
.PP
|
|
One of hledger\[aq]s strengths is being able to quickly report on
|
|
precise subsets of your data.
|
|
Most commands accept an optional query expression, written as arguments
|
|
after the command name, to filter the data by date, account name or
|
|
other criteria.
|
|
The syntax is similar to a web search: one or more space-separated
|
|
search terms, quotes to enclose whitespace, prefixes to match specific
|
|
fields, a not: prefix to negate the match.
|
|
.PP
|
|
We do not yet support arbitrary boolean combinations of search terms;
|
|
instead most commands show transactions/postings/accounts which match
|
|
(or negatively match):
|
|
.IP \[bu] 2
|
|
any of the description terms AND
|
|
.IP \[bu] 2
|
|
any of the account terms AND
|
|
.IP \[bu] 2
|
|
any of the status terms AND
|
|
.IP \[bu] 2
|
|
all the other terms.
|
|
.PP
|
|
The print command instead shows transactions which:
|
|
.IP \[bu] 2
|
|
match any of the description terms AND
|
|
.IP \[bu] 2
|
|
have any postings matching any of the positive account terms AND
|
|
.IP \[bu] 2
|
|
have no postings matching any of the negative account terms AND
|
|
.IP \[bu] 2
|
|
match all the other terms.
|
|
.PP
|
|
The following kinds of search terms can be used.
|
|
Remember these can also be prefixed with \f[B]\f[CB]not:\f[B]\f[R], eg
|
|
to exclude a particular subaccount.
|
|
.TP
|
|
.B \f[B]\f[CB]REGEX\f[B], \f[CB]acct:REGEX\f[B]\f[R]
|
|
match account names by this regular expression.
|
|
(With no prefix, \f[C]acct:\f[R] is assumed.)
|
|
same as above
|
|
.TP
|
|
.B \f[B]\f[CB]amt:N, amt:<N, amt:<=N, amt:>N, amt:>=N\f[B]\f[R]
|
|
match postings with a single-commodity amount that is equal to, less
|
|
than, or greater than N.
|
|
(Multi-commodity amounts are not tested, and will always match.) The
|
|
comparison has two modes: if N is preceded by a + or - sign (or is 0),
|
|
the two signed numbers are compared.
|
|
Otherwise, the absolute magnitudes are compared, ignoring sign.
|
|
.TP
|
|
.B \f[B]\f[CB]code:REGEX\f[B]\f[R]
|
|
match by transaction code (eg check number)
|
|
.TP
|
|
.B \f[B]\f[CB]cur:REGEX\f[B]\f[R]
|
|
match postings or transactions including any amounts whose
|
|
currency/commodity symbol is fully matched by REGEX.
|
|
(For a partial match, use \f[C].*REGEX.*\f[R]).
|
|
Note, to match characters which are regex-significant, like the dollar
|
|
sign (\f[C]$\f[R]), you need to prepend \f[C]\[rs]\f[R].
|
|
And when using the command line you need to add one more level of
|
|
quoting to hide it from the shell, so eg do:
|
|
\f[C]hledger print cur:\[aq]\[rs]$\[aq]\f[R] or
|
|
\f[C]hledger print cur:\[rs]\[rs]$\f[R].
|
|
.TP
|
|
.B \f[B]\f[CB]desc:REGEX\f[B]\f[R]
|
|
match transaction descriptions.
|
|
.TP
|
|
.B \f[B]\f[CB]date:PERIODEXPR\f[B]\f[R]
|
|
match dates within the specified period.
|
|
PERIODEXPR is a period expression (with no report interval).
|
|
Examples: \f[C]date:2016\f[R], \f[C]date:thismonth\f[R],
|
|
\f[C]date:2000/2/1-2/15\f[R], \f[C]date:lastweek-\f[R].
|
|
If the \f[C]--date2\f[R] command line flag is present, this matches
|
|
secondary dates instead.
|
|
.TP
|
|
.B \f[B]\f[CB]date2:PERIODEXPR\f[B]\f[R]
|
|
match secondary dates within the specified period.
|
|
.TP
|
|
.B \f[B]\f[CB]depth:N\f[B]\f[R]
|
|
match (or display, depending on command) accounts at or above this depth
|
|
.TP
|
|
.B \f[B]\f[CB]note:REGEX\f[B]\f[R]
|
|
match transaction notes (part of description right of \f[C]|\f[R], or
|
|
whole description when there\[aq]s no \f[C]|\f[R])
|
|
.TP
|
|
.B \f[B]\f[CB]payee:REGEX\f[B]\f[R]
|
|
match transaction payee/payer names (part of description left of
|
|
\f[C]|\f[R], or whole description when there\[aq]s no \f[C]|\f[R])
|
|
.TP
|
|
.B \f[B]\f[CB]real:, real:0\f[B]\f[R]
|
|
match real or virtual postings respectively
|
|
.TP
|
|
.B \f[B]\f[CB]status:, status:!, status:*\f[B]\f[R]
|
|
match unmarked, pending, or cleared transactions respectively
|
|
.TP
|
|
.B \f[B]\f[CB]tag:REGEX[=REGEX]\f[B]\f[R]
|
|
match by tag name, and optionally also by tag value.
|
|
Note a tag: query is considered to match a transaction if it matches any
|
|
of the postings.
|
|
Also remember that postings inherit the tags of their parent
|
|
transaction.
|
|
.PP
|
|
The following special search term is used automatically in hledger-web,
|
|
only:
|
|
.TP
|
|
.B \f[B]\f[CB]inacct:ACCTNAME\f[B]\f[R]
|
|
tells hledger-web to show the transaction register for this account.
|
|
Can be filtered further with \f[C]acct\f[R] etc.
|
|
.PP
|
|
Some of these can also be expressed as command-line options (eg
|
|
\f[C]depth:2\f[R] is equivalent to \f[C]--depth 2\f[R]).
|
|
Generally you can mix options and query arguments, and the resulting
|
|
query will be their intersection (perhaps excluding the
|
|
\f[C]-p/--period\f[R] option).
|
|
.SH COMMANDS
|
|
.PP
|
|
hledger provides a number of subcommands; \f[C]hledger\f[R] with no
|
|
arguments shows a list.
|
|
.PP
|
|
If you install additional \f[C]hledger-*\f[R] packages, or if you put
|
|
programs or scripts named \f[C]hledger-NAME\f[R] in your PATH, these
|
|
will also be listed as subcommands.
|
|
.PP
|
|
Run a subcommand by writing its name as first argument (eg
|
|
\f[C]hledger incomestatement\f[R]).
|
|
You can also write one of the standard short aliases displayed in
|
|
parentheses in the command list (\f[C]hledger b\f[R]), or any any
|
|
unambiguous prefix of a command name (\f[C]hledger inc\f[R]).
|
|
.PP
|
|
Here are all the builtin commands in alphabetical order.
|
|
See also \f[C]hledger\f[R] for a more organised command list, and
|
|
\f[C]hledger CMD -h\f[R] for detailed command help.
|
|
.SS accounts
|
|
.PP
|
|
accounts, a
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Show account names.
|
|
.PP
|
|
This command lists account names, either declared with account
|
|
directives (--declared), posted to (--used), or both (the default).
|
|
With query arguments, only matched account names and account names
|
|
referenced by matched postings are shown.
|
|
It shows a flat list by default.
|
|
With \f[C]--tree\f[R], it uses indentation to show the account
|
|
hierarchy.
|
|
In flat mode you can add \f[C]--drop N\f[R] to omit the first few
|
|
account name components.
|
|
Account names can be depth-clipped with \f[C]depth:N\f[R] or
|
|
\f[C]--depth N\f[R] or \f[C]-N\f[R].
|
|
.PP
|
|
Examples:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger accounts
|
|
assets:bank:checking
|
|
assets:bank:saving
|
|
assets:cash
|
|
expenses:food
|
|
expenses:supplies
|
|
income:gifts
|
|
income:salary
|
|
liabilities:debts
|
|
\f[R]
|
|
.fi
|
|
.SS activity
|
|
.PP
|
|
activity
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Show an ascii barchart of posting counts per interval.
|
|
.PP
|
|
The activity command displays an ascii histogram showing transaction
|
|
counts by day, week, month or other reporting interval (by day is the
|
|
default).
|
|
With query arguments, it counts only matched transactions.
|
|
.PP
|
|
Examples:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger activity --quarterly
|
|
2008-01-01 **
|
|
2008-04-01 *******
|
|
2008-07-01
|
|
2008-10-01 **
|
|
\f[R]
|
|
.fi
|
|
.SS add
|
|
.PP
|
|
add
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Prompt for transactions and add them to the journal.
|
|
.PP
|
|
Many hledger users edit their journals directly with a text editor, or
|
|
generate them from CSV.
|
|
For more interactive data entry, there is the \f[C]add\f[R] command,
|
|
which prompts interactively on the console for new transactions, and
|
|
appends them to the journal file (if there are multiple
|
|
\f[C]-f FILE\f[R] options, the first file is used.) Existing
|
|
transactions are not changed.
|
|
This is the only hledger command that writes to the journal file.
|
|
.PP
|
|
To use it, just run \f[C]hledger add\f[R] and follow the prompts.
|
|
You can add as many transactions as you like; when you are finished,
|
|
enter \f[C].\f[R] or press control-d or control-c to exit.
|
|
.PP
|
|
Features:
|
|
.IP \[bu] 2
|
|
add tries to provide useful defaults, using the most similar (by
|
|
description) recent transaction (filtered by the query, if any) as a
|
|
template.
|
|
.IP \[bu] 2
|
|
You can also set the initial defaults with command line arguments.
|
|
.IP \[bu] 2
|
|
Readline-style edit keys can be used during data entry.
|
|
.IP \[bu] 2
|
|
The tab key will auto-complete whenever possible - accounts,
|
|
descriptions, dates (\f[C]yesterday\f[R], \f[C]today\f[R],
|
|
\f[C]tomorrow\f[R]).
|
|
If the input area is empty, it will insert the default value.
|
|
.IP \[bu] 2
|
|
If the journal defines a default commodity, it will be added to any bare
|
|
numbers entered.
|
|
.IP \[bu] 2
|
|
A parenthesised transaction code may be entered following a date.
|
|
.IP \[bu] 2
|
|
Comments and tags may be entered following a description or amount.
|
|
.IP \[bu] 2
|
|
If you make a mistake, enter \f[C]<\f[R] at any prompt to restart the
|
|
transaction.
|
|
.IP \[bu] 2
|
|
Input prompts are displayed in a different colour when the terminal
|
|
supports it.
|
|
.PP
|
|
Example (see the tutorial for a detailed explanation):
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger add
|
|
Adding transactions to journal file /src/hledger/examples/sample.journal
|
|
Any command line arguments will be used as defaults.
|
|
Use tab key to complete, readline keys to edit, enter to accept defaults.
|
|
An optional (CODE) may follow transaction dates.
|
|
An optional ; COMMENT may follow descriptions or amounts.
|
|
If you make a mistake, enter < at any prompt to restart the transaction.
|
|
To end a transaction, enter . when prompted.
|
|
To quit, enter . at a date prompt or press control-d or control-c.
|
|
Date [2015/05/22]:
|
|
Description: supermarket
|
|
Account 1: expenses:food
|
|
Amount 1: $10
|
|
Account 2: assets:checking
|
|
Amount 2 [$-10.0]:
|
|
Account 3 (or . or enter to finish this transaction): .
|
|
2015/05/22 supermarket
|
|
expenses:food $10
|
|
assets:checking $-10.0
|
|
|
|
Save this transaction to the journal ? [y]:
|
|
Saved.
|
|
Starting the next transaction (. or ctrl-D/ctrl-C to quit)
|
|
Date [2015/05/22]: <CTRL-D> $
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
On Microsoft Windows, the add command makes sure that no part of the
|
|
file path ends with a period, as it can cause data loss on that platform
|
|
(cf #1056).
|
|
.SS balance
|
|
.PP
|
|
balance, bal, b
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Show accounts and their balances.
|
|
.PP
|
|
The balance command is hledger\[aq]s most versatile command.
|
|
Note, despite the name, it is not always used for showing real-world
|
|
account balances; the more accounting-aware balancesheet and
|
|
incomestatement may be more convenient for that.
|
|
.PP
|
|
By default, it displays all accounts, and each account\[aq]s change in
|
|
balance during the entire period of the journal.
|
|
Balance changes are calculated by adding up the postings in each
|
|
account.
|
|
You can limit the postings matched, by a query, to see fewer accounts,
|
|
changes over a different time period, changes from only cleared
|
|
transactions, etc.
|
|
.PP
|
|
If you include an account\[aq]s complete history of postings in the
|
|
report, the balance change is equivalent to the account\[aq]s current
|
|
ending balance.
|
|
For a real-world account, typically you won\[aq]t have all transactions
|
|
in the journal; instead you\[aq]ll have all transactions after a certain
|
|
date, and an \[dq]opening balances\[dq] transaction setting the correct
|
|
starting balance on that date.
|
|
Then the balance command will show real-world account balances.
|
|
In some cases the -H/--historical flag is used to ensure this (more
|
|
below).
|
|
.PP
|
|
The balance command can produce several styles of report:
|
|
.SS Classic balance report
|
|
.PP
|
|
This is the original balance report, as found in Ledger.
|
|
It usually looks like this:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance
|
|
$-1 assets
|
|
$1 bank:saving
|
|
$-2 cash
|
|
$2 expenses
|
|
$1 food
|
|
$1 supplies
|
|
$-2 income
|
|
$-1 gifts
|
|
$-1 salary
|
|
$1 liabilities:debts
|
|
--------------------
|
|
0
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
By default, accounts are displayed hierarchically, with subaccounts
|
|
indented below their parent.
|
|
At each level of the tree, accounts are sorted by account code if any,
|
|
then by account name.
|
|
Or with \f[C]-S/--sort-amount\f[R], by their balance amount.
|
|
.PP
|
|
\[dq]Boring\[dq] accounts, which contain a single interesting subaccount
|
|
and no balance of their own, are elided into the following line for more
|
|
compact output.
|
|
(Eg above, the \[dq]liabilities\[dq] account.) Use \f[C]--no-elide\f[R]
|
|
to prevent this.
|
|
.PP
|
|
Account balances are \[dq]inclusive\[dq] - they include the balances of
|
|
any subaccounts.
|
|
.PP
|
|
Accounts which have zero balance (and no non-zero subaccounts) are
|
|
omitted.
|
|
Use \f[C]-E/--empty\f[R] to show them.
|
|
.PP
|
|
A final total is displayed by default; use \f[C]-N/--no-total\f[R] to
|
|
suppress it, eg:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance -p 2008/6 expenses --no-total
|
|
$2 expenses
|
|
$1 food
|
|
$1 supplies
|
|
\f[R]
|
|
.fi
|
|
.SS Customising the classic balance report
|
|
.PP
|
|
You can customise the layout of classic balance reports with
|
|
\f[C]--format FMT\f[R]:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance --format \[dq]%20(account) %12(total)\[dq]
|
|
assets $-1
|
|
bank:saving $1
|
|
cash $-2
|
|
expenses $2
|
|
food $1
|
|
supplies $1
|
|
income $-2
|
|
gifts $-1
|
|
salary $-1
|
|
liabilities:debts $1
|
|
---------------------------------
|
|
0
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
The FMT format string (plus a newline) specifies the formatting applied
|
|
to each account/balance pair.
|
|
It may contain any suitable text, with data fields interpolated like so:
|
|
.PP
|
|
\f[C]%[MIN][.MAX](FIELDNAME)\f[R]
|
|
.IP \[bu] 2
|
|
MIN pads with spaces to at least this width (optional)
|
|
.IP \[bu] 2
|
|
MAX truncates at this width (optional)
|
|
.IP \[bu] 2
|
|
FIELDNAME must be enclosed in parentheses, and can be one of:
|
|
.RS 2
|
|
.IP \[bu] 2
|
|
\f[C]depth_spacer\f[R] - a number of spaces equal to the account\[aq]s
|
|
depth, or if MIN is specified, MIN * depth spaces.
|
|
.IP \[bu] 2
|
|
\f[C]account\f[R] - the account\[aq]s name
|
|
.IP \[bu] 2
|
|
\f[C]total\f[R] - the account\[aq]s balance/posted total, right
|
|
justified
|
|
.RE
|
|
.PP
|
|
Also, FMT can begin with an optional prefix to control how
|
|
multi-commodity amounts are rendered:
|
|
.IP \[bu] 2
|
|
\f[C]%_\f[R] - render on multiple lines, bottom-aligned (the default)
|
|
.IP \[bu] 2
|
|
\f[C]%\[ha]\f[R] - render on multiple lines, top-aligned
|
|
.IP \[bu] 2
|
|
\f[C]%,\f[R] - render on one line, comma-separated
|
|
.PP
|
|
There are some quirks.
|
|
Eg in one-line mode, \f[C]%(depth_spacer)\f[R] has no effect, instead
|
|
\f[C]%(account)\f[R] has indentation built in.
|
|
Experimentation may be needed to get pleasing results.
|
|
.PP
|
|
Some example formats:
|
|
.IP \[bu] 2
|
|
\f[C]%(total)\f[R] - the account\[aq]s total
|
|
.IP \[bu] 2
|
|
\f[C]%-20.20(account)\f[R] - the account\[aq]s name, left justified,
|
|
padded to 20 characters and clipped at 20 characters
|
|
.IP \[bu] 2
|
|
\f[C]%,%-50(account) %25(total)\f[R] - account name padded to 50
|
|
characters, total padded to 20 characters, with multiple commodities
|
|
rendered on one line
|
|
.IP \[bu] 2
|
|
\f[C]%20(total) %2(depth_spacer)%-(account)\f[R] - the default format
|
|
for the single-column balance report
|
|
.SS Colour support
|
|
.PP
|
|
The balance command shows negative amounts in red, if:
|
|
.IP \[bu] 2
|
|
the \f[C]TERM\f[R] environment variable is not set to \f[C]dumb\f[R]
|
|
.IP \[bu] 2
|
|
the output is not being redirected or piped anywhere
|
|
.SS Flat mode
|
|
.PP
|
|
To see a flat list instead of the default hierarchical display, use
|
|
\f[C]--flat\f[R].
|
|
In this mode, accounts (unless depth-clipped) show their full names and
|
|
\[dq]exclusive\[dq] balance, excluding any subaccount balances.
|
|
In this mode, you can also use \f[C]--drop N\f[R] to omit the first few
|
|
account name components.
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance -p 2008/6 expenses -N --flat --drop 1
|
|
$1 food
|
|
$1 supplies
|
|
\f[R]
|
|
.fi
|
|
.SS Depth limited balance reports
|
|
.PP
|
|
With \f[C]--depth N\f[R] or \f[C]depth:N\f[R] or just \f[C]-N\f[R],
|
|
balance reports show accounts only to the specified numeric depth.
|
|
This is very useful to summarise a complex set of accounts and get an
|
|
overview.
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance -N -1
|
|
$-1 assets
|
|
$2 expenses
|
|
$-2 income
|
|
$1 liabilities
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Flat-mode balance reports, which normally show exclusive balances, show
|
|
inclusive balances at the depth limit.
|
|
.SS Multicolumn balance report
|
|
.PP
|
|
Multicolumn or tabular balance reports are a very useful hledger
|
|
feature, and usually the preferred style.
|
|
They share many of the above features, but they show the report as a
|
|
table, with columns representing time periods.
|
|
This mode is activated by providing a reporting interval.
|
|
.PP
|
|
There are three types of multicolumn balance report, showing different
|
|
information:
|
|
.IP "1." 3
|
|
By default: each column shows the sum of postings in that period, ie the
|
|
account\[aq]s change of balance in that period.
|
|
This is useful eg for a monthly income statement:
|
|
.RS 4
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance --quarterly income expenses -E
|
|
Balance changes in 2008:
|
|
|
|
|| 2008q1 2008q2 2008q3 2008q4
|
|
===================++=================================
|
|
expenses:food || 0 $1 0 0
|
|
expenses:supplies || 0 $1 0 0
|
|
income:gifts || 0 $-1 0 0
|
|
income:salary || $-1 0 0 0
|
|
-------------------++---------------------------------
|
|
|| $-1 $1 0 0
|
|
\f[R]
|
|
.fi
|
|
.RE
|
|
.IP "2." 3
|
|
With \f[C]--cumulative\f[R]: each column shows the ending balance for
|
|
that period, accumulating the changes across periods, starting from 0 at
|
|
the report start date:
|
|
.RS 4
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance --quarterly income expenses -E --cumulative
|
|
Ending balances (cumulative) in 2008:
|
|
|
|
|| 2008/03/31 2008/06/30 2008/09/30 2008/12/31
|
|
===================++=================================================
|
|
expenses:food || 0 $1 $1 $1
|
|
expenses:supplies || 0 $1 $1 $1
|
|
income:gifts || 0 $-1 $-1 $-1
|
|
income:salary || $-1 $-1 $-1 $-1
|
|
-------------------++-------------------------------------------------
|
|
|| $-1 0 0 0
|
|
\f[R]
|
|
.fi
|
|
.RE
|
|
.IP "3." 3
|
|
With \f[C]--historical/-H\f[R]: each column shows the actual historical
|
|
ending balance for that period, accumulating the changes across periods,
|
|
starting from the actual balance at the report start date.
|
|
This is useful eg for a multi-period balance sheet, and when you are
|
|
showing only the data after a certain start date:
|
|
.RS 4
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance \[ha]assets \[ha]liabilities --quarterly --historical --begin 2008/4/1
|
|
Ending balances (historical) in 2008/04/01-2008/12/31:
|
|
|
|
|| 2008/06/30 2008/09/30 2008/12/31
|
|
======================++=====================================
|
|
assets:bank:checking || $1 $1 0
|
|
assets:bank:saving || $1 $1 $1
|
|
assets:cash || $-2 $-2 $-2
|
|
liabilities:debts || 0 0 $1
|
|
----------------------++-------------------------------------
|
|
|| 0 0 0
|
|
\f[R]
|
|
.fi
|
|
.RE
|
|
.PP
|
|
Note that \f[C]--cumulative\f[R] or \f[C]--historical/-H\f[R] disable
|
|
\f[C]--row-total/-T\f[R], since summing end balances generally does not
|
|
make sense.
|
|
.PP
|
|
Multicolumn balance reports display accounts in flat mode by default; to
|
|
see the hierarchy, use \f[C]--tree\f[R].
|
|
.PP
|
|
With a reporting interval (like \f[C]--quarterly\f[R] above), the report
|
|
start/end dates will be adjusted if necessary so that they encompass the
|
|
displayed report periods.
|
|
This is so that the first and last periods will be \[dq]full\[dq] and
|
|
comparable to the others.
|
|
.PP
|
|
The \f[C]-E/--empty\f[R] flag does two things in multicolumn balance
|
|
reports: first, the report will show all columns within the specified
|
|
report period (without -E, leading and trailing columns with all zeroes
|
|
are not shown).
|
|
Second, all accounts which existed at the report start date will be
|
|
considered, not just the ones with activity during the report period
|
|
(use -E to include low-activity accounts which would otherwise would be
|
|
omitted).
|
|
.PP
|
|
The \f[C]-T/--row-total\f[R] flag adds an additional column showing the
|
|
total for each row.
|
|
.PP
|
|
The \f[C]-A/--average\f[R] flag adds a column showing the average value
|
|
in each row.
|
|
.PP
|
|
Here\[aq]s an example of all three:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance -Q income expenses --tree -ETA
|
|
Balance changes in 2008:
|
|
|
|
|| 2008q1 2008q2 2008q3 2008q4 Total Average
|
|
============++===================================================
|
|
expenses || 0 $2 0 0 $2 $1
|
|
food || 0 $1 0 0 $1 0
|
|
supplies || 0 $1 0 0 $1 0
|
|
income || $-1 $-1 0 0 $-2 $-1
|
|
gifts || 0 $-1 0 0 $-1 0
|
|
salary || $-1 0 0 0 $-1 0
|
|
------------++---------------------------------------------------
|
|
|| $-1 $1 0 0 0 0
|
|
|
|
# Average is rounded to the dollar here since all journal amounts are
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Limitations:
|
|
.PP
|
|
In multicolumn reports the \f[C]-V/--value\f[R] flag uses the market
|
|
price on the report end date, for all columns (not the price on each
|
|
column\[aq]s end date).
|
|
.PP
|
|
Eliding of boring parent accounts in tree mode, as in the classic
|
|
balance report, is not yet supported in multicolumn reports.
|
|
.SS Budget report
|
|
.PP
|
|
With \f[C]--budget\f[R], extra columns are displayed showing budget
|
|
goals for each account and period, if any.
|
|
Budget goals are defined by periodic transactions.
|
|
This is very useful for comparing planned and actual income, expenses,
|
|
time usage, etc.
|
|
--budget is most often combined with a report interval.
|
|
.PP
|
|
For example, you can take average monthly expenses in the common expense
|
|
categories to construct a minimal monthly budget:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
;; Budget
|
|
\[ti] monthly
|
|
income $2000
|
|
expenses:food $400
|
|
expenses:bus $50
|
|
expenses:movies $30
|
|
assets:bank:checking
|
|
|
|
;; Two months worth of expenses
|
|
2017-11-01
|
|
income $1950
|
|
expenses:food $396
|
|
expenses:bus $49
|
|
expenses:movies $30
|
|
expenses:supplies $20
|
|
assets:bank:checking
|
|
|
|
2017-12-01
|
|
income $2100
|
|
expenses:food $412
|
|
expenses:bus $53
|
|
expenses:gifts $100
|
|
assets:bank:checking
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
You can now see a monthly budget report:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance -M --budget
|
|
Budget performance in 2017/11/01-2017/12/31:
|
|
|
|
|| Nov Dec
|
|
======================++====================================================
|
|
assets || $-2445 [ 99% of $-2480] $-2665 [ 107% of $-2480]
|
|
assets:bank || $-2445 [ 99% of $-2480] $-2665 [ 107% of $-2480]
|
|
assets:bank:checking || $-2445 [ 99% of $-2480] $-2665 [ 107% of $-2480]
|
|
expenses || $495 [ 103% of $480] $565 [ 118% of $480]
|
|
expenses:bus || $49 [ 98% of $50] $53 [ 106% of $50]
|
|
expenses:food || $396 [ 99% of $400] $412 [ 103% of $400]
|
|
expenses:movies || $30 [ 100% of $30] 0 [ 0% of $30]
|
|
income || $1950 [ 98% of $2000] $2100 [ 105% of $2000]
|
|
----------------------++----------------------------------------------------
|
|
|| 0 [ 0] 0 [ 0]
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Note this is different from a normal balance report in several ways:
|
|
.IP \[bu] 2
|
|
Only accounts with budget goals during the report period are shown, by
|
|
default.
|
|
.IP \[bu] 2
|
|
In each column, in square brackets after the actual amount, budgeted
|
|
amounts are shown, along with the percentage of budget used.
|
|
.IP \[bu] 2
|
|
All parent accounts are always shown, even in flat mode.
|
|
Eg assets, assets:bank, and expenses above.
|
|
.IP \[bu] 2
|
|
Amounts always include all subaccounts, budgeted or unbudgeted, even in
|
|
flat mode.
|
|
.PP
|
|
This means that the numbers displayed will not always add up! Eg above,
|
|
the \f[C]expenses\f[R] actual amount includes the gifts and supplies
|
|
transactions, but the \f[C]expenses:gifts\f[R] and
|
|
\f[C]expenses:supplies\f[R] accounts are not shown, as they have no
|
|
budget amounts declared.
|
|
.PP
|
|
This can be confusing.
|
|
When you need to make things clearer, use the \f[C]-E/--empty\f[R] flag,
|
|
which will reveal all accounts including unbudgeted ones, giving the
|
|
full picture.
|
|
Eg:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance -M --budget --empty
|
|
Budget performance in 2017/11/01-2017/12/31:
|
|
|
|
|| Nov Dec
|
|
======================++====================================================
|
|
assets || $-2445 [ 99% of $-2480] $-2665 [ 107% of $-2480]
|
|
assets:bank || $-2445 [ 99% of $-2480] $-2665 [ 107% of $-2480]
|
|
assets:bank:checking || $-2445 [ 99% of $-2480] $-2665 [ 107% of $-2480]
|
|
expenses || $495 [ 103% of $480] $565 [ 118% of $480]
|
|
expenses:bus || $49 [ 98% of $50] $53 [ 106% of $50]
|
|
expenses:food || $396 [ 99% of $400] $412 [ 103% of $400]
|
|
expenses:gifts || 0 $100
|
|
expenses:movies || $30 [ 100% of $30] 0 [ 0% of $30]
|
|
expenses:supplies || $20 0
|
|
income || $1950 [ 98% of $2000] $2100 [ 105% of $2000]
|
|
----------------------++----------------------------------------------------
|
|
|| 0 [ 0] 0 [ 0]
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
You can roll over unspent budgets to next period with
|
|
\f[C]--cumulative\f[R]:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance -M --budget --cumulative
|
|
Budget performance in 2017/11/01-2017/12/31:
|
|
|
|
|| Nov Dec
|
|
======================++====================================================
|
|
assets || $-2445 [ 99% of $-2480] $-5110 [ 103% of $-4960]
|
|
assets:bank || $-2445 [ 99% of $-2480] $-5110 [ 103% of $-4960]
|
|
assets:bank:checking || $-2445 [ 99% of $-2480] $-5110 [ 103% of $-4960]
|
|
expenses || $495 [ 103% of $480] $1060 [ 110% of $960]
|
|
expenses:bus || $49 [ 98% of $50] $102 [ 102% of $100]
|
|
expenses:food || $396 [ 99% of $400] $808 [ 101% of $800]
|
|
expenses:movies || $30 [ 100% of $30] $30 [ 50% of $60]
|
|
income || $1950 [ 98% of $2000] $4050 [ 101% of $4000]
|
|
----------------------++----------------------------------------------------
|
|
|| 0 [ 0] 0 [ 0]
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
For more examples, see Budgeting and Forecasting.
|
|
.SS Nested budgets
|
|
.PP
|
|
You can add budgets to any account in your account hierarchy.
|
|
If you have budgets on both parent account and some of its children,
|
|
then budget(s) of the child account(s) would be added to the budget of
|
|
their parent, much like account balances behave.
|
|
.PP
|
|
In the most simple case this means that once you add a budget to any
|
|
account, all its parents would have budget as well.
|
|
.PP
|
|
To illustrate this, consider the following budget:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
\[ti] monthly from 2019/01
|
|
expenses:personal $1,000.00
|
|
expenses:personal:electronics $100.00
|
|
liabilities
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
With this, monthly budget for electronics is defined to be $100 and
|
|
budget for personal expenses is an additional $1000, which implicity
|
|
means that budget for both \f[C]expenses:personal\f[R] and
|
|
\f[C]expenses\f[R] is $1100.
|
|
.PP
|
|
Transactions in \f[C]expenses:personal:electronics\f[R] will be counted
|
|
both towards its $100 budget and $1100 of \f[C]expenses:personal\f[R] ,
|
|
and transactions in any other subaccount of \f[C]expenses:personal\f[R]
|
|
would be counted towards only towards the budget of
|
|
\f[C]expenses:personal\f[R].
|
|
.PP
|
|
For example, let\[aq]s consider these transactions:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
\[ti] monthly from 2019/01
|
|
expenses:personal $1,000.00
|
|
expenses:personal:electronics $100.00
|
|
liabilities
|
|
|
|
2019/01/01 Google home hub
|
|
expenses:personal:electronics $90.00
|
|
liabilities $-90.00
|
|
|
|
2019/01/02 Phone screen protector
|
|
expenses:personal:electronics:upgrades $10.00
|
|
liabilities
|
|
|
|
2019/01/02 Weekly train ticket
|
|
expenses:personal:train tickets $153.00
|
|
liabilities
|
|
|
|
2019/01/03 Flowers
|
|
expenses:personal $30.00
|
|
liabilities
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
As you can see, we have transactions in
|
|
\f[C]expenses:personal:electronics:upgrades\f[R] and
|
|
\f[C]expenses:personal:train tickets\f[R], and since both of these
|
|
accounts are without explicitly defined budget, these transactions would
|
|
be counted towards budgets of \f[C]expenses:personal:electronics\f[R]
|
|
and \f[C]expenses:personal\f[R] accordingly:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance --budget -M
|
|
Budget performance in 2019/01:
|
|
|
|
|| Jan
|
|
===============================++===============================
|
|
expenses || $283.00 [ 26% of $1100.00]
|
|
expenses:personal || $283.00 [ 26% of $1100.00]
|
|
expenses:personal:electronics || $100.00 [ 100% of $100.00]
|
|
liabilities || $-283.00 [ 26% of $-1100.00]
|
|
-------------------------------++-------------------------------
|
|
|| 0 [ 0]
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
And with \f[C]--empty\f[R], we can get a better picture of budget
|
|
allocation and consumption:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balance --budget -M --empty
|
|
Budget performance in 2019/01:
|
|
|
|
|| Jan
|
|
========================================++===============================
|
|
expenses || $283.00 [ 26% of $1100.00]
|
|
expenses:personal || $283.00 [ 26% of $1100.00]
|
|
expenses:personal:electronics || $100.00 [ 100% of $100.00]
|
|
expenses:personal:electronics:upgrades || $10.00
|
|
expenses:personal:train tickets || $153.00
|
|
liabilities || $-283.00 [ 26% of $-1100.00]
|
|
----------------------------------------++-------------------------------
|
|
|| 0 [ 0]
|
|
\f[R]
|
|
.fi
|
|
.SS Output format
|
|
.PP
|
|
The balance command supports output destination and output format
|
|
selection.
|
|
.SS balancesheet
|
|
.PP
|
|
balancesheet, bs
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
This command displays a simple balance sheet, showing historical ending
|
|
balances of asset and liability accounts (ignoring any report begin
|
|
date).
|
|
It assumes that these accounts are under a top-level \f[C]asset\f[R] or
|
|
\f[C]liability\f[R] account (case insensitive, plural forms also
|
|
allowed).
|
|
.PP
|
|
Note this report shows all account balances with normal positive sign
|
|
(like conventional financial statements, unlike balance/print/register)
|
|
(experimental).
|
|
.PP
|
|
Example:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balancesheet
|
|
Balance Sheet
|
|
|
|
Assets:
|
|
$-1 assets
|
|
$1 bank:saving
|
|
$-2 cash
|
|
--------------------
|
|
$-1
|
|
|
|
Liabilities:
|
|
$1 liabilities:debts
|
|
--------------------
|
|
$1
|
|
|
|
Total:
|
|
--------------------
|
|
0
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
With a reporting interval, multiple columns will be shown, one for each
|
|
report period.
|
|
As with multicolumn balance reports, you can alter the report mode with
|
|
\f[C]--change\f[R]/\f[C]--cumulative\f[R]/\f[C]--historical\f[R].
|
|
Normally balancesheet shows historical ending balances, which is what
|
|
you need for a balance sheet; note this means it ignores report begin
|
|
dates (and \f[C]-T/--row-total\f[R], since summing end balances
|
|
generally does not make sense).
|
|
.PP
|
|
This command also supports output destination and output format
|
|
selection.
|
|
.SS balancesheetequity
|
|
.PP
|
|
balancesheetequity, bse
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Just like balancesheet, but also reports Equity (which it assumes is
|
|
under a top-level \f[C]equity\f[R] account).
|
|
.PP
|
|
Example:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger balancesheetequity
|
|
Balance Sheet With Equity
|
|
|
|
Assets:
|
|
$-2 assets
|
|
$1 bank:saving
|
|
$-3 cash
|
|
--------------------
|
|
$-2
|
|
|
|
Liabilities:
|
|
$1 liabilities:debts
|
|
--------------------
|
|
$1
|
|
|
|
Equity:
|
|
$1 equity:owner
|
|
--------------------
|
|
$1
|
|
|
|
Total:
|
|
--------------------
|
|
0
|
|
\f[R]
|
|
.fi
|
|
.SS cashflow
|
|
.PP
|
|
cashflow, cf
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
This command displays a simple cashflow statement, showing changes in
|
|
\[dq]cash\[dq] accounts.
|
|
It assumes that these accounts are under a top-level \f[C]asset\f[R]
|
|
account (case insensitive, plural forms also allowed) and do not contain
|
|
\f[C]receivable\f[R] or \f[C]A/R\f[R] in their name.
|
|
Note this report shows all account balances with normal positive sign
|
|
(like conventional financial statements, unlike balance/print/register)
|
|
(experimental).
|
|
.PP
|
|
Example:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger cashflow
|
|
Cashflow Statement
|
|
|
|
Cash flows:
|
|
$-1 assets
|
|
$1 bank:saving
|
|
$-2 cash
|
|
--------------------
|
|
$-1
|
|
|
|
Total:
|
|
--------------------
|
|
$-1
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
With a reporting interval, multiple columns will be shown, one for each
|
|
report period.
|
|
Normally cashflow shows changes in assets per period, though as with
|
|
multicolumn balance reports you can alter the report mode with
|
|
\f[C]--change\f[R]/\f[C]--cumulative\f[R]/\f[C]--historical\f[R].
|
|
.PP
|
|
This command also supports output destination and output format
|
|
selection.
|
|
.SS check-dates
|
|
.PP
|
|
check-dates
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Check that transactions are sorted by increasing date.
|
|
With --date2, checks secondary dates instead.
|
|
With --strict, dates must also be unique.
|
|
With a query, only matched transactions\[aq] dates are checked.
|
|
Reads the default journal file, or another specified with -f.
|
|
.SS check-dupes
|
|
.PP
|
|
check-dupes
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Reports account names having the same leaf but different prefixes.
|
|
In other words, two or more leaves that are categorized differently.
|
|
Reads the default journal file, or another specified as an argument.
|
|
.PP
|
|
An example: http://stefanorodighiero.net/software/hledger-dupes.html
|
|
.SS close
|
|
.PP
|
|
close, equity
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Prints a \[dq]closing balances\[dq] transaction and an \[dq]opening
|
|
balances\[dq] transaction that bring account balances to and from zero,
|
|
respectively.
|
|
Useful for bringing asset/liability balances forward into a new journal
|
|
file, or for closing out revenues/expenses to retained earnings at the
|
|
end of a period.
|
|
.PP
|
|
The closing transaction transfers balances to \[dq]equity:closing
|
|
balances\[dq].
|
|
The opening transaction transfers balances from \[dq]equity:opening
|
|
balances\[dq].
|
|
You can choose to print just one of the transactions by using the
|
|
\f[C]--opening\f[R] or \f[C]--closing\f[R] flag.
|
|
.PP
|
|
If you split your journal files by time (eg yearly), you will typically
|
|
run this command at the end of the year, and save the closing
|
|
transaction as last entry of the old file, and the opening transaction
|
|
as the first entry of the new file.
|
|
This makes the files self contained, so that correct balances are
|
|
reported no matter which of them are loaded.
|
|
Ie, if you load just one file, the balances are initialised correctly;
|
|
or if you load several files, the redundant closing/opening transactions
|
|
cancel each other out.
|
|
(They will show up in print or register reports; you can exclude them
|
|
with a query like
|
|
\f[C]not:desc:\[aq](opening|closing) balances\[aq]\f[R].)
|
|
.PP
|
|
If you\[aq]re running a business, you might also use this command to
|
|
\[dq]close the books\[dq] at the end of an accounting period,
|
|
transferring income statement account balances to retained earnings.
|
|
(You may want to change the equity account name to something like
|
|
\[dq]equity:retained earnings\[dq].)
|
|
.PP
|
|
By default, the closing transaction is dated yesterday, the balances are
|
|
calculated as of end of yesterday, and the opening transaction is dated
|
|
today.
|
|
To close on some other date, use:
|
|
\f[C]hledger close -e OPENINGDATE\f[R].
|
|
Eg, to close/open on the 2018/2019 boundary, use \f[C]-e 2019\f[R].
|
|
You can also use -p or \f[C]date:PERIOD\f[R] (any starting date is
|
|
ignored).
|
|
.PP
|
|
Both transactions will include balance assertions for the
|
|
closed/reopened accounts.
|
|
You probably shouldn\[aq]t use status or realness filters (like -C or -R
|
|
or \f[C]status:\f[R]) with this command, or the generated balance
|
|
assertions will depend on these flags.
|
|
Likewise, if you run this command with --auto, the balance assertions
|
|
will probably always require --auto.
|
|
.PP
|
|
When account balances have cost information (transaction prices), the
|
|
closing/opening transactions will preserve it, so that eg balance -B
|
|
reports will not be affected.
|
|
.PP
|
|
Examples:
|
|
.PP
|
|
Carrying asset/liability balances into a new file for 2019, all from
|
|
command line:
|
|
.PP
|
|
\f[I]Warning: we use \f[CI]>>\f[I] here to append; be careful not to
|
|
type a single \f[CI]>\f[I] which would wipe your journal!\f[R]
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger close -f 2018.journal -e 2019 assets liabilities --opening >>2019.journal
|
|
$ hledger close -f 2018.journal -e 2019 assets liabilities --closing >>2018.journal
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Now:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger bs -f 2019.journal # one file - balances are correct
|
|
$ hledger bs -f 2018.journal -f 2019.journal # two files - balances still correct
|
|
$ hledger bs -f 2018.journal not:desc:closing # to see year-end balances, must exclude closing txn
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Transactions spanning the closing date can complicate matters, breaking
|
|
balance assertions:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
2018/12/30 a purchase made in 2018, clearing the following year
|
|
expenses:food 5
|
|
assets:bank:checking -5 ; [2019/1/2]
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Here\[aq]s one way to resolve that:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
; in 2018.journal:
|
|
2018/12/30 a purchase made in 2018, clearing the following year
|
|
expenses:food 5
|
|
liabilities:pending
|
|
|
|
; in 2019.journal:
|
|
2019/1/2 clearance of last year\[aq]s pending transactions
|
|
liabilities:pending 5 = 0
|
|
assets:checking
|
|
\f[R]
|
|
.fi
|
|
.SS commodities
|
|
.PP
|
|
commodities
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
List all commodity/currency symbols used or declared in the journal.
|
|
.SS descriptions
|
|
.PP
|
|
descriptions Show descriptions.
|
|
.PP
|
|
This command lists all descriptions that appear in transactions.
|
|
.PP
|
|
Examples:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger descriptions
|
|
Store Name
|
|
Gas Station | Petrol
|
|
Person A
|
|
\f[R]
|
|
.fi
|
|
.SS diff
|
|
.PP
|
|
diff
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Compares a particular account\[aq]s transactions in two input files.
|
|
It shows any transactions to this account which are in one file but not
|
|
in the other.
|
|
.PP
|
|
More precisely, for each posting affecting this account in either file,
|
|
it looks for a corresponding posting in the other file which posts the
|
|
same amount to the same account (ignoring date, description, etc.) Since
|
|
postings not transactions are compared, this also works when multiple
|
|
bank transactions have been combined into a single journal entry.
|
|
.PP
|
|
This is useful eg if you have downloaded an account\[aq]s transactions
|
|
from your bank (eg as CSV data).
|
|
When hledger and your bank disagree about the account balance, you can
|
|
compare the bank data with your journal to find out the cause.
|
|
.PP
|
|
Examples:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger diff -f $LEDGER_FILE -f bank.csv assets:bank:giro
|
|
These transactions are in the first file only:
|
|
|
|
2014/01/01 Opening Balances
|
|
assets:bank:giro EUR ...
|
|
...
|
|
equity:opening balances EUR -...
|
|
|
|
These transactions are in the second file only:
|
|
\f[R]
|
|
.fi
|
|
.SS files
|
|
.PP
|
|
files
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
List all files included in the journal.
|
|
With a REGEX argument, only file names matching the regular expression
|
|
(case sensitive) are shown.
|
|
.SS help
|
|
.PP
|
|
help
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Show any of the hledger manuals.
|
|
.PP
|
|
The \f[C]help\f[R] command displays any of the main hledger manuals, in
|
|
one of several ways.
|
|
Run it with no argument to list the manuals, or provide a full or
|
|
partial manual name to select one.
|
|
.PP
|
|
hledger manuals are available in several formats.
|
|
hledger help will use the first of these display methods that it finds:
|
|
info, man, $PAGER, less, stdout (or when non-interactive, just stdout).
|
|
You can force a particular viewer with the \f[C]--info\f[R],
|
|
\f[C]--man\f[R], \f[C]--pager\f[R], \f[C]--cat\f[R] flags.
|
|
.PP
|
|
Examples:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger help
|
|
Please choose a manual by typing \[dq]hledger help MANUAL\[dq] (a substring is ok).
|
|
Manuals: hledger hledger-ui hledger-web hledger-api journal csv timeclock timedot
|
|
\f[R]
|
|
.fi
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger help h --man
|
|
|
|
hledger(1) hledger User Manuals hledger(1)
|
|
|
|
NAME
|
|
hledger - a command-line accounting tool
|
|
|
|
SYNOPSIS
|
|
hledger [-f FILE] COMMAND [OPTIONS] [ARGS]
|
|
hledger [-f FILE] ADDONCMD -- [OPTIONS] [ARGS]
|
|
hledger
|
|
|
|
DESCRIPTION
|
|
hledger is a cross-platform program for tracking money, time, or any
|
|
\&...
|
|
\f[R]
|
|
.fi
|
|
.SS import
|
|
.PP
|
|
import
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Read new transactions added to each FILE since last run, and add them to
|
|
the main journal file.
|
|
Or with --dry-run, just print the transactions that would be added.
|
|
.PP
|
|
The input files are specified as arguments - no need to write -f before
|
|
each one.
|
|
So eg to add new transactions from all CSV files to the main journal,
|
|
it\[aq]s just: \f[C]hledger import *.csv\f[R]
|
|
.PP
|
|
New transactions are detected in the same way as print --new: by
|
|
assuming transactions are always added to the input files in increasing
|
|
date order, and by saving \f[C].latest.FILE\f[R] state files.
|
|
.PP
|
|
The --dry-run output is in journal format, so you can filter it, eg to
|
|
see only uncategorised transactions:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger import --dry ... | hledger -f- print unknown --ignore-assertions
|
|
\f[R]
|
|
.fi
|
|
.SS Importing balance assignments
|
|
.PP
|
|
Entries added by import will have their posting amounts made explicit
|
|
(like \f[C]hledger print -x\f[R]).
|
|
This means that any balance assignments in imported files must be
|
|
evaluated; but, imported files don\[aq]t get to see the main file\[aq]s
|
|
account balances.
|
|
As a result, importing entries with balance assignments (eg from an
|
|
institution that provides only balances and not posting amounts) will
|
|
probably generate incorrect posting amounts.
|
|
To avoid this problem, use print instead of import:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger print IMPORTFILE [--new] >> $LEDGER_FILE
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
(If you think import should leave amounts implicit like print does,
|
|
please test it and send a pull request.)
|
|
.SS incomestatement
|
|
.PP
|
|
incomestatement, is
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
This command displays a simple income statement, showing revenues and
|
|
expenses during a period.
|
|
It assumes that these accounts are under a top-level \f[C]revenue\f[R]
|
|
or \f[C]income\f[R] or \f[C]expense\f[R] account (case insensitive,
|
|
plural forms also allowed).
|
|
Note this report shows all account balances with normal positive sign
|
|
(like conventional financial statements, unlike balance/print/register)
|
|
(experimental).
|
|
.PP
|
|
This command displays a simple income statement.
|
|
It currently assumes that you have top-level accounts named
|
|
\f[C]income\f[R] (or \f[C]revenue\f[R]) and \f[C]expense\f[R] (plural
|
|
forms also allowed.)
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger incomestatement
|
|
Income Statement
|
|
|
|
Revenues:
|
|
$-2 income
|
|
$-1 gifts
|
|
$-1 salary
|
|
--------------------
|
|
$-2
|
|
|
|
Expenses:
|
|
$2 expenses
|
|
$1 food
|
|
$1 supplies
|
|
--------------------
|
|
$2
|
|
|
|
Total:
|
|
--------------------
|
|
0
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
With a reporting interval, multiple columns will be shown, one for each
|
|
report period.
|
|
Normally incomestatement shows revenues/expenses per period, though as
|
|
with multicolumn balance reports you can alter the report mode with
|
|
\f[C]--change\f[R]/\f[C]--cumulative\f[R]/\f[C]--historical\f[R].
|
|
.PP
|
|
This command also supports output destination and output format
|
|
selection.
|
|
.SS notes
|
|
.PP
|
|
notes Show notes.
|
|
.PP
|
|
This command lists all notes that appear in transactions.
|
|
.PP
|
|
Examples:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger notes
|
|
Petrol
|
|
Snacks
|
|
\f[R]
|
|
.fi
|
|
.SS payees
|
|
.PP
|
|
payees Show payee names.
|
|
.PP
|
|
This command lists all payee names that appear in transactions.
|
|
.PP
|
|
Examples:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger payees
|
|
Store Name
|
|
Gas Station
|
|
Person A
|
|
\f[R]
|
|
.fi
|
|
.SS prices
|
|
.PP
|
|
prices
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Print market price directives from the journal.
|
|
With --costs, also print synthetic market prices based on transaction
|
|
prices.
|
|
With --inverted-costs, also print inverse prices based on transaction
|
|
prices.
|
|
Prices (and postings providing prices) can be filtered by a query.
|
|
.SS print
|
|
.PP
|
|
print, txns, p
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Show transaction journal entries, sorted by date.
|
|
.PP
|
|
The print command displays full journal entries (transactions) from the
|
|
journal file in date order, tidily formatted.
|
|
With --date2, transactions are sorted by secondary date instead.
|
|
.PP
|
|
print\[aq]s output is always a valid hledger journal.
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
It preserves all transaction information, but it does not preserve
|
|
directives or inter-transaction comments
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger print
|
|
2008/01/01 income
|
|
assets:bank:checking $1
|
|
income:salary $-1
|
|
|
|
2008/06/01 gift
|
|
assets:bank:checking $1
|
|
income:gifts $-1
|
|
|
|
2008/06/02 save
|
|
assets:bank:saving $1
|
|
assets:bank:checking $-1
|
|
|
|
2008/06/03 * eat & shop
|
|
expenses:food $1
|
|
expenses:supplies $1
|
|
assets:cash $-2
|
|
|
|
2008/12/31 * pay off
|
|
liabilities:debts $1
|
|
assets:bank:checking $-1
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Normally, the journal entry\[aq]s explicit or implicit amount style is
|
|
preserved.
|
|
Ie when an amount is omitted in the journal, it will be omitted in the
|
|
output.
|
|
You can use the \f[C]-x\f[R]/\f[C]--explicit\f[R] flag to make all
|
|
amounts explicit, which can be useful for troubleshooting or for making
|
|
your journal more readable and robust against data entry errors.
|
|
Note, \f[C]-x\f[R] will cause postings with a multi-commodity amount
|
|
(these can arise when a multi-commodity transaction has an implicit
|
|
amount) will be split into multiple single-commodity postings, for valid
|
|
journal output.
|
|
.PP
|
|
With \f[C]-B\f[R]/\f[C]--cost\f[R], amounts with transaction prices are
|
|
converted to cost using that price.
|
|
This can be used for troubleshooting.
|
|
.PP
|
|
With \f[C]-m\f[R]/\f[C]--match\f[R] and a STR argument, print will show
|
|
at most one transaction: the one one whose description is most similar
|
|
to STR, and is most recent.
|
|
STR should contain at least two characters.
|
|
If there is no similar-enough match, no transaction will be shown.
|
|
.PP
|
|
With \f[C]--new\f[R], for each FILE being read, hledger reads (and
|
|
writes) a special state file (\f[C].latest.FILE\f[R] in the same
|
|
directory), containing the latest transaction date(s) that were seen
|
|
last time FILE was read.
|
|
When this file is found, only transactions with newer dates (and new
|
|
transactions on the latest date) are printed.
|
|
This is useful for ignoring already-seen entries in import data, such as
|
|
downloaded CSV files.
|
|
Eg:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger -f bank1.csv print --new
|
|
# shows transactions added since last print --new on this file
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
This assumes that transactions added to FILE always have same or
|
|
increasing dates, and that transactions on the same day do not get
|
|
reordered.
|
|
See also the import command.
|
|
.PP
|
|
This command also supports output destination and output format
|
|
selection.
|
|
Here\[aq]s an example of print\[aq]s CSV output:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger print -Ocsv
|
|
\[dq]txnidx\[dq],\[dq]date\[dq],\[dq]date2\[dq],\[dq]status\[dq],\[dq]code\[dq],\[dq]description\[dq],\[dq]comment\[dq],\[dq]account\[dq],\[dq]amount\[dq],\[dq]commodity\[dq],\[dq]credit\[dq],\[dq]debit\[dq],\[dq]posting-status\[dq],\[dq]posting-comment\[dq]
|
|
\[dq]1\[dq],\[dq]2008/01/01\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]income\[dq],\[dq]\[dq],\[dq]assets:bank:checking\[dq],\[dq]1\[dq],\[dq]$\[dq],\[dq]\[dq],\[dq]1\[dq],\[dq]\[dq],\[dq]\[dq]
|
|
\[dq]1\[dq],\[dq]2008/01/01\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]income\[dq],\[dq]\[dq],\[dq]income:salary\[dq],\[dq]-1\[dq],\[dq]$\[dq],\[dq]1\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]\[dq]
|
|
\[dq]2\[dq],\[dq]2008/06/01\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]gift\[dq],\[dq]\[dq],\[dq]assets:bank:checking\[dq],\[dq]1\[dq],\[dq]$\[dq],\[dq]\[dq],\[dq]1\[dq],\[dq]\[dq],\[dq]\[dq]
|
|
\[dq]2\[dq],\[dq]2008/06/01\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]gift\[dq],\[dq]\[dq],\[dq]income:gifts\[dq],\[dq]-1\[dq],\[dq]$\[dq],\[dq]1\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]\[dq]
|
|
\[dq]3\[dq],\[dq]2008/06/02\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]save\[dq],\[dq]\[dq],\[dq]assets:bank:saving\[dq],\[dq]1\[dq],\[dq]$\[dq],\[dq]\[dq],\[dq]1\[dq],\[dq]\[dq],\[dq]\[dq]
|
|
\[dq]3\[dq],\[dq]2008/06/02\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]save\[dq],\[dq]\[dq],\[dq]assets:bank:checking\[dq],\[dq]-1\[dq],\[dq]$\[dq],\[dq]1\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]\[dq]
|
|
\[dq]4\[dq],\[dq]2008/06/03\[dq],\[dq]\[dq],\[dq]*\[dq],\[dq]\[dq],\[dq]eat & shop\[dq],\[dq]\[dq],\[dq]expenses:food\[dq],\[dq]1\[dq],\[dq]$\[dq],\[dq]\[dq],\[dq]1\[dq],\[dq]\[dq],\[dq]\[dq]
|
|
\[dq]4\[dq],\[dq]2008/06/03\[dq],\[dq]\[dq],\[dq]*\[dq],\[dq]\[dq],\[dq]eat & shop\[dq],\[dq]\[dq],\[dq]expenses:supplies\[dq],\[dq]1\[dq],\[dq]$\[dq],\[dq]\[dq],\[dq]1\[dq],\[dq]\[dq],\[dq]\[dq]
|
|
\[dq]4\[dq],\[dq]2008/06/03\[dq],\[dq]\[dq],\[dq]*\[dq],\[dq]\[dq],\[dq]eat & shop\[dq],\[dq]\[dq],\[dq]assets:cash\[dq],\[dq]-2\[dq],\[dq]$\[dq],\[dq]2\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]\[dq]
|
|
\[dq]5\[dq],\[dq]2008/12/31\[dq],\[dq]\[dq],\[dq]*\[dq],\[dq]\[dq],\[dq]pay off\[dq],\[dq]\[dq],\[dq]liabilities:debts\[dq],\[dq]1\[dq],\[dq]$\[dq],\[dq]\[dq],\[dq]1\[dq],\[dq]\[dq],\[dq]\[dq]
|
|
\[dq]5\[dq],\[dq]2008/12/31\[dq],\[dq]\[dq],\[dq]*\[dq],\[dq]\[dq],\[dq]pay off\[dq],\[dq]\[dq],\[dq]assets:bank:checking\[dq],\[dq]-1\[dq],\[dq]$\[dq],\[dq]1\[dq],\[dq]\[dq],\[dq]\[dq],\[dq]\[dq]
|
|
\f[R]
|
|
.fi
|
|
.IP \[bu] 2
|
|
There is one CSV record per posting, with the parent transaction\[aq]s
|
|
fields repeated.
|
|
.IP \[bu] 2
|
|
The \[dq]txnidx\[dq] (transaction index) field shows which postings
|
|
belong to the same transaction.
|
|
(This number might change if transactions are reordered within the file,
|
|
files are parsed/included in a different order, etc.)
|
|
.IP \[bu] 2
|
|
The amount is separated into \[dq]commodity\[dq] (the symbol) and
|
|
\[dq]amount\[dq] (numeric quantity) fields.
|
|
.IP \[bu] 2
|
|
The numeric amount is repeated in either the \[dq]credit\[dq] or
|
|
\[dq]debit\[dq] column, for convenience.
|
|
(Those names are not accurate in the accounting sense; it just puts
|
|
negative amounts under credit and zero or greater amounts under debit.)
|
|
.SS print-unique
|
|
.PP
|
|
print-unique
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Print transactions which do not reuse an already-seen description.
|
|
.PP
|
|
Example:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ cat unique.journal
|
|
1/1 test
|
|
(acct:one) 1
|
|
2/2 test
|
|
(acct:two) 2
|
|
$ LEDGER_FILE=unique.journal hledger print-unique
|
|
(-f option not supported)
|
|
2015/01/01 test
|
|
(acct:one) 1
|
|
\f[R]
|
|
.fi
|
|
.SS register
|
|
.PP
|
|
register, reg, r
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Show postings and their running total.
|
|
.PP
|
|
The register command displays postings in date order, one per line, and
|
|
their running total.
|
|
This is typically used with a query selecting a particular account, to
|
|
see that account\[aq]s activity:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger register checking
|
|
2008/01/01 income assets:bank:checking $1 $1
|
|
2008/06/01 gift assets:bank:checking $1 $2
|
|
2008/06/02 save assets:bank:checking $-1 $1
|
|
2008/12/31 pay off assets:bank:checking $-1 0
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
With --date2, it shows and sorts by secondary date instead.
|
|
.PP
|
|
The \f[C]--historical\f[R]/\f[C]-H\f[R] flag adds the balance from any
|
|
undisplayed prior postings to the running total.
|
|
This is useful when you want to see only recent activity, with a
|
|
historically accurate running balance:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger register checking -b 2008/6 --historical
|
|
2008/06/01 gift assets:bank:checking $1 $2
|
|
2008/06/02 save assets:bank:checking $-1 $1
|
|
2008/12/31 pay off assets:bank:checking $-1 0
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
The \f[C]--depth\f[R] option limits the amount of sub-account detail
|
|
displayed.
|
|
.PP
|
|
The \f[C]--average\f[R]/\f[C]-A\f[R] flag shows the running average
|
|
posting amount instead of the running total (so, the final number
|
|
displayed is the average for the whole report period).
|
|
This flag implies \f[C]--empty\f[R] (see below).
|
|
It is affected by \f[C]--historical\f[R].
|
|
It works best when showing just one account and one commodity.
|
|
.PP
|
|
The \f[C]--related\f[R]/\f[C]-r\f[R] flag shows the \f[I]other\f[R]
|
|
postings in the transactions of the postings which would normally be
|
|
shown.
|
|
.PP
|
|
The \f[C]--invert\f[R] flag negates all amounts.
|
|
For example, it can be used on an income account where amounts are
|
|
normally displayed as negative numbers.
|
|
It\[aq]s also useful to show postings on the checking account together
|
|
with the related account:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger register --related --invert assets:checking
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
With a reporting interval, register shows summary postings, one per
|
|
interval, aggregating the postings to each account:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger register --monthly income
|
|
2008/01 income:salary $-1 $-1
|
|
2008/06 income:gifts $-1 $-2
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Periods with no activity, and summary postings with a zero amount, are
|
|
not shown by default; use the \f[C]--empty\f[R]/\f[C]-E\f[R] flag to see
|
|
them:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger register --monthly income -E
|
|
2008/01 income:salary $-1 $-1
|
|
2008/02 0 $-1
|
|
2008/03 0 $-1
|
|
2008/04 0 $-1
|
|
2008/05 0 $-1
|
|
2008/06 income:gifts $-1 $-2
|
|
2008/07 0 $-2
|
|
2008/08 0 $-2
|
|
2008/09 0 $-2
|
|
2008/10 0 $-2
|
|
2008/11 0 $-2
|
|
2008/12 0 $-2
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Often, you\[aq]ll want to see just one line per interval.
|
|
The \f[C]--depth\f[R] option helps with this, causing subaccounts to be
|
|
aggregated:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger register --monthly assets --depth 1h
|
|
2008/01 assets $1 $1
|
|
2008/06 assets $-1 0
|
|
2008/12 assets $-1 $-1
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Note when using report intervals, if you specify start/end dates these
|
|
will be adjusted outward if necessary to contain a whole number of
|
|
intervals.
|
|
This ensures that the first and last intervals are full length and
|
|
comparable to the others in the report.
|
|
.SS Custom register output
|
|
.PP
|
|
register uses the full terminal width by default, except on windows.
|
|
You can override this by setting the \f[C]COLUMNS\f[R] environment
|
|
variable (not a bash shell variable) or by using the
|
|
\f[C]--width\f[R]/\f[C]-w\f[R] option.
|
|
.PP
|
|
The description and account columns normally share the space equally
|
|
(about half of (width - 40) each).
|
|
You can adjust this by adding a description width as part of
|
|
--width\[aq]s argument, comma-separated: \f[C]--width W,D\f[R] .
|
|
Here\[aq]s a diagram (won\[aq]t display correctly in --help):
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
<--------------------------------- width (W) ---------------------------------->
|
|
date (10) description (D) account (W-41-D) amount (12) balance (12)
|
|
DDDDDDDDDD dddddddddddddddddddd aaaaaaaaaaaaaaaaaaa AAAAAAAAAAAA AAAAAAAAAAAA
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
and some examples:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger reg # use terminal width (or 80 on windows)
|
|
$ hledger reg -w 100 # use width 100
|
|
$ COLUMNS=100 hledger reg # set with one-time environment variable
|
|
$ export COLUMNS=100; hledger reg # set till session end (or window resize)
|
|
$ hledger reg -w 100,40 # set overall width 100, description width 40
|
|
$ hledger reg -w $COLUMNS,40 # use terminal width, & description width 40
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
This command also supports output destination and output format
|
|
selection.
|
|
.SS register-match
|
|
.PP
|
|
register-match
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Print the one posting whose transaction description is closest to DESC,
|
|
in the style of the register command.
|
|
If there are multiple equally good matches, it shows the most recent.
|
|
Query options (options, not arguments) can be used to restrict the
|
|
search space.
|
|
Helps ledger-autosync detect already-seen transactions when importing.
|
|
.SS rewrite
|
|
.PP
|
|
rewrite
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Print all transactions, rewriting the postings of matched transactions.
|
|
For now the only rewrite available is adding new postings, like print
|
|
--auto.
|
|
.PP
|
|
This is a start at a generic rewriter of transaction entries.
|
|
It reads the default journal and prints the transactions, like print,
|
|
but adds one or more specified postings to any transactions matching
|
|
QUERY.
|
|
The posting amounts can be fixed, or a multiplier of the existing
|
|
transaction\[aq]s first posting amount.
|
|
.PP
|
|
Examples:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger-rewrite.hs \[ha]income --add-posting \[aq](liabilities:tax) *.33 ; income tax\[aq] --add-posting \[aq](reserve:gifts) $100\[aq]
|
|
$ hledger-rewrite.hs expenses:gifts --add-posting \[aq](reserve:gifts) *-1\[dq]\[aq]
|
|
$ hledger-rewrite.hs -f rewrites.hledger
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
rewrites.hledger may consist of entries like:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
= \[ha]income amt:<0 date:2017
|
|
(liabilities:tax) *0.33 ; tax on income
|
|
(reserve:grocery) *0.25 ; reserve 25% for grocery
|
|
(reserve:) *0.25 ; reserve 25% for grocery
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Note the single quotes to protect the dollar sign from bash, and the two
|
|
spaces between account and amount.
|
|
.PP
|
|
More:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger rewrite -- [QUERY] --add-posting \[dq]ACCT AMTEXPR\[dq] ...
|
|
$ hledger rewrite -- \[ha]income --add-posting \[aq](liabilities:tax) *.33\[aq]
|
|
$ hledger rewrite -- expenses:gifts --add-posting \[aq](budget:gifts) *-1\[dq]\[aq]
|
|
$ hledger rewrite -- \[ha]income --add-posting \[aq](budget:foreign currency) *0.25 JPY; diversify\[aq]
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Argument for \f[C]--add-posting\f[R] option is a usual posting of
|
|
transaction with an exception for amount specification.
|
|
More precisely, you can use \f[C]\[aq]*\[aq]\f[R] (star symbol) before
|
|
the amount to indicate that that this is a factor for an amount of
|
|
original matched posting.
|
|
If the amount includes a commodity name, the new posting amount will be
|
|
in the new commodity; otherwise, it will be in the matched posting
|
|
amount\[aq]s commodity.
|
|
.SS Re-write rules in a file
|
|
.PP
|
|
During the run this tool will execute so called \[dq]Automated
|
|
Transactions\[dq] found in any journal it process.
|
|
I.e instead of specifying this operations in command line you can put
|
|
them in a journal file.
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ rewrite-rules.journal
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Make contents look like this:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
= \[ha]income
|
|
(liabilities:tax) *.33
|
|
|
|
= expenses:gifts
|
|
budget:gifts *-1
|
|
assets:budget *1
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Note that \f[C]\[aq]=\[aq]\f[R] (equality symbol) that is used instead
|
|
of date in transactions you usually write.
|
|
It indicates the query by which you want to match the posting to add new
|
|
ones.
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger rewrite -- -f input.journal -f rewrite-rules.journal > rewritten-tidy-output.journal
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
This is something similar to the commands pipeline:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger rewrite -- -f input.journal \[aq]\[ha]income\[aq] --add-posting \[aq](liabilities:tax) *.33\[aq] \[rs]
|
|
| hledger rewrite -- -f - expenses:gifts --add-posting \[aq]budget:gifts *-1\[aq] \[rs]
|
|
--add-posting \[aq]assets:budget *1\[aq] \[rs]
|
|
> rewritten-tidy-output.journal
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
It is important to understand that relative order of such entries in
|
|
journal is important.
|
|
You can re-use result of previously added postings.
|
|
.SS Diff output format
|
|
.PP
|
|
To use this tool for batch modification of your journal files you may
|
|
find useful output in form of unified diff.
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger rewrite -- --diff -f examples/sample.journal \[aq]\[ha]income\[aq] --add-posting \[aq](liabilities:tax) *.33\[aq]
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Output might look like:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
--- /tmp/examples/sample.journal
|
|
+++ /tmp/examples/sample.journal
|
|
\[at]\[at] -18,3 +18,4 \[at]\[at]
|
|
2008/01/01 income
|
|
- assets:bank:checking $1
|
|
+ assets:bank:checking $1
|
|
income:salary
|
|
+ (liabilities:tax) 0
|
|
\[at]\[at] -22,3 +23,4 \[at]\[at]
|
|
2008/06/01 gift
|
|
- assets:bank:checking $1
|
|
+ assets:bank:checking $1
|
|
income:gifts
|
|
+ (liabilities:tax) 0
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
If you\[aq]ll pass this through \f[C]patch\f[R] tool you\[aq]ll get
|
|
transactions containing the posting that matches your query be updated.
|
|
Note that multiple files might be update according to list of input
|
|
files specified via \f[C]--file\f[R] options and \f[C]include\f[R]
|
|
directives inside of these files.
|
|
.PP
|
|
Be careful.
|
|
Whole transaction being re-formatted in a style of output from
|
|
\f[C]hledger print\f[R].
|
|
.PP
|
|
See also:
|
|
.PP
|
|
https://github.com/simonmichael/hledger/issues/99
|
|
.SS rewrite vs. print --auto
|
|
.PP
|
|
This command predates print --auto, and currently does much the same
|
|
thing, but with these differences:
|
|
.IP \[bu] 2
|
|
with multiple files, rewrite lets rules in any file affect all other
|
|
files.
|
|
print --auto uses standard directive scoping; rules affect only child
|
|
files.
|
|
.IP \[bu] 2
|
|
rewrite\[aq]s query limits which transactions can be rewritten; all are
|
|
printed.
|
|
print --auto\[aq]s query limits which transactions are printed.
|
|
.IP \[bu] 2
|
|
rewrite applies rules specified on command line or in the journal.
|
|
print --auto applies rules specified in the journal.
|
|
.SS roi
|
|
.PP
|
|
roi
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Shows the time-weighted (TWR) and money-weighted (IRR) rate of return on
|
|
your investments.
|
|
.PP
|
|
This command assumes that you have account(s) that hold nothing but your
|
|
investments and whenever you record current appraisal/valuation of these
|
|
investments you offset unrealized profit and loss into account(s) that,
|
|
again, hold nothing but unrealized profit and loss.
|
|
.PP
|
|
Any transactions affecting balance of investment account(s) and not
|
|
originating from unrealized profit and loss account(s) are assumed to be
|
|
your investments or withdrawals.
|
|
.PP
|
|
At a minimum, you need to supply a query (which could be just an account
|
|
name) to select your investments with \f[C]--inv\f[R], and another query
|
|
to identify your profit and loss transactions with \f[C]--pnl\f[R].
|
|
.PP
|
|
It will compute and display the internalized rate of return (IRR) and
|
|
time-weighted rate of return (TWR) for your investments for the time
|
|
period requested.
|
|
Both rates of return are annualized before display, regardless of the
|
|
length of reporting interval.
|
|
.SS stats
|
|
.PP
|
|
stats
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Show some journal statistics.
|
|
.PP
|
|
The stats command displays summary information for the whole journal, or
|
|
a matched part of it.
|
|
With a reporting interval, it shows a report for each report period.
|
|
.PP
|
|
Example:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ hledger stats
|
|
Main journal file : /src/hledger/examples/sample.journal
|
|
Included journal files :
|
|
Transactions span : 2008-01-01 to 2009-01-01 (366 days)
|
|
Last transaction : 2008-12-31 (2333 days ago)
|
|
Transactions : 5 (0.0 per day)
|
|
Transactions last 30 days: 0 (0.0 per day)
|
|
Transactions last 7 days : 0 (0.0 per day)
|
|
Payees/descriptions : 5
|
|
Accounts : 8 (depth 3)
|
|
Commodities : 1 ($)
|
|
Market prices : 12 ($)
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
This command also supports output destination and output format
|
|
selection.
|
|
.SS tags
|
|
.PP
|
|
tags
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
List all the tag names used in the journal.
|
|
With a TAGREGEX argument, only tag names matching the regular expression
|
|
(case insensitive) are shown.
|
|
With QUERY arguments, only transactions matching the query are
|
|
considered.
|
|
With --values flag, the tags\[aq] unique values are listed instead.
|
|
.SS test
|
|
.PP
|
|
test
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
Run built-in unit tests.
|
|
.PP
|
|
This command runs the unit tests built in to hledger-lib and hledger,
|
|
printing test names and results on stdout.
|
|
If any test fails, the exit code will be non-zero.
|
|
.PP
|
|
Test names include a group prefix.
|
|
If a (exact, case sensitive) group prefix, or a full test name is
|
|
provided as the first argument, only that group or test is run.
|
|
.PP
|
|
If a numeric second argument is provided, it will set the randomness
|
|
seed, for repeatable results from tests using randomness (currently none
|
|
of them).
|
|
.PP
|
|
This is mainly used by developers, but it\[aq]s nice to be able to
|
|
sanity-check your installed hledger executable at any time.
|
|
All tests are expected to pass - if you ever see otherwise, something
|
|
has gone wrong, please report a bug!
|
|
.SH ADD-ON COMMANDS
|
|
.PP
|
|
hledger also searches for external add-on commands, and will include
|
|
these in the commands list.
|
|
These are programs or scripts in your PATH whose name starts with
|
|
\f[C]hledger-\f[R] and ends with a recognised file extension (currently:
|
|
no extension, \f[C]bat\f[R],\f[C]com\f[R],\f[C]exe\f[R],
|
|
\f[C]hs\f[R],\f[C]lhs\f[R],\f[C]pl\f[R],\f[C]py\f[R],\f[C]rb\f[R],\f[C]rkt\f[R],\f[C]sh\f[R]).
|
|
.PP
|
|
Add-ons can be invoked like any hledger command, but there are a few
|
|
things to be aware of.
|
|
Eg if the \f[C]hledger-web\f[R] add-on is installed,
|
|
.IP \[bu] 2
|
|
\f[C]hledger -h web\f[R] shows hledger\[aq]s help, while
|
|
\f[C]hledger web -h\f[R] shows hledger-web\[aq]s help.
|
|
.IP \[bu] 2
|
|
Flags specific to the add-on must have a preceding \f[C]--\f[R] to hide
|
|
them from hledger.
|
|
So \f[C]hledger web --serve --port 9000\f[R] will be rejected; you must
|
|
use \f[C]hledger web -- --serve --port 9000\f[R].
|
|
.IP \[bu] 2
|
|
You can always run add-ons directly if preferred:
|
|
\f[C]hledger-web --serve --port 9000\f[R].
|
|
.PP
|
|
Add-ons are a relatively easy way to add local features or experiment
|
|
with new ideas.
|
|
They can be written in any language, but haskell scripts have a big
|
|
advantage: they can use the same hledger (and haskell) library functions
|
|
that built-in commands do, for command-line options, journal parsing,
|
|
reporting, etc.
|
|
.PP
|
|
Here are some hledger add-ons available:
|
|
.SS Official add-ons
|
|
.PP
|
|
These are maintained and released along with hledger.
|
|
.SS api
|
|
.PP
|
|
hledger-api serves hledger data as a JSON web API.
|
|
.SS ui
|
|
.PP
|
|
hledger-ui provides an efficient curses-style interface.
|
|
.SS web
|
|
.PP
|
|
hledger-web provides a simple web interface.
|
|
.SS Third party add-ons
|
|
.PP
|
|
These are maintained separately, and usually updated shortly after a
|
|
hledger release.
|
|
.SS diff
|
|
.PP
|
|
hledger-diff shows differences in an account\[aq]s transactions between
|
|
one journal file and another.
|
|
.SS iadd
|
|
.PP
|
|
hledger-iadd is a curses-style, more interactive replacement for the add
|
|
command.
|
|
.SS interest
|
|
.PP
|
|
hledger-interest generates interest transactions for an account
|
|
according to various schemes.
|
|
.SS irr
|
|
.PP
|
|
hledger-irr calculates the internal rate of return of an investment
|
|
account, but it\[aq]s superseded now by the built-in roi command.
|
|
.SS Experimental add-ons
|
|
.PP
|
|
These are available in source form in the hledger repo\[aq]s bin/
|
|
directory; installing them is pretty easy.
|
|
They may be less mature and documented than built-in commands.
|
|
Reading and tweaking these is a good way to start making your own!
|
|
.SS autosync
|
|
.PP
|
|
hledger-autosync is a symbolic link for easily running ledger-autosync,
|
|
if installed.
|
|
ledger-autosync does deduplicating conversion of OFX data and some CSV
|
|
formats, and can also download the data if your bank offers OFX Direct
|
|
Connect.
|
|
.SS chart
|
|
.PP
|
|
hledger-chart.hs is an old pie chart generator, in need of some love.
|
|
.SS check
|
|
.PP
|
|
hledger-check.hs checks more powerful account balance assertions.
|
|
.SH ENVIRONMENT
|
|
.PP
|
|
\f[B]COLUMNS\f[R] The screen width used by the register command.
|
|
Default: the full terminal width.
|
|
.PP
|
|
\f[B]LEDGER_FILE\f[R] The journal file path when not specified with
|
|
\f[C]-f\f[R].
|
|
Default: \f[C]\[ti]/.hledger.journal\f[R] (on windows, perhaps
|
|
\f[C]C:/Users/USER/.hledger.journal\f[R]).
|
|
.SH FILES
|
|
.PP
|
|
Reads data from one or more files in hledger journal, timeclock,
|
|
timedot, or CSV format specified with \f[C]-f\f[R], or
|
|
\f[C]$LEDGER_FILE\f[R], or \f[C]$HOME/.hledger.journal\f[R] (on windows,
|
|
perhaps \f[C]C:/Users/USER/.hledger.journal\f[R]).
|
|
.SH LIMITATIONS
|
|
.PP
|
|
The need to precede addon command options with \f[C]--\f[R] when invoked
|
|
from hledger is awkward.
|
|
.PP
|
|
When input data contains non-ascii characters, a suitable system locale
|
|
must be configured (or there will be an unhelpful error).
|
|
Eg on POSIX, set LANG to something other than C.
|
|
.PP
|
|
In a Microsoft Windows CMD window, non-ascii characters and colours are
|
|
not supported.
|
|
.PP
|
|
On Windows, non-ascii characters may not display correctly when running
|
|
a hledger built in CMD in MSYS/CYGWIN, or vice-versa.
|
|
.PP
|
|
In a Cygwin/MSYS/Mintty window, the tab key is not supported in hledger
|
|
add.
|
|
.PP
|
|
Not all of Ledger\[aq]s journal file syntax is supported.
|
|
See file format differences.
|
|
.PP
|
|
On large data files, hledger is slower and uses more memory than Ledger.
|
|
.SH TROUBLESHOOTING
|
|
.PP
|
|
Here are some issues you might encounter when you run hledger (and
|
|
remember you can also seek help from the IRC channel, mail list or bug
|
|
tracker):
|
|
.PP
|
|
\f[B]Successfully installed, but \[dq]No command \[aq]hledger\[aq]
|
|
found\[dq]\f[R]
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
stack and cabal install binaries into a special directory, which should
|
|
be added to your PATH environment variable.
|
|
Eg on unix-like systems, that is \[ti]/.local/bin and \[ti]/.cabal/bin
|
|
respectively.
|
|
.PP
|
|
\f[B]I set a custom LEDGER_FILE, but hledger is still using the default
|
|
file\f[R]
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
\f[C]LEDGER_FILE\f[R] should be a real environment variable, not just a
|
|
shell variable.
|
|
The command \f[C]env | grep LEDGER_FILE\f[R] should show it.
|
|
You may need to use \f[C]export\f[R].
|
|
Here\[aq]s an explanation.
|
|
.PP
|
|
\f[B]\[dq]Illegal byte sequence\[dq] or \[dq]Invalid or incomplete
|
|
multibyte or wide character\[dq] errors\f[R]
|
|
.PD 0
|
|
.P
|
|
.PD
|
|
In order to handle non-ascii letters and symbols (like \[Po]), hledger
|
|
needs an appropriate locale.
|
|
This is usually configured system-wide; you can also configure it
|
|
temporarily.
|
|
The locale may need to be one that supports UTF-8, if you built hledger
|
|
with GHC < 7.2 (or possibly always, I\[aq]m not sure yet).
|
|
.PP
|
|
Here\[aq]s an example of setting the locale temporarily, on ubuntu
|
|
gnu/linux:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ file my.journal
|
|
my.journal: UTF-8 Unicode text # <- the file is UTF8-encoded
|
|
$ locale -a
|
|
C
|
|
en_US.utf8 # <- a UTF8-aware locale is available
|
|
POSIX
|
|
$ LANG=en_US.utf8 hledger -f my.journal print # <- use it for this command
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Here\[aq]s one way to set it permanently, there are probably better
|
|
ways:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ echo \[dq]export LANG=en_US.UTF-8\[dq] >>\[ti]/.bash_profile
|
|
$ bash --login
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
If we preferred to use eg \f[C]fr_FR.utf8\f[R], we might have to install
|
|
that first:
|
|
.IP
|
|
.nf
|
|
\f[C]
|
|
$ apt-get install language-pack-fr
|
|
$ locale -a
|
|
C
|
|
en_US.utf8
|
|
fr_BE.utf8
|
|
fr_CA.utf8
|
|
fr_CH.utf8
|
|
fr_FR.utf8
|
|
fr_LU.utf8
|
|
POSIX
|
|
$ LANG=fr_FR.utf8 hledger -f my.journal print
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Note some platforms allow variant locale spellings, but not all (ubuntu
|
|
accepts \f[C]fr_FR.UTF8\f[R], mac osx requires exactly
|
|
\f[C]fr_FR.UTF-8\f[R]).
|
|
|
|
|
|
.SH "REPORTING BUGS"
|
|
Report bugs at http://bugs.hledger.org
|
|
(or on the #hledger IRC channel or hledger mail list)
|
|
|
|
.SH AUTHORS
|
|
Simon Michael <simon@joyful.com> and contributors
|
|
|
|
.SH COPYRIGHT
|
|
|
|
Copyright (C) 2007-2016 Simon Michael.
|
|
.br
|
|
Released under GNU GPL v3 or later.
|
|
|
|
.SH SEE ALSO
|
|
hledger(1), hledger\-ui(1), hledger\-web(1), hledger\-api(1),
|
|
hledger_csv(5), hledger_journal(5), hledger_timeclock(5), hledger_timedot(5),
|
|
ledger(1)
|
|
|
|
http://hledger.org
|