sig
  type 'a t
  type clipboard = {
    clipboard_get : unit -> Zed_rope.t;
    clipboard_set : Zed_rope.t -> unit;
  }
  val new_clipboard : unit -> Zed_edit.clipboard
  val create :
    ?editable:(int -> int -> bool) ->
    ?move:(int -> int -> int) ->
    ?clipboard:Zed_edit.clipboard ->
    ?match_word:(Zed_rope.t -> int -> int option) ->
    ?locale:string option React.signal ->
    ?undo_size:int -> unit -> 'Zed_edit.t
  val match_by_regexp : Zed_re.t -> Zed_rope.t -> int -> int option
  val get_data : 'Zed_edit.t -> 'a
  val set_data : 'Zed_edit.t -> '-> unit
  val clear_data : 'Zed_edit.t -> unit
  val text : 'Zed_edit.t -> Zed_rope.t
  val lines : 'Zed_edit.t -> Zed_lines.t
  val changes : 'Zed_edit.t -> (int * int * int) React.event
  val update : 'Zed_edit.t -> Zed_cursor.t list -> unit React.event
  val erase_mode : 'Zed_edit.t -> bool React.signal
  val get_erase_mode : 'Zed_edit.t -> bool
  val set_erase_mode : 'Zed_edit.t -> bool -> unit
  val mark : 'Zed_edit.t -> Zed_cursor.t
  val selection : 'Zed_edit.t -> bool React.signal
  val get_selection : 'Zed_edit.t -> bool
  val set_selection : 'Zed_edit.t -> bool -> unit
  val new_cursor : 'Zed_edit.t -> Zed_cursor.t
  exception Cannot_edit
  type 'a context
  val context :
    ?check:bool -> 'Zed_edit.t -> Zed_cursor.t -> 'Zed_edit.context
  val edit : 'Zed_edit.context -> 'Zed_edit.t
  val cursor : 'Zed_edit.context -> Zed_cursor.t
  val check : 'Zed_edit.context -> bool
  val with_check : bool -> 'Zed_edit.context -> 'Zed_edit.context
  val goto : 'Zed_edit.context -> ?set_wanted_column:bool -> int -> unit
  val move : 'Zed_edit.context -> ?set_wanted_column:bool -> int -> unit
  val move_line : 'Zed_edit.context -> int -> unit
  val position : 'Zed_edit.context -> int
  val line : 'Zed_edit.context -> int
  val column : 'Zed_edit.context -> int
  val at_bol : 'Zed_edit.context -> bool
  val at_eol : 'Zed_edit.context -> bool
  val at_bot : 'Zed_edit.context -> bool
  val at_eot : 'Zed_edit.context -> bool
  val insert : 'Zed_edit.context -> Zed_rope.t -> unit
  val insert_no_erase : 'Zed_edit.context -> Zed_rope.t -> unit
  val remove_next : 'Zed_edit.context -> int -> unit
  val remove_prev : 'Zed_edit.context -> int -> unit
  val remove : 'Zed_edit.context -> int -> unit
  val replace : 'Zed_edit.context -> int -> Zed_rope.t -> unit
  val newline : 'Zed_edit.context -> unit
  val next_char : 'Zed_edit.context -> unit
  val prev_char : 'Zed_edit.context -> unit
  val next_line : 'Zed_edit.context -> unit
  val prev_line : 'Zed_edit.context -> unit
  val goto_bol : 'Zed_edit.context -> unit
  val goto_eol : 'Zed_edit.context -> unit
  val goto_bot : 'Zed_edit.context -> unit
  val goto_eot : 'Zed_edit.context -> unit
  val delete_next_char : 'Zed_edit.context -> unit
  val delete_prev_char : 'Zed_edit.context -> unit
  val delete_next_line : 'Zed_edit.context -> unit
  val delete_prev_line : 'Zed_edit.context -> unit
  val kill_next_line : 'Zed_edit.context -> unit
  val kill_prev_line : 'Zed_edit.context -> unit
  val switch_erase_mode : 'Zed_edit.context -> unit
  val set_mark : 'Zed_edit.context -> unit
  val goto_mark : 'Zed_edit.context -> unit
  val copy : 'Zed_edit.context -> unit
  val kill : 'Zed_edit.context -> unit
  val yank : 'Zed_edit.context -> unit
  val capitalize_word : 'Zed_edit.context -> unit
  val lowercase_word : 'Zed_edit.context -> unit
  val uppercase_word : 'Zed_edit.context -> unit
  val next_word : 'Zed_edit.context -> unit
  val prev_word : 'Zed_edit.context -> unit
  val delete_next_word : 'Zed_edit.context -> unit
  val delete_prev_word : 'Zed_edit.context -> unit
  val kill_next_word : 'Zed_edit.context -> unit
  val kill_prev_word : 'Zed_edit.context -> unit
  val undo : 'Zed_edit.context -> unit
  type action =
      Insert of CamomileLibrary.UChar.t
    | Newline
    | Next_char
    | Prev_char
    | Next_line
    | Prev_line
    | Goto_bol
    | Goto_eol
    | Goto_bot
    | Goto_eot
    | Delete_next_char
    | Delete_prev_char
    | Delete_next_line
    | Delete_prev_line
    | Kill_next_line
    | Kill_prev_line
    | Switch_erase_mode
    | Set_mark
    | Goto_mark
    | Copy
    | Kill
    | Yank
    | Capitalize_word
    | Lowercase_word
    | Uppercase_word
    | Next_word
    | Prev_word
    | Delete_next_word
    | Delete_prev_word
    | Kill_next_word
    | Kill_prev_word
    | Undo
  val get_action : Zed_edit.action -> 'Zed_edit.context -> unit
  val actions : (Zed_edit.action * string) list
  val doc_of_action : Zed_edit.action -> string
  val action_of_name : string -> Zed_edit.action
  val name_of_action : Zed_edit.action -> string
end