Source file keymap.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
let keymap = lazy (Jv.get Jv.global "__CM__keymap")

type t = Jv.t

include (Jv.Id : Jv.CONV with type t := t)

type command = View.EditorView.t -> bool

let create ?key ?run () =
  let o = Jv.obj [||] in
  let key = Option.map Jstr.v key in
  let run =
    Option.map
      (fun f ->
        Jv.callback ~arity:1 (fun v ->
            f (View.EditorView.of_jv v) |> Jv.of_bool))
      run
  in
  Jv.Jstr.set_if_some o "key" key;
  Jv.set_if_some o "run" run;
  o

let keymap : (t, Jv.t) State.Facet.t =
  let iconv = Types.{ of_jv; to_jv } in
  State.Facet.create iconv (Lazy.force keymap)