From: Andreas Leha <andreas.leha@med.uni-goettingen.de>
To: emacs-orgmode@gnu.org
Subject: Re: [babel] feature request: debug messages
Date: Sat, 20 Jul 2013 17:33:28 +0200 [thread overview]
Message-ID: <87d2qdb60n.fsf@med.uni-goettingen.de> (raw)
In-Reply-To: 87hafpb6fr.fsf@med.uni-goettingen.de
Andreas Leha <andreas.leha@med.uni-goettingen.de> writes:
> Andreas Leha <andreas.leha@med.uni-goettingen.de> writes:
>
>> Hi Eric,
>>
>>
>> Eric Schulte <schulte.eric@gmail.com> writes:
>>
>>> Andreas Leha <andreas.leha@med.uni-goettingen.de> writes:
>>>
>>>> Hi Eric,
>>>>
>>>>
>>>> Eric Schulte <schulte.eric@gmail.com> 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 <andreas.leha@med.uni-goettingen.de> 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
next prev parent reply other threads:[~2013-07-20 15:33 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-03 19:58 [babel] feature request: debug messages Andreas Leha
2013-07-03 22:55 ` Eric Schulte
2013-07-04 6:42 ` Andreas Leha
2013-07-04 14:48 ` Eric Schulte
2013-07-06 16:00 ` Andreas Leha
2013-07-07 17:08 ` Eric Schulte
2013-07-07 19:24 ` Andreas Leha
2013-07-08 2:03 ` Eric Schulte
2013-07-20 15:11 ` Andreas Leha
2013-07-20 15:24 ` Andreas Leha
2013-07-20 15:33 ` Andreas Leha [this message]
2013-07-23 22:12 ` Eric Schulte
2013-07-25 8:14 ` Andreas Leha
2013-07-25 13:37 ` Eric Schulte
2013-07-25 15:18 ` Andreas Leha
2013-07-25 16:07 ` Eric Schulte
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87d2qdb60n.fsf@med.uni-goettingen.de \
--to=andreas.leha@med.uni-goettingen.de \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).