Source file io_loop.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
open Riot
open Event
open Tty

type Message.t += Input of Event.t

let translate = function " " -> "space" | key -> key

let rec loop runner =
  yield ();
  match Stdin.read_utf8 () with
  | `Read key ->
      let msg = KeyDown (translate key) in
      send runner (Input msg);
      loop runner
  | _ -> loop runner

let run runner =
  let termios = Stdin.setup () in
  Fun.protect
    ~finally:(fun () -> Stdin.shutdown termios)
    (fun () -> loop runner)