summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorCraig Earls <enderw88@gmail.com>2015-11-04 19:19:07 -0700
committerCraig Earls <enderw88@gmail.com>2015-11-04 19:19:07 -0700
commitcb05126e18f4d2fa5aa18cdb5a6af03436962068 (patch)
tree2691f85ddd6c90c986a821bc646f5d0f582a7217 /lisp
parent1cf83c6f5f5d005fb143f34b32b86bb838cd9674 (diff)
parentd38f8d3bff66e89cc79b1791566fdf9eca62a8e9 (diff)
downloadfork-ledger-cb05126e18f4d2fa5aa18cdb5a6af03436962068.tar.gz
fork-ledger-cb05126e18f4d2fa5aa18cdb5a6af03436962068.tar.bz2
fork-ledger-cb05126e18f4d2fa5aa18cdb5a6af03436962068.zip
Merge commit 'd38f8d3bff66e89cc79b1791566fdf9eca62a8e9' into next
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ledger-commodities.el10
-rw-r--r--lisp/ledger-context.el4
-rw-r--r--lisp/ledger-mode.el13
-rw-r--r--lisp/ledger-post.el16
4 files changed, 36 insertions, 7 deletions
diff --git a/lisp/ledger-commodities.el b/lisp/ledger-commodities.el
index ea6319ba..48fb78f7 100644
--- a/lisp/ledger-commodities.el
+++ b/lisp/ledger-commodities.el
@@ -33,6 +33,16 @@
:type 'string
:group 'ledger-reconcile)
+(defun ledger-read-commodity-with-prompt (prompt)
+ "Read commodity name after PROMPT.
+
+Default value is `ledger-reconcile-default-commodity'."
+ (let* ((buffer (current-buffer))
+ (commodities (with-temp-buffer
+ (ledger-exec-ledger buffer (current-buffer) "commodities")
+ (split-string (buffer-string) "\n" t))))
+ (completing-read prompt commodities nil t nil nil ledger-reconcile-default-commodity)))
+
(defun ledger-split-commodity-string (str)
"Split a commoditized string, STR, into two parts.
Returns a list with (value commodity)."
diff --git a/lisp/ledger-context.el b/lisp/ledger-context.el
index 643ebdd3..629d51a5 100644
--- a/lisp/ledger-context.el
+++ b/lisp/ledger-context.el
@@ -34,8 +34,8 @@
(defconst ledger-indent-string "\\(^[ \t]+\\)")
(defconst ledger-status-string "\\(* \\|! \\)?")
(defconst ledger-account-string "[\\[(]?\\(.*?\\)[])]?")
-(defconst ledger-separator-string "\\s-\\s-+")
-(defconst ledger-amount-string "\\(-?[0-9]+[\\.,][0-9]*\\)")
+(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]\\)")
(defconst ledger-commodity-string "\\(.+?\\)")
diff --git a/lisp/ledger-mode.el b/lisp/ledger-mode.el
index 30f25dfc..26de84fc 100644
--- a/lisp/ledger-mode.el
+++ b/lisp/ledger-mode.el
@@ -125,14 +125,19 @@
": "))
nil 'ledger-minibuffer-history default))
-(defun ledger-display-balance-at-point ()
+(defun ledger-display-balance-at-point (&optional arg)
"Display the cleared-or-pending balance.
-And calculate the target-delta of the account being reconciled."
- (interactive)
+And calculate the target-delta of the account being reconciled.
+
+With prefix argument \\[universal-argument] ask for the target commodity and convert
+the balance into that."
+ (interactive "P")
(let* ((account (ledger-read-account-with-prompt "Account balance to show"))
+ (target-commodity (when arg (ledger-read-commodity-with-prompt "Target commodity: ")))
(buffer (current-buffer))
(balance (with-temp-buffer
- (ledger-exec-ledger buffer (current-buffer) "cleared" account)
+ (apply 'ledger-exec-ledger buffer (current-buffer) "cleared" account
+ (when target-commodity (list "-X" target-commodity)))
(if (> (buffer-size) 0)
(buffer-substring-no-properties (point-min) (1- (point-max)))
(concat account " is empty.")))))
diff --git a/lisp/ledger-post.el b/lisp/ledger-post.el
index d741442a..f4727342 100644
--- a/lisp/ledger-post.el
+++ b/lisp/ledger-post.el
@@ -41,6 +41,16 @@
:type 'integer
:group 'ledger-post)
+(defcustom ledger-post-amount-alignment-at :end
+ "Position at which the amount is ailgned.
+
+Can be :end to align on the last number of the amount (can be
+followed by unaligned commodity) or :decimal to align at the
+decimal separator."
+ :type '(radio (const :tag "align at the end of amount" :end)
+ (const :tag "align at the decimal separator" :decimal))
+ :group 'ledger-post)
+
(defcustom ledger-post-use-completion-engine :built-in
"Which completion engine to use, :iswitchb or :ido chose those engines.
:built-in uses built-in Ledger-mode completion"
@@ -79,7 +89,11 @@ point at beginning of the commodity."
(when (re-search-forward ledger-amount-regex end t)
(goto-char (match-beginning 0))
(skip-syntax-forward " ")
- (- (match-end 3) (point)))))
+ (cond
+ ((eq ledger-post-amount-alignment-at :end)
+ (- (or (match-end 4) (match-end 3)) (point)))
+ ((eq ledger-post-amount-alignment-at :decimal)
+ (- (match-end 3) (point)))))))
(defun ledger-next-account (&optional end)
"Move to the beginning of the posting, or status marker, limit to END.