Implement broken quit:wq

This commit is contained in:
Reynir Björnsson 2023-05-12 14:37:35 +02:00
parent 8598f7011f
commit fdbc198939
2 changed files with 15 additions and 6 deletions

View file

@ -2,13 +2,14 @@ open Nottui
open Notty open Notty
type t = { type t = {
quit : unit -> unit;
message : string -> unit; message : string -> unit;
cursor : Rp.Cursor.cursor; cursor : Rp.Cursor.cursor;
} }
let make message = let make quit message =
let cursor = Rp.Cursor.create Rp.empty 0 in let cursor = Rp.Cursor.create Rp.empty 0 in
{ message; cursor } { quit; message; cursor }
let map_cursor f state = let map_cursor f state =
{ state with cursor = f state.cursor } { state with cursor = f state.cursor }
@ -104,13 +105,16 @@ let handler ~hook state = function
state.message msg; state.message msg;
hook { state with cursor = Rp.Cursor.create Rp.empty 0 }; hook { state with cursor = Rp.Cursor.create Rp.empty 0 };
`Handled `Handled
| `ASCII ('C'..'D'), [`Ctrl] ->
state.quit ();
`Handled
| _ -> `Unhandled | _ -> `Unhandled
let make ~message cursor = let make ~quit ~message cursor =
let ( let* ) x f = Lwd.bind x ~f in let ( let* ) x f = Lwd.bind x ~f in
let ( let+ ) x f = Lwd.map ~f x in let ( let+ ) x f = Lwd.map ~f x in
let ( and+ ) = Lwd.map2 ~f:(fun x y -> (x, y)) in let ( and+ ) = Lwd.map2 ~f:(fun x y -> (x, y)) in
let state = Lwd.var (make message) in let state = Lwd.var (make quit message) in
let position = Lwd.var (0, 0) in let position = Lwd.var (0, 0) in
let hook = Lwd.set state in let hook = Lwd.set state in
let update_prompt state (y, w) = let update_prompt state (y, w) =

View file

@ -43,10 +43,15 @@ module Main (_ : Mirage_random.S) (T : Mirage_time.S) (M : Mirage_clock.MCLOCK)
let msg = Message.make ~nickname:username m in let msg = Message.make ~nickname:username m in
Lwd.set buffer_var (Rb.push buffer msg; buffer); Lwd.set buffer_var (Rb.push buffer msg; buffer);
in in
Rb.push buffer (Message.msgf "Welcome, %s!" username); let quit () =
let msg = Message.msgf "%s tried to quit, but it is not implemented" username in
Lwd.set buffer_var (Rb.push buffer msg; buffer);
in
Lwd.set buffer_var
(Rb.push buffer (Message.msgf "Welcome, %s!" username); buffer);
let ui = let ui =
let ( let* ) x f = Lwd.bind x ~f in let ( let* ) x f = Lwd.bind x ~f in
let* prompt = Prompt.make ~message cursor in let* prompt = Prompt.make ~quit ~message cursor in
let* window = Window.make buffer_var in let* window = Window.make buffer_var in
Lwd.return (Nottui.Ui.vcat [window; prompt]) Lwd.return (Nottui.Ui.vcat [window; prompt])
in in