doc: faq: update the ledger answer, capitalise Ledger

This commit is contained in:
Simon Michael 2014-12-31 09:50:54 -08:00
parent 95ced2da80
commit eb1a1e5fc3

View File

@ -2,73 +2,74 @@
# Frequently asked questions # Frequently asked questions
## hledger and ledger ## hledger and Ledger
### How does hledger relate to ledger ? ### How does hledger relate to Ledger ?
hledger was inspired by and is partly a clone of John Wiegley's [ledger](http://ledger-cli.org), hledger was inspired by John Wiegley's
specifically Ledger 3. [Ledger](http://ledger-cli.org). It is a friendly, mostly compatible
rewrite of Ledger in Haskell, begun in 2007 (Ledger started in 2003),
focussing on robustness, usability, ease of development, long-term
maintainability, and new experiments such as the
[web interface](manual.html#web). It currently lacks some of Ledger's
power-user features and speed. hledger stays compatible with Ledger
wherever possible, so that with a little care you can use both tools
on the same data files.
I was a happy ledger user and contributor for some time; I still use it Longer answer: I was a happy Ledger user and contributor for some
occasionally. I wrote hledger because I wanted to develop financial tools time, then became too dissatisfied with bugs, missing/wrong
in the Haskell programming language and ecosystem, whose advantages I documentation and a long period of stagnation. I also wanted to try
believe are compelling. I have also tried to make hledger a little more implementing Ledger's brilliant design in the Haskell programming
simple, usable, installable, documented, appealing to collaborators, and language and ecosystem, which I believe has compelling advantages. I
to provide alternate user interfaces to make it more widely useful. try to build on Ledger's experience to make hledger easier to learn
and use, better documented, more appealing to work on; and to provide
alternate user interfaces (interactive, curses, web) to make it useful
to more people.
ledger has more advanced power-user features on the command-line hledger builds quickly and has a complete and accurate manual, an
(periodic and modifier transactions, budgets, capital gains tracking, easier report query syntax, a data entry assistant, an optional web
value expressions, custom output formats, etc.) and it remains faster interface (which often works on Ledger files too), and multi-column
and more memory efficient (for now!)... balance reports. Ledger has additional power-user features (capital
gains tracking, periodic and modifier transactions, budget reports,
custom value expressions..) and it remains faster and more memory
efficient (for now!).
hledger builds faster and has an up-to-date manual and an optional web The two projects collaborate freely. For some time we shared the
interface (which often works on ledger files too)... [#ledger](irc://irc.freenode.net/#ledger) IRC channel; in 2014 I added
a dedicated [#hledger](irc://irc.freenode.net/#hledger) channel.
I give back to Ledger by providing infrastructure
([ledger-cli.org](http://ledger-cli.org)), IRC support, [LedgerTips](http://twitter.com/LedgerTips) etc.
The two projects collaborate freely. We share the ### And Ledger 4 ?
[#ledger](irc://irc.freenode.net/#ledger) IRC channel but have
separate mail lists
([hledger list](http://groups.google.com/group/hledger/),
[ledger-cli list](http://groups.google.com/group/ledger-cli/)). I try
to give back by providing infrastructure
([ledger-cli.org](http://ledger-cli.org)) and IRC support.
hledger stays compatible with ledger wherever possible, so that you
can often use both tools on the same data file.
Summary: hledger is a friendly, co-evolving, compatible rewrite of Ledger
in Haskell, lacking some of ledger's power features and raw performance,
and focussing on robustness, usability, ease of development, and
experimental add-ons such as the [web interface](manual.html#web).
### And ledger 4 ?
There is also a [ledger4](https://github.com/ledger/ledger4) on github; this is There is also a [ledger4](https://github.com/ledger/ledger4) on github; this is
John's own rewrite of the core of John's own rewrite of the core of
ledger 3 in haskell. It's an early library prototype, not a usable tool. Ledger 3 in haskell. It's an early library prototype, not a usable tool.
Perhaps some day hledger or something like it would use this as its foundation. Perhaps some day hledger or something like it would use this as its foundation.
### File format differences ? ### File format differences ?
hledger's file format is mostly identical with ledger's, by design. hledger's file format is mostly identical with Ledger's, by design.
Generally, it's easy to keep a journal file that works with both hledger Generally, it's easy to keep a journal file that works with both hledger
and ledger if you avoid ledger's and hledger's more specialised syntax and Ledger if you avoid Ledger's and hledger's more specialised syntax
(or keep it in separate files which you include only when appropriate). (or keep it in separate files which you include only when appropriate).
Some ledger syntax is parsed but ignored (such as Some Ledger syntax is parsed but ignored (such as
[automated transactions](http://ledger-cli.org/3.0/doc/ledger3.html#Automated-Transactions), [periodic transactions](http://ledger-cli.org/3.0/doc/ledger3.html#Periodic-Transactions), and [automated transactions](http://ledger-cli.org/3.0/doc/ledger3.html#Automated-Transactions), [periodic transactions](http://ledger-cli.org/3.0/doc/ledger3.html#Periodic-Transactions), and
[historical prices](manual.html#historical-prices)). [historical prices](manual.html#historical-prices)).
Some features are not currently parsed and will cause an error, eg Some features are not currently parsed and will cause an error, eg
ledger's more recent top-level directives. There can also be subtle Ledger's more recent top-level directives. There can also be subtle
differences in parser behaviour, such as with differences in parser behaviour, such as with
[hledger comments](manual.html#comments) vs [ledger comments](http://ledger-cli.org/3.0/doc/ledger3.html#Commenting-on-your-Journal), [hledger comments](manual.html#comments) vs [Ledger comments](http://ledger-cli.org/3.0/doc/ledger3.html#Commenting-on-your-Journal),
or [balance assertions](manual.html#assertions-and-ordering). or [balance assertions](manual.html#assertions-and-ordering).
### Feature differences ? ### Feature differences ?
hledger mimics a subset of [ledger 3.x](http://ledger-cli.org), and adds some features of its own. hledger mimics a subset of [Ledger 3.x](http://ledger-cli.org), and adds some features of its own.
We currently support: We currently support:
- ledger's journal format, mostly - Ledger's journal format, mostly
- csv format - csv format
- timelog format - timelog format
- regular journal transactions - regular journal transactions
@ -102,7 +103,7 @@ And we add these commands:
### Option/command differences ? ### Option/command differences ?
ledger options and commands not supported include: Ledger options and commands not supported include:
``` ```
Basic options: Basic options:
-o, --output FILE write output to FILE -o, --output FILE write output to FILE
@ -160,7 +161,7 @@ entry DATE PAYEE AMT output a derived entry, based on the arguments
### Other functionality differences ? ### Other functionality differences ?
- hledger recognises description and negative patterns by "desc:" - hledger recognises description and negative patterns by "desc:"
and "not:" prefixes, unlike ledger 3's free-form parser and "not:" prefixes, unlike Ledger 3's free-form parser
- hledger does not require a space between command-line flags and their values, - hledger does not require a space between command-line flags and their values,
eg `-fFILE` works as well as `-f FILE` eg `-fFILE` works as well as `-f FILE`
@ -191,28 +192,28 @@ entry DATE PAYEE AMT output a derived entry, based on the arguments
- hledger's default commodity directive (D) sets the commodity to be - hledger's default commodity directive (D) sets the commodity to be
used for subsequent commodityless amounts, and also sets that used for subsequent commodityless amounts, and also sets that
commodity's display settings if such an amount is the first commodity's display settings if such an amount is the first
seen. ledger uses D only for commodity display settings and for the seen. Ledger uses D only for commodity display settings and for the
entry command. entry command.
- hledger generates a description for timelog sessions, instead of - hledger generates a description for timelog sessions, instead of
taking it from the clock-out entry taking it from the clock-out entry
- hledger's [include directive](manual.html#including-other-files) does not support - hledger's [include directive](manual.html#including-other-files) does not support
shell glob patterns (eg `include *.journal` ), which ledger does. shell glob patterns (eg `include *.journal` ), which Ledger does.
- when checking [balance assertions](manual.html#balance-assertions) - when checking [balance assertions](manual.html#balance-assertions)
hledger sorts the account's postings first by date and then (for hledger sorts the account's postings first by date and then (for
postings with the same date) by parse order. ledger goes strictly by postings with the same date) by parse order. Ledger goes strictly by
parse order. parse order.
- ledger allows amounts to have a - Ledger allows amounts to have a
[fixed lot price](manual.html#fixed-lot-prices) and a regular price in any [fixed lot price](manual.html#fixed-lot-prices) and a regular price in any
order (and uses whichever appears first). hledger requires the fixed order (and uses whichever appears first). hledger requires the fixed
lot price to come last (and ignores it). lot price to come last (and ignores it).
### Implementation differences ? ### Implementation differences ?
ledger is written in C++, whereas hledger is written in [Haskell](http://haskell.org). Ledger is written in C++, whereas hledger is written in [Haskell](http://haskell.org).
Haskell is a highly regarded up-and-coming programming language that enables Haskell is a highly regarded up-and-coming programming language that enables
a coding style known as pure functional programming, offering the a coding style known as pure functional programming, offering the
promise of more bug-free and maintainable software built in fewer promise of more bug-free and maintainable software built in fewer