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: Thu, 25 Jul 2013 10:14:15 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux)

Eric Schulte <address@hidden> writes:

> Andreas Leha <address@hidden> writes:
>
>> Andreas Leha <address@hidden> writes:
>>
>>> 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
>>
>>
>> Sorry for continuously answering my own post.
>>
>> There is another problem with that solution:  I can not edit a source
>> code buffer with C-'
>> ,----
>> | save-excursion: Wrong type argument: integer-or-marker-p, nil
>> `----
>>
>> Regards,
>> Andreas
>>
>>
>
> This version should
> - not throw an error when no code block is being executed, and
> - always return a string (even if there is no name)
>
>   #+begin_src emacs-lisp :results silent
>     (defun get-current-name ()
>       (or (when org-babel-current-src-block-location
>             (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
>
> Hopefully this helps,


This helps a lot.  Thanks!  Now, I will this into all my org files.

Cheers,
Andreas






reply via email to

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