From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andreas Leha Subject: Re: [babel] feature request: debug messages Date: Sat, 20 Jul 2013 17:11:01 +0200 Message-ID: <87li51b722.fsf@med.uni-goettingen.de> References: <87y59n2z6b.fsf@med.uni-goettingen.de> <878v1njlsh.fsf@gmail.com> <87txka3jy8.fsf@med.uni-goettingen.de> <87zju2idny.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:38159) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V0YoW-0001pY-Du for emacs-orgmode@gnu.org; Sat, 20 Jul 2013 11:11:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V0YoU-0001Lr-M2 for emacs-orgmode@gnu.org; Sat, 20 Jul 2013 11:11:16 -0400 Received: from plane.gmane.org ([80.91.229.3]:33772) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V0YoU-0001Lm-B8 for emacs-orgmode@gnu.org; Sat, 20 Jul 2013 11:11:14 -0400 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1V0YoS-0001fE-Oe for emacs-orgmode@gnu.org; Sat, 20 Jul 2013 17:11:12 +0200 Received: from vpn-2100.gwdg.de ([134.76.2.100]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 20 Jul 2013 17:11:12 +0200 Received: from andreas.leha by vpn-2100.gwdg.de with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 20 Jul 2013 17:11:12 +0200 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org Hi Eric, Eric Schulte writes: > Andreas Leha writes: > >> Hi Eric, >> >> >> Eric Schulte 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 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 [] >> - 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: --8<---------------cut here---------------start------------->8--- #+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. --8<---------------cut here---------------end--------------->8--- Regards, Andreas