diff options
author | Craig Earls <enderw88@gmail.com> | 2015-01-21 06:27:33 -0700 |
---|---|---|
committer | Craig Earls <enderw88@gmail.com> | 2015-01-21 06:27:33 -0700 |
commit | bec52e3221d74ce3bf1383b245beae5a6214e387 (patch) | |
tree | 8d059e48e80d7713e1d1f1bf00a7284cb3a227f0 | |
parent | 47dbddf5af133fa7be7d6ac4dcb83f2e5cf03930 (diff) | |
parent | c278e9134676f4b3f97994e1c5dee6b9bac38595 (diff) | |
download | fork-ledger-bec52e3221d74ce3bf1383b245beae5a6214e387.tar.gz fork-ledger-bec52e3221d74ce3bf1383b245beae5a6214e387.tar.bz2 fork-ledger-bec52e3221d74ce3bf1383b245beae5a6214e387.zip |
Merge pull request #381 from thdox/bugzilla-1105-2
Bugzilla 1105
Thanks.
-rw-r--r-- | doc/ledger-mode.texi | 64 | ||||
-rw-r--r-- | lisp/ledger-reconcile.el | 95 |
2 files changed, 123 insertions, 36 deletions
diff --git a/doc/ledger-mode.texi b/doc/ledger-mode.texi index b76cb309..4fe56d6b 100644 --- a/doc/ledger-mode.texi +++ b/doc/ledger-mode.texi @@ -367,7 +367,7 @@ some additional meaning to the states: 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 ``pending'', +your account balance. You bank may call these transactions @emph{pending}, but Ledger-mode uses a slightly different meaning. @item Pending. @@ -550,7 +550,7 @@ 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 @kbd{C-c C-r} and enter the account +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 @@ -589,7 +589,7 @@ difference from your target is zero. 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 +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. @@ -599,7 +599,7 @@ mark the transaction if appropriate. 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 transaction as cleared and saves the ledger buffer. +marks all pending transactions as cleared and saves the ledger buffer. @node Adding and Deleting Transactions during Reconciliation, Changing Reconciliation Account, Finalize Reconciliation, The Reconcile Buffer @section Adding and Deleting Transactions during Reconciliation @@ -621,7 +621,7 @@ Typing @kbd{d} will delete the transaction under point in the 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 `pending' in +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 @@ -795,7 +795,7 @@ maintain the proper mathematical sense. @chapter Scheduling Transactions The Ledger program provides for automating transactions but these -transaction aren't ``real'', they only exist inside a ledger session and +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. @@ -929,29 +929,63 @@ If non-nil, highlight transaction under point using @ftable @option -@item ledger-reconcile-default-commodity -The default commodity for use in target calculations in ledger -reconcile. Defaults to @samp{$} (USD). - @item ledger-recon-buffer-name Name to use for reconciliation buffer. Defaults to @file{*Reconcile*}. @item ledger-narrow-on-reconcile -If non-nil, limit transactions shown in main buffer to those matching +If t, limit transactions shown in main buffer to those matching the reconcile regex. @item ledger-buffer-tracks-reconcile-buffer -If non-nil, then when the cursor is moved to a new transaction in the -@file{*Reconcile*} window. +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 non-nil, make the @file{*Reconcile*} window appear along the 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 non-nil, then toggle between uncleared and pending @samp{!}. If +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 +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 preced 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 +"%(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. + @end ftable @node Ledger Report Customization Group, Ledger Faces Customization Group, Ledger Reconcile Customization Group, Customization Variables diff --git a/lisp/ledger-reconcile.el b/lisp/ledger-reconcile.el index 80e27ae3..f9a5c21b 100644 --- a/lisp/ledger-reconcile.el +++ b/lisp/ledger-reconcile.el @@ -40,7 +40,7 @@ :group 'ledger) (defcustom ledger-recon-buffer-name "*Reconcile*" - "Name to use for reconciliation window." + "Name to use for reconciliation buffer." :group 'ledger-reconcile) (defcustom ledger-narrow-on-reconcile t @@ -49,29 +49,30 @@ :group 'ledger-reconcile) (defcustom ledger-buffer-tracks-reconcile-buffer t - "If t, then when the cursor is moved to a new xact in the recon window. + "If t, then when the cursor is moved to a new transaction in the reconcile buffer. Then that transaction will be shown in its source buffer." :type 'boolean :group 'ledger-reconcile) (defcustom ledger-reconcile-force-window-bottom nil - "If t make the reconcile window appear along the bottom of the register window and resize." + "If t, make the reconcile window appear along the bottom of the register window and resize." :type 'boolean :group 'ledger-reconcile) (defcustom ledger-reconcile-toggle-to-pending t - "If true then toggle between uncleared and pending. + "If t, then toggle between uncleared and pending. reconcile-finish will mark all pending posting cleared." :type 'boolean :group 'ledger-reconcile) (defcustom ledger-reconcile-default-date-format ledger-default-date-format - "Default date format for the reconcile buffer." + "Date format for the reconcile buffer. +Default is ledger-default-date-format." :type 'string :group 'ledger-reconcile) (defcustom ledger-reconcile-target-prompt-string "Target amount for reconciliation " - "Default prompt for recon target prompt." + "Prompt for recon target." :type 'string :group 'ledger-reconcile) @@ -79,24 +80,36 @@ reconcile-finish will mark all pending posting cleared." "Default 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 willbe displayed." - :type 'string - :group 'ledger-reconcile) + into the '%s'. If nil, no header will be displayed." + :type 'string + :group 'ledger-reconcile) (defcustom ledger-reconcile-buffer-line-format "%(date)s %-4(code)s %-50(payee)s %-30(account)s %15(amount)s\n" "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 to left justify and pad the -field." - :type 'string - :group 'ledger-reconcile) +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." + :type 'string + :group 'ledger-reconcile) + +(defcustom ledger-reconcile-buffer-payee-max-chars -1 + "If positive, truncate payee name right side to max number of characters." + :type 'integer + :group 'ledger-reconcile) + +(defcustom ledger-reconcile-buffer-account-max-chars -1 + "If positive, truncate account name left side to max number of characters." + :type 'integer + :group 'ledger-reconcile) (defcustom ledger-reconcile-sort-key "(0)" - "Default key for sorting reconcile buffer. + "Key for sorting reconcile buffer. -Possible values are '(date)', '(amount)', '(payee)'. For no sorting, i.e. using -ledger file order, use '(0)'." +Possible values are '(date)', '(amount)', '(payee)' or '(0)' for no sorting, i.e. using ledger file order." :type 'string :group 'ledger-reconcile) @@ -105,6 +118,42 @@ ledger file order, use '(0)'." :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) + "If S is shorter than LEN, pad it with PADDING on the left." + (let ((extra (max 0 (- len (length s))))) + (concat (make-string extra (string-to-char padding)) + s))) +(defun ledger-reconcile-s-pad-right (len padding s) + "If S is shorter than LEN, pad it with PADDING on the right." + (let ((extra (max 0 (- len (length s))))) + (concat s + (make-string extra (string-to-char padding))))) +(defun ledger-reconcile-s-left (len s) + "Return up to the LEN first chars of S." + (if (> (length s) len) + (substring s 0 len) + s)) +(defun ledger-reconcile-s-right (len s) + "Return up to the LEN last chars of S." + (let ((l (length s))) + (if (> l len) + (substring s (- l len) l) + s))) + +(defun ledger-reconcile-truncate-right (str len) + "Truncate STR right side with max LEN characters, and pad with '…' if truncated." + (if (and (>= len 0) (> (length str) len)) + (ledger-reconcile-s-pad-right len "…" (ledger-reconcile-s-left (- len 1) str)) + str)) + +(defun ledger-reconcile-truncate-left (str len) + "Truncate STR left side with max LEN characters, and pad with '…' if truncated." + (if (and (>= len 0) (> (length str) len)) + (ledger-reconcile-s-pad-left len "…" (ledger-reconcile-s-right (- len 1) str)) + str)) + (defun ledger-reconcile-get-cleared-or-pending-balance (buffer account) "Use BUFFER to Calculate the cleared or pending balance of the ACCOUNT." @@ -359,12 +408,16 @@ POSTING is used in `ledger-clear-whole-transactions' is nil." (ledger-reconcile-format-posting beg where fmt - (format-time-string date-format (nth 2 xact)) ; date - (if (nth 3 xact) (nth 3 xact) "") ; code - (nth 3 posting) ; status - (nth 4 xact) ; payee - (nth 1 posting) ; account - (nth 2 posting)))))) ; amount + (format-time-string date-format (nth 2 xact)) ; date + (if (nth 3 xact) (nth 3 xact) "") ; code + (nth 3 posting) ; status + (ledger-reconcile-truncate-right + (nth 4 xact) ; payee + ledger-reconcile-buffer-payee-max-chars) + (ledger-reconcile-truncate-left + (nth 1 posting) ; account + ledger-reconcile-buffer-account-max-chars) + (nth 2 posting)))))) ; amount (defun ledger-do-reconcile (&optional sort) "SORT the uncleared transactions in the account and display them in the *Reconcile* buffer. |