[ESS] edit.vignette

Erik Iverson iverson at biostat.wisc.edu
Thu Nov 6 19:22:54 CET 2008


Hello all -

I am using ESS, version 5.3.8, latest R.  I want to "edit" a vignette, 
i.e., see the R code associated with the vignette, and be able to send 
that code to my *R* buffer.

Example:

library(grid)
edit(vignette("grid"))

As my editor is emacsclient, this brings up the correct .R file in a 
buffer, and my *R* buffer shows "Waiting for Emacs".  Per a thread on 
this list, found at 
https://stat.ethz.ch/pipermail/ess-bugs/2006q2/000292.html

"edit(vignette(...)) works fine for me, the only thing that may be hard
to find out for users is that you have to press C-c C-c in the R
buffer to get back to the prompt (by default R waits for the file to
be closed), but once you have done that you can edit the vignette
code, send it line by line to R etc."

This sounds exactly like what I want.  The problem is, I switch over to 
the *R* buffer, do C-c C-c, and the buffer with the vignette with R code 
in is killed!  So I'm not able to replicate the behavior of the 
preceding paragraph.

Can anyone get that to work using the above process?

I did get what I want working by defining a function myemacs, as

myemacs <- function(file = "" , title = "") {
   system(paste(getOption("editor"), "-n", file))
}


and then calling edit.vignette like this:

edit(vignette("grid"), editor = myemacs)

This works because edit.vignette calls file.edit, which accepts a 
function name for the "editor" argument, but this solution relies on 
internal, undocumented behavior.

The key is the "-n" argument to emacsclient, which doesn't wait for the 
emacs server to return, thus the .R file is open, and the *R* buffer is 
waiting for input.

Thanks,
Erik Iverson




More information about the ESS-help mailing list