method private write_file =
      let rec do_write ~fail_if_newer =
        try
          file#write_file ~fail_if_newer ();
          let msg = Printf.sprintf "Wrote %s"
            (utf8_of_filename ~full: true file#filename)
          in
          Ed_misc.display_message msg
        with
          Newer_file_exists _ ->
            let do_it () = do_write ~fail_if_newer: false in
            Ed_misc.confirm self#minibuffer
              (Printf.sprintf "%s was edited since last visited; write anyway ?"
               (utf8_of_filename ~full: true file#filename))
              do_it
        | Failure s
        | Sys_error s
        | Glib.Convert.Error (_,s) ->
            Ed_misc.error_message (Ed_misc.to_utf8 s)
      in
      do_write ~fail_if_newer: true