3276 lines
		
	
	
		
			103 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			3276 lines
		
	
	
		
			103 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"t
 | |
| 
 | |
| .TH "hledger" "1" "March 2019" "hledger 1.14" "hledger User Manuals"
 | |
| 
 | |
| 
 | |
| 
 | |
| .SH NAME
 | |
| .PP
 | |
| hledger \- a command\-line accounting tool
 | |
| .SH SYNOPSIS
 | |
| .PP
 | |
| \f[C]hledger\ [\-f\ FILE]\ COMMAND\ [OPTIONS]\ [ARGS]\f[]
 | |
| .PD 0
 | |
| .P
 | |
| .PD
 | |
| \f[C]hledger\ [\-f\ FILE]\ ADDONCMD\ \-\-\ [OPTIONS]\ [ARGS]\f[]
 | |
| .PD 0
 | |
| .P
 | |
| .PD
 | |
| \f[C]hledger\f[]
 | |
| .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'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'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[], or
 | |
| \f[C]$LEDGER_FILE\f[], or \f[C]$HOME/.hledger.journal\f[] (on windows,
 | |
| perhaps \f[C]C:/Users/USER/.hledger.journal\f[]).
 | |
| If using \f[C]$LEDGER_FILE\f[], note this must be a real environment
 | |
| variable, not a shell variable.
 | |
| You can specify standard input with \f[C]\-f\-\f[].
 | |
| .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[]
 | |
| .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'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]~/.hledger.journal\f[], or run \f[C]hledger\ add\f[] and follow the
 | |
| prompts.
 | |
| Then try some commands like \f[C]hledger\ print\f[] or
 | |
| \f[C]hledger\ balance\f[].
 | |
| Run \f[C]hledger\f[] 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[]
 | |
| .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[]
 | |
| .fi
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| $\ hledger\ accounts\ \-\-tree
 | |
| assets
 | |
| \ \ cash
 | |
| expenses
 | |
| \ \ food
 | |
| income
 | |
| \ \ gifts
 | |
| \f[]
 | |
| .fi
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| $\ hledger\ balance
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $10\ \ assets:cash
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $10\ \ expenses:food
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\-20\ \ income:gifts
 | |
| \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0
 | |
| \f[]
 | |
| .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[]
 | |
| .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[]
 | |
| .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[].
 | |
| .PP
 | |
| General help options:
 | |
| .TP
 | |
| .B \f[C]\-h\ \-\-help\f[]
 | |
| show general usage (or after COMMAND, command usage)
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-\-version\f[]
 | |
| show version
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-\-debug[=N]\f[]
 | |
| show debug output (levels 1\-9, default: 1)
 | |
| .RS
 | |
| .RE
 | |
| .PP
 | |
| General input options:
 | |
| .TP
 | |
| .B \f[C]\-f\ FILE\ \-\-file=FILE\f[]
 | |
| use a different input file.
 | |
| For stdin, use \- (default: \f[C]$LEDGER_FILE\f[] or
 | |
| \f[C]$HOME/.hledger.journal\f[])
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-\-rules\-file=RULESFILE\f[]
 | |
| Conversion rules file to use when reading CSV (default: FILE.rules)
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-\-separator=CHAR\f[]
 | |
| Field separator to expect when reading CSV (default: \[aq],\[aq])
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-\-alias=OLD=NEW\f[]
 | |
| rename accounts named OLD to NEW
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-\-anon\f[]
 | |
| anonymize accounts and payees
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-\-pivot\ FIELDNAME\f[]
 | |
| use some other field or tag for the account name
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-I\ \-\-ignore\-assertions\f[]
 | |
| ignore any failing balance assertions
 | |
| .RS
 | |
| .RE
 | |
| .PP
 | |
| General reporting options:
 | |
| .TP
 | |
| .B \f[C]\-b\ \-\-begin=DATE\f[]
 | |
| include postings/txns on or after this date
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-e\ \-\-end=DATE\f[]
 | |
| include postings/txns before this date
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-D\ \-\-daily\f[]
 | |
| multiperiod/multicolumn report by day
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-W\ \-\-weekly\f[]
 | |
| multiperiod/multicolumn report by week
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-M\ \-\-monthly\f[]
 | |
| multiperiod/multicolumn report by month
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-Q\ \-\-quarterly\f[]
 | |
| multiperiod/multicolumn report by quarter
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-Y\ \-\-yearly\f[]
 | |
| multiperiod/multicolumn report by year
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-p\ \-\-period=PERIODEXP\f[]
 | |
| set start date, end date, and/or reporting interval all at once using
 | |
| period expressions syntax (overrides the flags above)
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-\-date2\f[]
 | |
| match the secondary date instead (see command help for other effects)
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-U\ \-\-unmarked\f[]
 | |
| include only unmarked postings/txns (can combine with \-P or \-C)
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-P\ \-\-pending\f[]
 | |
| include only pending postings/txns
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-C\ \-\-cleared\f[]
 | |
| include only cleared postings/txns
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-R\ \-\-real\f[]
 | |
| include only non\-virtual postings
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-NUM\ \-\-depth=NUM\f[]
 | |
| hide/aggregate accounts or postings more than NUM levels deep
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-E\ \-\-empty\f[]
 | |
| show items with zero amount, normally hidden (and vice\-versa in
 | |
| hledger\-ui/hledger\-web)
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-B\ \-\-cost\f[]
 | |
| convert amounts to their cost at transaction time (using the transaction
 | |
| price, if any)
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-V\ \-\-value\f[]
 | |
| convert amounts to their market value on the report end date (using the
 | |
| most recent applicable market price, if any)
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-\-auto\f[]
 | |
| apply automated posting rules to modify transactions.
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[C]\-\-forecast\f[]
 | |
| apply periodic transaction rules to generate future transactions, to 6
 | |
| months from now or report end date.
 | |
| .RS
 | |
| .RE
 | |
| .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[].
 | |
| .PP
 | |
| Command\-specific options must be written after the command name, eg:
 | |
| \f[C]hledger\ print\ \-x\f[].
 | |
| .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[].
 | |
| Or, you can run the addon executable directly:
 | |
| \f[C]hledger\-ui\ \-\-watch\f[].
 | |
| .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]\@FILENAME\f[] in a command
 | |
| line.
 | |
| To prevent this expansion of \f[C]\@\f[]\-arguments, precede them with a
 | |
| \f[C]\-\-\f[] 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
 | |
| "problematic" characters, ie spaces, and also characters significant to
 | |
| your shell such as \f[C]<\f[], \f[C]>\f[], \f[C](\f[], \f[C])\f[],
 | |
| \f[C]|\f[] and \f[C]$\f[], 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]\ "accounts\ receivable\ (receivable|payable)"\ amt:\\>100\f[].
 | |
| .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]\\$\[aq]\f[]
 | |
| .PP
 | |
| or:
 | |
| .PP
 | |
| \f[C]hledger\ balance\ cur:\\\\$\f[]
 | |
| .SS Even more escaping
 | |
| .PP
 | |
| When hledger runs an addon executable (eg you type \f[C]hledger\ ui\f[],
 | |
| hledger runs \f[C]hledger\-ui\f[]), it de\-escapes command\-line options
 | |
| and arguments once, so you might need to \f[I]triple\f[]\-escape.
 | |
| Eg in bash, running the ui command and matching the dollar sign,
 | |
| it\[aq]s:
 | |
| .PP
 | |
| \f[C]hledger\ ui\ cur:\[aq]\\\\$\[aq]\f[]
 | |
| .PP
 | |
| or:
 | |
| .PP
 | |
| \f[C]hledger\ ui\ cur:\\\\\\\\$\f[]
 | |
| .PP
 | |
| If you asked why \f[I]four\f[] slashes above, this may help:
 | |
| .PP
 | |
| .TS
 | |
| tab(@);
 | |
| l l.
 | |
| T{
 | |
| unescaped:
 | |
| T}@T{
 | |
| \f[C]$\f[]
 | |
| T}
 | |
| T{
 | |
| escaped:
 | |
| T}@T{
 | |
| \f[C]\\$\f[]
 | |
| T}
 | |
| T{
 | |
| double\-escaped:
 | |
| T}@T{
 | |
| \f[C]\\\\$\f[]
 | |
| T}
 | |
| T{
 | |
| triple\-escaped:
 | |
| T}@T{
 | |
| \f[C]\\\\\\\\$\f[]
 | |
| 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:\\\\$\f[]
 | |
| .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:\\$\f[]
 | |
| .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[])
 | |
| .IP \[bu] 2
 | |
| run add\-on executables directly (\f[C]hledger\-ui\ \-OPTIONS\ ARGS\f[])
 | |
| .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[] to troubleshoot.
 | |
| .SS Unicode characters
 | |
| .PP
 | |
| hledger is expected to handle unicode (non\-ascii) characters, but this
 | |
| requires a well\-configured environment.
 | |
| .PP
 | |
| To handle unicode characters in the command line or input data, a system
 | |
| locale that can decode them must be configured (POSIX\[aq]s default
 | |
| \f[C]C\f[] locale will not work).
 | |
| Eg in bash, you could do:
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| export\ LANG=en_US.UTF\-8
 | |
| \f[]
 | |
| .fi
 | |
| .PP
 | |
| See Troubleshooting for more about this.
 | |
| .PP
 | |
| Unicode characters should appear correctly in hledger\[aq]s output.
 | |
| For the hledger and hledger\-ui tools, this requires that
 | |
| .IP \[bu] 2
 | |
| your terminal supports unicode
 | |
| .IP \[bu] 2
 | |
| the terminal\[aq]s font includes the required unicode glyphs
 | |
| .IP \[bu] 2
 | |
| the terminal is configured to display "wide" characters as double width
 | |
| (otherwise report alignment will be off)
 | |
| .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[] (or on Windows,
 | |
| something like \f[C]C:/Users/USER/.hledger.journal\f[]).
 | |
| You can override this with the \f[C]$LEDGER_FILE\f[] environment
 | |
| variable:
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| $\ setenv\ LEDGER_FILE\ ~/finance/2016.journal
 | |
| $\ hledger\ stats
 | |
| \f[]
 | |
| .fi
 | |
| .PP
 | |
| or with the \f[C]\-f/\-\-file\f[] option:
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| $\ hledger\ \-f\ /some/file\ stats
 | |
| \f[]
 | |
| .fi
 | |
| .PP
 | |
| The file name \f[C]\-\f[] (hyphen) means standard input:
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| $\ cat\ some.journal\ |\ hledger\ \-f\-
 | |
| \f[]
 | |
| .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 "reader" in turn:
 | |
| .PP
 | |
| .TS
 | |
| tab(@);
 | |
| lw(10.3n) lw(33.5n) lw(26.2n).
 | |
| T{
 | |
| Reader:
 | |
| T}@T{
 | |
| Reads:
 | |
| T}@T{
 | |
| Used for file extensions:
 | |
| T}
 | |
| _
 | |
| T{
 | |
| \f[C]journal\f[]
 | |
| T}@T{
 | |
| hledger\[aq]s journal format, also some Ledger journals
 | |
| T}@T{
 | |
| \f[C]\&.journal\f[] \f[C]\&.j\f[] \f[C]\&.hledger\f[] \f[C]\&.ledger\f[]
 | |
| T}
 | |
| T{
 | |
| \f[C]timeclock\f[]
 | |
| T}@T{
 | |
| timeclock files (precise time logging)
 | |
| T}@T{
 | |
| \f[C]\&.timeclock\f[]
 | |
| T}
 | |
| T{
 | |
| \f[C]timedot\f[]
 | |
| T}@T{
 | |
| timedot files (approximate time logging)
 | |
| T}@T{
 | |
| \f[C]\&.timedot\f[]
 | |
| T}
 | |
| T{
 | |
| \f[C]csv\f[]
 | |
| T}@T{
 | |
| comma\-separated values (data interchange)
 | |
| T}@T{
 | |
| \f[C]\&.csv\f[]
 | |
| T}
 | |
| .TE
 | |
| .PP
 | |
| If needed (eg to ensure correct error messages when a file has the
 | |
| "wrong" 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[]
 | |
| .fi
 | |
| .PP
 | |
| You can also specify multiple \f[C]\-f\f[] 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[].
 | |
| .SS Smart dates
 | |
| .PP
 | |
| hledger\[aq]s user interfaces accept a flexible "smart date" 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[], \f[C]2004\-01\-01\f[], \f[C]2004.9.1\f[]
 | |
| 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[]
 | |
| T}@T{
 | |
| start of year
 | |
| T}
 | |
| T{
 | |
| \f[C]2004/10\f[]
 | |
| T}@T{
 | |
| start of month
 | |
| T}
 | |
| T{
 | |
| \f[C]10/1\f[]
 | |
| T}@T{
 | |
| month and day in current year
 | |
| T}
 | |
| T{
 | |
| \f[C]21\f[]
 | |
| T}@T{
 | |
| day in current month
 | |
| T}
 | |
| T{
 | |
| \f[C]october,\ oct\f[]
 | |
| T}@T{
 | |
| start of month in current year
 | |
| T}
 | |
| T{
 | |
| \f[C]yesterday,\ today,\ tomorrow\f[]
 | |
| T}@T{
 | |
| \-1, 0, 1 days from today
 | |
| T}
 | |
| T{
 | |
| \f[C]last/this/next\ day/week/month/quarter/year\f[]
 | |
| T}@T{
 | |
| \-1, 0, 1 periods from the current period
 | |
| T}
 | |
| T{
 | |
| \f[C]20181201\f[]
 | |
| T}@T{
 | |
| 8 digit YYYYMMDD with valid year month and day
 | |
| T}
 | |
| T{
 | |
| \f[C]201812\f[]
 | |
| 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[]
 | |
| T}@T{
 | |
| 6 digits with an invalid month is parsed as start of 6\-digit year
 | |
| T}
 | |
| T{
 | |
| \f[C]20181301\f[]
 | |
| T}@T{
 | |
| 8 digits with an invalid month is parsed as start of 8\-digit year
 | |
| T}
 | |
| T{
 | |
| \f[C]20181232\f[]
 | |
| T}@T{
 | |
| 8 digits with an invalid day gives an error
 | |
| T}
 | |
| T{
 | |
| \f[C]201801012\f[]
 | |
| 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[],
 | |
| \f[C]\-e/\-\-end\f[], \f[C]\-p/\-\-period\f[] or a \f[C]date:\f[] query
 | |
| (described below).
 | |
| All of these accept the smart date syntax.
 | |
| One important thing to be aware of when specifying end dates: as in
 | |
| Ledger, end dates are exclusive, so you need to write the date
 | |
| \f[I]after\f[] the last day you want to include.
 | |
| .PP
 | |
| Examples:
 | |
| .PP
 | |
| .TS
 | |
| tab(@);
 | |
| l l.
 | |
| T{
 | |
| \f[C]\-b\ 2016/3/17\f[]
 | |
| T}@T{
 | |
| begin on St.
 | |
| Patrick\[aq]s day 2016
 | |
| T}
 | |
| T{
 | |
| \f[C]\-e\ 12/1\f[]
 | |
| 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[]
 | |
| T}@T{
 | |
| all transactions on or after the 1st of the current month
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ thismonth\f[]
 | |
| T}@T{
 | |
| all transactions in the current month
 | |
| T}
 | |
| T{
 | |
| \f[C]date:2016/3/17\-\f[]
 | |
| T}@T{
 | |
| the above written as queries instead
 | |
| T}
 | |
| T{
 | |
| \f[C]date:\-12/1\f[]
 | |
| T}@T{
 | |
| T}
 | |
| T{
 | |
| \f[C]date:thismonth\-\f[]
 | |
| T}@T{
 | |
| T}
 | |
| T{
 | |
| \f[C]date:thismonth\f[]
 | |
| 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[],
 | |
| \f[C]\-W/\-\-weekly\f[], \f[C]\-M/\-\-monthly\f[],
 | |
| \f[C]\-Q/\-\-quarterly\f[], or \f[C]\-Y/\-\-yearly\f[].
 | |
| More complex intervals may be specified with a period expression.
 | |
| Report intervals can not be specified with a query, currently.
 | |
| .SS Period expressions
 | |
| .PP
 | |
| The \f[C]\-p/\-\-period\f[] 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\ "from\ 2009/1/1\ to\ 2009/4/1"\f[]
 | |
| .PP
 | |
| Keywords like "from" and "to" are optional, and so are the spaces, as
 | |
| long as you don\[aq]t run two dates together.
 | |
| "to" can also be written as "\-".
 | |
| These are equivalent to the above:
 | |
| .PP
 | |
| .TS
 | |
| tab(@);
 | |
| l.
 | |
| T{
 | |
| \f[C]\-p\ "2009/1/1\ 2009/4/1"\f[]
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p2009/1/1to2009/4/1\f[]
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p2009/1/1\-2009/4/1\f[]
 | |
| 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\ "1/1\ 4/1"\f[]
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "january\-apr"\f[]
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "this\ year\ to\ 4/1"\f[]
 | |
| 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\ "from\ 2009/1/1"\f[]
 | |
| T}@T{
 | |
| everything after january 1, 2009
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "from\ 2009/1"\f[]
 | |
| T}@T{
 | |
| the same
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "from\ 2009"\f[]
 | |
| T}@T{
 | |
| the same
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "to\ 2009"\f[]
 | |
| T}@T{
 | |
| everything before january 1, 2009
 | |
| T}
 | |
| .TE
 | |
| .PP
 | |
| A single date with no "from" or "to" defines both the start and end date
 | |
| like so:
 | |
| .PP
 | |
| .TS
 | |
| tab(@);
 | |
| l l.
 | |
| T{
 | |
| \f[C]\-p\ "2009"\f[]
 | |
| T}@T{
 | |
| the year 2009; equivalent to "2009/1/1 to 2010/1/1"
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "2009/1"\f[]
 | |
| T}@T{
 | |
| the month of jan; equivalent to "2009/1/1 to 2009/2/1"
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "2009/1/1"\f[]
 | |
| T}@T{
 | |
| just that day; equivalent to "2009/1/1 to 2009/1/2"
 | |
| T}
 | |
| .TE
 | |
| .PP
 | |
| The argument of \f[C]\-p\f[] can also begin with, or be, a report
 | |
| interval expression.
 | |
| The basic report intervals are \f[C]daily\f[], \f[C]weekly\f[],
 | |
| \f[C]monthly\f[], \f[C]quarterly\f[], or \f[C]yearly\f[], which have the
 | |
| same effect as the \f[C]\-D\f[],\f[C]\-W\f[],\f[C]\-M\f[],\f[C]\-Q\f[],
 | |
| or \f[C]\-Y\f[] flags.
 | |
| Between report interval and start/end dates (if any), the word
 | |
| \f[C]in\f[] is optional.
 | |
| Examples:
 | |
| .PP
 | |
| .TS
 | |
| tab(@);
 | |
| l.
 | |
| T{
 | |
| \f[C]\-p\ "weekly\ from\ 2009/1/1\ to\ 2009/4/1"\f[]
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "monthly\ in\ 2008"\f[]
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "quarterly"\f[]
 | |
| T}
 | |
| .TE
 | |
| .PP
 | |
| Note that \f[C]weekly\f[], \f[C]monthly\f[], \f[C]quarterly\f[] and
 | |
| \f[C]yearly\f[] 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\ "weekly\ from\ 2009/1/1\ to\ 2009/4/1"\f[] \-\- starts on
 | |
| 2008/12/29, closest preceeding Monday
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "monthly\ in\ 2008/11/25"\f[] \-\- starts on 2018/11/01
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "quarterly\ from\ 2009\-05\-05\ to\ 2009\-06\-01"\f[] \-
 | |
| starts on 2009/04/01, ends on 2009/06/30, which are first and last days
 | |
| of Q2 2009
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "yearly\ from\ 2009\-12\-29"\f[] \- 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[], \f[C]bimonthly\f[],
 | |
| \f[C]every\ day|week|month|quarter|year\f[],
 | |
| \f[C]every\ N\ days|weeks|months|quarters|years\f[].
 | |
| .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\ "bimonthly\ from\ 2008"\f[] \-\- periods will have boundaries
 | |
| on 2008/01/01, 2008/03/01, ...
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "every\ 2\ weeks"\f[] \-\- starts on closest preceeding Monday
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "every\ 5\ month\ from\ 2009/03"\f[] \-\- 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[], \f[C]every\ <weekday>\f[],
 | |
| \f[C]every\ Nth\ day\ [of\ month]\f[],
 | |
| \f[C]every\ Nth\ weekday\ [of\ month]\f[],
 | |
| \f[C]every\ MM/DD\ [of\ year]\f[], \f[C]every\ Nth\ MMM\ [of\ year]\f[],
 | |
| \f[C]every\ MMM\ Nth\ [of\ year]\f[].
 | |
| .PP
 | |
| Examples:
 | |
| .PP
 | |
| .TS
 | |
| tab(@);
 | |
| l.
 | |
| T{
 | |
| \f[C]\-p\ "every\ 2nd\ day\ of\ week"\f[] \-\- periods will go from Tue
 | |
| to Tue
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "every\ Tue"\f[] \-\- same
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "every\ 15th\ day"\f[] \-\- period boundaries will be on 15th
 | |
| of each month
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "every\ 2nd\ Monday"\f[] \-\- period boundaries will be on
 | |
| second Monday of each month
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "every\ 11/05"\f[] \-\- yearly periods with boundaries on 5th
 | |
| of Nov
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "every\ 5th\ Nov"\f[] \-\- same
 | |
| T}
 | |
| T{
 | |
| \f[C]\-p\ "every\ Nov\ 5th"\f[] \-\- 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\ "every\ 16th\ day"\f[]
 | |
| .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\ "every\ 3rd\ day\ of\ week"\f[]
 | |
| .SS Depth limiting
 | |
| .PP
 | |
| With the \f[C]\-\-depth\ N\f[] option (short form: \f[C]\-N\f[]),
 | |
| 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[] query argument (so
 | |
| \f[C]\-2\f[], \f[C]\-\-depth=2\f[] or \f[C]depth:2\f[] 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[] option causes it to sum and organize
 | |
| hierarchy based on the value of some other field instead.
 | |
| FIELD can be: \f[C]code\f[], \f[C]description\f[], \f[C]payee\f[],
 | |
| \f[C]note\f[], or the full name (case insensitive) of any tag.
 | |
| As with account names, values containing \f[C]colon:separated:parts\f[]
 | |
| will be displayed hierarchically in reports.
 | |
| .PP
 | |
| \f[C]\-\-pivot\f[] 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[]
 | |
| .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[]
 | |
| .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[]
 | |
| .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[]
 | |
| .fi
 | |
| .PP
 | |
| Another way (the acct: query matches against the pivoted "account
 | |
| name"):
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| $\ hledger\ balance\ \-\-pivot\ member\ acct:.
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ \-2\ EUR\ \ John\ Doe
 | |
| \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ \-2\ EUR
 | |
| \f[]
 | |
| .fi
 | |
| .SS Cost
 | |
| .PP
 | |
| The \f[C]\-B/\-\-cost\f[] flag converts amounts to their cost at
 | |
| transaction time, if they have a transaction price specified.
 | |
| .SS Market value
 | |
| .PP
 | |
| The \f[C]\-V/\-\-value\f[] flag converts reported amounts to their
 | |
| current market value.
 | |
| .PD 0
 | |
| .P
 | |
| .PD
 | |
| Specifically, when there is a market price (P directive) for the
 | |
| amount\[aq]s commodity, dated on or before today\[aq]s date (or the
 | |
| report end date if specified), the amount will be converted to the
 | |
| price\[aq]s commodity.
 | |
| .PP
 | |
| When there are multiple applicable P directives, \-V chooses the most
 | |
| recent one, or in case of equal dates, the last\-parsed one.
 | |
| .PP
 | |
| For example:
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| #\ one\ euro\ is\ worth\ this\ many\ dollars\ from\ nov\ 1
 | |
| P\ 2016/11/01\ €\ $1.10
 | |
| 
 | |
| #\ purchase\ some\ euros\ on\ nov\ 3
 | |
| 2016/11/3
 | |
| \ \ \ \ assets:euros\ \ \ \ \ \ \ \ €100
 | |
| \ \ \ \ assets:checking
 | |
| 
 | |
| #\ the\ euro\ is\ worth\ fewer\ dollars\ by\ dec\ 21
 | |
| P\ 2016/12/21\ €\ $1.03
 | |
| \f[]
 | |
| .fi
 | |
| .PP
 | |
| How many euros do I have ?
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| $\ hledger\ \-f\ t.j\ bal\ \-N\ euros
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ €100\ \ assets:euros
 | |
| \f[]
 | |
| .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[]
 | |
| .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[]
 | |
| .fi
 | |
| .PP
 | |
| Currently, hledger\[aq]s \-V only uses market prices recorded with P
 | |
| directives, not transaction prices (unlike Ledger).
 | |
| .PP
 | |
| Currently, \-V has a limitation in multicolumn balance reports: it uses
 | |
| the market prices on the report end date for all columns.
 | |
| (Instead of the prices on each column\[aq]s end date.)
 | |
| .SS Combining \-B and \-V
 | |
| .PP
 | |
| Using \-B/\-\-cost and \-V/\-\-value together is currently allowed, but
 | |
| the results are probably not meaningful.
 | |
| Let us know if you find a use for this.
 | |
| .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[] option.
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| $\ hledger\ balance\ \-o\ \-\ \ \ \ \ #\ write\ to\ stdout\ (the\ default)
 | |
| $\ hledger\ balance\ \-o\ FILE\ \ #\ write\ to\ FILE
 | |
| \f[]
 | |
| .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[] option, or by
 | |
| specifying a \f[C]\&.csv\f[] or \f[C]\&.html\f[] file extension with
 | |
| \f[C]\-o/\-\-output\-file\f[].
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| $\ hledger\ balance\ \-O\ csv\ \ \ \ \ \ \ #\ write\ CSV\ to\ stdout
 | |
| $\ hledger\ balance\ \-o\ FILE.csv\ \ #\ write\ CSV\ to\ FILE.csv
 | |
| \f[]
 | |
| .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[], \f[C]desc:REGEX\f[], \f[C]cur:REGEX\f[],
 | |
| \f[C]tag:...=REGEX\f[]
 | |
| .IP \[bu] 2
 | |
| CSV rules conditional blocks: \f[C]if\ REGEX\ ...\f[]
 | |
| .IP \[bu] 2
 | |
| account alias directives and options:
 | |
| \f[C]alias\ /REGEX/\ =\ REPLACEMENT\f[],
 | |
| \f[C]\-\-alias\ /REGEX/=REPLACEMENT\f[]
 | |
| .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 (\\<, \\>, \\b, \\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[] directive and \f[C]\-\-alias\f[] option, regular
 | |
| expressions must be enclosed in forward slashes (\f[C]/REGEX/\f[]).
 | |
| Elsewhere in hledger, these are not required.
 | |
| .IP \[bu] 2
 | |
| In queries, to match a regular expression metacharacter like \f[C]$\f[]
 | |
| as a literal character, prepend a backslash.
 | |
| Eg to search for amounts with the dollar sign in hledger\-web, write
 | |
| \f[C]cur:\\$\f[].
 | |
| .IP \[bu] 2
 | |
| On the command line, some metacharacters like \f[C]$\f[] 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[BC]not:\f[B]\f[], eg to
 | |
| exclude a particular subaccount.
 | |
| .TP
 | |
| .B \f[B]\f[BC]REGEX\f[B], \f[BC]acct:REGEX\f[B]\f[]
 | |
| match account names by this regular expression.
 | |
| (With no prefix, \f[C]acct:\f[] is assumed.)
 | |
| .RS
 | |
| .RE
 | |
| same as above
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[B]\f[BC]amt:N,\ amt:<N,\ amt:<=N,\ amt:>N,\ amt:>=N\f[B]\f[]
 | |
| 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.
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[B]\f[BC]code:REGEX\f[B]\f[]
 | |
| match by transaction code (eg check number)
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[B]\f[BC]cur:REGEX\f[B]\f[]
 | |
| 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[]).
 | |
| Note, to match characters which are regex\-significant, like the dollar
 | |
| sign (\f[C]$\f[]), you need to prepend \f[C]\\\f[].
 | |
| 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]\\$\[aq]\f[] or
 | |
| \f[C]hledger\ print\ cur:\\\\$\f[].
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[B]\f[BC]desc:REGEX\f[B]\f[]
 | |
| match transaction descriptions.
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[B]\f[BC]date:PERIODEXPR\f[B]\f[]
 | |
| match dates within the specified period.
 | |
| PERIODEXPR is a period expression (with no report interval).
 | |
| Examples: \f[C]date:2016\f[], \f[C]date:thismonth\f[],
 | |
| \f[C]date:2000/2/1\-2/15\f[], \f[C]date:lastweek\-\f[].
 | |
| If the \f[C]\-\-date2\f[] command line flag is present, this matches
 | |
| secondary dates instead.
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[B]\f[BC]date2:PERIODEXPR\f[B]\f[]
 | |
| match secondary dates within the specified period.
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[B]\f[BC]depth:N\f[B]\f[]
 | |
| match (or display, depending on command) accounts at or above this depth
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[B]\f[BC]note:REGEX\f[B]\f[]
 | |
| match transaction notes (part of description right of \f[C]|\f[], or
 | |
| whole description when there\[aq]s no \f[C]|\f[])
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[B]\f[BC]payee:REGEX\f[B]\f[]
 | |
| match transaction payee/payer names (part of description left of
 | |
| \f[C]|\f[], or whole description when there\[aq]s no \f[C]|\f[])
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[B]\f[BC]real:,\ real:0\f[B]\f[]
 | |
| match real or virtual postings respectively
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[B]\f[BC]status:,\ status:!,\ status:*\f[B]\f[]
 | |
| match unmarked, pending, or cleared transactions respectively
 | |
| .RS
 | |
| .RE
 | |
| .TP
 | |
| .B \f[B]\f[BC]tag:REGEX[=REGEX]\f[B]\f[]
 | |
| 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.
 | |
| .RS
 | |
| .RE
 | |
| .PP
 | |
| The following special search term is used automatically in hledger\-web,
 | |
| only:
 | |
| .TP
 | |
| .B \f[B]\f[BC]inacct:ACCTNAME\f[B]\f[]
 | |
| tells hledger\-web to show the transaction register for this account.
 | |
| Can be filtered further with \f[C]acct\f[] etc.
 | |
| .RS
 | |
| .RE
 | |
| .PP
 | |
| Some of these can also be expressed as command\-line options (eg
 | |
| \f[C]depth:2\f[] is equivalent to \f[C]\-\-depth\ 2\f[]).
 | |
| Generally you can mix options and query arguments, and the resulting
 | |
| query will be their intersection (perhaps excluding the
 | |
| \f[C]\-p/\-\-period\f[] option).
 | |
| .SH COMMANDS
 | |
| .PP
 | |
| hledger provides a number of subcommands; \f[C]hledger\f[] with no
 | |
| arguments shows a list.
 | |
| .PP
 | |
| If you install additional \f[C]hledger\-*\f[] packages, or if you put
 | |
| programs or scripts named \f[C]hledger\-NAME\f[] 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[]).
 | |
| You can also write one of the standard short aliases displayed in
 | |
| parentheses in the command list (\f[C]hledger\ b\f[]), or any any
 | |
| unambiguous prefix of a command name (\f[C]hledger\ inc\f[]).
 | |
| .PP
 | |
| Here are all the builtin commands in alphabetical order.
 | |
| See also \f[C]hledger\f[] for a more organised command list, and
 | |
| \f[C]hledger\ CMD\ \-h\f[] 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[], it uses indentation to show the account
 | |
| hierarchy.
 | |
| In flat mode you can add \f[C]\-\-drop\ N\f[] to omit the first few
 | |
| account name components.
 | |
| Account names can be depth\-clipped with \f[C]depth:N\f[] or
 | |
| \f[C]\-\-depth\ N\f[] or \f[C]\-N\f[].
 | |
| .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[]
 | |
| .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[]
 | |
| .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[] 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[] 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[] and follow the prompts.
 | |
| You can add as many transactions as you like; when you are finished,
 | |
| enter \f[C]\&.\f[] 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[], \f[C]today\f[],
 | |
| \f[C]tomorrow\f[]).
 | |
| 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[] 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[]
 | |
| .fi
 | |
| .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 "opening balances" 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[]
 | |
| .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[], by their balance amount.
 | |
| .PP
 | |
| "Boring" 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 "liabilities" account.) Use \f[C]\-\-no\-elide\f[] to
 | |
| prevent this.
 | |
| .PP
 | |
| Account balances are "inclusive" \- 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[] to show them.
 | |
| .PP
 | |
| A final total is displayed by default; use \f[C]\-N/\-\-no\-total\f[] to
 | |
| suppress it, eg:
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| $\ hledger\ balance\ \-p\ 2008/6\ expenses\ \-\-no\-total
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $2\ \ expenses
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ \ \ food
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $1\ \ \ \ supplies
 | |
| \f[]
 | |
| .fi
 | |
| .SS Customising the classic balance report
 | |
| .PP
 | |
| You can customise the layout of classic balance reports with
 | |
| \f[C]\-\-format\ FMT\f[]:
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| $\ hledger\ balance\ \-\-format\ "%20(account)\ %12(total)"
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ assets\ \ \ \ \ \ \ \ \ \ $\-1
 | |
| \ \ \ \ \ \ \ \ \ bank:saving\ \ \ \ \ \ \ \ \ \ \ $1
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ cash\ \ \ \ \ \ \ \ \ \ $\-2
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ expenses\ \ \ \ \ \ \ \ \ \ \ $2
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ food\ \ \ \ \ \ \ \ \ \ \ $1
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ supplies\ \ \ \ \ \ \ \ \ \ \ $1
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ income\ \ \ \ \ \ \ \ \ \ $\-2
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ gifts\ \ \ \ \ \ \ \ \ \ $\-1
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ salary\ \ \ \ \ \ \ \ \ \ $\-1
 | |
| \ \ \ liabilities:debts\ \ \ \ \ \ \ \ \ \ \ $1
 | |
| \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0
 | |
| \f[]
 | |
| .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[]
 | |
| .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[] \- 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[] \- the account\[aq]s name
 | |
| .IP \[bu] 2
 | |
| \f[C]total\f[] \- 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[] \- render on multiple lines, bottom\-aligned (the default)
 | |
| .IP \[bu] 2
 | |
| \f[C]%^\f[] \- render on multiple lines, top\-aligned
 | |
| .IP \[bu] 2
 | |
| \f[C]%,\f[] \- render on one line, comma\-separated
 | |
| .PP
 | |
| There are some quirks.
 | |
| Eg in one\-line mode, \f[C]%(depth_spacer)\f[] has no effect, instead
 | |
| \f[C]%(account)\f[] has indentation built in.
 | |
|  Experimentation may be needed to get pleasing results.
 | |
| .PP
 | |
| Some example formats:
 | |
| .IP \[bu] 2
 | |
| \f[C]%(total)\f[] \- the account\[aq]s total
 | |
| .IP \[bu] 2
 | |
| \f[C]%\-20.20(account)\f[] \- 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[] \- 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[] \- 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[] environment variable is not set to \f[C]dumb\f[]
 | |
| .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[].
 | |
| In this mode, accounts (unless depth\-clipped) show their full names and
 | |
| "exclusive" balance, excluding any subaccount balances.
 | |
| In this mode, you can also use \f[C]\-\-drop\ N\f[] 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[]
 | |
| .fi
 | |
| .SS Depth limited balance reports
 | |
| .PP
 | |
| With \f[C]\-\-depth\ N\f[] or \f[C]depth:N\f[] or just \f[C]\-N\f[],
 | |
| 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[]
 | |
| .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[]
 | |
| .fi
 | |
| .RE
 | |
| .IP "2." 3
 | |
| With \f[C]\-\-cumulative\f[]: 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[]
 | |
| .fi
 | |
| .RE
 | |
| .IP "3." 3
 | |
| With \f[C]\-\-historical/\-H\f[]: 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\ ^assets\ ^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[]
 | |
| .fi
 | |
| .RE
 | |
| .PP
 | |
| Multicolumn balance reports display accounts in flat mode by default; to
 | |
| see the hierarchy, use \f[C]\-\-tree\f[].
 | |
| .PP
 | |
| With a reporting interval (like \f[C]\-\-quarterly\f[] 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 "full" and comparable
 | |
| to the others.
 | |
| .PP
 | |
| The \f[C]\-E/\-\-empty\f[] 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[] flag adds an additional column showing
 | |
| the total for each row.
 | |
| .PP
 | |
| The \f[C]\-A/\-\-average\f[] 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[]
 | |
| .fi
 | |
| .PP
 | |
| Limitations:
 | |
| .PP
 | |
| In multicolumn reports the \f[C]\-V/\-\-value\f[] 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[], 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
 | |
| ~\ 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[]
 | |
| .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[]
 | |
| .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[] actual amount includes the gifts and supplies
 | |
| transactions, but the \f[C]expenses:gifts\f[] and
 | |
| \f[C]expenses:supplies\f[] 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[]
 | |
| 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[]
 | |
| .fi
 | |
| .PP
 | |
| You can roll over unspent budgets to next period with
 | |
| \f[C]\-\-cumulative\f[]:
 | |
| .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[]
 | |
| .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]
 | |
| ~\ monthly\ from\ 2019/01
 | |
| \ \ \ \ expenses:personal\ \ \ \ \ \ \ \ \ \ \ \ \ $1,000.00
 | |
| \ \ \ \ expenses:personal:electronics\ \ \ \ $100.00
 | |
| \ \ \ \ liabilities
 | |
| \f[]
 | |
| .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[] and
 | |
| \f[C]expenses\f[] is $1100.
 | |
| .PP
 | |
| Transactions in \f[C]expenses:personal:electronics\f[] will be counted
 | |
| both towards its $100 budget and $1100 of \f[C]expenses:personal\f[] ,
 | |
| and transactions in any other subaccount of \f[C]expenses:personal\f[]
 | |
| would be counted towards only towards the budget of
 | |
| \f[C]expenses:personal\f[].
 | |
| .PP
 | |
| For example, let\[aq]s consider these transactions:
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| ~\ 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[]
 | |
| .fi
 | |
| .PP
 | |
| As you can see, we have transactions in
 | |
| \f[C]expenses:personal:electronics:upgrades\f[] and
 | |
| \f[C]expenses:personal:train\ tickets\f[], 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[] and
 | |
| \f[C]expenses:personal\f[] 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[]
 | |
| .fi
 | |
| .PP
 | |
| And with \f[C]\-\-empty\f[], 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[]
 | |
| .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[] or
 | |
| \f[C]liability\f[] 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[]
 | |
| .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[]/\f[C]\-\-cumulative\f[]/\f[C]\-\-historical\f[].
 | |
| Normally balancesheet shows historical ending balances, which is what
 | |
| you need for a balance sheet; note this means it ignores report begin
 | |
| dates.
 | |
| .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[] 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[]
 | |
| .fi
 | |
| .SS cashflow
 | |
| .PP
 | |
| cashflow, cf
 | |
| .PD 0
 | |
| .P
 | |
| .PD
 | |
| This command displays a simple cashflow statement, showing changes in
 | |
| "cash" accounts.
 | |
| It assumes that these accounts are under a top\-level \f[C]asset\f[]
 | |
| account (case insensitive, plural forms also allowed) and do not contain
 | |
| \f[C]receivable\f[] or \f[C]A/R\f[] 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[]
 | |
| .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[]/\f[C]\-\-cumulative\f[]/\f[C]\-\-historical\f[].
 | |
| .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 "closing balances" transaction and an "opening balances"
 | |
| 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 "equity:closing balances".
 | |
| The opening transaction transfers balances from "equity:opening
 | |
| balances".
 | |
| You can chose to print just one of the transactions by using the
 | |
| \f[C]\-\-opening\f[] or \f[C]\-\-closing\f[] 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[].)
 | |
| .PP
 | |
| If you\[aq]re running a business, you might also use this command to
 | |
| "close the books" 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
 | |
| "equity:retained earnings".)
 | |
| .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[].
 | |
| Eg, to close/open on the 2018/2019 boundary, use \f[C]\-e\ 2019\f[].
 | |
| You can also use \-p or \f[C]date:PERIOD\f[] (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[]) 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
 | |
| 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[]
 | |
| .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[]
 | |
| .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[]
 | |
| .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[]
 | |
| .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[]
 | |
| .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[] 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[],
 | |
| \f[C]\-\-man\f[], \f[C]\-\-pager\f[], \f[C]\-\-cat\f[] flags.
 | |
| .PP
 | |
| Examples:
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| $\ hledger\ help
 | |
| Please\ choose\ a\ manual\ by\ typing\ "hledger\ help\ MANUAL"\ (a\ substring\ is\ ok).
 | |
| Manuals:\ hledger\ hledger\-ui\ hledger\-web\ hledger\-api\ journal\ csv\ timeclock\ timedot
 | |
| \f[]
 | |
| .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[]
 | |
| .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[]
 | |
| .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[] 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[]
 | |
| .fi
 | |
| .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[]
 | |
| or \f[C]income\f[] or \f[C]expense\f[] 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[] (or \f[C]revenue\f[]) and \f[C]expense\f[] (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[]
 | |
| .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[]/\f[C]\-\-cumulative\f[]/\f[C]\-\-historical\f[].
 | |
| .PP
 | |
| This command also supports output destination and output format
 | |
| selection.
 | |
| .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[]
 | |
| .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[]/\f[C]\-\-explicit\f[] 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[] 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[]/\f[C]\-\-cost\f[], amounts with transaction prices are
 | |
| converted to cost using that price.
 | |
| This can be used for troubleshooting.
 | |
| .PP
 | |
| With \f[C]\-m\f[]/\f[C]\-\-match\f[] 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[], for each FILE being read, hledger reads (and
 | |
| writes) a special state file (\f[C]\&.latest.FILE\f[] 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[]
 | |
| .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
 | |
| "txnidx","date","date2","status","code","description","comment","account","amount","commodity","credit","debit","posting\-status","posting\-comment"
 | |
| "1","2008/01/01","","","","income","","assets:bank:checking","1","$","","1","",""
 | |
| "1","2008/01/01","","","","income","","income:salary","\-1","$","1","","",""
 | |
| "2","2008/06/01","","","","gift","","assets:bank:checking","1","$","","1","",""
 | |
| "2","2008/06/01","","","","gift","","income:gifts","\-1","$","1","","",""
 | |
| "3","2008/06/02","","","","save","","assets:bank:saving","1","$","","1","",""
 | |
| "3","2008/06/02","","","","save","","assets:bank:checking","\-1","$","1","","",""
 | |
| "4","2008/06/03","","*","","eat\ &\ shop","","expenses:food","1","$","","1","",""
 | |
| "4","2008/06/03","","*","","eat\ &\ shop","","expenses:supplies","1","$","","1","",""
 | |
| "4","2008/06/03","","*","","eat\ &\ shop","","assets:cash","\-2","$","2","","",""
 | |
| "5","2008/12/31","","*","","pay\ off","","liabilities:debts","1","$","","1","",""
 | |
| "5","2008/12/31","","*","","pay\ off","","assets:bank:checking","\-1","$","1","","",""
 | |
| \f[]
 | |
| .fi
 | |
| .IP \[bu] 2
 | |
| There is one CSV record per posting, with the parent transaction\[aq]s
 | |
| fields repeated.
 | |
| .IP \[bu] 2
 | |
| The "txnidx" (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 "commodity" (the symbol) and "amount"
 | |
| (numeric quantity) fields.
 | |
| .IP \[bu] 2
 | |
| The numeric amount is repeated in either the "credit" or "debit" 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[]
 | |
| .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[]
 | |
| .fi
 | |
| .PP
 | |
| With \-\-date2, it shows and sorts by secondary date instead.
 | |
| .PP
 | |
| The \f[C]\-\-historical\f[]/\f[C]\-H\f[] 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[]
 | |
| .fi
 | |
| .PP
 | |
| The \f[C]\-\-depth\f[] option limits the amount of sub\-account detail
 | |
| displayed.
 | |
| .PP
 | |
| The \f[C]\-\-average\f[]/\f[C]\-A\f[] 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[] (see below).
 | |
| It is affected by \f[C]\-\-historical\f[].
 | |
| It works best when showing just one account and one commodity.
 | |
| .PP
 | |
| The \f[C]\-\-related\f[]/\f[C]\-r\f[] flag shows the \f[I]other\f[]
 | |
| postings in the transactions of the postings which would normally be
 | |
| shown.
 | |
| .PP
 | |
| The \f[C]\-\-invert\f[] 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[]
 | |
| .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[]
 | |
| .fi
 | |
| .PP
 | |
| Periods with no activity, and summary postings with a zero amount, are
 | |
| not shown by default; use the \f[C]\-\-empty\f[]/\f[C]\-E\f[] 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[]
 | |
| .fi
 | |
| .PP
 | |
| Often, you\[aq]ll want to see just one line per interval.
 | |
| The \f[C]\-\-depth\f[] 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[]
 | |
| .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[] environment
 | |
| variable (not a bash shell variable) or by using the
 | |
| \f[C]\-\-width\f[]/\f[C]\-w\f[] 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[] .
 | |
| 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[]
 | |
| .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[]
 | |
| .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\ ^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"\[aq]
 | |
| hledger\-rewrite.hs\ \-f\ rewrites.hledger
 | |
| \f[]
 | |
| .fi
 | |
| .PP
 | |
| rewrites.hledger may consist of entries like:
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| =\ ^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[]
 | |
| .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\ "ACCT\ \ AMTEXPR"\ ...
 | |
| $\ hledger\ rewrite\ \-\-\ ^income\ \ \ \ \ \ \ \ \-\-add\-posting\ \[aq](liabilities:tax)\ \ *.33\[aq]
 | |
| $\ hledger\ rewrite\ \-\-\ expenses:gifts\ \-\-add\-posting\ \[aq](budget:gifts)\ \ *\-1"\[aq]
 | |
| $\ hledger\ rewrite\ \-\-\ ^income\ \ \ \ \ \ \ \ \-\-add\-posting\ \[aq](budget:foreign\ currency)\ \ *0.25\ JPY;\ diversify\[aq]
 | |
| \f[]
 | |
| .fi
 | |
| .PP
 | |
| Argument for \f[C]\-\-add\-posting\f[] option is a usual posting of
 | |
| transaction with an exception for amount specification.
 | |
| More precisely, you can use \f[C]\[aq]*\[aq]\f[] (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 "Automated Transactions"
 | |
| 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[]
 | |
| .fi
 | |
| .PP
 | |
| Make contents look like this:
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| =\ ^income
 | |
| \ \ \ \ (liabilities:tax)\ \ *.33
 | |
| 
 | |
| =\ expenses:gifts
 | |
| \ \ \ \ budget:gifts\ \ *\-1
 | |
| \ \ \ \ assets:budget\ \ *1
 | |
| \f[]
 | |
| .fi
 | |
| .PP
 | |
| Note that \f[C]\[aq]=\[aq]\f[] (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[]
 | |
| .fi
 | |
| .PP
 | |
| This is something similar to the commands pipeline:
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| $\ hledger\ rewrite\ \-\-\ \-f\ input.journal\ \[aq]^income\[aq]\ \-\-add\-posting\ \[aq](liabilities:tax)\ \ *.33\[aq]\ \\
 | |
| \ \ |\ hledger\ rewrite\ \-\-\ \-f\ \-\ expenses:gifts\ \ \ \ \ \ \-\-add\-posting\ \[aq]budget:gifts\ \ *\-1\[aq]\ \ \ \ \ \ \ \\
 | |
| \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \-\-add\-posting\ \[aq]assets:budget\ \ *1\[aq]\ \ \ \ \ \ \ \\
 | |
| \ \ >\ rewritten\-tidy\-output.journal
 | |
| \f[]
 | |
| .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]^income\[aq]\ \-\-add\-posting\ \[aq](liabilities:tax)\ \ *.33\[aq]
 | |
| \f[]
 | |
| .fi
 | |
| .PP
 | |
| Output might look like:
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| \-\-\-\ /tmp/examples/sample.journal
 | |
| +++\ /tmp/examples/sample.journal
 | |
| \@\@\ \-18,3\ +18,4\ \@\@
 | |
| \ 2008/01/01\ income
 | |
| \-\ \ \ \ assets:bank:checking\ \ $1
 | |
| +\ \ \ \ assets:bank:checking\ \ \ \ \ \ \ \ \ \ \ \ $1
 | |
| \ \ \ \ \ income:salary
 | |
| +\ \ \ \ (liabilities:tax)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0
 | |
| \@\@\ \-22,3\ +23,4\ \@\@
 | |
| \ 2008/06/01\ gift
 | |
| \-\ \ \ \ assets:bank:checking\ \ $1
 | |
| +\ \ \ \ assets:bank:checking\ \ \ \ \ \ \ \ \ \ \ \ $1
 | |
| \ \ \ \ \ income:gifts
 | |
| +\ \ \ \ (liabilities:tax)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0
 | |
| \f[]
 | |
| .fi
 | |
| .PP
 | |
| If you\[aq]ll pass this through \f[C]patch\f[] 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[] options and \f[C]include\f[]
 | |
| directives inside of these files.
 | |
| .PP
 | |
| Be careful.
 | |
| Whole transaction being re\-formatted in a style of output from
 | |
| \f[C]hledger\ print\f[].
 | |
| .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[], and another
 | |
| query to identify your profit and loss transactions with
 | |
| \f[C]\-\-pnl\f[].
 | |
| .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\ ($)
 | |
| \f[]
 | |
| .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.
 | |
| .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[] and ends with a recognised file extension (currently:
 | |
| no extension, \f[C]bat\f[],\f[C]com\f[],\f[C]exe\f[],
 | |
| \f[C]hs\f[],\f[C]lhs\f[],\f[C]pl\f[],\f[C]py\f[],\f[C]rb\f[],\f[C]rkt\f[],\f[C]sh\f[]).
 | |
| .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[] add\-on is installed,
 | |
| .IP \[bu] 2
 | |
| \f[C]hledger\ \-h\ web\f[] shows hledger\[aq]s help, while
 | |
| \f[C]hledger\ web\ \-h\f[] shows hledger\-web\[aq]s help.
 | |
| .IP \[bu] 2
 | |
| Flags specific to the add\-on must have a preceding \f[C]\-\-\f[] to
 | |
| hide them from hledger.
 | |
| So \f[C]hledger\ web\ \-\-serve\ \-\-port\ 9000\f[] will be rejected;
 | |
| you must use \f[C]hledger\ web\ \-\-\ \-\-serve\ \-\-port\ 9000\f[].
 | |
| .IP \[bu] 2
 | |
| You can always run add\-ons directly if preferred:
 | |
| \f[C]hledger\-web\ \-\-serve\ \-\-port\ 9000\f[].
 | |
| .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[] The screen width used by the register command.
 | |
| Default: the full terminal width.
 | |
| .PP
 | |
| \f[B]LEDGER_FILE\f[] The journal file path when not specified with
 | |
| \f[C]\-f\f[].
 | |
| Default: \f[C]~/.hledger.journal\f[] (on windows, perhaps
 | |
| \f[C]C:/Users/USER/.hledger.journal\f[]).
 | |
| .SH FILES
 | |
| .PP
 | |
| Reads data from one or more files in hledger journal, timeclock,
 | |
| timedot, or CSV format specified with \f[C]\-f\f[], or
 | |
| \f[C]$LEDGER_FILE\f[], or \f[C]$HOME/.hledger.journal\f[] (on windows,
 | |
| perhaps \f[C]C:/Users/USER/.hledger.journal\f[]).
 | |
| .SH BUGS
 | |
| .PP
 | |
| The need to precede addon command options with \f[C]\-\-\f[] 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
 | |
| 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 "No command \[aq]hledger\[aq]
 | |
| found"\f[]
 | |
| .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 ~/.local/bin and ~/.cabal/bin
 | |
| respectively.
 | |
| .PP
 | |
| \f[B]I set a custom LEDGER_FILE, but hledger is still using the default
 | |
| file\f[]
 | |
| .PD 0
 | |
| .P
 | |
| .PD
 | |
| \f[C]LEDGER_FILE\f[] should be a real environment variable, not just a
 | |
| shell variable.
 | |
| The command \f[C]env\ |\ grep\ LEDGER_FILE\f[] should show it.
 | |
| You may need to use \f[C]export\f[].
 | |
| Here\[aq]s an explanation.
 | |
| .PP
 | |
| \f[B]"Illegal byte sequence" or "Invalid or incomplete multibyte or wide
 | |
| character" errors\f[]
 | |
| .PD 0
 | |
| .P
 | |
| .PD
 | |
| In order to handle non\-ascii letters and symbols (like £), 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[]
 | |
| .fi
 | |
| .PP
 | |
| Here\[aq]s one way to set it permanently, there are probably better
 | |
| ways:
 | |
| .IP
 | |
| .nf
 | |
| \f[C]
 | |
| $\ echo\ "export\ LANG=en_US.UTF\-8"\ >>~/.bash_profile
 | |
| $\ bash\ \-\-login
 | |
| \f[]
 | |
| .fi
 | |
| .PP
 | |
| If we preferred to use eg \f[C]fr_FR.utf8\f[], 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[]
 | |
| .fi
 | |
| .PP
 | |
| Note some platforms allow variant locale spellings, but not all (ubuntu
 | |
| accepts \f[C]fr_FR.UTF8\f[], mac osx requires exactly
 | |
| \f[C]fr_FR.UTF\-8\f[]).
 | |
| 
 | |
| 
 | |
| .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
 |