diff options
author | John Wiegley <johnw@newartisans.com> | 2016-08-04 21:17:05 -0700 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2016-08-04 21:17:05 -0700 |
commit | d7b6446de4b1a1aefebf62c9c87b49f297a935f9 (patch) | |
tree | a00b4f6334793a083374e011b908c6c2bf5e8629 /doc/ledger-mode.texi | |
parent | 9207145ccaac5a5eff35acc487125fb29da76f04 (diff) |
Move ledger-mode.texi to its own history
Diffstat (limited to 'doc/ledger-mode.texi')
-rw-r--r-- | doc/ledger-mode.texi | 1193 |
1 files changed, 1193 insertions, 0 deletions
diff --git a/doc/ledger-mode.texi b/doc/ledger-mode.texi new file mode 100644 index 0000000..8ff284b --- /dev/null +++ b/doc/ledger-mode.texi @@ -0,0 +1,1193 @@ +\input texinfo @c -*-texinfo-*- + +@setfilename ledger-mode.info +@settitle Ledger: Command-Line Accounting + +@c Before release, run C-u C-c C-u C-a (texinfo-all-menus-update with +@c a prefix arg). This updates the node pointers, which texinfmt.el +@c needs. + +@copying + +Copyright @copyright{} 2013, Craig Earls. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +@itemize + +@item +Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +@item +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +@item +Neither the name of New Artisans LLC nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +@end itemize + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS +IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +@end copying + +@dircategory Major Modes +@direntry +* Ledger Mode: (ledger-mode). Command-Line Accounting +@end direntry + +@documentencoding UTF-8 + +@iftex +@finalout +@end iftex + +@titlepage +@title Ledger Mode +@subtitle Emacs Support For Version 3.0 of Ledger +@author Craig Earls +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@contents + +@ifnottex + +@node Top, Introduction to Ledger-mode, (dir), (dir) +@top Overview + +Ledger is a command line accounting tool that provides double-entry +accounting based on a text journal. It provides no bells or whistles, +and returns the user to the days before user interfaces were even +a 1twinkling in their father's CRT. + +Ledger-mode assists you in maintaining input files for Ledger, running +reports and much more... + +@end ifnottex + +@menu +* Introduction to Ledger-mode:: +* The Ledger Buffer:: +* The Reconcile Buffer:: +* The Report Buffer:: +* Scheduling Transactions:: +* Customizing Ledger-mode:: +* Generating Ledger Regression Tests:: +* Embedding Example results in Ledger Documentation:: +* Hacking Ledger-mode:: +* Concept Index:: +* Command & Variable Index:: +* Keystroke Index:: +@end menu + +@node Introduction to Ledger-mode, The Ledger Buffer, Top, Top +@chapter Introduction to Ledger-mode + +@menu +* Quick Installation:: +* Menus:: +* Quick Demo:: +@end menu + +@node Quick Installation, Menus, Introduction to Ledger-mode, Introduction to Ledger-mode +@section Quick Installation +@cindex installation + +The Emacs lisp source for Ledger-mode is included with the source +distribution of Ledger. It is entirely included in the @file{lisp} +subdirectory. To use Ledger-mode, include the following in your Emacs +initialization file (@file{~/.emacs}, @file{~/.emacs.d/init.el}, or +@file{~/.Aquamacs/Preferences.el}). + +@lisp +(autoload 'ledger-mode "ledger-mode" "A major mode for Ledger" t) +(add-to-list 'load-path + (expand-file-name "/path/to/ledger/source/lisp/")) +(add-to-list 'auto-mode-alist '("\\.ledger$" . ledger-mode)) +@end lisp + +This sets up Emacs to automatically recognize files that end with +@file{.ledger} and start Ledger-mode. Nothing else should be required +as long as the ledger command line utility is properly installed. + +@node Menus, Quick Demo, Quick Installation, Introduction to Ledger-mode +@section Menus +@cindex menu + +The vast majority of Ledger-mode functionality is available from the +Emacs menu system. The keystrokes are shown in the menu to help you +learn the faster keyboard methods. + +@node Quick Demo, , Menus, Introduction to Ledger-mode +@section Quick Demo +@cindex demo + +Load the demo file @file{demo.ledger} from the Ledger source +@file{test/input} directory. The ledger will be loaded and font +highlighted. At this point you could manually edit transactions and run +Ledger from a convenient command line. + +@menu +* Quick Add:: +* Reconciliation:: +* Reports:: +* Narrowing:: +@end menu + +@node Quick Add, Reconciliation, Quick Demo, Quick Demo +@subsection Quick Add +@kindex C-c TAB +@kindex C-c C-a + +As simple as the Ledger transaction format is, it can still be daunting +to add many transactions manually. Ledger provides two way to add +transactions with minimal typing. Both are based on the idea that most +transactions are repetitions of earlier transactions. + +In the @file{demo.ledger} buffer enter a date using the correct +format. Then type the first few characters of another payee in the +@file{demo.ledger} buffer. Type @kbd{C-c TAB}. Ledger-mode will +search for a Payee that has the same beginning and copy the rest of the +transaction to you new entry. + +Additionally you can use the ledger @command{xact} command, by either +typing @kbd{C-c C-a} or using @samp{Add Transaction} menu entry. Then +typing a close match to the payee. Ledger-mode will call @command{ledger +xact} with the data you enter and place the transaction in the proper +chronological place in the ledger. + +If you need to add a lot of transactions that are not near your current +date you can set the current year and month so that using @samp{Add +Transaction} will prompt you with a more convenient month and year. To +set the month type @kbd{C-c RET} and enter the month you want. @kbd{C-c +C-y} will prompt you for the year. These settings only effect the +@samp{Add Transaction} command. + +@node Reconciliation, Reports, Quick Add, Quick Demo +@subsection Reconciliation +@kindex C-c C-r +@kindex SPC +@kindex C-c C-c +@kindex q + +The biggest task of maintaining a ledger is ensuring that it matches the +outside world. This process is called reconciliation (@pxref{Basics of +Reconciliation}) and can be quite onerous. Ledger-mode attempts to make +it as painless as possible. + +In the @file{demo.ledger} buffer type @kbd{C-c C-r}. If cursor is on an +account, Ledger-mode will propose this account, or in the Minibuffer, +will prompt for an account to reconcile. Hit @kbd{RET} if you are happy +with proposed account, or enter @samp{Checking} as example. +Emacs will then prompt for a target value. The target value is the +amount you want the cleared transactions in the buffer to total. +Normally this would be the ending value from your bank statement, or the +latest value in your on-line transaction summary. Enter @samp{1710}. +Note that Ledger-mode assumes your are using @samp{$} (USD) as your +default commodity, this can be easily changed in the customization +variables. @xref{Ledger-mode Customization}. + +You now see a list of uncleared transactions in a buffer below the +@file{demo.ledger} buffer. Touching the @kbd{SPC} bar will mark +a transaction as pending and display the current cleared (and pending) +balance, along with the difference remaining to meet your target. Clear +the first three transactions, and you will see the difference to target +reach @samp{$0}. End the reconciliation by typing @kbd{C-c C-c}. This +saves the @file{demo.ledger} buffer and marks the transactions and +finally cleared. Type @kbd{q} to close out the reconciliation buffer. + +@node Reports, Narrowing, Reconciliation, Quick Demo +@subsection Reports +@kindex C-c C-o C-r +@kindex C-c C-c + +The real power of Ledger is in it reporting capabilities. Reports can +be run and displayed in a separate Emacs buffer. In the +@file{demo.ledger} buffer, type @kbd{C-c C-o C-r}. In the Minibuffer +Emacs will prompt for a report name. There are a few built-in reports, +and you can add any report you need @xref{Adding and Editing Reports}. + +In the Minibuffer type @samp{account}. When prompted for an account +type @samp{checking}. In a buffer named @file{*Ledger Report*}, you +will see a Ledger register report. You can move around the buffer, with +the point on a transaction, type @kbd{RET}. Ledger-mode will take you +directly to that transaction in the @file{demo.ledger} buffer. + +Another built-in report is the balance report. In the +@file{demo.ledger} buffer, type @kbd{C-c C-o C-r}. When prompted for +a report to run, type @samp{bal}, and a balance report of all accounts +will be shown. + +@node Narrowing, , Reports, Quick Demo +@subsection Narrowing +@kindex C-c C-f +@kindex C-c C-g + +A ledger file can get very large. It can be helpful to collapse the +buffer to display only the transactions you are interested in. +Ledger-mode copies the @command{occur} mode functionality. Typing +@kbd{C-c C-f} and entering any regex in the Minibuffer will show only +transactions that match the regex. The regex can be on any field, or +amount. Use @kbd{C-c C-g} after editing transactions to re-apply the +current regex. Cancel the narrowing by typing @kbd{C-c C-f} again. + +@node The Ledger Buffer, The Reconcile Buffer, Introduction to Ledger-mode, Top +@chapter The Ledger Buffer + +@menu +* Adding Transactions:: +* Copying Transactions:: +* Editing Amounts:: +* Marking Transactions:: +* Formatting Transactions:: +* Deleting Transactions:: +* Sorting Transactions:: +* Narrowing Transactions:: +@end menu + + +@node Adding Transactions, Copying Transactions, The Ledger Buffer, The Ledger Buffer +@section Adding Transactions +@findex ledger-post-auto-adjust-amounts +@findex ledger-post-amount-alignment-column +@kindex TAB +@cindex transaction, adding + +Beyond the two ways of quickly adding transactions (@pxref{Quick Add}) +Ledger-mode assists you by providing robust @kbd{TAB} completion for +payees and accounts. Ledger-mode will scan the existing buffer for +payees and accounts. Included files are not currently included in the +completion scan. Repeatedly hitting @kbd{TAB} will cycle through the +possible completions. + +Ledger-mode can also help you keep your amounts aligned. Setting +@option{ledger-post-auto-adjust-amounts} to true tells Ledger-mode to +automatically place any amounts such that their last digit is aligned to +the column specified by @option{ledger-post-amount-alignment-column}, +which defaults to @samp{52}. @xref{Ledger Post Customization Group}. + +@menu +* Setting a Transactions Effective Date:: +* Quick Balance Display:: +@end menu + +@node Setting a Transactions Effective Date, Quick Balance Display, Adding Transactions, Adding Transactions +@subsection Setting a Transactions Effective Date +@kindex C-c C-t +@cindex effective date + +Ledger provides for adding information to a transaction that add details +to the dates. For example, you can specify when the transaction was +entered, when the transaction was cleared, or when individual postings +were cleared. +Ledger-mode refers to these additional dates as @emph{effective} dates. +To set the effective date of a transaction, place the point in the first +line of a transaction and type @kbd{C-c C-t}. The effective date will +be added to the transaction. To set the effective date for an +individual posting, place point in the posting and type @kbd{C-c C-t} and +the effective date for that posting will be added at the end of the +posting. + +@node Quick Balance Display, , Setting a Transactions Effective Date, Adding Transactions +@subsection Quick Balance Display +@kindex C-c C-p +@cindex balance + +You will often want to quickly check the balance of an account. The +easiest way it to position point on the account you are interested in, +and type @kbd{C-c C-p}. The Minibuffer will ask you to verify the name +of the account you want, if it is already correct hit @kbd{RET}, then +the balance of the account will be displayed in the Minibuffer. + +@node Copying Transactions, Editing Amounts, Adding Transactions, The Ledger Buffer +@section Copying Transactions +@kindex C-c C-k +@cindex transaction, copying + +An easy way to copy a transaction is to type @kbd{C-c C-k} or menu entry +@samp{Copy Trans at Point}. You will be prompted the new date for the +copied transaction, and after having confirmed with @kbd{RET}, new +transaction will be inserted at @emph{date} position in buffer. + +@node Editing Amounts, Marking Transactions, Copying Transactions, The Ledger Buffer +@section Editing Amounts +@kindex C-c C-b +@kindex y +@cindex Calc +@cindex GNU Emacs Calculator +@cindex transaction, editing amounts + +GNU Emacs Calculator, aka @samp{Calc}, is a very powerful Reverse Polish +Notation calculator built into all recent version of Emacs. Ledger-mode +makes it easy to calculate values for amount by integrating +@command{Calc}. With the point anywhere in the same line as a posting, +typing @kbd{C-c C-b} will bring up the @file{Calc} buffer, and push the +current amount for the posting onto the top of the @command{Calc} stack. +Perform any calculations you need to arrive at the final value, then +type @kbd{y} to yank the value at the top of stack back into the ledger +buffer. Note: @command{Calc} does not directly support commas as +decimal separators. Ledger-mode will translate values from +decimal-comma format to decimal-period format for use in @command{Calc}, +but it cannot intercept the value being yanked form the @command{Calc} +stack, so decimal-comma users will have to manually replace the period +with a comma. + +@node Marking Transactions, Formatting Transactions, Editing Amounts, The Ledger Buffer +@section Marking Transactions +@cindex transaction, marking +@cindex uncleared +@cindex pending +@cindex cleared + +Ledger considers transaction or posting to be in one of three states: +uncleared, cleared, and pending. For calculation Ledger ignores these +states unless specifically instructed to use them. Ledger-mode assigns +some additional meaning to the states: + +@itemize + +@item Uncleared. +No state. This is equivalent to sticking a check in the mail. It has +been obligated, but not been cashed by the recipient. It could also +apply to credit/debit card transactions that have not been cleared into +your account balance. You bank may call these transactions @emph{pending}, +but Ledger-mode uses a slightly different meaning. + +@item Pending. +Ledger-mode's reconciliation function see pending transactions as an +intermediate step in reconciling an account. When doing +a reconciliation (@pxref{Reconciliation}), marking a transaction as +pending means that you have seen the transaction finally recorded by the +recipient, but you have not completely reconciled the account. + +@item Cleared. +The transaction has been completely recognized by all parties to the +transaction. + +@end itemize + +@kindex C-c C-c +@kindex C-c C-e + +Typing @kbd{C-c C-c}, depending where is the point, will clear the +complete transaction, or an individual posting. This places an asterisk +@samp{*} prior to the payee for the complete transaction, or prior to +the account for an individual posting. When point is inside +a transaction, specifically on an individual posting, you can still +clear the complete transaction by typing @kbd{C-c C-e}. + +@node Formatting Transactions, Deleting Transactions, Marking Transactions, The Ledger Buffer +@section Formatting Transactions +@cindex transaction, formatting + +When editing a transaction, liberal use of the @kbd{TAB} key can keep +the transaction well formatted. If you want to have Ledger-mode cleanup +the formatting of a transaction you can use @samp{Align Transaction} or +@samp{Align Region} from the menu bar. + +The menu item @samp{Clean-up Buffer} sorts all transactions in the buffer +by date, removes extraneous empty lines and aligns every transaction. + + +@node Deleting Transactions, Sorting Transactions, Formatting Transactions, The Ledger Buffer +@section Deleting Transactions +@kindex C-c C-d +@cindex transaction, deleting + +Along with normal buffer editing methods to delete text, Ledger-mode +provides an easy way to delete the transaction under point: @kbd{C-c +C-d}. The advantage to using this method is that the complete +transaction operation is in the undo buffer. + +@node Sorting Transactions, Narrowing Transactions, Deleting Transactions, The Ledger Buffer +@section Sorting Transactions +@kindex C-c C-s +@cindex transaction, sorting + +As you operating on the Ledger files, they may become disorganized. For +the most part, Ledger doesn't care, but our human brains prefer a bit of +order. Sorting the transactions in a buffer into chronological order +can help bring order to chaos. Either using @samp{Sort Region} menu +entry or typing @kbd{C-c C-s} will sort all of the transactions in +a region by date. Ledger-mode isn't particularly smart about handling +dates and it simply sorts the transactions using the string at the +beginning of the transaction. So, you should use the preferred ISO 8601 +standard date format @samp{YYYY/MM/DD} which easily sorts. + +Note, there is a menu entry @samp{Sort Buffer} to sort the entire +buffer. Special transactions like automated transaction, will be moved +in the sorting process and may not function correctly afterwards. For +this reason there is no key sequence. + +You can limit the allowed sort region by using embedded Ledger-mode +markup within your ledger. For example: + +@example +<<< information to not sort >>> + +; Ledger-mode: Start sort + +<<< transactions to sort >>> + +; Ledger-mode: End sort + +<<< information to not sort >>> +@end example + +You can use menu entries @samp{Mark Sort Beginning} to insert start and +@samp{Mark Sort End} to insert end markers. These functions will +automatically delete old markers and put new new marker at point. + +@node Narrowing Transactions, , Sorting Transactions, The Ledger Buffer +@section Narrowing Transactions +@kindex C-c C-f +@kindex C-c C-g +@cindex transaction, narrowing +@cindex transaction, display filtering + +Often you will want to run Ledger register reports just to look at +a specific set of transactions. If you don't need the running total +calculation handled by Ledger, Ledger-mode provides a rapid way of +narrowing what is displayed in the buffer in a way that is simpler than +the Ledger register command. + +Based on the Emacs Occur mode by Alexey Veretennikov, Ledger-occur hides +all transactions that do @emph{not} meet a specific regular expression. +The regular expression can match on any part of the transaction. If you +want to find all transactions whose amount ends in @samp{.37}, you can +do that (I don't know why, but hey, whatever ever floats you aerostat). + +Using @kbd{C-c C-f} or the @samp{Narrow to Regex} menu entry, enter a +regular expression in the Minibuffer. Ledger-mode will hide all other +transactions. For details of the regular expression syntax, see your +Emacs documentation. A few examples using the @file{demo.ledger} are +given here: + +@table @samp + +@item Groceries +Show only transactions that have a posting to the @samp{Groceries} +account. + +@item ^2011/01 +Show only transactions occurring in January of 2011. + +@item ^2011/.*/25 +Show only transactions occurring on the 25th of the month in 2011. + +@item auto +Show only transactions with payees or accounts or comments containing. +@samp{auto} + +@item harley$ +Show only transactions with any line ending with @samp{harley}. + +@end table + +To show back all transactions simply invoke @samp{Narrow to Regex} or +@kbd{C-c C-f} again. + +If you've edited some transactions after narrowing such that they would +no longer match the regular expression, you can refresh the narrowed +view using @kbd{C-c C-g}. + +@node The Reconcile Buffer, The Report Buffer, The Ledger Buffer, Top +@chapter The Reconcile Buffer + +@menu +* Basics of Reconciliation:: +* Starting a Reconciliation:: +* Mark Transactions Pending:: +* Edit Transactions During Reconciliation:: +* Finalize Reconciliation:: +* Adding and Deleting Transactions during Reconciliation:: +* Changing Reconciliation Account:: +* Changing Reconciliation Target:: +@end menu + +@node Basics of Reconciliation, Starting a Reconciliation, The Reconcile Buffer, The Reconcile Buffer +@section Basics of Reconciliation +@cindex reconciliation, basics + +Even in this relatively modern era, financial transactions do not happen +instantaneously, unless you are paying cash. When you swipe your debit +card the money may take several days to actually come out of your +account, or a check may take several days to @emph{clear}. That is the +root of the difference between @emph{obligating} funds and +@emph{expending} funds. Obligation says you have agreed to pay it, the +expenditure doesn't happen until the money actually leaves your +account. Or in the case of receiving payment, you have an account +receivable until the money has actually made it to you. + +After an account has been reconciled you have verified that all the +transactions in that account have been correctly recorded and all +parties agree. + +@node Starting a Reconciliation, Mark Transactions Pending, Basics of Reconciliation, The Reconcile Buffer +@section Starting a Reconciliation +@findex ledger-reconcile-default-commodity +@kindex C-c C-r +@cindex reconciliation, starting + +To start reconciling an account you must have a target, both the +transactions that you know about and the transactions the bank knows +about. You can get this from a monthly statement, or from checking your +on-line transaction history. It also helps immensely to know the final +cleared balance you are aiming for. + +Use menu @samp{Reconcile Account} or keyboard shortcut @kbd{C-c C-r} to +start reconciliation. + +If cursor is on an account, Ledger-mode will propose this account, or in +the Minibuffer, will prompt for an account to reconcile. Hit @kbd{RET} +if you are happy with proposed account, or enter @samp{Checking} as +example. Ledger-mode is not particular about what you enter for the +account. You can leave it blank and @file{*Reconcile*} buffer will show +you @emph{all} uncleared transactions. + +After you enter the account enter the target amount. It is helpful to +enter an amount with a commodity. You can also leave it blank, you will +be able to clear transactions but not benefit from balance calculations. +It assumes initially that you are using @samp{$} (USD) as your default +commodity. If you are working in a different currency you can change +the default in variable @option{ledger-reconcile-default-commodity} to +whatever you need. If you work in multiple commodities simply enter the +commoditized amount (for example @samp{340 VSDX}, for 340 shares of +VSDX). + +Ledger-mode reconcile cannot currently reconcile accounts that have +multiple commodities, such as brokerage accounts. You may use +reconciliation mode to clear transactions, but balance calculations will +not display the complete list of commodities. + +@node Mark Transactions Pending, Edit Transactions During Reconciliation, Starting a Reconciliation, The Reconcile Buffer +@section Mark Transactions Pending +@kindex SPC +@cindex reconciliation, transaction marking + +The @file{*Reconcile*} buffer will show all the uncleared transactions +that meet the criteria set in the regex. By default uncleared +transactions are shown in red. When you have verified that +a transaction has been correctly and completely recorded by the opposing +party, mark the transaction as pending using the @kbd{SPC} bar. +Continue this process until you agree with the opposing party and the +difference from your target is zero. + +@node Edit Transactions During Reconciliation, Finalize Reconciliation, Mark Transactions Pending, The Reconcile Buffer +@section Edit Transactions during Reconciliation +@kindex RET +@kindex C-c C-c +@cindex reconciliation, transaction editing + +If you find errors during reconciliation. You can visit the transaction +under point in the @file{*Reconcile*} buffer by hitting the @kbd{RET} +key. This will take you to the transaction in the Ledger buffer. When +you have finished editing the transaction, saving the buffer will +automatically return you to the @file{*Reconcile*} buffer and you can +mark the transaction if appropriate. + +@node Finalize Reconciliation, Adding and Deleting Transactions during Reconciliation, Edit Transactions During Reconciliation, The Reconcile Buffer +@section Finalize Reconciliation +@cindex reconciliation, finalizing +@kindex C-c C-c +@kindex q + +Once you have marked all transactions as pending and the cleared balance +is correct. Finish the reconciliation by typing @kbd{C-c C-c}. This +marks all pending transactions as cleared and saves the ledger buffer. + +Type @kbd{q} to close out the reconciliation buffer. If variable +@var{ledger-reconcile-finish-force-quit} is set, the reconciliation +buffer will be killed automatically after @kbd{C-c C-c}. + +@node Adding and Deleting Transactions during Reconciliation, Changing Reconciliation Account, Finalize Reconciliation, The Reconcile Buffer +@section Adding and Deleting Transactions during Reconciliation +@kindex a +@kindex d +@cindex reconciliation, transaction adding and deleting + +While reconciling, you may find new transactions that need to be entered +into your ledger. Simply type @kbd{a} to bring up the quick add for the +ledger buffer. + +Typing @kbd{d} will delete the transaction under point in the +@file{*Reconcile*} buffer from the ledger buffer. + +@node Changing Reconciliation Account, Changing Reconciliation Target, Adding and Deleting Transactions during Reconciliation, The Reconcile Buffer +@section Changing Reconciliation Account +@kindex g +@cindex reconciliation, account changing + +You can conveniently switch the account being reconciled by typing +@kbd{g}, and entering a new account to reconcile. This simply restarts +the reconcile process. Any transactions that were marked @emph{pending} in +the ledger buffer are left in that state when the account is switched. + +@node Changing Reconciliation Target, , Changing Reconciliation Account, The Reconcile Buffer +@section Changing Reconciliation Target +@kindex t +@cindex reconciliation, target changing + +If for some reason during reconciliation your target amount changes, +type @kbd{t} and enter the new target value. + +@node The Report Buffer, Scheduling Transactions, The Reconcile Buffer, Top +@chapter The Report Buffer + +@menu +* Running Basic Reports:: +* Adding and Editing Reports:: +* Reversing Report Order:: +@end menu + +@node Running Basic Reports, Adding and Editing Reports, The Report Buffer, The Report Buffer +@section Running Reports +@kindex C-c C-o C-r +@kindex C-c C-o C-g +@kindex C-c C-o C-a +@cindex report, running + +The real power behind Ledger is in its amazing reporting capability. +Ledger-mode provides easy facility to run reports directly from Emacs. +It has four reports built-in and facilities for adding custom reports. + +Typing @kbd{C-c C-o C-r} or using menu @samp{Run Report} prompts +for the name of a saved report. The built-in reports are: + +@table @var + +@item bal +Produce a balance reports of all accounts. + +@item reg +Produce a register report of all transactions. + +@item payee +Prompt for a payee, then produce a register report of all transactions +involving that payee. + +@item account +Prompt for an account, then produce a register report of all +transactions involving that account. + +@end table + +While viewing reports you can easily switch back and forth between the +ledger buffer and the @file{*Ledger Report*} buffer. In @file{*Ledger +Report*} buffer, typing @kbd{RET} will take you to that transaction in +the ledger buffer. While in the ledger buffer @kbd{C-c C-o C-g} returns +you to the @file{*Ledger Report*} buffer. + +By default Ledger-mode will refresh the report buffer when the ledger +buffer is saved. If you want to rerun the report at another time +@kbd{C-c C-o C-a}. This is useful if you have other programs altering +your ledger file outside of Emacs. + + +@node Adding and Editing Reports, Reversing Report Order, Running Basic Reports, The Report Buffer +@section Adding and Editing Reports +@findex ledger-reports +@kindex M-1 C-c C-o C-r +@kindex S +@kindex C-c C-o C-e +@kindex e +@cindex report, adding and editing + +@menu +* Expansion Formats:: +* Make Report Transactions Active:: +@end menu + +If you type a report name that Ledger-mode doesn't recognize it will +prompt you for a ledger command line to run. That command is +automatically saved with the name given and you can re-run it at any +time. + +There are two ways to edit the command line for a report. The first is +to provide a prefix argument to the run-report command. For example, +type @kbd{M-1 C-c C-o C-r}. This will prompt you for the report name, +then present the report command line to be edited. When you hit +@kbd{RET}, the report will be run, but it will not be permanently saved. +If you want to save it, type @kbd{S} in the @file{*Ledger Report*} +buffer you will have the option to give it a new name, or overwrite the +old report. + +Deleting reports is accomplished by typing @kbd{C-c C-o C-e} or using +@samp{Edit Report} menu in the ledger buffer, or typing @kbd{e} in the +@file{*Ledger Report*} buffer. This takes you to the Emacs +customization window for the Ledger Reports variables. Use the widgets +to delete the report you want removed. + +Typing @kbd{C-c C-o C-s} will prompt for a name and save the current +report. + +@node Expansion Formats, Make Report Transactions Active, Adding and Editing Reports, Adding and Editing Reports +@subsection Expansion Formats +@cindex report, custom variable + +It is sometimes convenient to leave room to customize a report without +saving the command line every time. For example running a register +report for a specific account entered at runtime by the user. The +built-in report @var{account} does exactly that, using a variable +expansion to prompt the user for the account to use. There are four +variables that can be expanded to run a report: + +@table @var + +@item ledger-file +Returns the file to be operated on. + +@item payee +Prompts for a payee. + +@item account +Prompt for an account. + +@item tagname +Prompt for a meta-data tag name. + +@item tagvalue +Prompt for a meta-data tag value. + +@end table + +You can use these expansion values in your ledger report commands. For +example, if you wanted to specify a register report the displayed +transactions from a user-determined account with a particular meta-data +tag value, you specify the following command line: + +@example +ledger -f %(ledger-file) reg %(account) \ + --limit \"tag('my-tag') =~/%(value)/\" +@end example + +Note how the double-quotes are escaped with back-slashes. + +@node Make Report Transactions Active, , Expansion Formats, Adding and Editing Reports +@subsection Make Report Transactions Active +@cindex report, custom command + +In a large register report it is convenient to be able to jump to the +source transaction. Ledger-mode will automatically include source +information in every register file that doesn't contain +a @option{--subtotal} option. It does this by adding +@option{--prepend-format='%(filename):%(beg_line):'} to the register +report command-line you specify. You should never have to see this, but +if there is an error in your ledger output this additional information +may not get stripped out of the visible report. + +@node Reversing Report Order, , Adding and Editing Reports, The Report Buffer +@section Reversing Report Order +@kindex R +@cindex report, order reversing + +Often, banks show their on-line transaction histories with the most +recent transaction at the top. Ledger itself cannot do a sensible +ledger report in reverse chronological order, if you sort on reverse +date the calculation will also run in the opposite direction. If you +want to compare a ledger register report to a bank report with the most +recent transactions at the top, type @kbd{R} in the @file{*Ledger +Report*} buffer and it will reverse the order of the transactions and +maintain the proper mathematical sense. + +@node Scheduling Transactions, Customizing Ledger-mode, The Report Buffer, Top +@chapter Scheduling Transactions + +The Ledger program provides for automating transactions but these +transaction aren't @emph{real}, they only exist inside a ledger session and +are not reflected in the actual data file. Many transactions are very +repetitive, but may vary slightly in the date they occur on, or the +amount. Some transactions are weekly, monthly, quarterly or annually. +Ledger mode provides a way to schedule upcoming transaction with a +flexible scheduler that allows you to specify the transactions in a +separate ledger file and calculate the upcoming occurrences of those +transactions. You can then copy the transactions into your live data +file. + +@menu +* Specifying Upcoming Transactions:: +@end menu + +@node Specifying Upcoming Transactions, , Scheduling Transactions, Scheduling Transactions +@section Specifying Upcoming Transactions + +The format for specifying transactions is identical to Ledger's file +format with the exception of the date field. The data field is modified +by surrounding it with brackets and using wild cards and special +characters to specify when the transactions should appear. + +@menu +* Transactions that occur on specific dates:: +* Transactions that occur on specific days:: +@end menu + +@node Transactions that occur on specific dates, Transactions that occur on specific days, Specifying Upcoming Transactions, Specifying Upcoming Transactions +@subsection Transactions that occur on specific dates + +Many times you will enter repetitive transactions that occur on the same +day of the month each month. These can be specified using a wild card +in the year and month with a fixed date in the day. The following entry +specifies a transaction that occurs on the first and fifteenth of every +month in every year. +@example +[*/*/1,15] Paycheck + Income:Job $1000.00 + Assets:Checking +@end example + +Some transactions do not occur every month. Comma separated lists of +the months, or @samp{E} for even, or @samp{O} for odd number months can +also be specified. The following entry specifies a bi-monthly +exterminator bill that occurs in the even months: +@example +[*/E/01] Exterminator + Expenses:Home $100.00 + Assets:Checking +@end example + +@node Transactions that occur on specific days, , Transactions that occur on specific dates, Specifying Upcoming Transactions +@subsection Transactions that occur on specific days + +Some transactions occur every relative to the day of the week rather +than the date of the month. For example, many people are paid every two +weeks without regard to the day of the month. Other events may occur on +specific days regardless of the date. For example the following +transactions creates a transaction every other Thursday: + +@example +[2014/11/27+2Th] Paycheck + Income:Job $1000.00 + Assets:Checking +@end example + +It is necessary to specify a starting date in order for this type of +recurrence relation to be specified. The day names are two character +codes that default to Mo, Tu, We, Th, Fr, Sa, Su, for Monday, Tuesday, +Wednesday, Thursday, Friday, Saturday, Sunday respectively. You can +change the codes to something more convenient for your locale by +customizing the ledger @option{ledger-schedule-week-days}. They must be two +characters long. + + + +@node Customizing Ledger-mode, Generating Ledger Regression Tests, Scheduling Transactions, Top +@chapter Customizing Ledger-mode + +@menu +* Ledger-mode Customization:: +* Customization Variables:: +@end menu + +@node Ledger-mode Customization, Customization Variables, Customizing Ledger-mode, Customizing Ledger-mode +@section Ledger-mode Customization + +Ledger-mode has several options available for configuration. All +options can be configured through the Emacs customization menus, or +specified in your Emacs initialization file. The complete list of +options is shown below. To change the option using the Emacs +customization menu, simply chose customize in the Options menu and look +for Ledger under the data options. Alternately you can choose +@samp{Customize Specific Group} and enter @samp{Ledger} as the group. + +@node Customization Variables, , Ledger-mode Customization, Customizing Ledger-mode +@section Customization Variables + +@menu +* Ledger Customization Group:: +* Ledger Reconcile Customization Group:: +* Ledger Report Customization Group:: +* Ledger Faces Customization Group:: +* Ledger Post Customization Group:: +* Ledger Exec Customization Group:: +* Ledger Test Customization Group:: +* Ledger Texi Customization Group:: +@end menu + +@node Ledger Customization Group, Ledger Reconcile Customization Group, Customization Variables, Customization Variables +@subsection Ledger Customization Group +@cindex customization, ledger-mode + +@ftable @option + +@item ledger-occur-use-face-shown +If non-nil, use a custom face for transactions shown in +@option{ledger-occur} mode using @option{ledger-occur-xact-face}. + +@item ledger-clear-whole-transactions +If non-nil, clear whole transactions, not individual postings. + +@item ledger-highlight-xact-under-point +If non-nil, highlight transaction under point using +@option{ledger-font-highlight-face}. + +@end ftable + +@node Ledger Reconcile Customization Group, Ledger Report Customization Group, Ledger Customization Group, Customization Variables +@subsection Ledger Reconcile Customization Group +@cindex customization, reconcile + +@ftable @option + +@item ledger-recon-buffer-name +Name to use for reconciliation buffer. Defaults to @file{*Reconcile*}. + +@item ledger-narrow-on-reconcile +If t, limit transactions shown in main buffer to those matching +the reconcile regex. + +@item ledger-buffer-tracks-reconcile-buffer +If t, then when the cursor is moved to a new transaction in the +@file{*Reconcile*} buffer. Then that transaction will be shown in its +source buffer. + +@item ledger-reconcile-force-window-bottom +If t, make the @file{*Reconcile*} window appear along the bottom +of the register window and resize. + +@item ledger-reconcile-toggle-to-pending +If t, then toggle between uncleared and pending @samp{!}. If +false toggle between uncleared and cleared @samp{*}. + +@item ledger-reconcile-default-date-format +Date format for the reconcile buffer. Defaults to +@option{ledger-default-date-format}. + +@item ledger-reconcile-target-prompt-string +Prompt for recon target. Defaults to "Target amount for reconciliation ". + +@item ledger-reconcile-buffer-header +Header string for the reconcile buffer. If non-nil, the name of the +account being reconciled will be substituted into the '%s'. If nil, no +header will be displayed. Defaults to "Reconciling account %s\n\n". + +@item ledger-reconcile-buffer-line-format +Format string for the ledger reconcile posting format. Available fields +are date, status, code, payee, account, amount. The format for each +field is %WIDTH(FIELD), WIDTH can be preceded by a minus sign which mean +to left justify and pad the field. WIDTH is the minimum number of +characters to display; if string is longer, it is not truncated unless +@option{ledger-reconcile-buffer-payee-max-chars} or +@option{ledger-reconcile-buffer-account-max-chars} is defined. Defaults to +"%(date)s %-4(code)s %-50(payee)s %-30(account)s %15(amount)s\n" + +@item ledger-reconcile-buffer-payee-max-chars +If positive, truncate payee name right side to max number of characters. + +@item ledger-reconcile-buffer-account-max-chars +If positive, truncate account name left side to max number of characters. + +@item ledger-reconcile-sort-key +Key for sorting reconcile buffer. Possible values are '(date)', +'(amount)', '(payee)' or '(0)' for no sorting, i.e. using +ledger file order. Defaults to '(0)'. + +@item ledger-reconcile-insert-effective-date nil +If t, prompt for effective date when clearing transactions during +reconciliation. + +@item ledger-reconcile-finish-force-quit nil +If t, will force closing reconcile window after @kbd{C-c C-c}. + +@end ftable + +@node Ledger Report Customization Group, Ledger Faces Customization Group, Ledger Reconcile Customization Group, Customization Variables +@subsection Ledger Report Customization Group +@cindex customization, report + +@ftable @option + +@item ledger-reports +Definition of reports to run. + +@item ledger-report-format-specifiers +An alist mapping ledger report format specifiers to implementing +functions. + +@end ftable + +@node Ledger Faces Customization Group, Ledger Post Customization Group, Ledger Report Customization Group, Customization Variables +@subsection Ledger Faces Customization Group +@cindex customization, faces + +Ledger Faces: Ledger-mode highlighting + +@ftable @option + +@item ledger-font-uncleared-face +Default face for Ledger. + +@item ledger-font-cleared-face +Default face for cleared @samp{*} transactions. + +@item ledger-font-highlight-face +Default face for transaction under point. + +@item ledger-font-pending-face +Default face for pending @samp{!} transactions. + +@item ledger-font-other-face +Default face for other transactions. + +@item ledger-font-posting-account-face +Face for Ledger accounts. + +@item ledger-font-posting-account-cleared-face +Face for cleared Ledger accounts. + +@item ledger-font-posting-account-pending-face +Face for Ledger pending accounts. + +@item ledger-font-posting-amount-face +Face for Ledger amounts. + +@item ledger-occur-narrowed-face +Default face for Ledger occur mode hidden transactions. + +@item ledger-occur-xact-face +Default face for Ledger occur mode shown transactions. + +@item ledger-font-comment-face +Face for Ledger comments. + +@item ledger-font-reconciler-uncleared-face +Default face for uncleared transactions in the @file{*Reconcile*} buffer. + +@item ledger-font-reconciler-cleared-face +Default face for cleared @samp{*} transactions in the @file{*Reconcile*} +buffer. + +@item ledger-font-reconciler-pending-face +Default face for pending @samp{!} transactions in the @file{*Reconcile*} +buffer. + +@item ledger-font-report-clickable-face +FIXME + +@end ftable + +@node Ledger Post Customization Group, Ledger Exec Customization Group, Ledger Faces Customization Group, Customization Variables +@subsection Ledger Post Customization Group +@cindex customization, post + +Ledger Post: + +@ftable @option + +@item ledger-post-auto-adjust-amounts +If non-nil, then automatically align amounts to column specified in +@option{ledger-post-amount-alignment-column}. + +@item ledger-post-amount-alignment-column +The column Ledger-mode uses to align amounts. + +@item ledger-default-acct-transaction-indent +Default indentation for account transactions in an entry. + +@item ledger-post-use-completion-engine +Which completion engine to use: @var{iswitchb}, @var{ido}, or built-in. + +@item ledger-post-use-ido + +@end ftable + +@node Ledger Exec Customization Group, Ledger Test Customization Group, Ledger Post Customization Group, Customization Variables +@subsection Ledger Exec Customization Group +@cindex customization, executable + +Ledger Exec: Interface to the Ledger command-line accounting program. + +@ftable @option + +@item ledger-binary-path +Path to the ledger executable. + +@item ledger-init-file-name +Location of the ledger initialization file. nil if you don't have one. + +@end ftable + +@node Ledger Test Customization Group, Ledger Texi Customization Group, Ledger Exec Customization Group, Customization Variables +@subsection Ledger Test Customization Group +@cindex customization, test + +@ftable @option + +@item ledger-source-directory +Directory where the Ledger sources are located. + +@item ledger-test-binary +Directory where the debug binary. + +@end ftable + +@node Ledger Texi Customization Group, , Ledger Test Customization Group, Customization Variables +@subsection Ledger Texi Customization Group +@cindex customization, texi + +@ftable @option + +@item ledger-texi-sample-doc-path +Location for sample data to be used in texi tests, defaults to +@file{~/ledger/doc/sample.dat}. + +@item ledger-texi-normalization-args +texi normalization for producing ledger output, defaults to +@samp{--args-only --columns 80}. + +@end ftable + +@node Generating Ledger Regression Tests, Embedding Example results in Ledger Documentation, Customizing Ledger-mode, Top +@chapter Generating Ledger Regression Tests + +Work in Progress. + +@node Embedding Example results in Ledger Documentation, Hacking Ledger-mode, Generating Ledger Regression Tests, Top +@chapter Embedding Example results in Ledger Documentation + +Work in Progress. + +@node Hacking Ledger-mode, Concept Index, Embedding Example results in Ledger Documentation, Top +@chapter Hacking Ledger-mode + +Work in Progress. + +@node Concept Index, Command & Variable Index, Hacking Ledger-mode, Top +@unnumbered Concept Index + +@printindex cp + +@node Command & Variable Index, Keystroke Index, Concept Index, Top +@unnumbered Command & Variable Index + +@printindex fn + +@node Keystroke Index, , Command & Variable Index, Top +@unnumbered Keystroke Index + +@printindex ky + +@bye + +@c Local Variables: +@c mode: texinfo +@c TeX-master: t +@c End: |