1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
|
Ledger NEWS
* 2.1
Very few new features:
- Improved the autoconf system to be smarter about finding XML libs
- Added --no-cache option, to always ignore any binary cache file
- `ledger-reconcile' (in ledger.el) no longer asks for a number of days
- Fixed %.XY format, where X is shorter than the string generated by Y
- New directive for text files: "D <COMM>" specifies the default commodity
used by the entry command
* 2.0
This version represents a full rewrite, while preserving much of the
original data format and command-line syntax. There are too many new
options to describe in full, but a quick list: value expressions,
complex date masks, binary caching of ledger data, many new reporting
options, a simple way to specify payee regexps, calculation and
display predicates, and two-way Python integration. Ledger also uses
autoconf now, and builds as a library plus the command-line driver.
** Differences from 1.7
- changes in option syntax:
-d now specifies the display predicate. To give a date mask similar
to 1.7, use the -p (period) option.
-P now generates the "by payee" report. To specify a price database
to use, use --price-db.
-G now generates a net gain report. To print totals in a format
consumable by gnuplot, use -J.
-l now specifies the calculation predicate. To emulate the old
usage of "-l \$100", use: -d "AT>100".
-N is gone. Instead of "-N REGEX", use: -d "/REGEX/?T>0:T".
-F now specifies the report format string. The old meaning of -F
now has little use.
-S now takes a value expression as the sorting criterion. To get
the old meaning of "-S", use "-S d".
-n now means "collapse entries in the register report". The get the
old meaning of -n in the balance report, use "-T a".
-p now specifies the reporting period. You can convert commodities
in a report using value expressions. For example, to display hours
at $10 per hour:
-T "O>={0.01h}?{\$10.00}*O:O"
Or, to reduce totals, so that every $417 becomes 1.0 AU:
-T "O>={\$0.01}?{1.0 AU}*(O/{\$417}):O"
- The use of "+" and "-" in ledger files to specify permanent regexps
has been removed.
- The "-from" argument is no longer used by the "entry" command.
Simply remove it.
** Features new to 2.0
- The most significant feature to be added is "value expressions".
They are used in many places to indicate what to display, sorting
order, how to calculate totals, etc. Logic and math operators are
supported, as well as simple functions. See the manual.
- If the environment variable LEDGER_FILE (or LEDGER) is used, a
binary cache of that ledger is kept in ~/.ledger-cache (or the file
given by LEDGER_CACHE). This greatly speeds up subsequent queries.
Happens only if "-f" or "--file" is not used.
- New 'xml' report outputs an XML version of what "register" would
have displayed. This can be used to manipulate reported data in a
more scriptable way.
Ledger can also read as input the output from the "xml" report. If
the "xml" report did not contain balanced entries, they will be
balanced by the "<Unknown>" account. For example:
ledger reg rent
displays the same results as:
ledger xml rent | ledger -f - reg rent
- Regexps given directly after the command name now apply only to
account names. To match on a payee, use "--" to separate the two
kinds of regexps. For example, to find a payee named "John" within
all Expenses accounts, use:
ledger register expenses -- john
Note: This command is identical (and internally converted) to:
ledger -l "/expenses/|//john/" register
- To include entries from another file into a specific account, use:
!account ACCOUNT
!include FILE
!end
- Register reports now show only matching account transactions. Use
"-r" to see "related accounts" -- the account the transfer came from
or went to (This was the old behavior in 1.x, but led to confusion).
"-r" also works with balance reports, where it will total all the
transactions related to your query.
- Automated transactions now use value expressions for the predicate.
The new syntax is:
= VALUE-EXPR
TRANSACTIONS...
Only one VALUE-EXPR is supported (compared to multiple account
regexps before). However, since value expression allow for logic
chaining, there is no loss of functionality. Matching can also be
much more comprehensive.
- If Boost.Python is installed (libboost_python.a), ledger can support
two-way Python integration. This feature is enabled by passing
--enable-python to the "configure" script before building. Ledger
can then be used as a module (ledger.so), as well as supporting
Python function calls directly from value expressions. See main.py
for an example of driving Ledger from Python. It implements nearly
all the functionality of the C++ driver, main.cc.
(This feature has yet to mature, and so is being offered as a beta
feature in this release. It is mostly functional, and those curious
are welcome to play with it.)
- New reporting options:
"-o FILE" outputs data to FILE. If "-", output goes to stdout (the
default).
-O shows base commodity values (this is the old behavior)
-B shows basis cost of commodities
-V shows market value of commodities
-g reports gain/loss performance of each register item
-G reports net gain/loss over time
-A reports average transaction value (arithmetic mean)
-D reports each transaction's deviation from the average
-w uses 132 columns for the register report, rather than 80. Set
the environment variable LEDGER_WIDE for this to be the default.
"-p INTERVAL" allows for more flexible period reporting, such as:
monthly
every week
every 3 quarters
weekly from 12/20
monthly in 2003
weekly from last month until dec
"-y DATEFMT" changes the date format used in all reports. The
default is "%Y/%m/%d".
-Y and -W print yearly and weekly subtotals, just as -M prints
monthly subtotals.
--dow shows cumulative totals for each day of the week.
-P reports transactions grouped by payee
-x reports the payee as the commodity; useful in some cases
-j and -J replace the previous -G (gnuplot) option. -j reports the
amounts column in a way gnuplot can consume, and -J the totals
column. An example is in "scripts/report".
"--period-sort EXPR" sorts transactions within a reporting period.
The regular -S option sorts all reported transactions.
* 1.7
- Pricing histories are now supported, so that ledger remembers
historical pricing of all commodities, and can give register reports
based on past and present market values as well as the original cost
basis. See the manual for more details on the new option switches.
* 1.6
- Can now parse timeclock files. These are simple timelogs that track
in/out events, which can be maintained using my timeclock tool. By
allowing ledger to parse these, it means that reporting can be done
on them in the same way as a ledger file (the commodities is "h",
for hours); and it means that doing things like tracking billable
hours for clients, and invoicing those clients to transfer those
hours into a dollar value via a receivable account, is now trivial.
See the docs for more on how to do this.
- Began keeping a NEWS file. :)
|