From eb9672c5506de874a697435f82098b6ba3ac9cff Mon Sep 17 00:00:00 2001 From: thdox Date: Wed, 21 Jan 2015 00:49:04 +0100 Subject: Fix for bugzilla #1105. You can now maximize the number of characters displayed for payee name and account name in the reconcile buffer. --- lisp/ledger-reconcile.el | 70 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 61 insertions(+), 9 deletions(-) (limited to 'lisp/ledger-reconcile.el') diff --git a/lisp/ledger-reconcile.el b/lisp/ledger-reconcile.el index 80e27ae3..68ac74cf 100644 --- a/lisp/ledger-reconcile.el +++ b/lisp/ledger-reconcile.el @@ -88,9 +88,22 @@ If non-nil, the name of the account being reconciled will be substituted 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. @@ -105,6 +118,41 @@ ledger file order, use '(0)'." :type 'boolean :group 'ledger-reconcile) +;; s-functions below are copied from Magnars' s.el +(defun 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 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 s-left (len s) + "Return up to the LEN first chars of S." + (if (> (length s) len) + (substring s 0 len) + s)) +(defun 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)) + (s-pad-right len "…" (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)) + (s-pad-left len "…" (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 +407,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. -- cgit v1.2.3 From 12c563614cb430642506ff645ca287ffc45225e9 Mon Sep 17 00:00:00 2001 From: thdox Date: Wed, 21 Jan 2015 00:51:57 +0100 Subject: Add documentation for bugzilla #1105, and align documentation between ledger-reconcile.el and ledger-mode.texi. --- doc/ledger-mode.texi | 52 +++++++++++++++++++++++++++++++++++++++--------- lisp/ledger-reconcile.el | 24 +++++++++++----------- 2 files changed, 55 insertions(+), 21 deletions(-) (limited to 'lisp/ledger-reconcile.el') diff --git a/doc/ledger-mode.texi b/doc/ledger-mode.texi index e2ac5759..4fe56d6b 100644 --- a/doc/ledger-mode.texi +++ b/doc/ledger-mode.texi @@ -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 68ac74cf..14407a75 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,9 +80,9 @@ 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. @@ -106,10 +107,9 @@ ledger-reconcile-buffer-account-max-chars is defined." :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) -- cgit v1.2.3 From c278e9134676f4b3f97994e1c5dee6b9bac38595 Mon Sep 17 00:00:00 2001 From: thdox Date: Wed, 21 Jan 2015 10:39:32 +0100 Subject: Add prefix ledger-reconcile- to s-functions to not conflict with original s.el --- lisp/ledger-reconcile.el | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'lisp/ledger-reconcile.el') diff --git a/lisp/ledger-reconcile.el b/lisp/ledger-reconcile.el index 14407a75..f9a5c21b 100644 --- a/lisp/ledger-reconcile.el +++ b/lisp/ledger-reconcile.el @@ -119,22 +119,23 @@ Possible values are '(date)', '(amount)', '(payee)' or '(0)' for no sorting, i.e :group 'ledger-reconcile) ;; s-functions below are copied from Magnars' s.el -(defun s-pad-left (len padding s) +;; 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 s-pad-right (len 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 s-left (len s) +(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 s-right (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) @@ -144,13 +145,13 @@ Possible values are '(date)', '(amount)', '(payee)' or '(0)' for no sorting, i.e (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)) - (s-pad-right len "…" (s-left (- len 1) str)) + (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)) - (s-pad-left len "…" (s-right (- len 1) str)) + (ledger-reconcile-s-pad-left len "…" (ledger-reconcile-s-right (- len 1) str)) str)) (defun ledger-reconcile-get-cleared-or-pending-balance (buffer account) -- cgit v1.2.3