[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