let open_file topwin active_view ?(attributes=[]) filename =
  let file = get_buffer ~attributes filename in
  match !active_sourceview with
    None -> `New_view (create_view ~attributes topwin file :> Ed_view.gui_view)
  | Some v ->
      if topwin#contains_view (v :> Ed_view.gui_view) then
        begin
          if v#file#name = file#name then
            match get_att "location" attributes with
              None -> ()
            | Some _ -> v#update_my_location
          else
            v#set_file ~focus_in: true file;
          `Use_view (v :> Ed_view.gui_view)
        end
      else
        `New_view (create_view ~attributes topwin file :> Ed_view.gui_view)