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

2018-04-16 Thread Ista Zahn
Hi Patrick,

On Mon, Apr 16, 2018 at 5:10 AM, Patrick Connolly
 wrote:
> This is about the shortest I can get that shows what happens: Just
> what the example function does is not material to my question.

Can you reproduce this following only these instructions starting from
'emacs -q'? I cannot, i.e., it works as expected for me.



> (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))

This suggests to me that you did _not_ start with emacs -q, so indeed
you should start looking at your configuration to see where the
problem is. Did you try commenting out the 'ess-source-directory'
setting to see if that is the problem?

Best,
Ista

>
> 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 ' and do 'M-x
> |> ess-dump-object-into-edit-buffer  getwd ' 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
> |>  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 . 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   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
> |> >  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
> |> > |>  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.
> |> > |> >
> |> 

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

2018-04-16 Thread Patrick Connolly
This is about the shortest I can get that shows what happens: Just
what the example function does is not material to my question.



## 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  bringLibrary ' 

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 = "")
}




## Initially this example function was made by 'M-x 
ess-dump-object-into-edit-buffer  bringLibrary ' 
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