open Brr let h = ref [] let history prefix = if prefix <> "" then List.filter (fun s -> String.starts_with ~prefix s) !h else !h let complete s = match String.get s 0 with | 'h' -> [ "hello"; "hello there" ] | _ | (exception Invalid_argument _) -> [] let stdin = Document.find_el_by_id G.document (Jstr.v "stdin") |> Option.get let stdout = Document.find_el_by_id G.document (Jstr.v "stdout") |> Option.get let prompt = Document.find_el_by_id G.document (Jstr.v "prompt") |> Option.get let () = Eio_js_backend.start @@ fun () -> El.append_children (Document.head G.document) [ El.style [ El.txt' Ansi.css ] ]; let ctx = Bruit_brr.stdctx ~redirect:true stdin prompt stdout in let rec loop sys_break = let prompt = if sys_break then "[\x1b[31m130\x1b[0m] \x1b[33m>>\x1b[0m " else "\x1b[33m>>\x1b[0m " in match Bruit.run ~history ~complete ctx prompt with | String (Some s) -> El.append_children stdout [ El.txt' s ]; h := s :: !h; loop false | String None -> () | Ctrl_c -> loop true in loop false