emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [O] [babel] feature request: debug messages


From: Andreas Leha
Subject: Re: [O] [babel] feature request: debug messages
Date: Sat, 20 Jul 2013 17:24:24 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux)

Andreas Leha <address@hidden> writes:

> Hi Eric,
>
>
> Eric Schulte <address@hidden> writes:
>
>> Andreas Leha <address@hidden> writes:
>>
>>> Hi Eric,
>>>
>>>
>>> Eric Schulte <address@hidden> writes:
>>>
>>>> Hi Andreas,
>>>>
>>>> This should be easy to turn on or off using the newly introduced
>>>> :prologue and :epilogue header arguments.  See the manual and the
>>>> following example.
>>>>
>>>> #+Title: debug messages
>>>> #+Property: session *R*
>>>> #+Property: prologue (format "print(\"entering %s\")" (get-current-name))
>>>>
>>>> An elisp block to simplify the =:prologue= definition.
>>>> #+begin_src emacs-lisp
>>>>   (defun get-current-name ()
>>>>     (save-excursion
>>>>       (goto-char org-babel-current-src-block-location)
>>>>       (while (and (forward-line -1)
>>>>                   (looking-at org-babel-multi-line-header-regexp)))
>>>>       (when (looking-at org-babel-src-name-w-name-regexp)
>>>>         (org-no-properties (match-string 3)))))
>>>> #+end_src
>>>>
>>>> Two blocks with simple assignments.
>>>>
>>>> #+name: block-1
>>>> #+begin_src R
>>>>   x <- 2 + 2
>>>> #+end_src
>>>>
>>>> #+name: block-2
>>>> #+begin_src R
>>>>   y <- x + x
>>>> #+end_src
>>>>
>>>> Execute the whole buffer =C-c C-v b= to see the prologue in action.
>>>>
>>>> Andreas Leha <address@hidden> writes:
>>>>
>>>>> Hi all,
>>>>>
>>>>> I would love to see messages like 'entering block foo...' and
>>>>> '...leaving block foo' printed to my R console.  This would be very
>>>>> handy when I evaluate a subtree (C-c C-v s) with a lot of #+call lines
>>>>> and some lengthy ones.
>>>>>
>>>>> I know that
>>>>> (1) I could implement that myself at in the source blocks.  But I would
>>>>>     love if orgmode did that for me
>>>>> (2) Such messages are already printed to the emacs *Messages* buffer.
>>>>>     But that buffer might not be visible and I can not switch to it,
>>>>>     without interrupting the evaluation.  Anyway it would be much nicer
>>>>>     to see that output together with the other output, that my code
>>>>>     generates.
>>>>>
>>>>>
>>>>> In essence it would be very helpful, if there was a variable
>>>>> org-babel-print-debug-messages (or org-babel-debug-level...) which if
>>>>> non-nil would cause that messages to be printed.  Or is there somewhere
>>>>> already?
>>>>>
>>>>> Regards,
>>>>> Andreas
>>>>>
>>>>>
>>>>>
>>>>>
>>>
>>>
>>> thanks for the quick answer!  The :prologue and :epilogue header
>>> arguments have indeed slipped my attention and they look really
>>> interesting!  I see, that they are documented, but somehow, they seem to
>>> not get their headline and TOC entry?
>>>
>>> I have three problems with your example, though:
>>> 1) It does not run
>>> 2) It does not work
>>> 3) It won't be usable for 'my' epilogue, correct?
>>> ;-)
>>>
>>
>> Ah! My fault.  I had to add prologue and epilogue support to ob-R.el
>> when working through the example I sent, but then I forgot to commit
>> that support to Org-mode.  I've just pushed up that commit, and
>> re-worked my example file to avoid the issue of prologue being applied
>> to the emacs-lisp code block (using the very nice and also new
>> language-specific PROPERTY header arguments).
>>
>> Finally, I don't use epilogues in the example because (as the last thing
>> evaluated) they would override the code block results.
>>
>> Hopefully the following:
>> 1. will run
>> 2. will work
>> 3. will be usable
>>
>> Cheers,
>>
>> #+Title: debug messages
>> #+Property: header-args:R :session *R* :prologue (format "print(\"entering 
>> %s\")" (get-current-name))
>>
>> An elisp block to simplify the =:prologue= definition.
>> #+begin_src emacs-lisp :results silent
>>   (defun get-current-name ()
>>     (save-excursion
>>       (goto-char org-babel-current-src-block-location)
>>       (while (and (forward-line -1)
>>                   (looking-at org-babel-multi-line-header-regexp)))
>>       (when (looking-at org-babel-src-name-w-name-regexp)
>>         (org-no-properties (match-string 3)))))
>> #+end_src
>>
>> Two blocks with simple assignments.
>>
>> #+name: block-1
>> #+begin_src R
>>   x <- 2 + 2
>> #+end_src
>>
>> #+RESULTS: block-1
>> : 4
>> #+name: block-2
>> #+begin_src R
>>   y <- x + x
>> #+end_src
>>
>> #+RESULTS: block-2
>> : 8
>>
>> Execute the whole buffer =C-c C-v b= to see the prologue in action.
>>
>>>
>>> 1)
>>> It does not run, because org tries to do the prologue also on the
>>> emacs-lisp block defining the function of the prologue.  So, I get
>>> "format: Symbol's function definition is void: get-current-name"
>>> I changed the #+property line to
>>> #+Property: header-args:R :prologue (format "print(\"entering %s\")" 
>>> (get-current-name))
>>> which solved that problem.
>>>
>>> 2)
>>> But still it does not work: This is what I get in my *R* buffer:
>>> --8<---------------cut here---------------start------------->8---
>>>
>>> R version 3.0.1 (2013-05-16) -- "Good Sport"
>>> Copyright (C) 2013 The R Foundation for Statistical Computing
>>> Platform: x86_64-pc-linux-gnu (64-bit)
>>>
>>> R ist freie Software und kommt OHNE JEGLICHE GARANTIE.
>>> Sie sind eingeladen, es unter bestimmten Bedingungen weiter zu verbreiten.
>>> Tippen Sie 'license()' or 'licence()' für Details dazu.
>>>
>>> R ist ein Gemeinschaftsprojekt mit vielen Beitragenden.
>>> Tippen Sie 'contributors()' für mehr Information und 'citation()',
>>> um zu erfahren, wie R oder R packages in Publikationen zitiert werden 
>>> können.
>>>
>>> Tippen Sie 'demo()' für einige Demos, 'help()' für on-line Hilfe, oder
>>> 'help.start()' für eine HTML Browserschnittstelle zur Hilfe.
>>> Tippen Sie 'q()', um R zu verlassen.
>>>
>>> [1] "C"
>>> filehash: Simple key-value database (2.2-1 2012-03-12)
>>> tikzDevice: R Graphics Output in LaTeX Format (v0.6.2-92-0ad2792)
>>>   LaTeX found in the PATH using the command: pdflatex
>>>   XeLaTeX found in the PATH using the command: xelatex
>>>   LuaLaTeX found in the PATH using the command: lualatex
>>>> options(STERM='iESS', str.dendrogram.last="'", editor='emacsclient', 
>>>> show.error.locations=TRUE)
>>>>
>>>> > 
>>>> > 
>>> --8<---------------cut here---------------end--------------->8---
>>>
>>> I tried it with
>>> - Org-mode version 8.0.4 (release_8.0.4-294-g62f20c)
>>> - ess-version : 13.05-1 [<unknown>]
>>> - emacs -Q -l ~/.emacs.minimal.ess.org, whith that content:
>>> --8<---------------cut here---------------start------------->8---
>>> (add-to-list 'load-path
>>>                   "~/local/emacs/org-mode-install/lisp")
>>> (add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
>>>
>>> (add-to-list 'load-path "~/local/emacs/ess/lisp")
>>> (require 'ess-site)
>>>
>>> (setq org-babel-load-languages '((emacs-lisp . t)
>>>                              (R . t)
>>>                              (sh . t)))
>>> --8<---------------cut here---------------end--------------->8---
>>>
>>> What am I missing?  (BTW: If I put a print("sth") into the R blocks
>>> myself, I see that printed)
>>>
>>>
>>> 3)
>>> Even if it did run, I guess putting sth similar for 'leaving code block
>>> foo' into the epilogue would spoil the return value of my src blocks,
>>> correct?
>>> Is there some work-around?
>>>
>>>
>>>
>>> Regards,
>>> Andreas
>>>
>>>
>>>
>
>
> Could that awesome setup be extended to work on #+call lines as well?
> That would be really helpful.
>
> The get-current-name does not work for #+call lines:
>
> #+Title: debug messages
> #+Property: header-args:R :session *R* :prologue (format "print(\"entering 
> %s\")" (get-current-name))
>
> An elisp block to simplify the =:prologue= definition.
> #+begin_src emacs-lisp :results silent
>   (defun get-current-name ()
>     (save-excursion
>       (goto-char org-babel-current-src-block-location)
>       (while (and (forward-line -1)
>                   (looking-at org-babel-multi-line-header-regexp)))
>       (when (looking-at org-babel-src-name-w-name-regexp)
>         (org-no-properties (match-string 3)))))
> #+end_src
>
> Two blocks with simple assignments.
>
> #+name: block-1
> #+begin_src R
>   x <- 2 + 2
> #+end_src
>
> #+results: block-1
> : 4
>
>
>
> #+name: block-2
> #+begin_src R
>   y <- x + x
> #+end_src
>
> #+results: block-2
> : 8
>
> #+call: block-1()
>
> #+results:
> : 4
>
>
> Execute the whole buffer =C-c C-v b= to see the prologue in action.
>
> Regards,
> Andreas


Just as an add-on.  It does work with *named* #+call lines.

Regards,
Andreas




reply via email to

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