ledger-mode.texi 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194
  1. \input texinfo @c -*-texinfo-*-
  2. @setfilename ledger-mode.info
  3. @settitle Ledger: Command-Line Accounting
  4. @c Before release, run C-u C-c C-u C-a (texinfo-all-menus-update with
  5. @c a prefix arg). This updates the node pointers, which texinfmt.el
  6. @c needs.
  7. @copying
  8. Copyright @copyright{} 2013, Craig Earls. All rights reserved.
  9. Redistribution and use in source and binary forms, with or without
  10. modification, are permitted provided that the following conditions are
  11. met:
  12. @itemize
  13. @item
  14. Redistributions of source code must retain the above copyright notice,
  15. this list of conditions and the following disclaimer.
  16. @item
  17. Redistributions in binary form must reproduce the above copyright
  18. notice, this list of conditions and the following disclaimer in the
  19. documentation and/or other materials provided with the distribution.
  20. @item
  21. Neither the name of New Artisans LLC nor the names of its contributors
  22. may be used to endorse or promote products derived from this software
  23. without specific prior written permission.
  24. @end itemize
  25. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
  26. IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
  27. TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  28. A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  29. OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  30. SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
  31. TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  32. PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  33. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  34. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  35. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  36. @end copying
  37. @dircategory Major Modes
  38. @direntry
  39. * Ledger Mode: (ledger-mode). Command-Line Accounting
  40. @end direntry
  41. @documentencoding UTF-8
  42. @iftex
  43. @finalout
  44. @end iftex
  45. @titlepage
  46. @title Ledger Mode
  47. @subtitle Emacs Support For Version 3.0 of Ledger
  48. @author Craig Earls
  49. @page
  50. @vskip 0pt plus 1filll
  51. @insertcopying
  52. @end titlepage
  53. @contents
  54. @ifnottex
  55. @node Top, Introduction to Ledger-mode, (dir), (dir)
  56. @top Overview
  57. Ledger is a command line accounting tool that provides double-entry
  58. accounting based on a text journal. It provides no bells or whistles,
  59. and returns the user to the days before user interfaces were even
  60. a 1twinkling in their father's CRT.
  61. Ledger-mode assists you in maintaining input files for Ledger, running
  62. reports and much more...
  63. @end ifnottex
  64. @menu
  65. * Introduction to Ledger-mode::
  66. * The Ledger Buffer::
  67. * The Reconcile Buffer::
  68. * The Report Buffer::
  69. * Scheduling Transactions::
  70. * Customizing Ledger-mode::
  71. * Generating Ledger Regression Tests::
  72. * Embedding Example results in Ledger Documentation::
  73. * Hacking Ledger-mode::
  74. * Concept Index::
  75. * Command & Variable Index::
  76. * Keystroke Index::
  77. @end menu
  78. @node Introduction to Ledger-mode, The Ledger Buffer, Top, Top
  79. @chapter Introduction to Ledger-mode
  80. @menu
  81. * Quick Installation::
  82. * Menus::
  83. * Quick Demo::
  84. @end menu
  85. @node Quick Installation, Menus, Introduction to Ledger-mode, Introduction to Ledger-mode
  86. @section Quick Installation
  87. @cindex installation
  88. The Emacs lisp source for Ledger-mode is included with the source
  89. distribution of Ledger. It is entirely included in the @file{lisp}
  90. subdirectory. To use Ledger-mode, include the following in your Emacs
  91. initialization file (@file{~/.emacs}, @file{~/.emacs.d/init.el}, or
  92. @file{~/.Aquamacs/Preferences.el}).
  93. @lisp
  94. (autoload 'ledger-mode "ledger-mode" "A major mode for Ledger" t)
  95. (add-to-list 'load-path
  96. (expand-file-name "/path/to/ledger/source/lisp/"))
  97. (add-to-list 'auto-mode-alist '("\\.ledger$" . ledger-mode))
  98. @end lisp
  99. This sets up Emacs to automatically recognize files that end with
  100. @file{.ledger} and start Ledger-mode. Nothing else should be required
  101. as long as the ledger command line utility is properly installed.
  102. @node Menus, Quick Demo, Quick Installation, Introduction to Ledger-mode
  103. @section Menus
  104. @cindex menu
  105. The vast majority of Ledger-mode functionality is available from the
  106. Emacs menu system. The keystrokes are shown in the menu to help you
  107. learn the faster keyboard methods.
  108. @node Quick Demo, , Menus, Introduction to Ledger-mode
  109. @section Quick Demo
  110. @cindex demo
  111. Load the demo file @file{demo.ledger} from the Ledger source
  112. @file{test/input} directory. The ledger will be loaded and font
  113. highlighted. At this point you could manually edit transactions and run
  114. Ledger from a convenient command line.
  115. @menu
  116. * Quick Add::
  117. * Reconciliation::
  118. * Reports::
  119. * Narrowing::
  120. @end menu
  121. @node Quick Add, Reconciliation, Quick Demo, Quick Demo
  122. @subsection Quick Add
  123. @kindex C-c TAB
  124. @kindex C-c C-a
  125. As simple as the Ledger transaction format is, it can still be daunting
  126. to add many transactions manually. Ledger provides two way to add
  127. transactions with minimal typing. Both are based on the idea that most
  128. transactions are repetitions of earlier transactions.
  129. In the @file{demo.ledger} buffer enter a date using the correct
  130. format. Then type the first few characters of another payee in the
  131. @file{demo.ledger} buffer. Type @kbd{C-c TAB}. Ledger-mode will
  132. search for a Payee that has the same beginning and copy the rest of the
  133. transaction to you new entry.
  134. Additionally you can use the ledger @command{xact} command, by either
  135. typing @kbd{C-c C-a} or using @samp{Add Transaction} menu entry. Then
  136. typing a close match to the payee. Ledger-mode will call @command{ledger
  137. xact} with the data you enter and place the transaction in the proper
  138. chronological place in the ledger.
  139. If you need to add a lot of transactions that are not near your current
  140. date you can set the current year and month so that using @samp{Add
  141. Transaction} will prompt you with a more convenient month and year. To
  142. set the month type @kbd{C-c RET} and enter the month you want. @kbd{C-c
  143. C-y} will prompt you for the year. These settings only effect the
  144. @samp{Add Transaction} command.
  145. @node Reconciliation, Reports, Quick Add, Quick Demo
  146. @subsection Reconciliation
  147. @kindex C-c C-r
  148. @kindex SPC
  149. @kindex C-c C-c
  150. @kindex q
  151. The biggest task of maintaining a ledger is ensuring that it matches the
  152. outside world. This process is called reconciliation (@pxref{Basics of
  153. Reconciliation}) and can be quite onerous. Ledger-mode attempts to make
  154. it as painless as possible.
  155. In the @file{demo.ledger} buffer type @kbd{C-c C-r}. If cursor is on an
  156. account, Ledger-mode will propose this account, or in the Minibuffer,
  157. will prompt for an account to reconcile. Hit @kbd{RET} if you are happy
  158. with proposed account, or enter @samp{Checking} as example.
  159. Emacs will then prompt for a target value. The target value is the
  160. amount you want the cleared transactions in the buffer to total.
  161. Normally this would be the ending value from your bank statement, or the
  162. latest value in your on-line transaction summary. Enter @samp{1710}.
  163. Note that Ledger-mode assumes your are using @samp{$} (USD) as your
  164. default commodity, this can be easily changed in the customization
  165. variables. @xref{Ledger-mode Customization}.
  166. You now see a list of uncleared transactions in a buffer below the
  167. @file{demo.ledger} buffer. Touching the @kbd{SPC} bar will mark
  168. a transaction as pending and display the current cleared (and pending)
  169. balance, along with the difference remaining to meet your target. Clear
  170. the first three transactions, and you will see the difference to target
  171. reach @samp{$0}. End the reconciliation by typing @kbd{C-c C-c}. This
  172. saves the @file{demo.ledger} buffer and marks the transactions and
  173. finally cleared. Type @kbd{q} to close out the reconciliation buffer.
  174. @node Reports, Narrowing, Reconciliation, Quick Demo
  175. @subsection Reports
  176. @kindex C-c C-o C-r
  177. @kindex C-c C-c
  178. The real power of Ledger is in it reporting capabilities. Reports can
  179. be run and displayed in a separate Emacs buffer. In the
  180. @file{demo.ledger} buffer, type @kbd{C-c C-o C-r}. In the Minibuffer
  181. Emacs will prompt for a report name. There are a few built-in reports,
  182. and you can add any report you need @xref{Adding and Editing Reports}.
  183. In the Minibuffer type @samp{account}. When prompted for an account
  184. type @samp{checking}. In a buffer named @file{*Ledger Report*}, you
  185. will see a Ledger register report. You can move around the buffer, with
  186. the point on a transaction, type @kbd{RET}. Ledger-mode will take you
  187. directly to that transaction in the @file{demo.ledger} buffer.
  188. Another built-in report is the balance report. In the
  189. @file{demo.ledger} buffer, type @kbd{C-c C-o C-r}. When prompted for
  190. a report to run, type @samp{bal}, and a balance report of all accounts
  191. will be shown.
  192. @node Narrowing, , Reports, Quick Demo
  193. @subsection Narrowing
  194. @kindex C-c C-f
  195. @kindex C-c C-g
  196. A ledger file can get very large. It can be helpful to collapse the
  197. buffer to display only the transactions you are interested in.
  198. Ledger-mode copies the @command{occur} mode functionality. Typing
  199. @kbd{C-c C-f} and entering any regex in the Minibuffer will show only
  200. transactions that match the regex. The regex can be on any field, or
  201. amount. Use @kbd{C-c C-g} after editing transactions to re-apply the
  202. current regex. Cancel the narrowing by typing @kbd{C-c C-f} again.
  203. @node The Ledger Buffer, The Reconcile Buffer, Introduction to Ledger-mode, Top
  204. @chapter The Ledger Buffer
  205. @menu
  206. * Adding Transactions::
  207. * Copying Transactions::
  208. * Editing Amounts::
  209. * Marking Transactions::
  210. * Formatting Transactions::
  211. * Deleting Transactions::
  212. * Sorting Transactions::
  213. * Narrowing Transactions::
  214. @end menu
  215. @node Adding Transactions, Copying Transactions, The Ledger Buffer, The Ledger Buffer
  216. @section Adding Transactions
  217. @findex ledger-post-auto-adjust-amounts
  218. @findex ledger-post-amount-alignment-column
  219. @kindex TAB
  220. @cindex transaction, adding
  221. Beyond the two ways of quickly adding transactions (@pxref{Quick Add})
  222. Ledger-mode assists you by providing robust @kbd{TAB} completion for
  223. payees and accounts. Ledger-mode will scan the existing buffer for
  224. payees and accounts. Included files are not currently included in the
  225. completion scan. Repeatedly hitting @kbd{TAB} will cycle through the
  226. possible completions.
  227. Ledger-mode can also help you keep your amounts aligned. Setting
  228. @option{ledger-post-auto-adjust-amounts} to true tells Ledger-mode to
  229. automatically place any amounts such that their last digit is aligned to
  230. the column specified by @option{ledger-post-amount-alignment-column},
  231. which defaults to @samp{52}. @xref{Ledger Post Customization Group}.
  232. @menu
  233. * Setting a Transactions Effective Date::
  234. * Quick Balance Display::
  235. @end menu
  236. @node Setting a Transactions Effective Date, Quick Balance Display, Adding Transactions, Adding Transactions
  237. @subsection Setting a Transactions Effective Date
  238. @kindex C-c C-t
  239. @cindex effective date
  240. Ledger provides for adding information to a transaction that add details
  241. to the dates. For example, you can specify when the transaction was
  242. entered, when the transaction was cleared, or when individual postings
  243. were cleared.
  244. Ledger-mode refers to these additional dates as @emph{effective} dates.
  245. To set the effective date of a transaction, place the point in the first
  246. line of a transaction and type @kbd{C-c C-t}. The effective date will
  247. be added to the transaction. To set the effective date for an
  248. individual posting, place point in the posting and type @kbd{C-c C-t} and
  249. the effective date for that posting will be added at the end of the
  250. posting.
  251. @node Quick Balance Display, , Setting a Transactions Effective Date, Adding Transactions
  252. @subsection Quick Balance Display
  253. @kindex C-c C-p
  254. @cindex balance
  255. You will often want to quickly check the balance of an account. The
  256. easiest way it to position point on the account you are interested in,
  257. and type @kbd{C-c C-p}. The Minibuffer will ask you to verify the name
  258. of the account you want, if it is already correct hit @kbd{RET}, then
  259. the balance of the account will be displayed in the Minibuffer.
  260. @node Copying Transactions, Editing Amounts, Adding Transactions, The Ledger Buffer
  261. @section Copying Transactions
  262. @kindex C-c C-k
  263. @cindex transaction, copying
  264. An easy way to copy a transaction is to type @kbd{C-c C-k} or menu entry
  265. @samp{Copy Trans at Point}. You will be prompted the new date for the
  266. copied transaction, and after having confirmed with @kbd{RET}, new
  267. transaction will be inserted at @emph{date} position in buffer.
  268. @node Editing Amounts, Marking Transactions, Copying Transactions, The Ledger Buffer
  269. @section Editing Amounts
  270. @kindex C-c C-b
  271. @kindex y
  272. @cindex Calc
  273. @cindex GNU Emacs Calculator
  274. @cindex transaction, editing amounts
  275. GNU Emacs Calculator, aka @samp{Calc}, is a very powerful Reverse Polish
  276. Notation calculator built into all recent version of Emacs. Ledger-mode
  277. makes it easy to calculate values for amount by integrating
  278. @command{Calc}. With the point anywhere in the same line as a posting,
  279. typing @kbd{C-c C-b} will bring up the @file{Calc} buffer, and push the
  280. current amount for the posting onto the top of the @command{Calc} stack.
  281. Perform any calculations you need to arrive at the final value, then
  282. type @kbd{y} to yank the value at the top of stack back into the ledger
  283. buffer. Note: @command{Calc} does not directly support commas as
  284. decimal separators. Ledger-mode will translate values from
  285. decimal-comma format to decimal-period format for use in @command{Calc},
  286. but it cannot intercept the value being yanked form the @command{Calc}
  287. stack, so decimal-comma users will have to manually replace the period
  288. with a comma.
  289. @node Marking Transactions, Formatting Transactions, Editing Amounts, The Ledger Buffer
  290. @section Marking Transactions
  291. @cindex transaction, marking
  292. @cindex uncleared
  293. @cindex pending
  294. @cindex cleared
  295. Ledger considers transaction or posting to be in one of three states:
  296. uncleared, cleared, and pending. For calculation Ledger ignores these
  297. states unless specifically instructed to use them. Ledger-mode assigns
  298. some additional meaning to the states:
  299. @itemize
  300. @item Uncleared.
  301. No state. This is equivalent to sticking a check in the mail. It has
  302. been obligated, but not been cashed by the recipient. It could also
  303. apply to credit/debit card transactions that have not been cleared into
  304. your account balance. You bank may call these transactions @emph{pending},
  305. but Ledger-mode uses a slightly different meaning.
  306. @item Pending.
  307. Ledger-mode's reconciliation function see pending transactions as an
  308. intermediate step in reconciling an account. When doing
  309. a reconciliation (@pxref{Reconciliation}), marking a transaction as
  310. pending means that you have seen the transaction finally recorded by the
  311. recipient, but you have not completely reconciled the account.
  312. @item Cleared.
  313. The transaction has been completely recognized by all parties to the
  314. transaction.
  315. @end itemize
  316. @kindex C-c C-c
  317. @kindex C-c C-e
  318. Typing @kbd{C-c C-c}, depending where is the point, will clear the
  319. complete transaction, or an individual posting. This places an asterisk
  320. @samp{*} prior to the payee for the complete transaction, or prior to
  321. the account for an individual posting. When point is inside
  322. a transaction, specifically on an individual posting, you can still
  323. clear the complete transaction by typing @kbd{C-c C-e}.
  324. @node Formatting Transactions, Deleting Transactions, Marking Transactions, The Ledger Buffer
  325. @section Formatting Transactions
  326. @cindex transaction, formatting
  327. When editing a transaction, liberal use of the @kbd{TAB} key can keep
  328. the transaction well formatted. If you want to have Ledger-mode cleanup
  329. the formatting of a transaction you can use @samp{Align Transaction} or
  330. @samp{Align Region} from the menu bar.
  331. The menu item @samp{Clean-up Buffer} sorts all transactions in the buffer
  332. by date, removes extraneous empty lines and aligns every transaction.
  333. @node Deleting Transactions, Sorting Transactions, Formatting Transactions, The Ledger Buffer
  334. @section Deleting Transactions
  335. @kindex C-c C-d
  336. @cindex transaction, deleting
  337. Along with normal buffer editing methods to delete text, Ledger-mode
  338. provides an easy way to delete the transaction under point: @kbd{C-c
  339. C-d}. The advantage to using this method is that the complete
  340. transaction operation is in the undo buffer.
  341. @node Sorting Transactions, Narrowing Transactions, Deleting Transactions, The Ledger Buffer
  342. @section Sorting Transactions
  343. @kindex C-c C-s
  344. @cindex transaction, sorting
  345. As you operating on the Ledger files, they may become disorganized. For
  346. the most part, Ledger doesn't care, but our human brains prefer a bit of
  347. order. Sorting the transactions in a buffer into chronological order
  348. can help bring order to chaos. Either using @samp{Sort Region} menu
  349. entry or typing @kbd{C-c C-s} will sort all of the transactions in
  350. a region by date. Ledger-mode isn't particularly smart about handling
  351. dates and it simply sorts the transactions using the string at the
  352. beginning of the transaction. So, you should use the preferred ISO 8601
  353. standard date format @samp{YYYY/MM/DD} which easily sorts.
  354. Note, there is a menu entry @samp{Sort Buffer} to sort the entire
  355. buffer. Special transactions like automated transaction, will be moved
  356. in the sorting process and may not function correctly afterwards. For
  357. this reason there is no key sequence.
  358. You can limit the allowed sort region by using embedded Ledger-mode
  359. markup within your ledger. For example:
  360. @example
  361. <<< information to not sort >>>
  362. ; Ledger-mode: Start sort
  363. <<< transactions to sort >>>
  364. ; Ledger-mode: End sort
  365. <<< information to not sort >>>
  366. @end example
  367. You can use menu entries @samp{Mark Sort Beginning} to insert start and
  368. @samp{Mark Sort End} to insert end markers. These functions will
  369. automatically delete old markers and put new new marker at point.
  370. @node Narrowing Transactions, , Sorting Transactions, The Ledger Buffer
  371. @section Narrowing Transactions
  372. @kindex C-c C-f
  373. @kindex C-c C-g
  374. @cindex transaction, narrowing
  375. @cindex transaction, display filtering
  376. Often you will want to run Ledger register reports just to look at
  377. a specific set of transactions. If you don't need the running total
  378. calculation handled by Ledger, Ledger-mode provides a rapid way of
  379. narrowing what is displayed in the buffer in a way that is simpler than
  380. the Ledger register command.
  381. Based on the Emacs Occur mode by Alexey Veretennikov, Ledger-occur hides
  382. all transactions that do @emph{not} meet a specific regular expression.
  383. The regular expression can match on any part of the transaction. If you
  384. want to find all transactions whose amount ends in @samp{.37}, you can
  385. do that (I don't know why, but hey, whatever ever floats you aerostat).
  386. Using @kbd{C-c C-f} or the @samp{Narrow to Regex} menu entry, enter a
  387. regular expression in the Minibuffer. Ledger-mode will hide all other
  388. transactions. For details of the regular expression syntax, see your
  389. Emacs documentation. A few examples using the @file{demo.ledger} are
  390. given here:
  391. @table @samp
  392. @item Groceries
  393. Show only transactions that have a posting to the @samp{Groceries}
  394. account.
  395. @item ^2011/01
  396. Show only transactions occurring in January of 2011.
  397. @item ^2011/.*/25
  398. Show only transactions occurring on the 25th of the month in 2011.
  399. @item auto
  400. Show only transactions with payees or accounts or comments containing.
  401. @samp{auto}
  402. @item harley$
  403. Show only transactions with any line ending with @samp{harley}.
  404. @end table
  405. To show back all transactions simply invoke @samp{Narrow to Regex} or
  406. @kbd{C-c C-f} again.
  407. If you've edited some transactions after narrowing such that they would
  408. no longer match the regular expression, you can refresh the narrowed
  409. view using @kbd{C-c C-g}.
  410. @node The Reconcile Buffer, The Report Buffer, The Ledger Buffer, Top
  411. @chapter The Reconcile Buffer
  412. @menu
  413. * Basics of Reconciliation::
  414. * Starting a Reconciliation::
  415. * Mark Transactions Pending::
  416. * Edit Transactions During Reconciliation::
  417. * Finalize Reconciliation::
  418. * Adding and Deleting Transactions during Reconciliation::
  419. * Changing Reconciliation Account::
  420. * Changing Reconciliation Target::
  421. @end menu
  422. @node Basics of Reconciliation, Starting a Reconciliation, The Reconcile Buffer, The Reconcile Buffer
  423. @section Basics of Reconciliation
  424. @cindex reconciliation, basics
  425. Even in this relatively modern era, financial transactions do not happen
  426. instantaneously, unless you are paying cash. When you swipe your debit
  427. card the money may take several days to actually come out of your
  428. account, or a check may take several days to @emph{clear}. That is the
  429. root of the difference between @emph{obligating} funds and
  430. @emph{expending} funds. Obligation says you have agreed to pay it, the
  431. expenditure doesn't happen until the money actually leaves your
  432. account. Or in the case of receiving payment, you have an account
  433. receivable until the money has actually made it to you.
  434. After an account has been reconciled you have verified that all the
  435. transactions in that account have been correctly recorded and all
  436. parties agree.
  437. @node Starting a Reconciliation, Mark Transactions Pending, Basics of Reconciliation, The Reconcile Buffer
  438. @section Starting a Reconciliation
  439. @findex ledger-reconcile-default-commodity
  440. @kindex C-c C-r
  441. @cindex reconciliation, starting
  442. To start reconciling an account you must have a target, both the
  443. transactions that you know about and the transactions the bank knows
  444. about. You can get this from a monthly statement, or from checking your
  445. on-line transaction history. It also helps immensely to know the final
  446. cleared balance you are aiming for.
  447. Use menu @samp{Reconcile Account} or keyboard shortcut @kbd{C-c C-r} to
  448. start reconciliation.
  449. If cursor is on an account, Ledger-mode will propose this account, or in
  450. the Minibuffer, will prompt for an account to reconcile. Hit @kbd{RET}
  451. if you are happy with proposed account, or enter @samp{Checking} as
  452. example. Ledger-mode is not particular about what you enter for the
  453. account. You can leave it blank and @file{*Reconcile*} buffer will show
  454. you @emph{all} uncleared transactions.
  455. After you enter the account enter the target amount. It is helpful to
  456. enter an amount with a commodity. You can also leave it blank, you will
  457. be able to clear transactions but not benefit from balance calculations.
  458. It assumes initially that you are using @samp{$} (USD) as your default
  459. commodity. If you are working in a different currency you can change
  460. the default in variable @option{ledger-reconcile-default-commodity} to
  461. whatever you need. If you work in multiple commodities simply enter the
  462. commoditized amount (for example @samp{340 VSDX}, for 340 shares of
  463. VSDX).
  464. Ledger-mode reconcile cannot currently reconcile accounts that have
  465. multiple commodities, such as brokerage accounts. You may use
  466. reconciliation mode to clear transactions, but balance calculations will
  467. not display the complete list of commodities.
  468. @node Mark Transactions Pending, Edit Transactions During Reconciliation, Starting a Reconciliation, The Reconcile Buffer
  469. @section Mark Transactions Pending
  470. @kindex SPC
  471. @cindex reconciliation, transaction marking
  472. The @file{*Reconcile*} buffer will show all the uncleared transactions
  473. that meet the criteria set in the regex. By default uncleared
  474. transactions are shown in red. When you have verified that
  475. a transaction has been correctly and completely recorded by the opposing
  476. party, mark the transaction as pending using the @kbd{SPC} bar.
  477. Continue this process until you agree with the opposing party and the
  478. difference from your target is zero.
  479. @node Edit Transactions During Reconciliation, Finalize Reconciliation, Mark Transactions Pending, The Reconcile Buffer
  480. @section Edit Transactions during Reconciliation
  481. @kindex RET
  482. @kindex C-c C-c
  483. @cindex reconciliation, transaction editing
  484. If you find errors during reconciliation. You can visit the transaction
  485. under point in the @file{*Reconcile*} buffer by hitting the @kbd{RET}
  486. key. This will take you to the transaction in the Ledger buffer. When
  487. you have finished editing the transaction, saving the buffer will
  488. automatically return you to the @file{*Reconcile*} buffer and you can
  489. mark the transaction if appropriate.
  490. @node Finalize Reconciliation, Adding and Deleting Transactions during Reconciliation, Edit Transactions During Reconciliation, The Reconcile Buffer
  491. @section Finalize Reconciliation
  492. @cindex reconciliation, finalizing
  493. @kindex C-c C-c
  494. @kindex q
  495. Once you have marked all transactions as pending and the cleared balance
  496. is correct. Finish the reconciliation by typing @kbd{C-c C-c}. This
  497. marks all pending transactions as cleared and saves the ledger buffer.
  498. Type @kbd{q} to close out the reconciliation buffer. If variable
  499. @var{ledger-reconcile-finish-force-quit} is set, the reconciliation
  500. buffer will be killed automatically after @kbd{C-c C-c}.
  501. @node Adding and Deleting Transactions during Reconciliation, Changing Reconciliation Account, Finalize Reconciliation, The Reconcile Buffer
  502. @section Adding and Deleting Transactions during Reconciliation
  503. @kindex a
  504. @kindex d
  505. @cindex reconciliation, transaction adding and deleting
  506. While reconciling, you may find new transactions that need to be entered
  507. into your ledger. Simply type @kbd{a} to bring up the quick add for the
  508. ledger buffer.
  509. Typing @kbd{d} will delete the transaction under point in the
  510. @file{*Reconcile*} buffer from the ledger buffer.
  511. @node Changing Reconciliation Account, Changing Reconciliation Target, Adding and Deleting Transactions during Reconciliation, The Reconcile Buffer
  512. @section Changing Reconciliation Account
  513. @kindex g
  514. @cindex reconciliation, account changing
  515. You can conveniently switch the account being reconciled by typing
  516. @kbd{g}, and entering a new account to reconcile. This simply restarts
  517. the reconcile process. Any transactions that were marked @emph{pending} in
  518. the ledger buffer are left in that state when the account is switched.
  519. @node Changing Reconciliation Target, , Changing Reconciliation Account, The Reconcile Buffer
  520. @section Changing Reconciliation Target
  521. @kindex t
  522. @cindex reconciliation, target changing
  523. If for some reason during reconciliation your target amount changes,
  524. type @kbd{t} and enter the new target value.
  525. @node The Report Buffer, Scheduling Transactions, The Reconcile Buffer, Top
  526. @chapter The Report Buffer
  527. @menu
  528. * Running Basic Reports::
  529. * Adding and Editing Reports::
  530. * Reversing Report Order::
  531. @end menu
  532. @node Running Basic Reports, Adding and Editing Reports, The Report Buffer, The Report Buffer
  533. @section Running Reports
  534. @kindex C-c C-o C-r
  535. @kindex C-c C-o C-g
  536. @kindex C-c C-o C-a
  537. @cindex report, running
  538. The real power behind Ledger is in its amazing reporting capability.
  539. Ledger-mode provides easy facility to run reports directly from Emacs.
  540. It has four reports built-in and facilities for adding custom reports.
  541. Typing @kbd{C-c C-o C-r} or using menu @samp{Run Report} prompts
  542. for the name of a saved report. The built-in reports are:
  543. @table @var
  544. @item bal
  545. Produce a balance reports of all accounts.
  546. @item reg
  547. Produce a register report of all transactions.
  548. @item payee
  549. Prompt for a payee, then produce a register report of all transactions
  550. involving that payee.
  551. @item account
  552. Prompt for an account, then produce a register report of all
  553. transactions involving that account.
  554. @end table
  555. While viewing reports you can easily switch back and forth between the
  556. ledger buffer and the @file{*Ledger Report*} buffer. In @file{*Ledger
  557. Report*} buffer, typing @kbd{RET} will take you to that transaction in
  558. the ledger buffer. While in the ledger buffer @kbd{C-c C-o C-g} returns
  559. you to the @file{*Ledger Report*} buffer.
  560. By default Ledger-mode will refresh the report buffer when the ledger
  561. buffer is saved. If you want to rerun the report at another time
  562. @kbd{C-c C-o C-a}. This is useful if you have other programs altering
  563. your ledger file outside of Emacs.
  564. @node Adding and Editing Reports, Reversing Report Order, Running Basic Reports, The Report Buffer
  565. @section Adding and Editing Reports
  566. @findex ledger-reports
  567. @kindex M-1 C-c C-o C-r
  568. @kindex S
  569. @kindex C-c C-o C-e
  570. @kindex e
  571. @cindex report, adding and editing
  572. @menu
  573. * Expansion Formats::
  574. * Make Report Transactions Active::
  575. @end menu
  576. If you type a report name that Ledger-mode doesn't recognize it will
  577. prompt you for a ledger command line to run. That command is
  578. automatically saved with the name given and you can re-run it at any
  579. time.
  580. There are two ways to edit the command line for a report. The first is
  581. to provide a prefix argument to the run-report command. For example,
  582. type @kbd{M-1 C-c C-o C-r}. This will prompt you for the report name,
  583. then present the report command line to be edited. When you hit
  584. @kbd{RET}, the report will be run, but it will not be permanently saved.
  585. If you want to save it, type @kbd{S} in the @file{*Ledger Report*}
  586. buffer you will have the option to give it a new name, or overwrite the
  587. old report.
  588. Deleting reports is accomplished by typing @kbd{C-c C-o C-e} or using
  589. @samp{Edit Report} menu in the ledger buffer, or typing @kbd{e} in the
  590. @file{*Ledger Report*} buffer. This takes you to the Emacs
  591. customization window for the Ledger Reports variables. Use the widgets
  592. to delete the report you want removed.
  593. Typing @kbd{C-c C-o C-s} will prompt for a name and save the current
  594. report.
  595. @node Expansion Formats, Make Report Transactions Active, Adding and Editing Reports, Adding and Editing Reports
  596. @subsection Expansion Formats
  597. @cindex report, custom variable
  598. It is sometimes convenient to leave room to customize a report without
  599. saving the command line every time. For example running a register
  600. report for a specific account entered at runtime by the user. The
  601. built-in report @var{account} does exactly that, using a variable
  602. expansion to prompt the user for the account to use. There are four
  603. variables that can be expanded to run a report:
  604. @table @var
  605. @item ledger-file
  606. Returns the file to be operated on.
  607. @item payee
  608. Prompts for a payee.
  609. @item account
  610. Prompt for an account.
  611. @item tagname
  612. Prompt for a meta-data tag name.
  613. @item tagvalue
  614. Prompt for a meta-data tag value.
  615. @end table
  616. You can use these expansion values in your ledger report commands. For
  617. example, if you wanted to specify a register report the displayed
  618. transactions from a user-determined account with a particular meta-data
  619. tag value, you specify the following command line:
  620. @example
  621. ledger -f %(ledger-file) reg %(account) \
  622. --limit \"tag('my-tag') =~/%(value)/\"
  623. @end example
  624. Note how the double-quotes are escaped with back-slashes.
  625. @node Make Report Transactions Active, , Expansion Formats, Adding and Editing Reports
  626. @subsection Make Report Transactions Active
  627. @cindex report, custom command
  628. In a large register report it is convenient to be able to jump to the
  629. source transaction. Ledger-mode will automatically include source
  630. information in every register file that doesn't contain
  631. a @option{--subtotal} option. It does this by adding
  632. @option{--prepend-format='%(filename):%(beg_line):'} to the register
  633. report command-line you specify. You should never have to see this, but
  634. if there is an error in your ledger output this additional information
  635. may not get stripped out of the visible report.
  636. @node Reversing Report Order, , Adding and Editing Reports, The Report Buffer
  637. @section Reversing Report Order
  638. @kindex R
  639. @cindex report, order reversing
  640. Often, banks show their on-line transaction histories with the most
  641. recent transaction at the top. Ledger itself cannot do a sensible
  642. ledger report in reverse chronological order, if you sort on reverse
  643. date the calculation will also run in the opposite direction. If you
  644. want to compare a ledger register report to a bank report with the most
  645. recent transactions at the top, type @kbd{R} in the @file{*Ledger
  646. Report*} buffer and it will reverse the order of the transactions and
  647. maintain the proper mathematical sense.
  648. @node Scheduling Transactions, Customizing Ledger-mode, The Report Buffer, Top
  649. @chapter Scheduling Transactions
  650. The Ledger program provides for automating transactions but these
  651. transaction aren't @emph{real}, they only exist inside a ledger session and
  652. are not reflected in the actual data file. Many transactions are very
  653. repetitive, but may vary slightly in the date they occur on, or the
  654. amount. Some transactions are weekly, monthly, quarterly or annually.
  655. Ledger mode provides a way to schedule upcoming transaction with a
  656. flexible scheduler that allows you to specify the transactions in a
  657. separate ledger file and calculate the upcoming occurrences of those
  658. transactions. You can then copy the transactions into your live data
  659. file.
  660. @menu
  661. * Specifying Upcoming Transactions::
  662. @end menu
  663. @node Specifying Upcoming Transactions, , Scheduling Transactions, Scheduling Transactions
  664. @section Specifying Upcoming Transactions
  665. The format for specifying transactions is identical to Ledger's file
  666. format with the exception of the date field. The data field is modified
  667. by surrounding it with brackets and using wild cards and special
  668. characters to specify when the transactions should appear.
  669. @menu
  670. * Transactions that occur on specific dates::
  671. * Transactions that occur on specific days::
  672. @end menu
  673. @node Transactions that occur on specific dates, Transactions that occur on specific days, Specifying Upcoming Transactions, Specifying Upcoming Transactions
  674. @subsection Transactions that occur on specific dates
  675. Many times you will enter repetitive transactions that occur on the same
  676. day of the month each month. These can be specified using a wild card
  677. in the year and month with a fixed date in the day. The following entry
  678. specifies a transaction that occurs on the first and fifteenth of every
  679. month in every year.
  680. @example
  681. [*/*/1,15] Paycheck
  682. Income:Job $1000.00
  683. Assets:Checking
  684. @end example
  685. Some transactions do not occur every month. Comma separated lists of
  686. the months, or @samp{E} for even, or @samp{O} for odd number months can
  687. also be specified. The following entry specifies a bi-monthly
  688. exterminator bill that occurs in the even months:
  689. @example
  690. [*/E/01] Exterminator
  691. Expenses:Home $100.00
  692. Assets:Checking
  693. @end example
  694. @node Transactions that occur on specific days, , Transactions that occur on specific dates, Specifying Upcoming Transactions
  695. @subsection Transactions that occur on specific days
  696. Some transactions occur every relative to the day of the week rather
  697. than the date of the month. For example, many people are paid every two
  698. weeks without regard to the day of the month. Other events may occur on
  699. specific days regardless of the date. For example the following
  700. transactions creates a transaction every other Thursday:
  701. @example
  702. [2014/11/27+2Th] Paycheck
  703. Income:Job $1000.00
  704. Assets:Checking
  705. @end example
  706. It is necessary to specify a starting date in order for this type of
  707. recurrence relation to be specified. The day names are two character
  708. codes that default to Mo, Tu, We, Th, Fr, Sa, Su, for Monday, Tuesday,
  709. Wednesday, Thursday, Friday, Saturday, Sunday respectively. You can
  710. change the codes to something more convenient for your locale by
  711. customizing the ledger @option{ledger-schedule-week-days}. They must be two
  712. characters long.
  713. @node Customizing Ledger-mode, Generating Ledger Regression Tests, Scheduling Transactions, Top
  714. @chapter Customizing Ledger-mode
  715. @menu
  716. * Ledger-mode Customization::
  717. * Customization Variables::
  718. @end menu
  719. @node Ledger-mode Customization, Customization Variables, Customizing Ledger-mode, Customizing Ledger-mode
  720. @section Ledger-mode Customization
  721. Ledger-mode has several options available for configuration. All
  722. options can be configured through the Emacs customization menus, or
  723. specified in your Emacs initialization file. The complete list of
  724. options is shown below. To change the option using the Emacs
  725. customization menu, simply chose customize in the Options menu and look
  726. for Ledger under the data options. Alternately you can choose
  727. @samp{Customize Specific Group} and enter @samp{Ledger} as the group.
  728. @node Customization Variables, , Ledger-mode Customization, Customizing Ledger-mode
  729. @section Customization Variables
  730. @menu
  731. * Ledger Customization Group::
  732. * Ledger Reconcile Customization Group::
  733. * Ledger Report Customization Group::
  734. * Ledger Faces Customization Group::
  735. * Ledger Post Customization Group::
  736. * Ledger Exec Customization Group::
  737. * Ledger Test Customization Group::
  738. * Ledger Texi Customization Group::
  739. @end menu
  740. @node Ledger Customization Group, Ledger Reconcile Customization Group, Customization Variables, Customization Variables
  741. @subsection Ledger Customization Group
  742. @cindex customization, ledger-mode
  743. @ftable @option
  744. @item ledger-occur-use-face-shown
  745. If non-nil, use a custom face for transactions shown in
  746. @option{ledger-occur} mode using @option{ledger-occur-xact-face}.
  747. @item ledger-clear-whole-transactions
  748. If non-nil, clear whole transactions, not individual postings.
  749. @item ledger-highlight-xact-under-point
  750. If non-nil, highlight transaction under point using
  751. @option{ledger-font-highlight-face}.
  752. @end ftable
  753. @node Ledger Reconcile Customization Group, Ledger Report Customization Group, Ledger Customization Group, Customization Variables
  754. @subsection Ledger Reconcile Customization Group
  755. @cindex customization, reconcile
  756. @ftable @option
  757. @item ledger-recon-buffer-name
  758. Name to use for reconciliation buffer. Defaults to @file{*Reconcile*}.
  759. @item ledger-narrow-on-reconcile
  760. If t, limit transactions shown in main buffer to those matching
  761. the reconcile regex.
  762. @item ledger-buffer-tracks-reconcile-buffer
  763. If t, then when the cursor is moved to a new transaction in the
  764. @file{*Reconcile*} buffer. Then that transaction will be shown in its
  765. source buffer.
  766. @item ledger-reconcile-force-window-bottom
  767. If t, make the @file{*Reconcile*} window appear along the bottom
  768. of the register window and resize.
  769. @item ledger-reconcile-toggle-to-pending
  770. If t, then toggle between uncleared and pending @samp{!}. If
  771. false toggle between uncleared and cleared @samp{*}.
  772. @item ledger-reconcile-default-date-format
  773. Date format for the reconcile buffer. Defaults to
  774. @option{ledger-default-date-format}.
  775. @item ledger-reconcile-target-prompt-string
  776. Prompt for recon target. Defaults to "Target amount for reconciliation ".
  777. @item ledger-reconcile-buffer-header
  778. Header string for the reconcile buffer. If non-nil, the name of the
  779. account being reconciled will be substituted into the '%s'. If nil, no
  780. header will be displayed. Defaults to "Reconciling account %s\n\n".
  781. @item ledger-reconcile-buffer-line-format
  782. Format string for the ledger reconcile posting format. Available fields
  783. are date, status, code, payee, account, amount. The format for each
  784. field is %WIDTH(FIELD), WIDTH can be preceded by a minus sign which mean
  785. to left justify and pad the field. WIDTH is the minimum number of
  786. characters to display; if string is longer, it is not truncated unless
  787. @option{ledger-reconcile-buffer-payee-max-chars} or
  788. @option{ledger-reconcile-buffer-account-max-chars} is defined. Defaults to
  789. "%(date)s %-4(code)s %-50(payee)s %-30(account)s %15(amount)s\n"
  790. @item ledger-reconcile-buffer-payee-max-chars
  791. If positive, truncate payee name right side to max number of characters.
  792. @item ledger-reconcile-buffer-account-max-chars
  793. If positive, truncate account name left side to max number of characters.
  794. @item ledger-reconcile-sort-key
  795. Key for sorting reconcile buffer. Possible values are '(date)',
  796. '(amount)', '(payee)' or '(0)' for no sorting, i.e. using
  797. ledger file order. Defaults to '(0)'.
  798. @item ledger-reconcile-insert-effective-date nil
  799. If t, prompt for effective date when clearing transactions during
  800. reconciliation.
  801. @item ledger-reconcile-finish-force-quit nil
  802. If t, will force closing reconcile window after @kbd{C-c C-c}.
  803. @end ftable
  804. @node Ledger Report Customization Group, Ledger Faces Customization Group, Ledger Reconcile Customization Group, Customization Variables
  805. @subsection Ledger Report Customization Group
  806. @cindex customization, report
  807. @ftable @option
  808. @item ledger-reports
  809. Definition of reports to run.
  810. @item ledger-report-format-specifiers
  811. An alist mapping ledger report format specifiers to implementing
  812. functions.
  813. @end ftable
  814. @node Ledger Faces Customization Group, Ledger Post Customization Group, Ledger Report Customization Group, Customization Variables
  815. @subsection Ledger Faces Customization Group
  816. @cindex customization, faces
  817. Ledger Faces: Ledger-mode highlighting
  818. @ftable @option
  819. @item ledger-font-uncleared-face
  820. Default face for Ledger.
  821. @item ledger-font-cleared-face
  822. Default face for cleared @samp{*} transactions.
  823. @item ledger-font-highlight-face
  824. Default face for transaction under point.
  825. @item ledger-font-pending-face
  826. Default face for pending @samp{!} transactions.
  827. @item ledger-font-other-face
  828. Default face for other transactions.
  829. @item ledger-font-posting-account-face
  830. Face for Ledger accounts.
  831. @item ledger-font-posting-account-cleared-face
  832. Face for cleared Ledger accounts.
  833. @item ledger-font-posting-account-pending-face
  834. Face for Ledger pending accounts.
  835. @item ledger-font-posting-amount-face
  836. Face for Ledger amounts.
  837. @item ledger-occur-narrowed-face
  838. Default face for Ledger occur mode hidden transactions.
  839. @item ledger-occur-xact-face
  840. Default face for Ledger occur mode shown transactions.
  841. @item ledger-font-comment-face
  842. Face for Ledger comments.
  843. @item ledger-font-reconciler-uncleared-face
  844. Default face for uncleared transactions in the @file{*Reconcile*} buffer.
  845. @item ledger-font-reconciler-cleared-face
  846. Default face for cleared @samp{*} transactions in the @file{*Reconcile*}
  847. buffer.
  848. @item ledger-font-reconciler-pending-face
  849. Default face for pending @samp{!} transactions in the @file{*Reconcile*}
  850. buffer.
  851. @item ledger-font-report-clickable-face
  852. FIXME
  853. @end ftable
  854. @node Ledger Post Customization Group, Ledger Exec Customization Group, Ledger Faces Customization Group, Customization Variables
  855. @subsection Ledger Post Customization Group
  856. @cindex customization, post
  857. Ledger Post:
  858. @ftable @option
  859. @item ledger-post-auto-adjust-amounts
  860. If non-nil, then automatically align amounts to column specified in
  861. @option{ledger-post-amount-alignment-column}.
  862. @item ledger-post-amount-alignment-column
  863. The column Ledger-mode uses to align amounts.
  864. @item ledger-default-acct-transaction-indent
  865. Default indentation for account transactions in an entry.
  866. @item ledger-post-use-completion-engine
  867. Which completion engine to use: @var{iswitchb}, @var{ido}, or built-in.
  868. @item ledger-post-use-ido
  869. @end ftable
  870. @node Ledger Exec Customization Group, Ledger Test Customization Group, Ledger Post Customization Group, Customization Variables
  871. @subsection Ledger Exec Customization Group
  872. @cindex customization, executable
  873. Ledger Exec: Interface to the Ledger command-line accounting program.
  874. @ftable @option
  875. @item ledger-binary-path
  876. Path to the ledger executable.
  877. @item ledger-init-file-name
  878. Location of the ledger initialization file. nil if you don't have one.
  879. @end ftable
  880. @node Ledger Test Customization Group, Ledger Texi Customization Group, Ledger Exec Customization Group, Customization Variables
  881. @subsection Ledger Test Customization Group
  882. @cindex customization, test
  883. @ftable @option
  884. @item ledger-source-directory
  885. Directory where the Ledger sources are located.
  886. @item ledger-test-binary
  887. Directory where the debug binary.
  888. @end ftable
  889. @node Ledger Texi Customization Group, , Ledger Test Customization Group, Customization Variables
  890. @subsection Ledger Texi Customization Group
  891. @cindex customization, texi
  892. @ftable @option
  893. @item ledger-texi-sample-doc-path
  894. Location for sample data to be used in texi tests, defaults to
  895. @file{~/ledger/doc/sample.dat}.
  896. @item ledger-texi-normalization-args
  897. texi normalization for producing ledger output, defaults to
  898. @samp{--args-only --columns 80}.
  899. @end ftable
  900. @node Generating Ledger Regression Tests, Embedding Example results in Ledger Documentation, Customizing Ledger-mode, Top
  901. @chapter Generating Ledger Regression Tests
  902. Work in Progress.
  903. @node Embedding Example results in Ledger Documentation, Hacking Ledger-mode, Generating Ledger Regression Tests, Top
  904. @chapter Embedding Example results in Ledger Documentation
  905. Work in Progress.
  906. @node Hacking Ledger-mode, Concept Index, Embedding Example results in Ledger Documentation, Top
  907. @chapter Hacking Ledger-mode
  908. Work in Progress.
  909. @node Concept Index, Command & Variable Index, Hacking Ledger-mode, Top
  910. @unnumbered Concept Index
  911. @printindex cp
  912. @node Command & Variable Index, Keystroke Index, Concept Index, Top
  913. @unnumbered Command & Variable Index
  914. @printindex fn
  915. @node Keystroke Index, , Command & Variable Index, Top
  916. @unnumbered Keystroke Index
  917. @printindex ky
  918. @bye
  919. @c Local Variables:
  920. @c mode: texinfo
  921. @c TeX-master: t
  922. @c End: