From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: [babel] feature request - tangle-and-evaluate-tangled-file Date: Fri, 16 Jul 2010 15:58:53 -0700 Message-ID: <87oce758zv.fsf@gmail.com> References: <871vbdu77i.fsf@gmail.com> <874og8irrn.fsf@gmail.com> <87mxtwbii5.fsf@gmail.com> <4C3C2064.5020209@googlemail.com> <4C3F0106.8060904@mail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from [140.186.70.92] (port=54071 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OZts2-0006Tx-QG for emacs-orgmode@gnu.org; Fri, 16 Jul 2010 18:59:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OZts1-0006Ol-4L for emacs-orgmode@gnu.org; Fri, 16 Jul 2010 18:59:06 -0400 Received: from mail-px0-f169.google.com ([209.85.212.169]:34757) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OZts0-0006Oa-Qg for emacs-orgmode@gnu.org; Fri, 16 Jul 2010 18:59:05 -0400 Received: by pxi7 with SMTP id 7so2498839pxi.0 for ; Fri, 16 Jul 2010 15:59:03 -0700 (PDT) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Rainer M Krug Cc: emacs-orgmode Hi Rainer, I've just pushed up a fix for the org-babel-post-tangle-hook. With a minimal org-babel configuration, if I open the following file. --8<---------------cut here---------------start------------->8--- ** tangle R and load :PROPERTIES: :tangle: to-load.r :END: evaluate this #+begin_src emacs-lisp :results silent :tangle no (add-hook 'org-babel-post-tangle-hook (lambda () (message "I'm in %s" (buffer-file-name)))) #+end_src then tangle #+begin_src R :comments yes x <- 8 #+end_src #+begin_src R y <- 9 #+end_src --8<---------------cut here---------------end--------------->8--- evaluate the emacs-lisp code block to initialize my post-tangle-hook, and then tangle the very same file, I see the following in my messages buffer, indicating that the correct file is now being visited. --8<---------------cut here---------------start------------->8--- Wrote /home/eschulte/Desktop/to-load.r [2 times] tangled 2 code blocks I'm in /home/eschulte/Desktop/to-load.r --8<---------------cut here---------------end--------------->8--- Hopefully this will now work for you as well. Thanks -- Eric Rainer M Krug writes: > On 13/07/2010 10:14, Dr Rainer M Krug wrote: >> On 12/07/2010 19:51, Eric Schulte wrote: >>> Rainer M Krug writes: >> >>>> Hi Eric, >>>> >>>> On Fri, Jul 9, 2010 at 5:44 PM, Eric Schulte wrote: >>>> >>>>> Hi Rainer, >>>>> >>>>> Rainer M Krug writes: >>>>> >>>>>> On Thu, Jul 8, 2010 at 9:03 PM, Eric Schulte >>>>> wrote: >>>>> [...] >>>>>>> >>>>>>> (add-hook 'org-babel-post-tangle-hook >>>>>>> (lambda () (ess-load-file (buffer-file-name)))) >>>>>>> >>>>>> >>>>>> Unfortunately, this does not work. I put the code above into my >>>>>> emacs.organd nothing happens - not even an error message. I tried to >>>>>> use the C-h v to customise the variable, but I don't manage it. >>>>> >>>>> If the variable isn't registered with C-h v, then it sounds like maybe >>>>> you need to update Org-mode, and/or re-run make clean && make. >>>>> >>>> >>>> OK - that is working now. >>>> >>>> >>>>> >>>>>> In addition, The filename for es-load-file shoud not be the buffer >>>>>> name, but the buffer name with the extension replaced with R. >>>>>> >>>>> >>>>> `buffer-file-name', returns the name of the file that the buffer is >>>>> visiting, so wouldn't this already be the case if the filename ends with >>>>> .R? >>>>> >>>> >>>> Isn't the buffer from which I am tangling the org buffer, and not the result >>>> from the tangling? (see below for further remarks. >>>> >> >>> No this hook is run from /within/ a buffer visiting the file of tangled >>> code, so in the example hook function above (buffer-file-name) will >>> equal the name of the file of tangled R code. From your later message >>> it looks like the issues below have been resolved. >> >> Thanks a lot for a very useful addition, and I will see abut the >> buffer-name and come back if it is still the org-file buffer for me, > > I finally tried it out, and it is still the same: when I tangle an org > file, for the hook as defined above, buffer-file-name is the org file. > > Cheers, > > Raienr > >> >> Rainer >> >> >>> Best -- Eric >> >>>> >>>> >>>>> >>>>> This minimal example with the hook defined as above works for me. After >>>>> tangling I can jump to the *R* buffer where both x and y are defined. >>>>> >>>>> --8<---------------cut here---------------start------------->8--- >>>>> ** tangle R and load >>>>> :PROPERTIES: >>>>> :tangle: to-load.r >>>>> :END: >>>>> >>>>> #+begin_src R :comments yes >>>>> x <- 8 >>>>> #+end_src >>>>> >>>>> #+begin_src R >>>>> y <- 9 >>>>> #+end_src >>>>> --8<---------------cut here---------------end--------------->8--- >>>>> >>>> >>>> Not here - >>>> >>>> Emacs and org-mode version: >>>> >>>> GNU Emacs 23.2.1 (i686-pc-linux-gnu, GTK+ Version 2.20.1) >>>> Org-mode version 6.36trans (release_6.36.603.g227b) >>>> >>>> 1) if no R process is running, I get the following message: >>>> ess-start-process-specific: No ESS processes running; not yet implemented to >>>> start (Initial,nil) >>>> No problem 0 I can start an R process manually. >>>> >>>> 2) when an R session is running, I get the following error message from ESS: >>>> Errors: Use C-c ` to find error. >>>> Symbol's function definition is void: with-temp-filebuffer >>>> >>>> and from ESS: >>>> >>>> Error in source("/home/rkrug/tmp/R.org") : >>>> /home/rkrug/tmp/R.org:1:1: unexpected '^' >>>> 1: ** >>>> >>>> it seems to submit the org file (the buffer is saved as R.org) to R. >>>> >>>> So buffer-file-name should actually be replaced with the name from the file >>>> name resulting from the tangling, in the easiest case (which would be fine >>>> with me) the org buffer name with .org replaced with .R. >>>> So I did the following (my firs elisp code!): >>>> >>>> (add-hook 'org-babel-post-tangle-hook >>>> (lambda () (ess-load-file (replace-regexp-in-string ".org" ".R" >>>> buffer-file-name)))) >>>> >>>> and it is working - except that I still get the Symbol's function definition >>>> is void: with-temp-filebuffer , but it does not seem to do anything. >>>> >>>> Thanks a lot, >>>> >>>> Rainer >>>> >>>> >>>> >>>> >>>> >>>>>> >>>>>> I am sorry about all these questions, but emacs-lisp I have never used >>>>>> emacs-lisp (I should - and I will!) >>>>>> >>>>> >>>>> No problem at all, but be careful about learning too much lisp as you >>>>> may begin to grow dissatisfied with R :) >>>>> >>>>> Best -- Eric >>>>> >>>>>> >>>>>> Cheers and thanks for your patience, >>>>>> >>>>>> Rainer >>>>>> >>>>>> >>>>>>> Best -- Eric >>>>>>> >>>>>>> Rainer M Krug writes: >>>>>>> >>>>>>>> Hi >>>>>>>> >>>>>>>> I am using org-babel for literate programming in R and I am using the >>>>>>>> following approach to test the code: >>>>>>>> >>>>>>>> 1) tangle >>>>>>>> 2) refresh buffer containing the tangled code (I use auto-revert-mode >>>>> or >>>>>>>> global-auto-revert-mode for that) >>>>>>>> 3) load the tangled file into an existing R session via ESS R for >>>>>>> evaluation >>>>>>>> >>>>>>>> This involves switching between buffers in always the same sequence. >>>>>>>> Therefore my suggestion: >>>>>>>> >>>>>>>> would it be possible to have a tangle-and-evaluate-tangled-file >>>>>>> funcction, >>>>>>>> which is doing this automatically? >>>>>>>> >>>>>>>> C-c - 0 and org-babel-execute-buffer do not work in this case, as >>>>>>> functions >>>>>>>> are split over several code blocks in R. >>>>>>>> >>>>>>>> Cheers, >>>>>>>> >>>>>>>> Rainer >>>>>>> >>>>> >>