[R-SIG-Mac] [R] savehistory in OSX version

Day, Roger S. day at upci.pitt.edu
Wed Mar 12 16:12:02 CET 2008


 
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.
>



More information about the R-SIG-Mac mailing list