671 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			671 lines
		
	
	
		
			26 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 features removed and some new ones 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
 | |
| - track 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 <http://hledger.org/README2.html#support>`_, then
 | |
| install the `Haskell Platform`_ and type::
 | |
| 
 | |
|  cabal update
 | |
|  cabal install hledger
 | |
| 
 | |
| You can add some options to the install command to include extra features:
 | |
| 
 | |
| - Add ``-fvty`` to build the `ui <#ui>`_ command. This is not available on microsoft windows.
 | |
| 
 | |
| - Add ``-fweb`` to build the `web <#web>`_ command.
 | |
| 
 | |
| - Add ``-fchart`` to build the `chart <#chart>`_ command. This requires
 | |
|   gtk2hs_, which you'll need to install yourself as it's not yet provided
 | |
|   by the haskell platform or cabal.
 | |
| 
 | |
| Here are some issues that have been encountered, with workarounds:
 | |
| 
 | |
| - In some cases, cabal install can fail with a compilation or link error
 | |
| due to incompatible package versions.  You can sometimes work around this
 | |
| by specifying versions manually.  Eg here's a recipe for haskell platform
 | |
| 2009.2.0.2 on MS Windows::
 | |
| 
 | |
|  cabal install hledger -fweb --constraint="haskell-src-meta < 0.0.6" --constraint="syb-with-class < 0.6.1"
 | |
| 
 | |
| - A ghc panic while building might be due to http://hackage.haskell.org/trac/ghc/ticket/3862
 | |
| 
 | |
| 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 -fweb
 | |
|  hledger chart                         # make a balance chart, if installed with -fchart
 | |
|  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
 | |
|    chart     - generate a balances pie chart
 | |
|    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
 | |
|            --no-new-accounts    don't allow to create new accounts
 | |
|   -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
 | |
|   -o FILE  --output=FILE        chart: output filename (default: hledger.png)
 | |
|            --items=N            chart: number of accounts to show (default: 10)
 | |
|            --size=WIDTHxHEIGHT  chart: image size (default: 600x400)
 | |
|  
 | |
| 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.)
 | |
| 
 | |
| Generally, as long as you avoid the more esoteric syntax, your ledger
 | |
| files will work with both hledger and c++ ledger (or, it will be 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.
 | |
| 
 | |
| chart
 | |
| '''''
 | |
| 
 | |
| The chart command saves a pie chart of your top account balances to a
 | |
| file (usually "hledger.png", or use -o/--output FILE). You can adjust the
 | |
| image resolution with --size=WIDTHxHEIGHT, and the number of accounts with
 | |
| --items=N.
 | |
| 
 | |
| Note that positive and negative balances will not be displayed together in
 | |
| the same chart; any balances not matching the sign of the first one will
 | |
| be omitted.
 | |
| 
 | |
| To show only accounts above a certain depth, use the --depth option.
 | |
| Otherwise, the chart can include accounts at any depth. If a parent and
 | |
| child account are both displayed, the parent's balance excludes the child's.
 | |
| 
 | |
| Examples::
 | |
| 
 | |
|  $ hledger chart assets --depth 2
 | |
|  $ hledger chart liabilities --depth 2
 | |
|  $ hledger chart ^expenses -o balance.png --size 1000x600 --items 20
 | |
|  $ for y in 2006 2007 2008 2009 2010; do hledger -f $y.ledger chart ^expenses --depth 2 -o expenses-$y.png; done
 | |
| 
 | |
| 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
 | |
| * hledger print shows amounts for all postings, and shows unit prices for amounts which have them
 | |
| 
 | |
| 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
 | |
| .. _gtk2hs:                http://www.haskell.org/gtk2hs/download/
 |