let destroy_buffer (v : sourceview) args =
let f () =
let bname = v#buffer_name in
remove_buffer v#file;
match List.filter (fun name -> name <> bname) (candidate_buffers()) with
[] ->
List.iter (fun v -> v#destroy) !views
| first :: _ ->
let buf =
try get_buffer_by_name first
with Not_found -> failwith "Internal error; Please restart to be safe."
in
List.iter
(fun (v:sourceview) ->
if v#buffer_name = bname then v#set_file ~focus_in: true buf
)
!views
in
if not v#buffer_modified then
f ()
else
Ed_misc.confirm v#minibuffer
(Printf.sprintf "Buffer %s modified; destroy anyway ?"
(utf8_of_filename v#buffer_name))
f