emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] Re: [babel] ledger tutorial on Worg


From: Eric Schulte
Subject: Re: [Orgmode] Re: [babel] ledger tutorial on Worg
Date: Wed, 08 Sep 2010 16:46:57 -0600
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

Sébastien Vauban <address@hidden> writes:

> Hi Eric,
>
> "Eric Schulte" wrote:
>> Sébastien Vauban <address@hidden> writes:
>>> "Eric Schulte" wrote:
>>>> Sébastien Vauban <address@hidden> writes:
>>>>> "Eric Schulte" wrote:
>>>>>> Sébastien Vauban <address@hidden> writes:
>>>>>>>
>>>>>>> 2. When the evaluation produces no output, but had well produced output
>>>>>>>    before, shouldn't Babel have to delete the previously written
>>>>>>>    results in the Org buffer?
>>>>>>
>>>>>> This is a good point. Currently Babel just quits if it receives a nil
>>>>>> result, but I think you're right that we should replace existing results
>>>>>> when a nil result has been returned. I'll add this as PROPOSED to the
>>>>>> babel task list.
>>>>>
>>>>> I consider this kind of mandatory, for the sake of coherency, and to
>>>>> really make use of Org-babel every time I want to run some shell commands
>>>>> (and change them, eventually getting no results then).
>>>>
>>>> I've just pushed up a change that implements this behavior.
>>>
>>> From my point of view, it does not work yet. Take this example:
>>>
>>> With `:cmdline reg unknown', it produced the line with -21.91 EUR. Correct.
>>>
>>> Now, if I write `:cmdline "reg" unknown', I expect no output from Ledger,
>>> and thus the results block to be removed. That's not the case.
>>
>> If ledger throws an exception then the result probably will not be replaced,
>> however if ledger does return an empty result, then the existing result will
>> be removed.
>
> What do you mean by ledger throwing an exception?  Having a return code
> different from 0?
>

Yes, that's exactly what I mean.

>
> For me, the result block should be removed in both cases:
> - "exception" of ledger
> - empty result of ledger
>
> Or, if not, then (even better): instead of simply removing the result block,
> replace it with a sort of error message, saying that ledger's execution failed
> and returned XXX as exit code.
>

This is what we used to do (insert the error output into the buffer as
results), however we now treat error messages and STDOUT differently,
and Babel /should/ notify you of error output and then abort the
evaluation chain.

>
> Whatever the solution, we have to clearly be aware that the previous
> results are now wrong, and that the new result is a failure or empty.
>

Agreed, this notification should be done through a pop-up buffer of the
error output (however the previous results are retained because at least
when they were generated they were not an error).  Also, returning the
error results could cause problems in the case of chained code blocks.

I don't have a local ledger install, and I didn't implement the Babel
ledger support, but I've made some changes to ob-ledger so that it now
uses the general Babel external evaluation tools (which should raise
errors as I've mentioned above).  Could you give this patch (attached) a
try and let me know if it improves the behavior you're seeing?

diff --git a/lisp/ob-ledger.el b/lisp/ob-ledger.el
index edd803f..ddaa93a 100644
--- a/lisp/ob-ledger.el
+++ b/lisp/ob-ledger.el
@@ -38,6 +38,7 @@
 
 ;;; Code:
 (require 'ob)
+(require 'ob-eval)
 (require 'org)
 
 (defvar org-babel-default-header-args:ledger
@@ -48,15 +49,13 @@
   "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-"))
-       )
+  (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-"))
+        (cmd (concat "ledger -f " in-file " " cmdline " > " out-file)))
     (with-temp-file in-file (insert body))
-    (message (concat "ledger -f " in-file " " cmdline))
-    (with-output-to-string
-      (shell-command (concat "ledger -f " in-file " " cmdline " > " out-file)))
+    (message cmd) (org-babel-eval cmd "")
     (with-temp-buffer (insert-file-contents out-file) (buffer-string))))
 
 (defun org-babel-prep-session:ledger (session params)
>
>
>>> Other peculiarity, if I write `:cmdline reeg unknown', I get an
>>> exception:
>>
>> Ah, thanks for pointing this out, it seems I introduced an error with my
>> previous change. I've just pushed up a fix for this issue.
>
> Thanks. But right now, I don't get anything back from the following (same as
> for thread about isodoc letters):
>

After updating Org-mode are you running make clean && make (and maybe
make install) to clear out the old compiled elisp files?

Best -- Eric

>
> #+srcname: ledger-journal
> #+begin_src ledger
> 2008/01/03 * (SCORPIOS ) SEB VAUBAN
>       Assets:Bank:Checking:799997400530                               550.00 
> EUR
>       Assets:Bank:Transferred
>
> 2008/01/01 * ( ) UNKNOWN-PAYEE
>       Assets:Bank:Checking:799997400530                                21.91 
> EUR
>       Expenses:Unknown
> #+end_src
>
> #+srcname: ledger-registry
> #+begin_src ledger :cmdline reg unknown :noweb yes :session
> <<ledger-journal>>
> #+end_src
>
> In the *Messages* buffer, I get:
>
> Checking for library `filladapt'... Found
> Fontifying scorpios.org... 
> (regexps.............................................)
> Checking for library `filladapt'... Found
> Fontifying scorpios.org... 
> (regexps..............................................)
> Checking for library `filladapt'... Found
> Fontifying scorpios.org... 
> (regexps...............................................)
> Checking for library `filladapt'... Found
> Checking for library `filladapt'... Found
> Org-mode restarted
> Local setup has been refreshed
>
> ... but no result block is added in my Org buffer.
>
> I'll carefully test all of this, as soon as I can re-execute Babel under
> normal conditions.
>
> Thanks for your help.
>
> Best regards,
>   Seb

reply via email to

[Prev in Thread] Current Thread [Next in Thread]