NEWS 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946
  1. Ledger NEWS
  2. * 3.1.1
  3. - Added a --no-revalued option
  4. - Improved Embedded Python Support
  5. - Use ./.ledgerrc if ~/.ledgerrc doesn't exist
  6. - Fixed parsing of transactions with single-character payees and comments
  7. - Fixed crash when using -M with empty result
  8. - Fixed sorting for option --auto-match
  9. - Fixed treatment of "year 2015" and "Y2014" directives
  10. - Fixed crash when using --trace 10 or above
  11. - Build fix for boost 1.56, 1.58, 1.59
  12. - Build fix for Cygwin
  13. - Fixed Util and Math tests on Mac OS X
  14. - Various documentation improvements
  15. - Examples in the documentation are tested just like unit tests
  16. - Add continuous integration (https://travis-ci.org/ledger/ledger)
  17. * 3.1
  18. - Changed the definition of cost basis to preserve the original cost basis
  19. when a gain or loss is made (if you bought 1 AAA for $10 and then sold
  20. it for $12, ledger would previously take $12 as the cost; the original
  21. cost of $10 is preserved as the cost basis now, which addresses strange
  22. behavior with -B after a capital gain or loss is made).
  23. - Incorrect automatic Equity:Capital Gains and Equity:Capital Loss entries
  24. are no longer generated when a commodity is sold for loss or profit.
  25. - Support for virtual posting costs.
  26. - The option --permissive now quiets balance assertions
  27. - Removed SHA1 files due to license issues and use boost instead.
  28. - Added option --no-pager to disable the pager.
  29. - Added option --no-aliases to completely disable alias expansion
  30. - Added option --recursive-aliases to expand aliases recursively
  31. - Support payee "uuid" directive.
  32. - Bug fix: when a status flag (! or *) is explicitly specified for an
  33. individual posting, it always has a priority over entire transaction
  34. status.
  35. - Bug fix: don't lose commodity when cost is not separated by whitespace
  36. - Improved backwards compatibility with ledger 2.x
  37. - Build fix for GCC 4.9
  38. - Build fix for boost 1.56
  39. - Many improvements to ledger-mode, including fontification
  40. - More test cases and unit tests
  41. - Contrib: Added script to generate commodities from ISO 4217
  42. * 3.0
  43. Due to the magnitude of changes in 3.0, only changes that affect compatibility
  44. with 2.x files and usage is mentioned here. For a description of new
  45. features, please see the manual.
  46. - The option -g (--performance) was removed.
  47. - The balance report now defaults to showing all relevant accounts. This is
  48. the opposite of 2.x. That is, "bal" in 3.0 does what "-s bal" did in 2.x.
  49. To see 2.6 behavior, use "bal -n" in 3.0. The -s option no longer has any
  50. effect on balance reports.
  51. * 2.6.3
  52. - Minor fixes to allow for compilation with gcc 4.4.
  53. * 2.6.2
  54. - Bug fix: Command-line options, such as -O, now override init-file options
  55. such as -V.
  56. - Bug fix: "cat data | ledger -f -" now works.
  57. - Bug fix: --no-cache is now honored. Previously, it was writing out a cache
  58. file named "<none>".
  59. - Bug fix: Using %.2X in a format string now outputs 2 spaces if the state is
  60. cleared.
  61. * 2.6.1
  62. - Added the concept of "balance setting transactions":
  63. # Setting an account's balance
  64. You can now manually set an account's balance to whatever you want, at
  65. any time. Here's how it might look at the beginning of your Ledger
  66. file:
  67. 2008/07/27 Starting fresh
  68. Assets:Checking = $1,000.00
  69. Equity:Opening Balances
  70. If Assets:Checking is empty, this is no different from omitting the
  71. "=". However, if Assets:Checking did have a prior balance, the amount
  72. of the transaction will be auto-calculated so that the final balance
  73. of Assets:Checking is now $1,000.00.
  74. Let me give an example of this. Say you have this:
  75. 2008/07/27 Starting fresh
  76. Assets:Checking $750.00
  77. Equity:Opening Balances
  78. 2008/07/27 Starting fresh
  79. Assets:Checking = $1,000.00
  80. Equity:Adjustments
  81. These two entries are exactly equivalent to these two:
  82. 2008/07/27 Starting fresh
  83. Assets:Checking $750.00
  84. Equity:Opening Balances
  85. 2008/07/27 Starting fresh
  86. Assets:Checking $250.00
  87. Equity:Adjustments
  88. The use of the "=" sign here is that it sets the transaction's amount
  89. to whatever is required to satisfy the assignment. This is the
  90. behavior if the transaction's amount is left empty.
  91. # Multiple commodities
  92. As far as commodities go, the = sign only works if the account
  93. balance's commodity matches the commodity of the amount after the
  94. equals sign. However, if the account has multiple commodities, only
  95. the matching commodity is affected. Here's what I mean:
  96. 2008/07/24 Opening Balance
  97. Assets:Checking = $250.00 ; we force set it
  98. Equity:Opening Balances
  99. 2008/07/24 Opening Balance
  100. Assets:Checking = EC 250.00 ; we force set it again
  101. Equity:Opening Balances
  102. This is an error, because $250.00 cannot be auto-balanced to match EC
  103. 250.00. However:
  104. 2008/07/24 Opening Balance
  105. Assets:Checking = $250.00 ; we force set it again
  106. Assets:Checking EC 100.00 ; and add some EC's
  107. Equity:Opening Balances
  108. 2008/07/24 Opening Balance
  109. Assets:Checking = EC 250.00 ; we force set the EC's
  110. Equity:Opening Balances
  111. This is *not* an error, because the latter auto-balancing transaction
  112. only affects the EC 100.00 part of the account's balance; the $250.00
  113. part is left alone.
  114. # Checking statement balances
  115. When you reconcile a statement, there are typically one or more
  116. transactions which result in a known balance. Here's how you specify
  117. that in your Ledger data:
  118. 2008/07/24 Opening Balance
  119. Assets:Checking = $100.00
  120. Equity:Opening Balances
  121. 2008/07/30 We spend money, with a known balance afterward
  122. Expenses:Food $20.00
  123. Assets:Checking = $80.00
  124. 2008/07/30 Again we spend money, but this time with all the info
  125. Expenses:Food $20.00
  126. Assets:Checking $-20.00 = $60.00
  127. 2008/07/30 This entry yield an 'unbalanced' error
  128. Expenses:Food $20.00
  129. Assets:Checking $-20.00 = $30.00
  130. The last entry in this set fails to balance with an unbalanced
  131. remainder of $-10.00. Either the entry must be corrected, or you can
  132. have Ledger deal with the remainder automatically:
  133. 2008/07/30 The fixed entry
  134. Expenses:Food $20.00
  135. Assets:Checking $-20.00 = $30.00
  136. Equity:Adjustments
  137. # Conclusion
  138. This simple feature has all the utility of @check, plus auto-balancing
  139. to match known target balances, plus the ability to guarantee that an
  140. account which uses only one commodity does contain only that
  141. commodity.
  142. This feature slows down textual parsing slightly, does not affect
  143. speed when loading from the binary cache.
  144. - The rest of the changes in the version is all bug fixes (around 45 of
  145. them).
  146. * 2.6.0.90
  147. - Gnucash parser is fixed.
  148. - Fix a memory leak bug in the amount parser.
  149. - (This feature is from 2.6, but was not documented anywhere):
  150. Commodities may now specify lot details, to assign in managing set
  151. groups of items, like buying and selling shares of stock.
  152. For example, let's say you buy 50 shares of AAPL at $10 a share:
  153. 2007/01/14 Stock purchase
  154. Assets:Brokerage 50 AAPL @ $10
  155. Assets:Brokerage
  156. Three months later, you sell this "lot". Based on the original
  157. purchase information, Ledger remembers how much each share was
  158. purchased for, and the date on which it was purchased. This means
  159. you can sell this specific lot by price, by date, or by both. Let's
  160. sell it by price, this time for $20 a share.
  161. 2007/04/14 Stock purchase
  162. Assets:Brokerage $1000.00
  163. Assets:Brokerage -50 AAPL {$10} @ $20
  164. Income:Capital Gains $-500.00
  165. Note that the Income:Capital Gains line is now required to balance
  166. the transaction. Because you sold 50 AAPL at $20/share, and because
  167. you are selling shares that were originally valued at $10/share,
  168. Ledger needs to know how you will "balance" this difference. An
  169. equivalent Expenses:Capital Loss would be needed if the selling
  170. price were less than the buying price.
  171. Here's the same example, this time selling by date and price:
  172. 2007/04/14 Stock purchase
  173. Assets:Brokerage $1000.00
  174. Assets:Brokerage -50 AAPL {$10} [2007/01/14] @ $20
  175. Income:Capital Gains $-500.00
  176. If you attempt to sell shares for a date you did not buy them, note
  177. that Ledger will not complain (as it never complains about the
  178. movement of commodities between accounts). In this case, it will
  179. simply create a negative balance for such shares within your
  180. Brokerage account; it's up to you to determine whether you have them
  181. or not.
  182. - To facilitate lot pricing reports, there are some new reporting
  183. options:
  184. --lot-prices Report commodities with different lot prices as if
  185. they were different commodities. Otherwise, Ledger
  186. just gloms all the AAPL shares together.
  187. --lot-dates Separate commodities by lot date. Every
  188. transaction that uses the '@' cost specifier will
  189. have an implicit lot date and lot price.
  190. --lot-tags Separate commodities by their arbitrary note tag.
  191. Note tags may be specified using (note) after the
  192. commodity.
  193. --lots Separate commodities using all lot information.
  194. * 2.6
  195. - The style for eliding long account names (for example, in the
  196. register report) has been changed. Previously Ledger would elide
  197. the end of long names, replacing the excess length with "..".
  198. However, in some cases this caused the base account name to be
  199. missing from the report!
  200. What Ledger now does is that if an account name is too long, it will
  201. start abbreviating the first parts of the account name down to two
  202. letters in length. If this results in a string that is still too
  203. long, the front will be elided -- not the end. For example:
  204. Expenses:Cash ; OK, not too long
  205. Ex:Wednesday:Cash ; "Expenses" was abbreviated to fit
  206. Ex:We:Afternoon:Cash ; "Expenses" and "Wednesday" abbreviated
  207. ; Expenses:Wednesday:Afternoon:Lunch:Snack:Candy:Chocolate:Cash
  208. ..:Af:Lu:Sn:Ca:Ch:Cash ; Abbreviated and elided!
  209. As you can see, it now takes a very deep account name before any
  210. elision will occur, whereas in 2.x elisions were fairly common.
  211. - In addition to the new elision change mentioned above, the style is
  212. also configurable:
  213. --truncate leading ; elide at the beginning
  214. --truncate middle ; elide in the middle
  215. --truncate trailing ; elide at end (Ledger 2.x's behavior)
  216. --truncate abbrev ; the new behavior
  217. --abbrev-len 2 ; set length of abbreviations
  218. These elision styles affect all format strings which have a maximum
  219. width, so they will also affect the payee in a register report, for
  220. example. In the case of non-account names, "abbrev" is equivalent
  221. to "trailing", even though it elides at the beginning for long
  222. account names.
  223. - Error reporting has been greatly improving, now showing full
  224. contextual information for most error messages.
  225. - Added --base reporting option, for reporting convertible commodities
  226. in their most basic form. For example, if you read a timeclock file
  227. with Ledger, the time values are reported as hour and minutes --
  228. whichever is the most compact form. But with --base, Ledger reports
  229. only in seconds.
  230. NOTE: Setting up convertible commodities is easy; here's how to use
  231. Ledger for tracking quantities of data, where the most compact form
  232. is reported (unless --base is specified):
  233. C 1.00 Kb = 1024 b
  234. C 1.00 Mb = 1024 Kb
  235. C 1.00 Gb = 1024 Mb
  236. C 1.00 Tb = 1024 Gb
  237. - Added --ansi reporting option, which shows negative values in the
  238. running total column of the register report as red, using ANSI
  239. terminal codes; --ansi-invert makes non-negative values red (which
  240. makes more sense for the income and budget reports).
  241. The --ansi functionality is triggered by the format modifier "!",
  242. for example the register reports uses the following for the total
  243. (last) column:
  244. %!12.80T
  245. At the moment neither the balance report nor any of the other
  246. reports make use of the ! modifier, and so will not change color
  247. even if --ansi is used. However, you can modify these report format
  248. strings yourself in ~/.ledgerrc if you wish to see red coloring of
  249. negative sums in other places.
  250. - Added --only predicate, which occurs during transaction processing
  251. between --limit and --display. Here is a summary of how the three
  252. supported predicates are used:
  253. --limit "a>100"
  254. This flag limits computation to *only transactions whose amount
  255. is greater than 100 of a given commodity*. It means that if you
  256. scan your dining expenses, for example, only individual bills
  257. greater than $100 would be calculated by the report.
  258. --only "a>100"
  259. This flag happens much later than --limit, and corresponding
  260. more directly to what one normally expects. If --limit isn't
  261. used, then ALL your dining expenses contribute to the report,
  262. *but only those calculated transactions whose value is greater
  263. than $100 are used*. This becomes important when doing a
  264. monthly costs report, for example, because it makes the
  265. following command possible:
  266. ledger -M --only "a>100" reg ^Expenses:Food
  267. This shows only *months* whose amount is greater than 100. If
  268. --limit had been used, it would have been a monthly summary of
  269. all individual dinner bills greater than 100 -- which is a very
  270. different thing.
  271. --display "a>100"
  272. This predicate does not constrain calculation, but only display.
  273. Consider the same command as above:
  274. ledger -M --display "a>100" reg ^Expenses:Food
  275. This displays only lines whose amount is greater than 100, *yet
  276. the running total still includes amounts from all transactions*.
  277. This command has more particular application, such as showing
  278. the current month's checking register while still giving a
  279. correct ending balance:
  280. ledger --display "d>[this month]" reg Checking
  281. Note that these predicates can be combined. Here is a report that
  282. considers only food bills whose individual cost is greater than
  283. $20, but shows the monthly total only if it is greater than $500.
  284. Finally, we only display the months of the last year, but we
  285. retain an accurate running total with respect to the entire ledger
  286. file:
  287. ledger -M --limit "a>20" --only "a>200" \
  288. --display "year == yearof([last year])" reg ^Expenses:Food
  289. - Added new "--descend AMOUNT" and "--descend-if VALEXPR" reporting
  290. options. For any reports that display valued transactions (i.e.,
  291. register, print, etc), you can now descend into the component
  292. transactions that made up any of the values you see.
  293. For example, say you request a --monthly expenses report:
  294. $ ledger --monthly register ^Expenses
  295. Now, in one of the reported months you see $500.00 spent on
  296. Expenses:Food. You can ask Ledger to "descend" into, and show the
  297. component transactions of, that $500.00 by respecifying the query
  298. with the --descend option:
  299. $ ledger --monthly --descend "\$500.00" register ^Expenses
  300. The --descend-if option has the same effect, but takes a value
  301. expression which is evaluated as a boolean to locate the desired
  302. reported transaction.
  303. - Added a "dump" command for creating binary files, which load much
  304. faster than their textual originals. For example:
  305. ledger -f huge.dat -o huge.cache dump
  306. ledger -f huge.cache bal
  307. The second command will load significantly faster (usually about six
  308. times on my machine).
  309. - There have a few changes to value expression syntax. The most
  310. significant incompatibilities being:
  311. * Equality is now ==, not =
  312. * The U, A, and S functions now requires parens around the argument.
  313. Whereas before At was acceptable, now it must be specified as
  314. A(t).
  315. * The P function now always requires two arguments. The old
  316. one-argument version P(x) is now the same as P(x,m).
  317. The following value expression features are new:
  318. * A C-like comma operator is supported, where all but the last term
  319. are ignored. The is significant for the next feature:
  320. * Function definitions are now supported. Scoping is governed
  321. by parentheses. For example:
  322. (x=100, x+10) ; yields 110 as the result
  323. (f(x)=x*2,f(100)) ; yields 200 as the result
  324. * Identifier names may be any length. Along with this support comes
  325. alternate, longer names for all of the current one-letter value
  326. expression variables:
  327. Old New
  328. --- ---
  329. m now
  330. a amount
  331. a amount
  332. b cost
  333. i price
  334. d date
  335. X cleared
  336. Y pending
  337. R real
  338. L actual
  339. n index
  340. N count
  341. l depth
  342. O total
  343. B cost_total
  344. I price_total
  345. v market
  346. V market_total
  347. g gain
  348. G gain_total
  349. U(x) abs(x)
  350. S(x) quant(x), quantity(x)
  351. comm(x), commodity(x)
  352. setcomm(x,y), set_commodity(x,y)
  353. A(x) mean(x), avg(x), average(x)
  354. P(x,y) val(x,y), value(x,y)
  355. min(x,y)
  356. max(x,y)
  357. - There are new "parse" and "expr" commands, whose argument is a
  358. single value expression. Ledger will simply print out the result of
  359. evaluating it. "parse" happens before parsing your ledger file,
  360. while "expr" happens afterward. Although "expr" is slower as a
  361. result, any commodities you use will be formatted based on patterns
  362. of usage seen in your ledger file.
  363. These commands can be used to test value expressions, or for doing
  364. calculation of commoditized amounts from a script.
  365. A new "--debug" will also dump the resulting parse tree, useful for
  366. submitting bug reports.
  367. - Added new min(x,y) and max(x,y) value expression functions.
  368. - Value expression function may now be defined within your ledger file
  369. (or initialization file) using the following syntax:
  370. @def foo(x)=x*1000
  371. This line makes the function "foo" available to all subsequent value
  372. expressions, to all command-line options taking a value expression,
  373. and to the new "expr" command (see above).
  374. * 2.5
  375. - Added a new value expression regexp command:
  376. C// compare against a transaction amount's commodity symbol
  377. - Added a new "csv" command, for outputting results in CSV format.
  378. - Ledger now expands ~ in file pathnames specified in environment
  379. variables, initialization files and journal files.
  380. - Effective dates may now be specified for entries:
  381. 2004/10/03=2004/09/30 Credit card company
  382. Liabilities:MasterCard $100.00
  383. Assets:Checking
  384. This entry says that although the actual transactions occurred on
  385. October 3rd, their effective date was September 30th. This is
  386. especially useful for budgeting, in case you want the transactions
  387. to show up in September instead of October.
  388. To report using effective dates, use the --effective option.
  389. - Actual and effective dates may now be specified for individual
  390. transactions:
  391. 2004/10/03=2004/09/30 Credit card company
  392. Liabilities:MasterCard $100.00
  393. Assets:Checking ; [2004/10/10=2004/09/15]
  394. This states that although the actual date of the entry is
  395. 2004/10/03, and the effective date of the entry is 2004/09/30, the
  396. actual date of the Checking transaction itself is 2004/10/10, and
  397. its effective date is 2004/09/15. The effective date is optional
  398. (just specifying the actual date would have read "[2004/10/10]").
  399. If no effective date is given for a transaction, the effective date
  400. of the entry is assumed. If no actual date is given, the actual
  401. date of the entry is assumed. The syntax of the latter is simply
  402. [=2004/09/15].
  403. - To support the above, there is a new formatting option: "%d". This
  404. outputs only the date (like "%D") if there is no effective date, but
  405. outputs "ADATE=EDATE" if there is one. The "print" report now uses
  406. this.
  407. - To support the above, the register report may now split up entries
  408. whose component transactions have different dates. For example,
  409. given the following entry:
  410. 2005/10/15=2005/09/01 iTunes
  411. Expenses:Music $1.08 ; [2005/10/20=2005/08/01]
  412. Liabilities:MasterCard
  413. The command "ledger register" on this data file reports:
  414. 2005/10/20 iTunes Expenses:Music $1.08 $1.08
  415. 2005/10/15 iTunes Liabilities:MasterCard $-1.08 0
  416. While the command "ledger --effective register" reports:
  417. 2005/08/01 iTunes Expenses:Music $1.08 $1.08
  418. 2005/09/01 iTunes Liabilities:MasterCard $-1.08 0
  419. Although it appears as though two entries are being reported, both
  420. transactions belong to the same entry.
  421. - Individual transactions may now be cleared separately. The old
  422. syntax, which is still supported, clears all transactions in an
  423. entry:
  424. 2004/05/27 * Book Store
  425. Expenses:Dining $20.00
  426. Liabilities:MasterCard
  427. The new syntax allows clearing of just the MasterCard transaction:
  428. 2004/05/27 Book Store
  429. Expenses:Dining $20.00
  430. * Liabilities:MasterCard
  431. NOTE: This changes the output format of both the "emacs" and "xml"
  432. reports. ledger.el uses the new syntax unless the Lisp variable
  433. `ledger-clear-whole-entries' is set to t.
  434. - Removed Python integration support.
  435. - Did much internal restructuring to allow the use of libledger.so in
  436. non-command-line environments (such as GUI tools).
  437. * 2.4.1
  438. - Corrected an issue that had inadvertently disabled Gnucash support.
  439. * 2.4
  440. - Both "-$100.00" and "$-100.00" are now equivalent amounts.
  441. - Simple, inline math (using the operators +-/*, and/or parentheses)
  442. is supported in transactions. For example:
  443. 2004/05/27 Book Store
  444. Expenses:Dining $20.00 + $2.50
  445. Liabilities:MasterCard
  446. This won't register the tax/tip in its own account, but might make
  447. later reading of the ledger file easier.
  448. - Use of a "catch all" account is now possible, which auto-balances
  449. entries that contain _only one transaction_. For sanity's sake this
  450. is not used to balance all entries, as that would make locating
  451. unbalanced entries a nightmare. Example:
  452. A Liabilities:MasterCard
  453. 2004/05/27 Book Store
  454. Expenses:Dining $20.00 + $2.50
  455. This is equivalent to the entry in the previous bullet.
  456. - Entries that contain a single transaction with no amount now always
  457. balance, even if multiple commodities are involved. This means that
  458. the following is now supported, which wasn't previously:
  459. 2004/06/21 Adjustment
  460. Retirement 100 FUNDA
  461. Retirement 200 FUNDB
  462. Retirement 300 FUNDC
  463. Equity:Adjustments
  464. - Fixed several bugs relating to QIF parsing, budgeting and
  465. forecasting.
  466. - The configure process now looks for libexpat in addition to
  467. searching for libxmlparse+libxmltok (how expat used to be packaged).
  468. * 2.3
  469. - The directive "!alias ALIAS = ACCOUNT" makes it possible to use
  470. "ALIAS" as an alternative name for ACCOUNT in a textual ledger file.
  471. You might use this to associate the single word "Bank" with the
  472. checking account you use most, for example.
  473. - The --version page shows the optional modules ledger was built with.
  474. - Fixed several minor problems, plus a few major ones dealing with
  475. imprecise date parsing.
  476. * 2.2
  477. - Ledger now compiles under gcc 2.95.
  478. - Fixed several core engine bugs, and problems with Ledger's XML data
  479. format.
  480. - Erros in XML or Gnucash data now report the correct line number for
  481. the error, instead of always showing line 1.
  482. - 'configure' has been changed to always use a combination of both
  483. compile and link tests for every feature, in order to identify
  484. environment problems right away.
  485. - The "D <COMM>" command, released in 2.1, now requires a commoditized
  486. amount, such as "D $1,000.00". This sets not only the default
  487. commodity, but several flags to be used with all such commodities
  488. (such as whether numbering should be American or European by
  489. default). This entry may be used be many times; the most recent
  490. seen specifies the default for entries that follow.
  491. - The binary cache now remembers the price history database that was
  492. used, so that if LEDGER_PRICE_DB is silently changed, the cache will
  493. be thrown away and rebuilt.
  494. - OFX data importing is now supported, using libofx
  495. (http://libofx.sourceforge.net). configure will check if the
  496. library is available. You may need to add CPPFLAGS or LDFLAGS to
  497. the command-line for the appropriate headers and library to be
  498. found. This support is preliminary, and as such is not documented
  499. yet.
  500. - All journal entries now remember where they were read from. New
  501. format codes to access this information are: %S for source path, %B
  502. for beginning character position, and %E for ending character
  503. position.
  504. - Added "pricesdb" command, which is identical to "prices" except that
  505. it uses the same format as Ledger's usual price history database.
  506. - Added "output FILE" command, which attempts to reproduce the input
  507. journal FILE exactly. Meant for future GUI usage. This command
  508. relies on --write-hdr-format and --write-xact-format, instead of
  509. --print-format.
  510. - Added "--reconcile BALANCE" option, which attempts to reconcile all
  511. matching transactions to the given BALANCE, outputting those that
  512. would need to be "cleared" to match it. Using by the
  513. auto-reconciling feature of ledger.el (see below).
  514. "--reconcile-date DATE" ignores any uncleared transactions after
  515. DATE in the reconciling algorithm. Since the algorithm is O(n^2)
  516. (where 'n' is the number of uncleared transactions to consider),
  517. this could have a substantial impact.
  518. - In ledger.el's *Reconcile* mode ('C-c C-r' from a ledger-mode file):
  519. . 'a' adds a missing transaction
  520. . 'd' deletes the current transaction
  521. . 'r' attempts to auto-reconcile (same as 'C-u C-c C-r')
  522. . 's' or 'C-x C-s' will save the ledger data file and show the
  523. currently cleared balance
  524. . 'C-c C-c' commits the pending transactions, marking them cleared.
  525. This feature now works with Emacs 21.3.
  526. Also, the reconciler no longer needs to ask "how far back" to go.
  527. - To support the reconciler, textual entries may now have a "!" flag
  528. (pending) after the date, instead of a "*" flag (cleared).
  529. - There are a new set of value expression regexp commands:
  530. c// entry code
  531. p// payee
  532. w// short account name
  533. W// full account name
  534. e// transaction note
  535. This makes it possible to display transactions whose comment field
  536. matches a particular text string. For example:
  537. ledger -l e/{tax}/ reg
  538. prints out all the transactions with the comment "{tax}", which
  539. might be used to identify items related to a tax report.
  540. * 2.1
  541. - Improved the autoconf system to be smarter about finding XML libs
  542. - Added --no-cache option, to always ignore any binary cache file
  543. - `ledger-reconcile' (in ledger.el) no longer asks for a number of days
  544. - Fixed %.XY format, where X is shorter than the string generated by Y
  545. - New directive for text files: "D <COMM>" specifies the default commodity
  546. used by the entry command
  547. * 2.0
  548. This version represents a full rewrite, while preserving much of the
  549. original data format and command-line syntax. There are too many new
  550. features to describe in full, but a quick list: value expressions,
  551. complex date masks, binary caching of ledger data, several new
  552. reporting options, a simple way to specify payee regexps, calculation
  553. and display predicates, and two-way Python integration. Ledger also
  554. uses autoconf now, and builds as a library in addition to a
  555. command-line driver.
  556. ** Differences from 1.7
  557. - changes in option syntax:
  558. -d now specifies the display predicate. To give a date mask similar
  559. to 1.7, use the -p (period) option.
  560. -P now generates the "by payee" report. To specify a price database
  561. to use, use --price-db.
  562. -G now generates a net gain report. To print totals in a format
  563. consumable by gnuplot, use -J.
  564. -l now specifies the calculation predicate. To emulate the old
  565. usage of "-l \$100", use: -d "AT>100".
  566. -N is gone. Instead of "-N REGEX", use: -d "/REGEX/?T>0:T".
  567. -F now specifies the report format string. The old meaning of -F
  568. now has little use.
  569. -S now takes a value expression as the sorting criterion. To get
  570. the old meaning of "-S", use "-S d".
  571. -n now means "collapse entries in the register report". The get the
  572. old meaning of -n in the balance report, use "-T a".
  573. -p now specifies the reporting period. You can convert commodities
  574. in a report using value expressions. For example, to display hours
  575. at $10 per hour:
  576. -T "O>={0.01h}?{\$10.00}*O:O"
  577. Or, to reduce totals, so that every $417 becomes 1.0 AU:
  578. -T "O>={\$0.01}?{1.0 AU}*(O/{\$417}):O"
  579. - The use of "+" and "-" in ledger files to specify permanent regexps
  580. has been removed.
  581. - The "-from" argument is no longer used by the "entry" command.
  582. Simply remove it.
  583. ** Features new to 2.0
  584. - The most significant feature to be added is "value expressions".
  585. They are used in many places to indicate what to display, sorting
  586. order, how to calculate totals, etc. Logic and math operators are
  587. supported, as well as simple functions. See the manual.
  588. - If the environment variable LEDGER_FILE (or LEDGER) is used, a
  589. binary cache of that ledger is kept in ~/.ledger-cache (or the file
  590. given by LEDGER_CACHE). This greatly speeds up subsequent queries.
  591. Happens only if "-f" or "--file" is not used.
  592. - New 'xml' report outputs an XML version of what "register" would
  593. have displayed. This can be used to manipulate reported data in a
  594. more scriptable way.
  595. Ledger can also read as input the output from the "xml" report. If
  596. the "xml" report did not contain balanced entries, they will be
  597. balanced by the "<Unknown>" account. For example:
  598. ledger reg rent
  599. displays the same results as:
  600. ledger xml rent | ledger -f - reg rent
  601. - Regexps given directly after the command name now apply only to
  602. account names. To match on a payee, use "--" to separate the two
  603. kinds of regexps. For example, to find a payee named "John" within
  604. all Expenses accounts, use:
  605. ledger register expenses -- john
  606. Note: This command is identical (and internally converted) to:
  607. ledger -l "/expenses/|//john/" register
  608. - To include entries from another file into a specific account, use:
  609. !account ACCOUNT
  610. !include FILE
  611. !end
  612. - Register reports now show only matching account transactions. Use
  613. "-r" to see "related accounts" -- the account the transfer came from
  614. or went to (This was the old behavior in 1.x, but led to confusion).
  615. "-r" also works with balance reports, where it will total all the
  616. transactions related to your query.
  617. - Automated transactions now use value expressions for the predicate.
  618. The new syntax is:
  619. = VALUE-EXPR
  620. TRANSACTIONS...
  621. Only one VALUE-EXPR is supported (compared to multiple account
  622. regexps before). However, since value expression allow for logic
  623. chaining, there is no loss of functionality. Matching can also be
  624. much more comprehensive.
  625. - If Boost.Python is installed (libboost_python.a), ledger can support
  626. two-way Python integration. This feature is enabled by passing
  627. --enable-python to the "configure" script before building. Ledger
  628. can then be used as a module (ledger.so), as well as supporting
  629. Python function calls directly from value expressions. See main.py
  630. for an example of driving Ledger from Python. It implements nearly
  631. all the functionality of the C++ driver, main.cc.
  632. (This feature has yet to mature, and so is being offered as a beta
  633. feature in this release. It is mostly functional, and those curious
  634. are welcome to play with it.)
  635. - New reporting options:
  636. "-o FILE" outputs data to FILE. If "-", output goes to stdout (the
  637. default).
  638. -O shows base commodity values (this is the old behavior)
  639. -B shows basis cost of commodities
  640. -V shows market value of commodities
  641. -g reports gain/loss performance of each register item
  642. -G reports net gain/loss over time
  643. -A reports average transaction value (arithmetic mean)
  644. -D reports each transaction's deviation from the average
  645. -w uses 132 columns for the register report, rather than 80. Set
  646. the environment variable LEDGER_WIDE for this to be the default.
  647. "-p INTERVAL" allows for more flexible period reporting, such as:
  648. monthly
  649. every week
  650. every 3 quarters
  651. weekly from 12/20
  652. monthly in 2003
  653. weekly from last month until dec
  654. "-y DATEFMT" changes the date format used in all reports. The
  655. default is "%Y/%m/%d".
  656. -Y and -W print yearly and weekly subtotals, just as -M prints
  657. monthly subtotals.
  658. --dow shows cumulative totals for each day of the week.
  659. -P reports transactions grouped by payee
  660. -x reports the payee as the commodity; useful in some cases
  661. -j and -J replace the previous -G (gnuplot) option. -j reports the
  662. amounts column in a way gnuplot can consume, and -J the totals
  663. column. An example is in "scripts/report".
  664. "--period-sort EXPR" sorts transactions within a reporting period.
  665. The regular -S option sorts all reported transactions.
  666. * 1.7
  667. - Pricing histories are now supported, so that ledger remembers the
  668. historical prices of all commodities, and can present register
  669. reports based on past and present market values as well as original
  670. cost basis. See the manual for more details on the new option
  671. switches.
  672. * 1.6
  673. - Ledger can now parse timeclock files. These are simple timelogs
  674. that track in/out events, which can be maintained using my timeclock
  675. tool. By allowing ledger to parse these, it means that reporting
  676. can be done on them in the same way as ledger files (the commodity
  677. used is "h", for hours); it means that doing things like tracking
  678. billable hours for clients, and invoicing those clients to transfer
  679. hours into dollar values via a receivable account, is now trivial.
  680. See the docs for more on how to do this.
  681. - Began keeping a NEWS file. :)