summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/ldg-commodities.el46
-rw-r--r--lisp/ldg-complete.el4
-rw-r--r--lisp/ldg-post.el8
-rw-r--r--lisp/ldg-reconcile.el2
-rw-r--r--lisp/ldg-report.el20
5 files changed, 51 insertions, 29 deletions
diff --git a/lisp/ldg-commodities.el b/lisp/ldg-commodities.el
index cf2ee128..04dc23de 100644
--- a/lisp/ldg-commodities.el
+++ b/lisp/ldg-commodities.el
@@ -31,6 +31,12 @@
:type 'string
:group 'ledger)
+(defcustom ledger-use-decimal-comma nil
+ "If non-nil the use commas as decimal separator.
+This only has effect interfacing to calc mode in edit amount"
+ :type 'boolean
+ :group 'ledger)
+
(defun ledger-string-balance-to-commoditized-amount (str)
"Return a commoditized amount (val, 'comm') from STR."
(let ((fields (split-string str "[\n\r]"))) ; break any balances
@@ -40,10 +46,11 @@
(let* ((parts (split-string str)) ;break into number and commodity string
(first (car parts))
(second (cadr parts)))
- ;"^-*[1-9][0-9]*[.,][0-9]*"
(if (string-match "^-*[1-9]+" first)
- (list (string-to-number first) second)
- (list (string-to-number second) first))))
+ (list (string-to-number
+ (ledger-commodity-string-number-decimalize first :from-user)) second)
+ (list (string-to-number
+ (ledger-commodity-string-number-decimalize second :from-user)) first))))
fields)))
@@ -59,15 +66,38 @@
(list (+ (car c1) (car c2)) (cadr c1))
(error "Can't add different commodities, %S to %S" c1 c2)))
+(defun ledger-commodity-string-number-decimalize (number-string direction)
+ "Take NUMBER-STRING and ensure proper decimalization for use by string-to-number and number-to-string.
+
+DIRECTION can be :to-user or :from-user. All math calculations
+are done with decimal-period, some users may prefer decimal-comma
+which must be translated both directions."
+ (let ((val number-string))
+ (if ledger-use-decimal-comma
+ (cond ((eq direction :from-user)
+ ;; change string to decimal-period
+ (while (string-match "," val)
+ (setq val (replace-match "." nil nil val)))) ;; switch to period separator
+ ((eq direction :to-user)
+ ;; change to decimal-comma
+ (while (string-match "\\." val)
+ (setq val (replace-match "," nil nil val)))) ;; gets rid of periods
+ (t
+ (error "ledger-commodity-string-number-decimalize: direction not properly specified %S" direction))))
+ val))
+
+
+
(defun ledger-commodity-to-string (c1)
"Return string representing C1.
Single character commodities are placed ahead of the value,
longer one are after the value."
-(let ((val (number-to-string (car c1)))
- (commodity (cadr c1)))
- (if (> (length commodity) 1)
- (concat val " " commodity)
- (concat commodity " " val))))
+(let ((val (ledger-commodity-string-number-decimalize
+ (number-to-string (car c1)) :to-user))
+ (commodity (cadr c1)))
+ (if (> (length commodity) 1)
+ (concat val " " commodity)
+ (concat commodity " " val))))
(defun ledger-read-commodity-string (prompt)
"Return a commoditizd value (val 'comm') from COMM.
diff --git a/lisp/ldg-complete.el b/lisp/ldg-complete.el
index 3fd1b319..3686d0fd 100644
--- a/lisp/ldg-complete.el
+++ b/lisp/ldg-complete.el
@@ -164,10 +164,10 @@ Does not use ledger xact"
xacts))
(forward-line))
(setq xacts (nreverse xacts)))))
+ ;; Insert rest-of-name and the postings
(when xacts
(save-excursion
- (insert rest-of-name)
- (insert ?\n)
+ (insert rest-of-name ?\n)
(while xacts
(insert (car xacts) ?\n)
(setq xacts (cdr xacts))))
diff --git a/lisp/ldg-post.el b/lisp/ldg-post.el
index bdbb4386..14c3c55f 100644
--- a/lisp/ldg-post.el
+++ b/lisp/ldg-post.el
@@ -51,12 +51,6 @@
:type 'boolean
:group 'ledger-post)
-(defcustom ledger-post-use-decimal-comma nil
- "If non-nil the use commas as decimal separator.
-This only has effect interfacing to calc mode in edit amount"
- :type 'boolean
- :group 'ledger-post)
-
(defun ledger-post-all-accounts ()
"Return a list of all accounts in the buffer."
(let ((origin (point))
@@ -185,7 +179,7 @@ BEG, END, and LEN control how far it can align."
(goto-char (match-beginning 0))
(delete-region (match-beginning 0) (match-end 0))
(calc)
- (if ledger-post-use-decimal-comma
+ (if ledger-use-decimal-comma
(progn
(while (string-match "\\." val)
(setq val (replace-match "" nil nil val))) ;; gets rid of periods
diff --git a/lisp/ldg-reconcile.el b/lisp/ldg-reconcile.el
index 58cb6626..20857127 100644
--- a/lisp/ldg-reconcile.el
+++ b/lisp/ldg-reconcile.el
@@ -81,7 +81,7 @@ numbers"
"Calculate the cleared balance of the account being reconciled."
(interactive)
(let* ((pending (car (ledger-string-balance-to-commoditized-amount
- (car (ledger-reconcile-get-balances)))))
+ (car (ledger-reconcile-get-balances)))))
(target-delta (if ledger-target
(-commodity ledger-target pending)
nil)))
diff --git a/lisp/ldg-report.el b/lisp/ldg-report.el
index 370117fc..944ae2e6 100644
--- a/lisp/ldg-report.el
+++ b/lisp/ldg-report.el
@@ -21,7 +21,7 @@
;;; Commentary:
-;;
+;; Provide facilities for running and saving reports in emacs
;;; Code:
@@ -51,7 +51,8 @@ specifier."
(defcustom ledger-report-format-specifiers
'(("ledger-file" . ledger-report-ledger-file-format-specifier)
("payee" . ledger-report-payee-format-specifier)
- ("account" . ledger-report-account-format-specifier))
+ ("account" . ledger-report-account-format-specifier)
+ ("value" . ledger-report-value-format-specifier))
"An alist mapping ledger report format specifiers to implementing functions.
The function is called with no parameters and expected to return the
@@ -59,15 +60,6 @@ text that should replace the format specifier."
:type 'alist
:group 'ledger)
-;;(define-key map [(control ?c) (control ?o) (control ?r)] 'ledger-report)
-;;(define-key map [(control ?c) (control ?o) (control ?g)] 'ledger-report-goto)
-;;(define-key map [(control ?c) (control ?o) (control ?a)] 'ledger-report-redo)
-;;(define-key map [(control ?c) (control ?o) (control ?s)] 'ledger-report-save)
-;;(define-key map [(control ?c) (control ?o) (control ?e)] 'ledger-report-edit)
-;;(define-key map [(control ?c) (control ?o) (control ?k)] 'ledger-report-kill)
-
-;; Ledger report mode
-
(defvar ledger-report-buffer-name "*Ledger Report*")
(defvar ledger-report-name nil)
@@ -128,6 +120,12 @@ text that should replace the format specifier."
(use-local-map map)))
+(defun ledger-report-value-format-specifier ()
+ "Return a valid meta-data tag name"
+ ;; It is intended completion should be available on existing account
+ ;; names, but it remains to be implemented.
+ (ledger-read-string-with-default "Value: " nil))
+
(defun ledger-report-read-name ()
"Read the name of a ledger report to use, with completion.