diff options
-rw-r--r-- | doc/ledger-mode.texi | 67 | ||||
-rw-r--r-- | lisp/ledger-context.el | 4 | ||||
-rw-r--r-- | lisp/ledger-reconcile.el | 10 | ||||
-rw-r--r-- | src/output.cc | 6 | ||||
-rw-r--r-- | src/output.h | 10 | ||||
-rwxr-xr-x | test/CheckBaselineTests.py | 2 |
6 files changed, 64 insertions, 35 deletions
diff --git a/doc/ledger-mode.texi b/doc/ledger-mode.texi index 4fe56d6b..8ff284b1 100644 --- a/doc/ledger-mode.texi +++ b/doc/ledger-mode.texi @@ -194,8 +194,10 @@ 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}. Emacs will prompt -for an account to reconcile in the Minibuffer. Enter @samp{Checking}. +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 @@ -383,13 +385,15 @@ transaction. @end itemize -@kindex C-c C-e @kindex C-c C-c +@kindex C-c C-e -Clearing complete transactions is done by typing @kbd{C-c C-e} with -point in a transaction. This places an asterisk @samp{*} after the -date. Clearing individual postings is done by typing @kbd{C-c C-c} -while in a posting. This places an asterisk prior to the posting. +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 @@ -550,17 +554,25 @@ 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} and enter the account -you wish to reconcile in the Minibuffer. 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. -Ledger expects you to enter an amount with a commodity. 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). +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 @@ -596,11 +608,17 @@ 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 @@ -866,7 +884,7 @@ 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 @var{ledger-schedule-week-days}. They must be two +customizing the ledger @option{ledger-schedule-week-days}. They must be two characters long. @@ -951,7 +969,7 @@ false toggle between uncleared and cleared @samp{*}. @item ledger-reconcile-default-date-format Date format for the reconcile buffer. Defaults to -ledger-default-date-format. +@option{ledger-default-date-format}. @item ledger-reconcile-target-prompt-string Prompt for recon target. Defaults to "Target amount for reconciliation ". @@ -964,11 +982,11 @@ 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 preced by a minus sign which mean +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 -ledger-reconcile-buffer-payee-max-chars or -ledger-reconcile-buffer-account-max-chars is defined. Defaults to +@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 @@ -986,6 +1004,9 @@ ledger file order. Defaults to '(0)'. 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 diff --git a/lisp/ledger-context.el b/lisp/ledger-context.el index 0dfa4645..643ebdd3 100644 --- a/lisp/ledger-context.el +++ b/lisp/ledger-context.el @@ -32,9 +32,9 @@ ;; `ledger-single-line-config' macro to form the regex and list of ;; elements (defconst ledger-indent-string "\\(^[ \t]+\\)") -(defconst ledger-status-string "\\([*! ]?\\)") +(defconst ledger-status-string "\\(* \\|! \\)?") (defconst ledger-account-string "[\\[(]?\\(.*?\\)[])]?") -(defconst ledger-separator-string "\\s-\\s-") +(defconst ledger-separator-string "\\s-\\s-+") (defconst ledger-amount-string "\\(-?[0-9]+[\\.,][0-9]*\\)") (defconst ledger-comment-string "[ \t]*;[ \t]*\\(.*?\\)") (defconst ledger-nil-string "\\([ \t]\\)") diff --git a/lisp/ledger-reconcile.el b/lisp/ledger-reconcile.el index 18e0128a..8c190aba 100644 --- a/lisp/ledger-reconcile.el +++ b/lisp/ledger-reconcile.el @@ -118,6 +118,11 @@ Possible values are '(date)', '(amount)', '(payee)' or '(0)' for no sorting, i.e :type 'boolean :group 'ledger-reconcile) +(defcustom ledger-reconcile-finish-force-quit nil + "If t, will force closing reconcile window after \\[ledger-reconcile-finish]." + :type 'boolean + :group 'ledger-reconcile) + ;; s-functions below are copied from Magnars' s.el ;; prefix ledger-reconcile- is added to not conflict with s.el (defun ledger-reconcile-s-pad-left (len padding s) @@ -314,7 +319,7 @@ Return the number of uncleared xacts found." (defun ledger-reconcile-finish () "Mark all pending posting or transactions as cleared. Depends on ledger-reconcile-clear-whole-transactions, save the buffers -and exit reconcile mode" +and exit reconcile mode if `ledger-reconcile-finish-force-quit'" (interactive) (save-excursion (goto-char (point-min)) @@ -327,7 +332,8 @@ and exit reconcile mode" (ledger-toggle-current 'cleared)))) (forward-line 1))) (ledger-reconcile-save) - (ledger-reconcile-quit)) + (when ledger-reconcile-finish-force-quit + (ledger-reconcile-quit))) (defun ledger-reconcile-quit () diff --git a/src/output.cc b/src/output.cc index ffd144e1..92b71387 100644 --- a/src/output.cc +++ b/src/output.cc @@ -291,7 +291,7 @@ void report_accounts::flush() void report_accounts::operator()(post_t& post) { - std::map<account_t *, std::size_t>::iterator i = accounts.find(post.account); + accounts_report_map::iterator i = accounts.find(post.account); if (i == accounts.end()) accounts.insert(accounts_pair(post.account, 1)); else @@ -362,7 +362,7 @@ void report_commodities::operator()(post_t& post) amount_t temp(post.amount.strip_annotations(report.what_to_keep())); commodity_t& comm(temp.commodity()); - std::map<commodity_t *, std::size_t>::iterator i = commodities.find(&comm); + commodities_report_map::iterator i = commodities.find(&comm); if (i == commodities.end()) commodities.insert(commodities_pair(&comm, 1)); else @@ -371,7 +371,7 @@ void report_commodities::operator()(post_t& post) if (comm.has_annotation()) { annotated_commodity_t& ann_comm(as_annotated_commodity(comm)); if (ann_comm.details.price) { - std::map<commodity_t *, std::size_t>::iterator ii = + commodities_report_map::iterator ii = commodities.find(&ann_comm.details.price->commodity()); if (ii == commodities.end()) commodities.insert diff --git a/src/output.h b/src/output.h index ec7ec6c2..1305fa77 100644 --- a/src/output.h +++ b/src/output.h @@ -142,9 +142,10 @@ class report_accounts : public item_handler<post_t> protected: report_t& report; - std::map<account_t *, std::size_t, account_compare> accounts; - typedef std::map<account_t *, std::size_t>::value_type accounts_pair; + typedef std::map<account_t *, std::size_t, account_compare> accounts_report_map; + + accounts_report_map accounts; public: report_accounts(report_t& _report) : report(_report) { @@ -221,9 +222,10 @@ class report_commodities : public item_handler<post_t> protected: report_t& report; - std::map<commodity_t *, std::size_t, commodity_compare> commodities; - typedef std::map<commodity_t *, std::size_t>::value_type commodities_pair; + typedef std::map<commodity_t *, std::size_t, commodity_compare> commodities_report_map; + + commodities_report_map commodities; public: report_commodities(report_t& _report) : report(_report) { diff --git a/test/CheckBaselineTests.py b/test/CheckBaselineTests.py index 8c51ddef..1439cda4 100755 --- a/test/CheckBaselineTests.py +++ b/test/CheckBaselineTests.py @@ -29,7 +29,7 @@ class CheckBaselineTests (CheckOptions): 'help', 'import', 'no-color', - 'no-pager' + 'no-pager', 'options', 'price-exp', 'revalued-total', |