[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] [babel] feature request: debug messages
From: |
Eric Schulte |
Subject: |
Re: [O] [babel] feature request: debug messages |
Date: |
Tue, 23 Jul 2013 16:12:02 -0600 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) |
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,
--
Eric Schulte
http://cs.unm.edu/~eschulte
- Re: [O] [babel] feature request: debug messages, (continued)
- Re: [O] [babel] feature request: debug messages, Eric Schulte, 2013/07/03
- Re: [O] [babel] feature request: debug messages, Andreas Leha, 2013/07/04
- Re: [O] [babel] feature request: debug messages, Eric Schulte, 2013/07/04
- Re: [O] [babel] feature request: debug messages, Andreas Leha, 2013/07/06
- Re: [O] [babel] feature request: debug messages, Eric Schulte, 2013/07/07
- Re: [O] [babel] feature request: debug messages, Andreas Leha, 2013/07/07
- Re: [O] [babel] feature request: debug messages, Eric Schulte, 2013/07/07
- Re: [O] [babel] feature request: debug messages, Andreas Leha, 2013/07/20
- Re: [O] [babel] feature request: debug messages, Andreas Leha, 2013/07/20
- Re: [O] [babel] feature request: debug messages, Andreas Leha, 2013/07/20
- Re: [O] [babel] feature request: debug messages,
Eric Schulte <=
- Re: [O] [babel] feature request: debug messages, Andreas Leha, 2013/07/25
- Re: [O] [babel] feature request: debug messages, Eric Schulte, 2013/07/25
- Re: [O] [babel] feature request: debug messages, Andreas Leha, 2013/07/25
- Re: [O] [babel] feature request: debug messages, Eric Schulte, 2013/07/25