diff options
Diffstat (limited to 'lisp/ldg-exec.el')
-rw-r--r-- | lisp/ldg-exec.el | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/lisp/ldg-exec.el b/lisp/ldg-exec.el index d740fccc..3881f8e9 100644 --- a/lisp/ldg-exec.el +++ b/lisp/ldg-exec.el @@ -1,4 +1,4 @@ -(defgroup ledger-binary nil +(defgroup ledger-exec nil "Interface to the Ledger command-line accounting program." :group 'ledger) @@ -7,27 +7,28 @@ :type 'file :group 'ledger) -(defvar ledger-delete-after nil) +(defun ledger-exec-ledger (input-buffer &optional output-buffer &rest args) + "Run Ledger." + (if (null ledger-binary-path) + (error "The variable `ledger-binary-path' has not been set")) + (let ((buf (or input-buffer (current-buffer))) + (outbuf (or output-buffer + (generate-new-buffer " *ledger-tmp*")))) + (with-current-buffer buf + (let ((coding-system-for-write 'utf-8) + (coding-system-for-read 'utf-8)) + (apply #'call-process-region + (append (list (point-min) (point-max) + ledger-binary-path nil outbuf nil "-f" "-") + args))) + outbuf))) -(defun ledger-run-ledger (buffer &rest args) - "run ledger with supplied arguments" - ;; Let's try again, just in case they moved it while we were sleeping. - (cond - ((null ledger-binary-path) - (error "The variable `ledger-binary-path' has not been set")) - (t - (let ((buf (current-buffer))) - (with-current-buffer buffer - (let ((coding-system-for-write 'utf-8) - (coding-system-for-read 'utf-8)) - (apply #'call-process-region - (append (list (point-min) (point-max) - ledger-binary-path ledger-delete-after - buf nil "-f" "-") - args)))))))) - -(defun ledger-run-ledger-and-delete (buffer &rest args) - (let ((ledger-delete-after t)) - (apply #'ledger-run-ledger buffer args))) +(defun ledger-exec-read (&optional input-buffer &rest args) + (with-current-buffer + (apply #'ledger-exec-ledger input-buffer nil "emacs" args) + (goto-char (point-min)) + (prog1 + (read (current-buffer)) + (kill-buffer (current-buffer))))) (provide 'ldg-exec) |