hledger/README

310 lines
13 KiB
Plaintext
Raw Normal View History

hledger User's Guide
====================
2008-10-01 12:51:08 +04:00
hledger is an accounting tool, similar to and inspired by John Wiegley's
"ledger" project. If you haven't already, see also hledger's home page at
http://hledger.org .
hledger is copyright (c) 2007-2009 Simon Michael <simon@joyful.com> and
contributors and released under GPL version 3 or later.
2008-10-01 12:51:08 +04:00
Installing
----------
hledger works on all major platforms.
One of these `platform binaries`_ might work for you.
If not, please report, then install the `Haskell Platform`_ and type ``cabal install hledger``.
2009-04-03 03:02:12 +04:00
2009-05-24 03:51:53 +04:00
Platform binaries are not yet being published; you could try asking for
one on the #ledger channel.
2008-10-01 12:51:08 +04:00
cabal update
2009-05-24 03:51:53 +04:00
cabal install hledger [-fvty] [-fhapps]
The vty and happs flags are optional; they enable hledger's "ui" and "web"
commands respectively. vty is not available on the windows platform.
2008-10-01 12:51:08 +04:00
Basic usage
-----------
hledger generates ledger-compatible register & balance reports from a
plain text ledger file. You can use it from the command line, or via the
web or curses interface.
2009-04-03 03:02:12 +04:00
hledger looks for your ledger file at ~/.ledger by default. To use a
different file, specify it with the LEDGER environment variable or -f
2009-04-03 03:02:12 +04:00
option (which may be - for standard input). Basic usage is::
2009-04-04 01:50:27 +04:00
hledger [OPTIONS] [COMMAND [PATTERNS]]
2009-04-03 03:02:12 +04:00
2009-04-04 01:50:27 +04:00
COMMAND is one of balance, print, register, ui, web, test (defaulting to
2009-05-25 04:33:13 +04:00
balance). PATTERNS are zero or more regular expressions used to filter by
account name or transaction description. Here are some commands to try::
2008-10-18 12:39:37 +04:00
export LEDGER=sample.ledger
2009-04-04 01:50:27 +04:00
hledger --help # show usage & options
hledger balance # all accounts with aggregated balances
hledger bal --depth 1 # only top-level accounts
hledger register # transaction register
hledger reg income # transactions to/from an income account
hledger reg checking # checking transactions
hledger reg desc:shop # transactions with shop in the description
2009-04-08 10:23:49 +04:00
hledger histogram # transactions per day, or other interval
2009-05-25 04:33:13 +04:00
hledger ui # curses ui, if installed with -fvty
hledger web # web ui, if installed with -fhapps
hledger -f new.ledger add # record transactions from the command line
Time reporting
..............
2009-05-25 04:33:13 +04:00
hledger will also read timelog files in timeclock.el format. If you
invoke hledger via a symlink or copy named "hours", it looks for your
timelog file (~/.timelog or $TIMELOG) by default.::
hours [OPTIONS] [COMMAND [PATTERNS]]
Timelog entries look like this::
2009-04-03 03:02:12 +04:00
i 2009/03/31 22:21:45 some:project
2009-04-02 13:38:12 +04:00
o 2009/04/01 02:00:34
2009-04-10 05:06:09 +04:00
The clockin description is treated as an account name. Here are some
queries to try::
2009-04-02 13:38:12 +04:00
2009-05-25 04:33:13 +04:00
ln -s `which hledger` ~/bin/hours # set up "hours" in your path
2009-04-04 04:20:15 +04:00
export TIMELOG=sample.timelog
2009-05-25 04:33:13 +04:00
hours # show all time balances
hours -p 'last week' # last week
hours -p thismonth # the space is optional
hours -p 'from 1/15' register project # project sessions since jan 15
hours -p 'weekly' reg --depth 1 -E # weekly time summary
2008-11-27 10:43:14 +03:00
Features
--------
Overview
........
2009-04-02 11:22:04 +04:00
This version of hledger mimics a subset of ledger 3.x, and adds some
features of its own. We currently support regular ledger entries, timelog
entries, multiple commodities, virtual transactions, account and
2009-05-25 04:33:13 +04:00
description filtering, and these commands and options::
2009-04-02 11:22:04 +04:00
Commands:
balance [REGEXP]... show balance totals for matching accounts
register [REGEXP]... show register of matching transactions
print [REGEXP]... print all matching entries
2008-11-09 01:41:53 +03:00
Basic options:
2009-04-02 11:22:04 +04:00
-h, --help show summarized help
2008-11-09 01:41:53 +03:00
-f, --file FILE read ledger data from FILE
Report filtering:
2009-04-02 11:22:04 +04:00
-b, --begin DATE report on entries on or after this date
-e, --end DATE report on entries prior to this date
-p, --period EXPR report on entries during the specified period
and/or with the specified reporting interval
-C, --cleared report only on cleared entries
-R, --real report only on real (non-virtual) transactions
2008-11-09 01:41:53 +03:00
Output customization:
2009-04-02 11:22:04 +04:00
-B, --basis, --cost report cost of commodities
-d, --display EXPR display only transactions matching EXPR (limited support)
2009-04-02 11:22:04 +04:00
-E, --empty show empty/zero things which are normally elided
--no-total balance report: hide the final total
-W, --weekly register report: show weekly summary
-M, --monthly register report: show monthly summary
-Y, --yearly register report: show yearly summary
Misc:
-V, --version show version information
-v, --verbose show verbose test output
--debug show some debug output
--debug-no-ui run ui commands with no output
We handle (almost) the full period expression syntax, and very limited
display expressions consisting of a simple date predicate. Also the
following new commands are supported::
add prompt for new transactions and add them to the ledger
convert read CSV bank data and display in ledger format
histogram show a barchart of transactions per day or other interval
ui run a simple text-based UI (only on unix platforms)
web run a simple web-based UI
stats show various statistics for a ledger
2009-04-02 11:22:04 +04:00
test run self-tests
2008-11-09 01:20:39 +03:00
Smart dates
...........
hledger accepts "smart dates" in most places a date can be used, such as:
transaction dates, effective dates, -b and -e options, and `period
expressions <#period-expressions>`_. Here are some valid hledger dates:
- 2009/1/1, 2009/01/01, 2009-1-1, 2009.1.1, 2009/1, 2009 (january 1, 2009)
- 1/1, january, jan, this year (january 1, this year)
- next year (january 1, next year)
- this month (the 1st of the current month)
- this week (the most recent monday)
- last week (the monday of the week before this one)
- today, yesterday, tomorrow
Period expressions
..................
hledger supports flexible "period expressions" with the ``-p/--period``
option to select transactions within a period of time (like 2009) and/or
with a reporting interval (like weekly). hledger period expressions are
similar but not identical to c++ ledger's.
Here is a basic period expression specifying the first quarter of 2009
(start date is always included, end date is always excluded)::
-p "from 2009/1/1 to 2009/4/1"
Keywords like "from" and "to" are optional, and so are the spaces. Just
don't run two dates together::
-p2009/1/1to2009/4/1
-p"2009/1/1 2009/4/1"
Dates are `smart dates <#smart-dates>`_, so if the current year is 2009, the above can also
be written as::
-p "1/1 to 4/1"
-p "january to apr"
-p "this year to 4/1"
If you specify only one date, the missing start or end date will be the
earliest or latest transaction in your ledger data::
-p "from 2009/1/1" (everything after january 1, 2009)
-p "from 2009/1" (the same)
-p "from 2009" (the same)
-p "to 2009" (everything before january 1, 2009)
A single date with no "from" or "to" defines both the start and end date like so::
-p "2009" (the year 2009; equivalent to "2009/1/1 to 2010/1/1")
-p "2009/1" (the month of jan; equivalent to "2009/1/1 to 2009/2/1")
-p "2009/1/1" (just that day; equivalent to "2009/1/1 to 2009/1/2")
You can also specify a reporting interval, which causes the "register"
command to summarise the transactions in each interval. It goes before the
dates, and can be: "daily", "weekly", "monthly", "quarterly", or
"yearly". An "in" keyword is optional, and so are the dates::
-p "weekly from 2009/1/1 to 2009/4/1"
-p "monthly in 2008"
-p "monthly from 2008"
-p "quarterly"
Display expressions
...................
A display expression with the ``-d/--display`` option selects which
transactions will be displayed (unlike a `period expression
<#period-expressions>`_, which selects the transactions to be used for
calculation).
hledger currently supports a very small subset of c++ ledger's display
expressions, namely: transactions before or after a date. This is useful
for displaying your recent check register with an accurate running total.
Note the use of >= here to include the first of the month::
hledger register -d "d>=[this month]"
Differences from c++ ledger
---------------------------
hledger is written in the Haskell programming language, which encourages a
coding style known as pure functional programming. This can, all going
well, help programmers to produce reliable software and write less code.
it demonstrates a pure functional implementation of ledger.
2008-11-27 10:43:14 +03:00
ledger features not supported
.............................
2009-04-02 11:22:04 +04:00
ledger features not currently supported include: modifier and periodic
2009-04-04 01:50:27 +04:00
entries, and the following options and commands::
2008-11-09 01:41:53 +03:00
Basic options:
-o, --output FILE write output to FILE
-i, --init-file FILE initialize ledger using FILE (default: ~/.ledgerrc)
-a, --account NAME use NAME for the default account (useful with QIF)
Report filtering:
-c, --current show only current and past entries (not future)
--period-sort EXPR sort each report period's entries by EXPR
-U, --uncleared consider only uncleared transactions
-L, --actual consider only actual (non-automated) transactions
-r, --related calculate report using related transactions
--budget generate budget entries based on periodic entries
--add-budget show all transactions plus the budget
--unbudgeted show only unbudgeted transactions
--forecast EXPR generate forecast entries while EXPR is true
-l, --limit EXPR calculate only transactions matching EXPR
-t, --amount EXPR use EXPR to calculate the displayed amount
-T, --total EXPR use EXPR to calculate the displayed total
Output customization:
2009-04-02 11:22:04 +04:00
-n, --collapse Only show totals in the top-most accounts.
2008-11-22 16:20:41 +03:00
-s, --subtotal other: show subtotals
2008-11-09 01:41:53 +03:00
-P, --by-payee show summarized totals by payee
-x, --comm-as-payee set commodity name as the payee, for reporting
--dow show a days-of-the-week report
-S, --sort EXPR sort report according to the value expression EXPR
-w, --wide for the default register report, use 132 columns
--head COUNT show only the first COUNT entries (negative inverts)
--tail COUNT show only the last COUNT entries (negative inverts)
--pager PAGER send all output through the given PAGER program
-A, --average report average transaction amount
-D, --deviation report deviation from the average
-%, --percentage report balance totals as a percentile of the parent
--totals in the "xml" report, include running total
-j, --amount-data print only raw amount data (useful for scripting)
-J, --total-data print only raw total data
-y, --date-format STR use STR as the date format (default: %Y/%m/%d)
-F, --format STR use STR as the format; for each report type, use:
--balance-format --register-format --print-format
--plot-amount-format --plot-total-format --equity-format
--prices-format --wide-register-format
Commodity reporting:
--price-db FILE sets the price database to FILE (def: ~/.pricedb)
-L, --price-exp MINS download quotes only if newer than MINS (def: 1440)
-Q, --download download price information when needed
-O, --quantity report commodity totals (this is the default)
-V, --market report last known market value
-g, --performance report gain/loss for each displayed transaction
-G, --gain report net gain/loss
Commands:
xml [REGEXP]... print matching entries in XML format
equity [REGEXP]... output equity entries for matching accounts
prices [REGEXP]... display price history for matching commodities
entry DATE PAYEE AMT output a derived entry, based on the arguments
2008-10-01 12:51:08 +04:00
2008-11-27 10:43:14 +03:00
Other differences
.................
2008-10-18 12:39:37 +04:00
2009-04-02 11:22:04 +04:00
* hledger calls the "note" field "description"
* hledger recognises description and negative patterns by "desc:" and "not:" prefixes,
unlike ledger 3's free-form parser
* hledger keeps differently-priced amounts of the same commodity separate
* hledger doesn't require a space before command-line option values, eg: -f-
2009-01-26 23:27:03 +03:00
* hledger's weekly reporting intervals always start on mondays
* hledger shows start and end dates of the intervals requested, not just the span containing data
* hledger period expressions don't support "biweekly", "bimonthly", or "every N days/weeks/..."
* hledger always shows timelog balances in hours
2009-04-02 11:22:04 +04:00
* hledger splits multi-day timelog sessions at midnight
* hledger register report always sorts transactions by date
2009-04-04 01:50:27 +04:00
* hledger doesn't show description comments as part of the description
* hledger print puts a blank line after the entry, not before it
* hledger doesn't print trailing spaces after amount-elided postings
.. _platform binaries: http://hledger.org/binaries/
.. _Haskell Platform: http://hackage.haskell.org/platform/