Hi,
Of course, to use the clipboard will destroy its content, but this can be discussed.
Yeah this is really not acceptable. Perhaps there is a way to write the information in some sort of temp file, or an unnamed pipe? (I think there is some trick with something like "<(commandshere)" that you can add to the end of a command, so that the output of commandshere is fed as a filename would have been fed otherwise, or something line that). We do need a way to get things to go back and forth without touching the clipboard. The clipboard is the user's space, we shouldn't be messing with it without the user asking for it.
Yes, yes I know the clipboard is the user's territory. To restore the old clipboard content is doable but you destroy TM history list. It was ONLY a suggestion because it made things easier and fast ;)
So, to avoid the clipboard and speed up the AppleScript a bit I found this:
Command 'Execution Line/Selection' _________________________ echo TASK=`tail -c +2`
# check whether R.app is running if [ $(ps -xc | grep ' R$' | wc -l) -eq 0 ]; then open -a R # sleeps for 5 sec - can be fine-tuned sleep 5 osascript <<-AS tell application "System Events" set visible of process "R" to false end tell AS fi
RES=$(osascript "$TM_BUNDLE_SUPPORT/bin/tm_get_r.scpt" "$TASK" 2>/dev/ null | tail -n +2)
echo -en "$RES"
NL=$(echo -en "$RES" | tail -n 1) if [ "$NL" != "> " -a "$NL" != "+ " ]; then echo -en "\n> " fi
########################################## # source code for 'tm_get_r' # # #on run (argv) # tell application "System Events" # -- Get a reference to the text field # set text_area to (process "R")'s (window "R Console")'s (scroll area 1)'s text area 1 # -- Get text before and after our command # set oldtext to text_area's value # set x to item 1 of argv # tell application "R" to cmd x # set newtext to text_area's value # # -- Find the difference between old and new # text from ((oldtext's length) + 1) to -1 of newtext # end tell #end run # ########################################### __________________________
The tricky thing is to pass parameters to AppleScript. I've chosen the variant via an argument list. I tried to get the command via AppleScript's "system attribute" but I found no way to export the variable TASK in such a way that the AppleScript will find it.
The new command has the same features like the variant using the clipboard.
The nice thing with the clipboard also was that I don't have encoding problem like print("façade") but maybe I find a fast way to solve it.
Attached is the compiled AppleScript, the sourde code you find above.
Please check this command for bugs or improvements. I did a tiny benchmark test and it turns out that this command is about 35% faster than the variant with embedded AppleScript.
Cheers, -Hans
PS You have to copy this compiled file into R bundle's /Support/bin folder. (Or compile it by yourself)