let rec create_view ?(attributes=[]) topwin file =
let v = new sourceview ~attributes topwin on_view_destroy
set_active_sourceview dup file_rename file
in
ignore(v#source_view#connect#destroy (fun () -> on_view_destroy v));
views := v :: !views;
v
and dup file topwin =
(create_view topwin file :> Ed_view.gui_view)
and file_rename oldname newname =
try
ignore(List.find (fun b -> Ed_misc.safe_same_files b#filename newname) !buffers);
let mes = Printf.sprintf "%s is already open. Close it before." newname in
failwith mes
with Not_found ->
let views = List.filter (fun v -> v#filename = oldname) !views in
let b = get_buffer oldname in
let old_buffer_name = b#name in
b#set_filename newname;
b#set_name (get_fresh_buffer_name (Filename.basename newname));
rename_buffer_in_history old_buffer_name b#name;
List.iter (fun v -> v#my_set_label; v#display_state) views