savehistory in OSX version
Thanks, Rob.
In the interests of wasting many hours to save a few seconds of hateful
clicking around,
I have written an applescript solution for saving the history.
It works (most of the time).
Why I want it: (a) automate my paranoia, (b) sometimes, to load
current history into a script window
to refine and save some juicy section of code.
(The latter can be done with loadHistory(file.choose()) followed by
history().)
The applescript below assumes
-- 1. there is a file "~/cred.Rdata" that contains
username and password as string objects (could be safer!)
(This is not necessary if you always have
Universal Access turned on.)
-- 2. there is the following function on your search path:
saveHistory=function(verbose=FALSE, echo=FALSE) {
if(is.na(match("file:~/cred.Rdata", search())))
attach("~/cred.Rdata")
if(verbose == FALSE)verbose = "false" ## arg in
else verbose = "true"
the.command = paste(
"nohup /usr/bin/osascript
~/R-applescript/saveHistory.app ",
Sys.Date(), ".history ", username, " ",
password, " ", verbose, " &\n", sep="")
## the "nohup" helps a lot
if(echo) cat(the.command)
system(the.command)
}
-- 3. you prefer "universal access" to be disabled
after this is done (this is easy to change).
-- 4. there is a compiled applescript file
~/R-applescript/saveHistory.app containing the following:
on run {historyfilename, myUserName, myPassword, verbose}
-- TO DO handle the "replace existing" case (but maybe it's
better this way!)
-- TO DO figure out why it is so SLOOOW-- much better if no
"say"s. (verbose=false)
-- TO DO sometimes the accessibility fix doesn't work even
though .AccessibilityAPIEnabled was created .
-- If so, set it by hand, using System
Preferences/Universal Access.
my enableAccessibility(myUserName, myPassword
if (verbose = true) then say "this is the app version"
tell application "System Events"
tell process "R.app"
if not (exists drawer 1 of window "R Console")
then
if (verbose = true) then say "beginning
to open the drawer"
click button "History" of tool bar 1 of
window "R Console"
if (verbose = true) then say "opening
the drawer"
-- delay 1
end if
if (verbose = true) then say "Now I am clicking
the Save History button"
click button "Save History" of drawer 1 of
window "R Console"
if (verbose = true) then say "Clicked."
tell window "Save history File"
if (verbose = true) then say "history
file name is " & historyfilename
--click text field 1
set value of text field 1 to
historyfilename
-- item 1 of argv is just the first
letter
if (verbose = true) then say "file name
is inserted"
-- It's necessary to enable the Save
button by clicking the dropdown button.
-- click text field 1 does not do the
job. Therefore...
if title of button 3 = "Cancel" then
-- file list is expanded-- hide
it!
click button 4
else
-- file list is hidden-- expand
it!
click button 3
end if
click button "Save"
-- An overwrite dialog might now appear.
-- This is left for user interaction.
end tell
end tell
end tell
my disableAccessibility(myUserName, myPassword)
end run
on enableAccessibility(myUserName, myPassword)
do shell script "echo a >
/private/var/db/.AccessibilityAPIEnabled" user name myUserName password
myPassword with administrator privileges
end enableAccessibility
on disableAccessibility(myUserName, myPassword)
try
do shell script "/bin/rm
/private/var/db/.AccessibilityAPIEnabled" user name myUserName password
myPassword with administrator privileges
end try
end disableAccessibility
---------------------------
Enjoy, but no warranty of perfection or promise of support is expressed
or implied!
-----------------
Roger Day
University of Pittsburgh Departments of Biomedical Informatics and
Biostatistics
University of Pittsburgh Cancer Institute
University of Pittsburgh Molecular Medicine Institute
-----Original Message-----
From: Rob Goedman [mailto:goedman at mac.com]
Sent: Monday, January 14, 2008 7:27 PM
To: Day, Roger S.
Cc: r-help at r-project.org
Subject: Re: [R] savehistory in OSX version
Roger,
On Jan 14, 2008, at 1:14 PM, Day, Roger S. wrote:
Thanks, Rob, I'm still unsure on the key question. Is there any way in R.app to save the commands run in the Console into
a *.history or .Rhistory file, by running a command on the Console, whether savehistory() or some other function call?
Right now, there isn't in R.app.
(I'm trying to semi-automate a regular backup procedure while in a very long interactive session at risk of hanging.) Can you say more what you mean by "interoperate" here?
The history file is updated on exiting R, which is clearly of no use to you. The updated history file can be read by both R and R.app, this is the interoperable part. If I recall correctly (it has been a few years!), to do what you need, would require a call back from R. I seem to remember this would not be hard to do but at that time was not available. Don't think it is today either. A possible approach is to run long interactive sessions from within the editor. Add a couple of statements and submit selection to R. If you're using the internal editor, save the file before submitting. From within an external editor, saving is less critical. Rob
Roger -----Original Message----- From: Rob Goedman [mailto:goedman at mac.com] Sent: Monday, January 14, 2008 10:21 AM To: Day, Roger S. Cc: r-help at r-project.org Subject: Re: [R] savehistory in OSX version Roger, The history features on Mac OS's R.app are handled by R.app and is a (small) superset of R's facilties, e.g. it supports multi-line history
recalls. A disadvantage of this approach is that it's not possible to use R's history() and savehistory() nor make usage completely identical. The actual history files do 'interoperate', although you will loose the multiline feature. A good list for Mac OS specific discussions is r-sig-mac at r- project.org. Hope this helps, Rob On Jan 13, 2008, at 6:47 PM, Day, Roger S. wrote:
Running Version 2.6.0 GUI 1.21. Generally, I enjoy working with the OSX GUI, which has some very pleasant features. Kudos to the developers! There is a nice history panel which slides out of the Console window.
The buttons on the panel work as expected. I am puzzled by the behavior of history() and savehistory() run from the Console window. I would think that these functions would view and
save the same set of commands as those seen in the history panel, but
they don't. Can someone explain why, and how to fix it? Perhaps relevant: I generally have performed a setwd() , or started R by launching a "Rdata" file. Thanks. Roger Day University of Pittsburgh Departments of Biomedical Informatics and Biostatistics University of Pittsburgh Cancer Institute University of
Pittsburgh Molecular Medicine Institute ************************** Room 310, Suite 301 Cancer Pavilion (CNPAV) 5150 Centre Ave. Pittsburgh, PA 15232 e-mail: day at upci.pitt.edu cell phone 412-609-3918 assistant: Lucy Cafeo: (412) 623-2952 *************************** [[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.