Formatting changes and initial inclusion of ledger-schedule

This commit is contained in:
Craig Earls 2013-07-02 13:16:28 -07:00
parent a6cb179d8a
commit cf2fa5c32b
11 changed files with 746 additions and 761 deletions

View file

@ -85,8 +85,10 @@ Returns a list with (value commodity)."
(defun -commodity (c1 c2)
"Subtract C2 from C1, ensuring their commodities match."
(if (string= (cadr c1) (cadr c2))
; the scaling below is to get around inexact subtraction results where, for example
; 1.23 - 4.56 = -3.3299999999999996 instead of -3.33
; the scaling below is to get around inexact
; subtraction results where, for example 1.23
; - 4.56 = -3.3299999999999996 instead of
; -3.33
(list (/ (- (* ledger-scale (car c1)) (* ledger-scale (car c2))) ledger-scale) (cadr c1))
(error "Can't subtract different commodities %S from %S" c2 c1)))

View file

@ -51,7 +51,7 @@
(concat (symbol-name e) "-string")))))) "[ \t]*$")))
(defmacro single-line-config2 (&rest elements)
"Take list of ELEMENTS and return regex and element list for use in context-at-point"
"Take list of ELEMENTS and return regex and element list for use in context-at-point"
(let (regex-string)
`'(,(concat (dolist (e elements regex-string)
(setq regex-string

View file

@ -121,6 +121,7 @@ Can indent, complete or align depending on context."
(define-derived-mode ledger-mode text-mode "Ledger"
"A mode for editing ledger data files."
(ledger-check-version)
(ledger-check-schedule-available)
(ledger-post-setup)
(set (make-local-variable 'comment-start) " ; ")
@ -219,6 +220,7 @@ Can indent, complete or align depending on context."
(define-key map [delete-xact] '(menu-item "Delete Transaction" ledger-delete-current-transaction))
(define-key map [cmp-xact] '(menu-item "Complete Transaction" ledger-fully-complete-xact))
(define-key map [add-xact] '(menu-item "Add Transaction (ledger xact)" ledger-add-transaction :enable ledger-works))
(define-key map [generate-scheduled] '(menu-item "Show Upcoming Transactions" ledger-schedule-upcoming :enable ledger-schedule-available))
(define-key map [sep3] '(menu-item "--"))
(define-key map [stats] '(menu-item "Ledger Statistics" ledger-display-ledger-stats :enable ledger-works))
(define-key map [fold-buffer] '(menu-item "Narrow to REGEX" ledger-occur))))

View file

@ -49,14 +49,20 @@
:type 'integer
:group 'ledger-schedule)
(defcustom ledger-schedule-file "~/FinanceData/ledger-schedule.ledger"
(defcustom ledger-schedule-file "~/ledger-schedule.ledger"
"File to find scheduled transactions."
:type 'file
:group 'ledger-schedule)
(defvar ledger-schedule-available nil)
(defsubst between (val low high)
(and (>= val low) (<= val high)))
(defun ledger-check-schedule-available ()
(setq ledger-schedule-available (and ledger-schedule-file
(file-exists-p ledger-schedule-file))))
(defun ledger-schedule-days-in-month (month year)
"Return number of days in the MONTH, MONTH is from 1 to 12.
If year is nil, assume it is not a leap year"
@ -291,31 +297,6 @@ returns true if the date meets the requirements"
(ledger-mode))
(length candidates)))
;;
;; Test harnesses for use in ielm
;;
(defvar auto-items)
(defun ledger-schedule-test ( early horizon)
(ledger-schedule-create-auto-buffer
(ledger-schedule-scan-transactions ledger-schedule-file)
early
horizon
(get-buffer "2013.ledger")))
(defun ledger-schedule-test-predict ()
(let ((today (current-time))
test-date items)
(loop for day from 0 to ledger-schedule-look-forward by 1 do
(setq test-date (time-add today (days-to-time day)))
(dolist (item auto-items items)
(if (funcall (car item) test-date)
(setq items (append items (list (decode-time test-date) (cdr item)))))))
items))
(defun ledger-schedule-upcoming ()
(interactive)
(ledger-schedule-create-auto-buffer