menu .menu toplevel .tk-R -menu .menu wm protocol .tk-R WM_DELETE_WINDOW {} pack [frame .tk-R.toolbar] -anchor n -fill x pack [text .tk-R.term -bg white -font [list Courier 14]] -expand true -fill both ## Implements a "stop button" which sends SIGINT to the R process. ## Unfortunately, SIGINTs are not handled gracefully... # pack [frame .tk-R.toolbar.stop -container true] -side right # set stopscript $env(R_HOME)/library/tcltk/exec/stopit.tcl # update # exec wish -use [winfo id .tk-R.toolbar.stop] < $stopscript [pid] & .tk-R.term mark set insert-mark "end - 1 chars" focus .tk-R.term set hist {} set nhist 0 set saved {} bind .tk-R.term { .tk-R.term see end .tk-R.term insert end "\n" .tk-R.term mark set insert-mark "end - 1 chars" .tk-R.term mark gravity insert-mark right set terminput [.tk-R.term get process-mark "end - 1 chars"] break } bind .tk-R.term { global hist phist nhist saved if ($phist<=0) break if ($phist==$nhist) { set saved [.tk-R.term get process-mark "end - 1 chars"] } .tk-R.term delete process-mark "end - 1 chars" incr phist -1 .tk-R.term insert process-mark [lindex $hist $phist] break } bind .tk-R.term { global hist phist nhist saved if ($phist>=$nhist) break .tk-R.term delete process-mark "end - 1 chars" incr phist if ($phist<$nhist) { .tk-R.term insert process-mark [lindex $hist $phist] } else { .tk-R.term insert process-mark $saved } break } proc Rc_read { prompt addtohistory } { global terminput hist nhist phist .tk-R.term mark set insert-mark "end - 1 chars" .tk-R.term mark gravity insert-mark left .tk-R.term insert insert-mark $prompt .tk-R.term mark gravity insert-mark right .tk-R.term mark set process-mark "end - 1 chars" .tk-R.term mark gravity process-mark left .tk-R.term see end set phist $nhist tkwait variable terminput .tk-R.term mark set insert end if ($addtohistory) then { lappend hist [string trimright $terminput] incr nhist } return $terminput } proc Rc_write { buf } { .tk-R.term insert insert-mark $buf .tk-R.term see end #.tk-R.term mark set insert end #update }