method execute () =
let b = input_view#buffer in
try
try
self#set_error_message None;
(match param#display_box with None -> () | Some b -> b#clear) ;
let code = b#get_text ~start: b#start_iter ~stop: b#end_iter () in
let (output, results) = param#execute code in
phrases <- code :: phrases;
output_view#buffer#place_cursor ~where: output_view#buffer#end_iter;
List.iter
(fun (e, pos) ->
elements#add_element
{element = e; pos = output_view#buffer#char_count + pos})
results;
output_view#buffer#insert (code^"\n");
let tag = output_view#buffer#create_tag [`FOREGROUND color_output#get] in
output_view#buffer#insert ~tags: [tag] output;
input_view#buffer#delete ~start: b#start_iter ~stop: b#end_iter;
with
Error (message, st, en) ->
let start = b#get_iter_at_char st in
let stop = b#get_iter_at_char en in
let tag = b#create_tag [`BACKGROUND color_error#get] in
b#apply_tag tag ~start ~stop;
self#set_error_message (Some message)
with
e ->
let s = Printexc.to_string e in
GToolbox.message_box param#s_error s