[ESS] ess-dump-object-into-edit-buffer

Patrick Connolly p_conno||y @end|ng |rom @||ng@hot@co@nz
Mon Apr 16 11:10:39 CEST 2018


This is about the shortest I can get that shows what happens: Just
what the example function does is not material to my question.

<example>

## from the bash prompt

mkdir ~/Temp/First
cd ~/Temp/First
emacs &
# start R using M-x R

## within the *R* buffer make a short function

bringLibrary <-
function(lastR = "3.0.2", latestR = "3.1.0", Rloc = "~/local/"){
### Purpose:- Bring library from older R version to newer one.
###           (Idea is to then update the packages that need to be)
### ----------------------------------------------------------------------
### Modified from:- 
### ----------------------------------------------------------------------
### Arguments:- lastR: version of R that has the packages desired
###             latestR: latest version of R of interest
###             Rloc: where R versions are located (probably not the default)
###                    Make sure there's a trailing "/"
### ----------------------------------------------------------------------
### Author:-   Patrick Connolly, Date:- 29 May 2014, 11:08
### ----------------------------------------------------------------------
### Revisions:- 22/08/14 fixed mistaken swap of lastR & latestR
###             15/10/15 location of R installions made adjustable
###             7//2017 Rloc changed back to ~/local
  now <- system(paste0("ls ", Rloc, "R-", latestR, "/library"), TRUE)
  was <- system(paste0("ls ", Rloc, "R-", lastR, "/library"), TRUE)
  need <- was[!is.element(was, now)]
### Check if it's already been done
  if(length(need) < 1)
    stop("Nothing in R-", lastR, " that isn't already in R-", latestR, ".\n")
  for(i in need) # reason for running this function
    system(paste0("cp -prv ", Rloc, "R-", lastR, "/library/", i, " ", Rloc,
                  "R-", latestR, "/library/"))
### Notify it's finished and give pastable text to update copied packages 
  cat(length(need), " packages copied into R-", latestR,
      " directory.\nProbably a good idea to start R-", latestR,
      " and run\n  update.packages(checkBuilt = TRUE, ask = FALSE)\n", sep = "")
}



## now save and exit then start in another directory:

>   q()
Save workspace image? [y/n/c]: y

## from the bash prompt
mkdir ~/Temp/Second
cd ~/Temp/Second
emacs &
# start R using M-x R

## Within the *R* buffer
> attach("../First/.RData")
> ls(pos = 2)
[1] "bringLibrary" "repos"

## Then
'M-x
ess-dump-object-into-edit-buffer <ret> bringLibrary <ret>' 

bringLibrary <-
function(lastR = "3.0.2", latestR = "3.1.0", Rloc = "~/local/")
{
### Purpose:- Bring library from older R version to newer one.
###           (Idea is to then update the packages that need to be)
  ...


## but in the *R* buffer all code and comment are there.

> bringLibrary
function(lastR = "3.0.2", latestR = "3.1.0", Rloc = "~/local/")
{
### Purpose:- Bring library from older R version to newer one.
###           (Idea is to then update the packages that need to be)
### ----------------------------------------------------------------------
### Modified from:- 
### ----------------------------------------------------------------------
### Arguments:- lastR: version of R that has the packages desired
###             latestR: latest version of R of interest
###             Rloc: where R versions are located (probably not the default)
###                    Make sure there's a trailing "/"
### ----------------------------------------------------------------------
### Author:-   Patrick Connolly, Date:- 29 May 2014, 11:08
### ----------------------------------------------------------------------
### Revisions:- 22/08/14 fixed mistaken swap of lastR & latestR
###             15/10/15 location of R installions made adjustable
###             7//2017 Rloc cchanged back to ~/local
  now <- system(paste0("ls ", Rloc, "R-", latestR, "/library"), TRUE)
  was <- system(paste0("ls ", Rloc, "R-", lastR, "/library"), TRUE)
  need <- was[!is.element(was, now)]
### Check if it's already been done
  if(length(need) < 1)
    stop("Nothing in R-", lastR, " that isn't already in R-", latestR, ".\n")
  for(i in need) # reason for running this function
    system(paste0("cp -prv ", Rloc, "R-", lastR, "/library/", i, " ", Rloc,
                  "R-", latestR, "/library/"))
### Notify it's finished and give pastable text to update copied packages 
  cat(length(need), " packages copied into R-", latestR,
      " directory.\nProbably a good idea to start R-", latestR,
      " and run\n  update.packages(checkBuilt = TRUE, ask = FALSE)\n", sep = "")
}
<bytecode: 0x709b6b0>

</example>

## Initially this example function was made by 'M-x 
ess-dump-object-into-edit-buffer <ret> bringLibrary <ret>' 
That produced a blank file into which the skeleton function was 
dumped using 'C-c f' which I find very handy.  


In this case it's not very tedious to paste the requisite code into
the edit function buffer, but for longer functions (often found in
packages) if I want to make a local copy to edit, it is very tedious
-- particularly when the comments are all stripped and placed in a
list.  I've not been able to see the pattern to when that happens
that's different from when it doesn't.

This part of my .emacs file might be relevant:

(custom-set-variables
  ;; custom-set-variables was added by Custom -- don't edit or cut/paste it!
  ;; Your init file should contain only one such instance.
 '(inferior-ess-dump-command "dump(\"%s\",file=\"%s\", control=\"useSource\")
")
'(ess-source-directory "./.tmp")
 '(load-home-init-file t t))

Ideas as to where I should look are welcome.

best
Patrick

On Thu, 12-Apr-2018 at 11:08PM -0400, Ista Zahn wrote:

|> Hi Patrick,
|> 
|> I don't use ess-dump-object-into-edit-buffer, so I'm not sure what
|> exactly you expect it to do. A specific example would help, i.e., a
|> description of exactly what you did, exactly what happened, and how
|> what happened differed from you expectation.
|> 
|> For example, if I start R with 'M-x R <ret>' and do 'M-x
|> ess-dump-object-into-edit-buffer <ret> getwd <ret>' I see a new buffer
|> is created containing
|> 
|> getwd <-
|>     function ()
|>         .Internal(getwd())
|> 
|> Is that what you see? If so, how does it differ from what you expect?
|> If you see something different, how does your setup differ from mine?
|> I'm running Emacs 25.3 and ESS 17.11 [elpa: 20180412.315]
|> 
|> Best,
|> Ista
|> 
|> On Thu, Apr 12, 2018 at 7:19 PM, Patrick Connolly
|> <p_connolly using slingshot.co.nz> wrote:
|> > Thanks Ista.
|> >
|> > The result is not the same, but it's equally useless.  It produces almost
|> > the same as typing the name of the function and pressing <Enter>. That is to
|> > say, unless the function has been edited in the working directory, it lists
|> > all the code without any of the comments almost in the form of a list
|> > element labelled "structure" and a second element labelled "source" which
|> > contains all the source in the form of a character vector.   Quite a lot of
|> > text wrangling is required to get that text into the form of an editable
|> > function.
|> >
|> > There is a slight difference from what results from typing the function name
|> > and pressing <Enter>  in that the word "structure" is not in the latter and
|> > the source is an attr.
|> >
|> > (I say "almost" because neither form is exactly the same as how a list is
|> > displayed.)
|> >
|> > Is that intended behaviour?
|> >
|> > TIA
|> > Patrick
|> >
|> > On 04/13/2018 01:48 AM, Ista Zahn wrote:
|> >
|> > On Thu, Apr 12, 2018 at 3:56 AM, Patrick Connolly
|> > <p_connolly using slingshot.co.nz> wrote:
|> >
|> > Thanks for the response, however, if I start Emacs with a '-q' none of
|> > my ~/.emacs file is read, so Emacs doesn't know how to start R.  More
|> > to the point, I'm unable to run R within Emacs any other way.
|> >
|> > The usual recipe is to start with emacs -q and then evaluate
|> >
|> > (package-initialize)
|> > (require 'ess-site)
|> >
|> > in the scratch buffer, then check to see if you can reproduce the bug.
|> > If you have ESS installed in a way that it is not in your load-path by
|> > default you may have to do something along the lines of
|> >
|> > (add-to-list 'load-path "/path/to/ESS/lisp/")
|> > (load "ess-site")
|> >
|> > Best,
|> > Ista
|> >
|> >
|> >
|> > I gather there is a way of applying individual lines of the .emacs
|> > files but a bear with a small brain doesn't know how to do that (or
|> > where to look in the manual how to do it),
|> >
|> > It would appear, if it doesn't reproduce, that the problem is
|> > somewhere in my .emacs file.  That's a hodge-podge of various things
|> > I've picked up over the decades so it wouldn't be surprising to find
|> > some incompatibilities.
|> >
|> > Ideas appreciated.
|> >
|> >
|> > On Wed, 11-Apr-2018 at 07:44AM -0400, Ista Zahn wrote:
|> >
|> > |> I can't reproduce it with the latest ESS from melpa. Can you give
|> > |> reproduction steps starting with
|> > |>
|> > |> emacs -q
|> > |>
|> > |> ?
|> > |>
|> > |> --Ista
|> > |>
|> > |> On Wed, Apr 11, 2018 at 4:58 AM, Patrick Connolly
|> > |> <p_connolly using slingshot.co.nz> wrote:
|> > |> > For a long time I used to be able to use
|> > |> >
|> > |> > ess-dump-object-into-edit-buffer
|> > |> >
|> > |> > to create a buffer that could be used to edit the designated function
|> > |> > from anywhere on the search path to make a local version.
|> > |> >
|> > |> > Starting at about ess-15.x, only the first 5 or so lines of code is
|> > |> > made available which I took to be a bug that would be fixed.  However,
|> > |> > I was mistaken.  I installed ess-17.11 and it's still the same.  Being
|> > |> > a bear with only a small brain, I can't imagine what use that would be
|> > |> > if it's what is intended.
|> > |> >
|> > |> > Could it be that there is an additional setting that allows all of the
|> > |> > function (including comments) to be dumped into that buffer?  Perhaps,
|> > |> > more difficult to track down, I have something else in my ~/.emacs
|> > |> > file that is incompatible.
|> > |> >
|> > |> > TIA for suggestions.
|> > |> >
|> > |> > --
|> > |> >
|> > ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.
|> > |> >    ___    Patrick Connolly
|> > |> >  {~._.~}                   Great minds discuss ideas
|> > |> >  _( Y )_                 Average minds discuss events
|> > |> > (:_~*~_:)                  Small minds discuss people
|> > |> >  (_)-(_)                              ..... Eleanor Roosevelt
|> > |> >
|> > |> >
|> > ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.
|> > |> >
|> > |> > ______________________________________________
|> > |> > ESS-help using r-project.org mailing list
|> > |> > https://stat.ethz.ch/mailman/listinfo/ess-help
|> >
|> > --
|> > ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.
|> >    ___    Patrick Connolly
|> >  {~._.~}                   Great minds discuss ideas
|> >  _( Y )_                 Average minds discuss events
|> > (:_~*~_:)                  Small minds discuss people
|> >  (_)-(_)                              ..... Eleanor Roosevelt
|> >
|> > ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.
|> >
|> >

-- 
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.   
   ___    Patrick Connolly   
 {~._.~}                   Great minds discuss ideas    
 _( Y )_  	         Average minds discuss events 
(:_~*~_:)                  Small minds discuss people  
 (_)-(_)  	                      ..... Eleanor Roosevelt
	  
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.




More information about the ESS-help mailing list