···11import { EditorView, basicSetup } from "codemirror"
22-import { EditorState, RangeSet } from "@codemirror/state"
33-import { hoverTooltip, Decoration, WidgetType } from "@codemirror/view"
22+import { EditorState, Compartment, RangeSet } from "@codemirror/state"
33+import { hoverTooltip, lineNumbers, Decoration, WidgetType } from "@codemirror/view"
44import * as lint from "@codemirror/lint"
55import * as autocomplete from "@codemirror/autocomplete"
66import * as dark from "@codemirror/theme-one-dark"
···1313joo_global_object.__CM__rangeSet = RangeSet;
1414joo_global_object.__CM__decoration = Decoration;
1515joo_global_object.__CM__widgetType = WidgetType;
1616+joo_global_object.__CM__compartment = Compartment;
1617joo_global_object.__CM__lint = lint;
1718joo_global_object.__CM__autocomplete = autocomplete;
1819joo_global_object.__CM__hoverTooltip = hoverTooltip;
2020+joo_global_object.__CM__lineNumbers = lineNumbers;
1921joo_global_object.__CM__basic_setup = basicSetup
2022joo_global_object.__CM__dark = dark;
2123joo_global_object.__CM__stream_parser = language;
+1
src/code_mirror.ml
···11module Editor = Editor
22module Text = Text
33module Extension = Extension
44+module Compartment = Compartment
45module Decoration = Decoration
+15
src/compartment.ml
···11+type t = Jv.t
22+33+include (Jv.Id : Jv.CONV with type t := t)
44+55+let compartment = Jv.get Jv.global "__CM__compartment"
66+let make () = Jv.new' compartment [||]
77+88+let of' t extensions =
99+ Jv.call t "of" [| Jv.of_list Extension.to_jv extensions |] |> Extension.of_jv
1010+1111+let reconfigure t ext =
1212+ let state_effect =
1313+ Jv.call t "reconfigure" [| Jv.of_list Extension.to_jv ext |]
1414+ in
1515+ Jv.obj [| ("effects", state_effect) |] |> Editor.View.Transaction.of_jv
+8
src/compartment.mli
···11+type t
22+(** Extensions compartments for the editor *)
33+44+include Jv.CONV with type t := t
55+66+val make : unit -> t
77+val of' : t -> Extension.t list -> Extension.t
88+val reconfigure : t -> Extension.t list -> Editor.View.Transaction.t
+15
src/editor.ml
···128128 let upd = State.set_doc (state t) doc in
129129 let _ = Jv.call t "update" [| Jv.of_jv_array [| upd |] |] in
130130 ()
131131+132132+ let line_numbers fmt =
133133+ let fmt x _ = Jv.to_int x |> fmt |> Jv.of_string in
134134+ let config = Jv.obj [| ("formatNumber", Jv.callback ~arity:2 fmt) |] in
135135+ Jv.call Jv.global "__CM__lineNumbers" [| config |] |> Extension.of_jv
136136+137137+ module Transaction = struct
138138+ type t = Jv.t
139139+140140+ include (Jv.Id : Jv.CONV with type t := t)
141141+ end
142142+143143+ let dispatch t transaction =
144144+ let _ = Jv.call t "dispatch" [| Transaction.to_jv transaction |] in
145145+ ()
131146end
+10-1
src/editor.mli
···8383 val update_listener : unit -> (Update.t -> unit, Jv.t) State.facet
8484 val decorations : unit -> (Decoration.Range_set.t, Jv.t) State.facet
8585 val request_measure : t -> unit
8686+ val set_doc : t -> Jstr.t -> unit
8687 val line_wrapping : unit -> Extension.t
8787- val set_doc : t -> Jstr.t -> unit
8888+ val line_numbers : (int -> string) -> Extension.t
8989+9090+ module Transaction : sig
9191+ type t
9292+9393+ include Jv.CONV with type t := t
9494+ end
9595+9696+ val dispatch : t -> Transaction.t -> unit
8897end