623 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			623 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
hledger manual
 | 
						|
==============
 | 
						|
 | 
						|
This is the official hledger manual. You may also want to visit
 | 
						|
the http://hledger.org home page,
 | 
						|
the `hledger for techies`_ page,
 | 
						|
and perhaps `c++ ledger's manual`_ (but don't worry, we'll link to that below.)
 | 
						|
 | 
						|
A tip: on hledger.org, these docs are also available with .pdf suffix.
 | 
						|
 | 
						|
User Guide
 | 
						|
----------
 | 
						|
 | 
						|
Introduction
 | 
						|
............
 | 
						|
 | 
						|
hledger is a program for tracking money, time, or any other commodity,
 | 
						|
using a plain text file format and the simple but powerful principles of
 | 
						|
double-entry accounting.
 | 
						|
 | 
						|
It is modelled closely on `John Wiegley's ledger`_ (aka "c++ ledger"),
 | 
						|
with some new features added.  I wrote hledger because I wanted to build
 | 
						|
financial tools in the Haskell programming language rather than in C++.
 | 
						|
 | 
						|
hledger's basic function is to generate register and balance reports from
 | 
						|
a plain text ledger file, at the command line or via the web or curses
 | 
						|
interface. You can use it to, eg,
 | 
						|
 | 
						|
- track spending and income
 | 
						|
- see time reports by day/week/month/project
 | 
						|
- get accurate numbers for client billing and tax filing
 | 
						|
- find unpaid invoices
 | 
						|
 | 
						|
hledger aims to help both computer experts and every-day users gain clarity in their finances and time management.
 | 
						|
For now though, it is most useful to technically-minded folks who are comfortable with command-line tools.
 | 
						|
 | 
						|
hledger is copyright (c) 2007-2009 Simon Michael <simon@joyful.com> and
 | 
						|
contributors and released as Free Software under GPL version 3 or later.
 | 
						|
 | 
						|
Installing
 | 
						|
..........
 | 
						|
 | 
						|
hledger works on all major platforms. One of these pre-built binaries_ might work for you.
 | 
						|
 | 
						|
If not, please report the problem, then install the `Haskell Platform`_ and type::
 | 
						|
 | 
						|
 cabal update
 | 
						|
 cabal install hledger [-fvty] [-fhapps]
 | 
						|
 | 
						|
The optional -f flags will install more libraries and enable hledger's
 | 
						|
"ui" and "web" commands respectively. Note -fvty may not work on Microsoft
 | 
						|
windows.
 | 
						|
 | 
						|
Basic usage
 | 
						|
...........
 | 
						|
 | 
						|
hledger looks for your ledger file at ~/.ledger by default. To use a
 | 
						|
different file, specify it with the LEDGER environment variable or -f
 | 
						|
option (which may be - for standard input). Basic usage is::
 | 
						|
 | 
						|
 hledger [OPTIONS] [COMMAND [PATTERNS]]
 | 
						|
 | 
						|
COMMAND is one of balance, print, register, ui, web, test (defaulting to
 | 
						|
balance). PATTERNS are zero or more regular expressions used to filter by
 | 
						|
account name or transaction description.  Here are some commands to try
 | 
						|
(after downloading sample.ledger_)::
 | 
						|
 | 
						|
 export LEDGER=sample.ledger
 | 
						|
 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
 | 
						|
 hledger histogram                     # transactions per day, or other interval
 | 
						|
 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
 | 
						|
 | 
						|
Reference
 | 
						|
---------
 | 
						|
 | 
						|
Feature overview
 | 
						|
................
 | 
						|
 | 
						|
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, price history (for fixed-rate
 | 
						|
transactions), virtual postings, filtering by account and description, the
 | 
						|
familiar print, register & balance commands and several new commands. We
 | 
						|
handle (almost) the full period expression syntax, and very limited
 | 
						|
display expressions consisting of a simple date predicate.
 | 
						|
 | 
						|
Here is the command-line help::
 | 
						|
 | 
						|
 $ hledger --help
 | 
						|
 Usage: hledger [OPTIONS] [COMMAND [PATTERNS]]
 | 
						|
        hours   [OPTIONS] [COMMAND [PATTERNS]]
 | 
						|
        hledger convert CSVFILE
 | 
						|
 
 | 
						|
 hledger uses your ~/.ledger or $LEDGER file (or another specified with -f),
 | 
						|
 while hours uses your ~/.timelog or $TIMELOG file.
 | 
						|
 
 | 
						|
 COMMAND is one of (may be abbreviated):
 | 
						|
   add       - prompt for new transactions and add them to the ledger
 | 
						|
   balance   - show accounts, with balances
 | 
						|
   convert   - read CSV bank data and display in ledger format
 | 
						|
   histogram - show a barchart of transactions per day or other interval
 | 
						|
   print     - show transactions in ledger format
 | 
						|
   register  - show transactions as a register with running balance
 | 
						|
   stats     - show various statistics for a ledger
 | 
						|
   ui        - run a simple text-based UI
 | 
						|
   web       - run a simple web-based UI
 | 
						|
   test      - run self-tests
 | 
						|
 
 | 
						|
 PATTERNS are regular expressions which filter by account name.
 | 
						|
 Prefix with desc: to filter by transaction description instead.
 | 
						|
 Prefix with not: to negate a pattern. When using both, not: comes last.
 | 
						|
 
 | 
						|
 DATES can be y/m/d or ledger-style smart dates like "last month".
 | 
						|
 
 | 
						|
 Options:
 | 
						|
   -f FILE  --file=FILE        use a different ledger/timelog file; - means stdin
 | 
						|
   -b DATE  --begin=DATE       report on transactions on or after this date
 | 
						|
   -e DATE  --end=DATE         report on transactions before this date
 | 
						|
   -p EXPR  --period=EXPR      report on transactions during the specified period
 | 
						|
                               and/or with the specified reporting interval
 | 
						|
   -C       --cleared          report only on cleared transactions
 | 
						|
   -U       --uncleared        report only on uncleared transactions
 | 
						|
   -B       --cost, --basis    report cost of commodities
 | 
						|
            --depth=N          hide accounts/transactions deeper than this
 | 
						|
   -d EXPR  --display=EXPR     show only transactions matching EXPR (where
 | 
						|
                               EXPR is 'dOP[DATE]' and OP is <, <=, =, >=, >)
 | 
						|
            --effective        use transactions' effective dates, if any
 | 
						|
   -E       --empty            show empty/zero things which are normally elided
 | 
						|
   -R       --real             report only on real (non-virtual) transactions
 | 
						|
            --no-total         balance report: hide the final total
 | 
						|
   -W       --weekly           register report: show weekly summary
 | 
						|
   -M       --monthly          register report: show monthly summary
 | 
						|
   -Q       --quarterly        register report: show quarterly summary
 | 
						|
   -Y       --yearly           register report: show yearly summary
 | 
						|
   -h       --help             show this help
 | 
						|
   -V       --version          show version information
 | 
						|
   -v       --verbose          show verbose test output
 | 
						|
            --binary-filename  show the download filename for this hledger build
 | 
						|
            --debug            show extra debug output; implies verbose
 | 
						|
            --debug-no-ui      run ui commands with no output
 | 
						|
 
 | 
						|
File format
 | 
						|
...........
 | 
						|
 | 
						|
hledger's data file (aka "the ledger") is a readable plain text
 | 
						|
representation of an accounting journal. The format is mostly identical
 | 
						|
with c++ ledger's. Here's an example::
 | 
						|
 | 
						|
 ; A sample ledger file.
 | 
						|
 
 | 
						|
 2008/01/01 income
 | 
						|
     assets:bank:checking  $1
 | 
						|
     income:salary
 | 
						|
 
 | 
						|
 2008/06/01 gift
 | 
						|
     assets:bank:checking  $1
 | 
						|
     income:gifts
 | 
						|
 
 | 
						|
 2008/06/02 save
 | 
						|
     assets:bank:saving  $1
 | 
						|
     assets:bank:checking
 | 
						|
 
 | 
						|
 2008/06/03 * eat & shop
 | 
						|
     expenses:food      $1
 | 
						|
     expenses:supplies  $1
 | 
						|
     assets:cash
 | 
						|
 
 | 
						|
 2008/12/31 * pay off
 | 
						|
     liabilities:debts  $1
 | 
						|
     assets:bank:checking
 | 
						|
 | 
						|
Each transaction has a date, description, and two or more postings (of
 | 
						|
some amount to some account) which must balance to 0. As a convenience,
 | 
						|
the last posting's amount may be left blank and will be inferred.
 | 
						|
 | 
						|
Other c++ ledger features like effective dates, comments, and prices
 | 
						|
are also supported. Some additional features like modifier and periodic
 | 
						|
entries are accepted, but ignored.
 | 
						|
 | 
						|
Compatibility
 | 
						|
"""""""""""""
 | 
						|
 | 
						|
Compared to c++ ledger, hledger's file format has some omissions (we do
 | 
						|
not support all the latest ledger 3 syntax like @@ and {}) and some subtle
 | 
						|
punctuation differences (eg comments may be permissible in different
 | 
						|
places.)
 | 
						|
 | 
						|
As long as you avoid the more esoteric syntax, your ledger files should
 | 
						|
work with both hledger and c++ ledger. You can inadvertently create a file
 | 
						|
that works for one but not the other; but it's easy to restore
 | 
						|
compatibility by making small adjustments.
 | 
						|
 | 
						|
Commands
 | 
						|
........
 | 
						|
 | 
						|
Reporting commands
 | 
						|
""""""""""""""""""
 | 
						|
 | 
						|
print
 | 
						|
'''''
 | 
						|
 | 
						|
The print command displays full transactions from the ledger file, tidily
 | 
						|
formatted and showing all amounts explicitly. The output of print is
 | 
						|
always valid ledger data. 
 | 
						|
 | 
						|
hledger's print command also shows all unit prices in effect, or
 | 
						|
(with -B/--cost) shows cost amounts.
 | 
						|
 | 
						|
register
 | 
						|
''''''''
 | 
						|
 | 
						|
The register command displays postings, one per line, and their running total.
 | 
						|
 | 
						|
balance
 | 
						|
'''''''
 | 
						|
 | 
						|
The balance command displays accounts and their balances.
 | 
						|
 | 
						|
histogram
 | 
						|
'''''''''
 | 
						|
 | 
						|
The histogram command displays a quick bar chart showing transaction
 | 
						|
counts, per day, week, month or other reporting interval. It is
 | 
						|
experimental.
 | 
						|
 | 
						|
stats
 | 
						|
'''''
 | 
						|
 | 
						|
The stats command displays quick summary information for the ledger.
 | 
						|
 | 
						|
ui
 | 
						|
'''
 | 
						|
 | 
						|
The ui command starts hledger's text-based "curses" interface, which
 | 
						|
allows interactive navigation of the print/register/balance reports.
 | 
						|
 | 
						|
Modifying commands
 | 
						|
""""""""""""""""""
 | 
						|
 | 
						|
add
 | 
						|
'''
 | 
						|
 | 
						|
The add command prompts interactively for new transactions, and adds them
 | 
						|
to the ledger. It is experimental.
 | 
						|
 | 
						|
web
 | 
						|
'''
 | 
						|
 | 
						|
The web command starts hledger's web interface, and tries to open a web
 | 
						|
browser to view it (if this fails, you'll have to visit the indicated url
 | 
						|
yourself.) The web ui combines the features of the print, register,
 | 
						|
balance and add commands. It is experimental.
 | 
						|
Known issues: filtering does not work completely.
 | 
						|
 | 
						|
Other commands
 | 
						|
""""""""""""""
 | 
						|
 | 
						|
convert
 | 
						|
'''''''
 | 
						|
 | 
						|
The convert command reads a CSV_ file you have downloaded from your bank,
 | 
						|
and prints out the transactions in ledger format, suitable for adding to
 | 
						|
your ledger.  This can be a lot quicker than entering every transaction by
 | 
						|
hand. (The downside is that you are less likely to notice if your bank makes an
 | 
						|
error!)
 | 
						|
 | 
						|
Use it like this::
 | 
						|
 | 
						|
 hledger convert FILE.csv >FILE.ledger
 | 
						|
 | 
						|
where FILE.csv is your downloaded csv file. This will convert the csv data
 | 
						|
using conversion rules defined in FILE.rules (auto-creating this file if
 | 
						|
needed), and save the output into a temporary ledger file.  Then you
 | 
						|
should review FILE.ledger for problems; update the rules and convert again
 | 
						|
if needed; and finally copy/paste transactions which are new into your
 | 
						|
main ledger.
 | 
						|
 | 
						|
Rules file
 | 
						|
,,,,,,,,,,
 | 
						|
 | 
						|
A .rules file contains some data definitions and some rules for assigning
 | 
						|
destination accounts to transactions. Typically you will have one csv file
 | 
						|
and one rules file per bank account. Here's an example rules file for
 | 
						|
converting csv data from a Wells Fargo checking account::
 | 
						|
 | 
						|
 base-account assets:bank:checking
 | 
						|
 date-field 0
 | 
						|
 description-field 4
 | 
						|
 amount-field 1
 | 
						|
 currency $
 | 
						|
 | 
						|
 # account-assigning rules
 | 
						|
 | 
						|
 SPECTRUM
 | 
						|
 expenses:health:gym
 | 
						|
 | 
						|
 ITUNES
 | 
						|
 BLKBSTR=BLOCKBUSTER
 | 
						|
 expenses:entertainment
 | 
						|
 | 
						|
 (TO|FROM) SAVINGS
 | 
						|
 assets:bank:savings
 | 
						|
 | 
						|
This says:
 | 
						|
 | 
						|
- the ledger account corresponding to this csv file is assets:bank:checking
 | 
						|
- the first csv field is the date, the second is the amount, the fifth is the description
 | 
						|
- prepend a dollar sign to the amount field
 | 
						|
- if description contains SPECTRUM (case-insensitive), the transaction is a gym expense
 | 
						|
- if description contains ITUNES or BLKBSTR, the transaction is an entertainment expense; also rewrite BLKBSTR as BLOCKBUSTER
 | 
						|
- if description contains TO SAVINGS or FROM SAVINGS, the transaction is a savings transfer
 | 
						|
 | 
						|
Notes:
 | 
						|
 | 
						|
- Lines beginning with # or ; are ignored (but avoid using inside an account rule)
 | 
						|
 | 
						|
- Definitions must come first, one per line, all in one paragraph.  Each
 | 
						|
  is a name and a value separated by whitespace. Supported names are:
 | 
						|
  base-account, date-field, status-field, code-field, description-field,
 | 
						|
  amount-field, currency-field, currency. All are optional and will
 | 
						|
  use defaults if not specified.
 | 
						|
 | 
						|
- The remainder of the file is account-assigning rules. Each is a
 | 
						|
  paragraph consisting of one or more description-matching patterns
 | 
						|
  (case-insensitive regular expressions), one per line, followed by the
 | 
						|
  account name to use when the transaction's description matches any of
 | 
						|
  these patterns.
 | 
						|
 | 
						|
- A match pattern may optionally be followed by = and a replacement
 | 
						|
  pattern, which will become the ledger transaction's description.
 | 
						|
  Otherwise the matched part of the csv description is used. (To preserve
 | 
						|
  the full csv description, use .* before and after the match pattern.)
 | 
						|
 | 
						|
test
 | 
						|
''''
 | 
						|
 | 
						|
This command runs hledger's internal self-tests and displays a quick report.
 | 
						|
 | 
						|
Smart dates
 | 
						|
...........
 | 
						|
 | 
						|
hledger accepts "smart dates" in most places a date can be used, such as:
 | 
						|
-b and -e options, and `period expressions <#period-expressions>`_
 | 
						|
(but actually, not in the ledger file, which has more limited date parsing.)
 | 
						|
Here are some examples:
 | 
						|
 | 
						|
- 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")
 | 
						|
 | 
						|
Reporting interval
 | 
						|
''''''''''''''''''
 | 
						|
 | 
						|
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"
 | 
						|
 | 
						|
A reporting interval may also be specified with the -W/--weekly,
 | 
						|
-M/--monthly, -Q/--quarterly, and -Y/--yearly options. However..
 | 
						|
 | 
						|
-p overrides other flags
 | 
						|
''''''''''''''''''''''''
 | 
						|
 | 
						|
A period option on the command line will override any -b/-e/-W/-Q/-Y flags.
 | 
						|
 | 
						|
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]"
 | 
						|
 | 
						|
Prices
 | 
						|
.............
 | 
						|
 | 
						|
As in c++ ledger, you can specify a per-unit price (or conversion rate) in
 | 
						|
the following ways:
 | 
						|
 | 
						|
- **set the unit price for a single amount** by appending `` @ PRICE``, where
 | 
						|
  PRICE is another amount in a different commodity. Eg, here is one
 | 
						|
  hundred euros purchased at $1.35 per euro::
 | 
						|
 | 
						|
    2009/1/2 x
 | 
						|
     expenses:foreign currency       €100 @ $1.35
 | 
						|
     assets
 | 
						|
 | 
						|
- **set the unit price for a commodity as of a certain date** using "P"
 | 
						|
  historical price records. Eg, here we say the exchange rate for 1 euro
 | 
						|
  is $1.35 on 2009/1/1 (and thereafter, until a newer price record is
 | 
						|
  found)::
 | 
						|
 | 
						|
    P 2009/1/1 € $1.35
 | 
						|
 | 
						|
    2009/1/2 x
 | 
						|
     expenses:foreign currency       €100
 | 
						|
     assets
 | 
						|
 | 
						|
The print command will show the unit prices in effect::
 | 
						|
 | 
						|
 $ hledger print
 | 
						|
 2009/01/02 x
 | 
						|
     expenses:foreign currency  €100 @ $1.35
 | 
						|
     assets                     €-100 @ $1.35
 | 
						|
 | 
						|
And to see amounts converted to their total cost, use the ``--cost/-B`` flag with any command::
 | 
						|
 | 
						|
 $ hledger print --cost
 | 
						|
 2009/01/02 x
 | 
						|
     expenses:foreign currency       $135.00
 | 
						|
     assets                         $-135.00
 | 
						|
 | 
						|
Notes:
 | 
						|
 | 
						|
- unlike c++ ledger we assume unit prices do not vary over time.  This is
 | 
						|
  good for simple reporting of foreign currency transactions, but not for
 | 
						|
  tracking fluctuating-value investments or capital gains.
 | 
						|
 | 
						|
- a price is a simple amount with only one commodity. Ie you can't say an
 | 
						|
  orange is worth two grapes and an apple.
 | 
						|
 | 
						|
- ``--cost/-B`` does only one lookup step, ie it will not look up the
 | 
						|
  price of a price's commodity.
 | 
						|
 | 
						|
Timelog reporting
 | 
						|
.................
 | 
						|
 | 
						|
hledger will also read timelog files in timeclock.el format.  As a
 | 
						|
convenience, if you invoke hledger via an "hours" symlink or copy, it uses
 | 
						|
your timelog file (~/.timelog or $TIMELOG) by default, rather than your ledger.
 | 
						|
 | 
						|
Timelog entries look like this::
 | 
						|
 | 
						|
 i 2009/03/31 22:21:45 some:project
 | 
						|
 o 2009/04/01 02:00:34
 | 
						|
 | 
						|
The clockin description is treated as an account name. Here are some
 | 
						|
queries to try (after downloading sample.timelog_)::
 | 
						|
 | 
						|
 ln -s `which hledger` ~/bin/hours            # set up "hours" in your path
 | 
						|
 export TIMELOG=sample.timelog
 | 
						|
 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
 | 
						|
 | 
						|
This is a useful feature, if you can find a way to efficiently record
 | 
						|
timelog entries. The "ti" and "to" scripts may be available from the c++
 | 
						|
ledger 2.x repository. I use
 | 
						|
`timeclock-x.el <http://www.emacswiki.org/emacs/timeclock-x.el>`_ and
 | 
						|
`ledgerutils.el <http://joyful.com/repos/ledgertools/ledgerutils.el>`_ 
 | 
						|
in emacs.
 | 
						|
 | 
						|
Differences from c++ ledger
 | 
						|
...........................
 | 
						|
 | 
						|
hledger is written in the Haskell programming language. Haskell enables a
 | 
						|
coding style known as pure lazy functional programming, which holds the
 | 
						|
promise of more robust and maintainable software built with fewer lines of
 | 
						|
code.
 | 
						|
 | 
						|
Features not supported
 | 
						|
''''''''''''''''''''''
 | 
						|
 | 
						|
ledger features not currently supported include: modifier and periodic
 | 
						|
entries, and the following options and commands::
 | 
						|
 | 
						|
   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
 | 
						|
   -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:
 | 
						|
   -n, --collapse         Only show totals in the top-most accounts.
 | 
						|
   -s, --subtotal         other: show subtotals
 | 
						|
   -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
 | 
						|
 | 
						|
Other differences
 | 
						|
'''''''''''''''''
 | 
						|
 | 
						|
* hledger recognises description and negative patterns by  "desc:" and "not:" prefixes,
 | 
						|
  unlike ledger 3's free-form parser
 | 
						|
* hledger doesn't require a space before command-line option values, you can write -f-
 | 
						|
* 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
 | 
						|
* hledger splits multi-day timelog sessions at midnight
 | 
						|
* hledger doesn't track the value of commodities with varying price;
 | 
						|
  prices are fixed as of the transaction date
 | 
						|
 | 
						|
Tips
 | 
						|
....
 | 
						|
 | 
						|
- when writing a negative amount with a left-side currency symbol, the
 | 
						|
  minus goes after the symbol. Eg ``$-1`` not ``-$1``
 | 
						|
 | 
						|
- when combining desc: and not: in a filter pattern, not: goes last. Eg
 | 
						|
  ``desc:not:...`` not ``not:desc:...``.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
.. _hledger for techies:   README2.html
 | 
						|
.. _c++ ledger's manual:   http://joyful.com/repos/ledger/doc/ledger.html
 | 
						|
.. _John Wiegley's ledger: http://wiki.github.com/jwiegley/ledger
 | 
						|
.. _sample.ledger:         http://joyful.com/repos/hledger/sample.ledger
 | 
						|
.. _sample.timelog:        http://joyful.com/repos/hledger/sample.timelog
 | 
						|
.. _binaries:              http://hledger.org/binaries/
 | 
						|
.. _Haskell Platform:      http://hackage.haskell.org/platform/
 | 
						|
.. _CSV:                   http://en.wikipedia.org/wiki/Comma-separated_values
 |