sig
  class type gui_view =
    object
      method attributes : (string * string) list
      method box : GObj.widget
      method close : unit
      method copy : (unit -> unit) option
      method cut : (unit -> unit) option
      method destroy : unit
      method dup : Ed_view.topwin -> Ed_view.gui_view option
      method filename : string
      method grab_focus : unit
      method key_bindings : (Okey.keyhit_state * string) list
      method kind : string
      method label : string
      method menus : (string * GToolbox.menu_entry list) list
      method paste : (unit -> unit) option
      method reload : (unit -> unit) option
      method save : (unit -> unit) option
      method save_as : (unit -> unit) option
      method set_on_destroy : (unit -> unit) -> unit
      method set_on_focus_in : (unit -> unit) -> unit
      method set_on_label_change : (string -> unit) -> unit
    end
  and topwin =
    object
      method active_view : Ed_view.gui_view option
      method contains_view : Ed_view.gui_view -> bool
      method minibuffer : Ed_minibuffer.minibuffer
      method set_active_view : Ed_view.gui_view option -> unit
    end
  class virtual dyn_label :
    object
      val mutable label : string
      val mutable on_label_change : string -> unit
      method label : string
      method set_label : string -> unit
      method set_on_label_change : (string -> unit) -> unit
    end
  class virtual dyn_destroyable :
    (unit -> unit) ->
    object
      val mutable on_destroy : unit -> unit
      method destroy : unit
      method set_on_destroy : (unit -> unit) -> unit
    end
  class type view_factory =
    object
      method name : string
      method on_exit : unit
      method on_start : unit
      method open_file :
        Ed_view.topwin ->
        Ed_view.gui_view option ->
        ?attributes:(string * string) list ->
        string ->
        [ `New_view of Ed_view.gui_view | `Use_view of Ed_view.gui_view ]
      method open_hidden :
        (?attributes:(string * string) list -> string -> unit) option
    end
  val register_view_factory : string -> Ed_view.view_factory -> unit
  val get_factory : string -> Ed_view.view_factory
  val iter_factories : (Ed_view.view_factory -> unit) -> unit
  val on_factory : string -> (Ed_view.view_factory -> 'a) -> 'a
  val factory_open_file :
    factory:string ->
    Ed_view.topwin ->
    Ed_view.gui_view option ->
    ?attributes:(string * string) list ->
    string ->
    [ `New_view of Ed_view.gui_view | `Use_view of Ed_view.gui_view ]
  val factory_open_hidden :
    factory:string -> ?attributes:(string * string) list -> string -> unit
  val set_default_factory_name : string -> unit
  val factory_of_filename : string -> string
end