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