From fdbc1989398792e0e5094f3678cc29944c5a2036 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reynir=20Bj=C3=B6rnsson?= Date: Fri, 12 May 2023 14:37:35 +0200 Subject: [PATCH] Implement broken quit:wq --- prompt.ml | 12 ++++++++---- unikernel.ml | 9 +++++++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/prompt.ml b/prompt.ml index 94621d9..ec232f3 100644 --- a/prompt.ml +++ b/prompt.ml @@ -2,13 +2,14 @@ open Nottui open Notty type t = { + quit : unit -> unit; message : string -> unit; cursor : Rp.Cursor.cursor; } -let make message = +let make quit message = let cursor = Rp.Cursor.create Rp.empty 0 in - { message; cursor } + { quit; message; cursor } let map_cursor f state = { state with cursor = f state.cursor } @@ -104,13 +105,16 @@ let handler ~hook state = function state.message msg; hook { state with cursor = Rp.Cursor.create Rp.empty 0 }; `Handled + | `ASCII ('C'..'D'), [`Ctrl] -> + state.quit (); + `Handled | _ -> `Unhandled -let make ~message cursor = +let make ~quit ~message cursor = let ( let* ) x f = Lwd.bind x ~f in let ( let+ ) x f = Lwd.map ~f x 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 hook = Lwd.set state in let update_prompt state (y, w) = diff --git a/unikernel.ml b/unikernel.ml index e3bc93e..c726439 100644 --- a/unikernel.ml +++ b/unikernel.ml @@ -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 Lwd.set buffer_var (Rb.push buffer msg; buffer); 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 ( 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 Lwd.return (Nottui.Ui.vcat [window; prompt]) in