[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Orgmode] Re: [Babel] Handling of errors when using Ledger
From: |
Dan Davison |
Subject: |
[Orgmode] Re: [Babel] Handling of errors when using Ledger |
Date: |
Thu, 23 Dec 2010 10:28:51 +0000 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (darwin) |
Eric S Fraga <address@hidden> writes:
> Dan Davison <address@hidden> writes:
>
>> Eric S Fraga <address@hidden> writes:
>>
>>> Dan <address@hidden> writes:
>>>
>>> [...]
>>>
>>>> This patch should make ob-ledger use the common org-babel error mechanism.
>>>> It is
>>>> in branch ledger of the main repo. However, I'm not yet a ledger user.
>>>> Could
>>>> someone test it?
>>>
>>> Unfortunately, it doesn't work at all [1] for a very simple reason: you
>>> have removed the -f option which specifies the file that ledger should
>>> read.
>>
>> Hi Eric,
>>
>> Yes, ob-eval passes the src block body to the interpreter on standard
>> input. I assumed that ledger would be able to read its transaction data
>> from standard input. Is that not the case? What about with "--file -"
>> or "-f -"?
>
>> [...]
>
>> If ledger can't read the src blocks body from stdin (and if it can't, I
>> expect there's a good reason why not), then maybe this is a motivation
>> for changing ob-eval so that the block body is read from file.
>
> Indeed, ledger cannot read from standard input.
Hi Eric,
I've asked on the ledger list and the 3.0 (and perhaps some older)
versions of ledger do support -f - to read from stdin. Could you try
this version of the patch?
Thanks,
Dan
diff --git a/lisp/ob-ledger.el b/lisp/ob-ledger.el
index a02eb6f..ef0f52e 100644
--- a/lisp/ob-ledger.el
+++ b/lisp/ob-ledger.el
@@ -43,24 +43,15 @@
'((:results . "output") (:cmdline . "bal"))
"Default arguments to use when evaluating a ledger source block.")
+(defvar org-babel-ledger-command "ledger"
+ "Command to invoke ledger")
+
(defun org-babel-execute:ledger (body params)
"Execute a block of Ledger entries with org-babel. This function is
called by `org-babel-execute-src-block'."
- (message "executing Ledger source code block")
- (let ((result-params (split-string (or (cdr (assoc :results params)) "")))
- (cmdline (cdr (assoc :cmdline params)))
- (in-file (org-babel-temp-file "ledger-"))
- (out-file (org-babel-temp-file "ledger-output-")))
- (with-temp-file in-file (insert body))
- (message (concat "ledger"
- " -f " (org-babel-process-file-name in-file)
- " " cmdline))
- (with-output-to-string
- (shell-command (concat "ledger"
- " -f " (org-babel-process-file-name in-file)
- " " cmdline
- " > " (org-babel-process-file-name out-file))))
- (with-temp-buffer (insert-file-contents out-file) (buffer-string))))
+ (org-babel-eval
+ (concat org-babel-ledger-command " -f - " (cdr (assoc :cmdline params)))
+ body))
> From the man page:
>
> ,----
> | All commands require a Ledger data file which can be specified with -f
> | filename or via the LEDGER_FILE environment variable.
> `----
>
> and later:
>
> ,----
> | -f, --file FILE
> |
> | Reads FILE as a Ledger file. This option may be specified multiple
> | times. FILE may also be a list of file names separated by colons.
> | Typically, the environment variable LEDGER_FILE is set rather than
> | using this command-line option.
> `----
>
> Using an environment variable is not a good or viable solution for
> babel, as far as I can figure, and there does not seem to be any concept
> of "-" for standard input in lieu of a file. I cannot see any reason
> for this and, to be honest, I find it annoying [1] as a long time Unix user
> wishing to join tools together with pipes etc. But maybe John Wiegley
> had his reasons for taking this decision. Maybe he can comment on
> this... I think he reads this list?
>
>> Incidentally, I have for a long time wondered whether we should permit
>> src blocks to read *input data* from standard input. This would require
>> altering ob-eval such that the src block body is read from file. Then we
>> could do things like
>>
>> #+source: output-some-text
>> #+begin_src sh :results output
>> # print stuff
>> #+end_src
>> #+begin_src perl :stdin output-some-text
>> while ( <> ) {
>> # process the text
>> }
>> #+end_src
>
> This could be a solution. In thinking about all of my babel uses, this
> would have no impact on me but others may have different opinions? It
> would seem to be a safer route in any case?
>
> Thanks,
> eric
>
>
> Footnotes:
> [1] but not annoying enough to stop using ledger, of course, as it's a
> brilliant tool otherwise!
- [Orgmode] Re: [Babel] Handling of errors when using Ledger,
Dan Davison <=