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:33:28 +0200 Message-ID: <87d2qdb60n.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> <87li51b722.fsf@med.uni-goettingen.de> <87hafpb6fr.fsf@med.uni-goettingen.de> 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]:45414) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V0ZAF-00079L-PN for emacs-orgmode@gnu.org; Sat, 20 Jul 2013 11:33:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V0ZAD-0008B8-IW for emacs-orgmode@gnu.org; Sat, 20 Jul 2013 11:33:43 -0400 Received: from plane.gmane.org ([80.91.229.3]:53779) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V0ZAD-0008B4-6b for emacs-orgmode@gnu.org; Sat, 20 Jul 2013 11:33:41 -0400 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1V0ZAB-00026B-BR for emacs-orgmode@gnu.org; Sat, 20 Jul 2013 17:33:39 +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:33:39 +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:33:39 +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 Andreas Leha writes: > Andreas Leha writes: > >> 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: >> >> #+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