From f4a4dd916122fa7b2b18c90338013fc4610812cf Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Mon, 1 Sep 2025 02:52:05 +0100 Subject: [PATCH] scaffolding for backspace functionality --- .temp.txt.swp | Bin 16384 -> 0 bytes fcore/normal-mode/normal-mode.sml | 1 + fcore/normal-mode/normal-search-mode.sml | 5 +++++ ffi/glfw-input.c | 1 + ffi/glfw-input.sml | 3 +++ message-types/input-msg.sml | 1 + shell/shell.sml | 2 ++ 7 files changed, 13 insertions(+) delete mode 100644 .temp.txt.swp diff --git a/.temp.txt.swp b/.temp.txt.swp deleted file mode 100644 index 8b2ed040a79af8f52cc7ba7115b3ab78bbfeff27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 NormalFinish.withSearchList (app, searchList) | KEY_ENTER => app + | KEY_BACKSPACE => app end diff --git a/fcore/normal-mode/normal-search-mode.sml b/fcore/normal-mode/normal-search-mode.sml index ce78dae..2ce1f13 100644 --- a/fcore/normal-mode/normal-search-mode.sml +++ b/fcore/normal-mode/normal-search-mode.sml @@ -110,9 +110,14 @@ struct (app, buffer, searchString, tempSearchList, startLine, mode, msgs) end + (* todo: implement *) + fun backspace (app: app_type, searchString, tempSearchList) = + raise Fail "normal-search-mode: KEY_BACKSPACE unimplemented" + fun update (app, {searchString, tempSearchList}, msg, time) = case msg of CHAR_EVENT chr => addChr (app, searchString, chr) + | KEY_BACKSPACE => backspace (app, searchString, tempSearchList) | KEY_ESC => exitToNormalMode app | KEY_ENTER => saveSearch (app, searchString, tempSearchList) | RESIZE_EVENT (width, height) => app diff --git a/ffi/glfw-input.c b/ffi/glfw-input.c index 57a49dd..64d0759 100644 --- a/ffi/glfw-input.c +++ b/ffi/glfw-input.c @@ -8,6 +8,7 @@ int REPEAT = GLFW_REPEAT; int RELEASE = GLFW_RELEASE; int KEY_ESC = GLFW_KEY_ESCAPE; int KEY_ENTER = GLFW_KEY_ENTER; +int KEY_BACKSPACE = GLFW_KEY_BACKSPACE; void framebufferSizeCallback(GLFWwindow* window, int width, int height) { glViewport(0, 0, width, height); diff --git a/ffi/glfw-input.sml b/ffi/glfw-input.sml index 91ad2ec..15dd143 100644 --- a/ffi/glfw-input.sml +++ b/ffi/glfw-input.sml @@ -36,4 +36,7 @@ struct val (KEY_ENTER, _) = _symbol "KEY_ENTER" public : ( unit -> int ) * ( int -> unit ); val KEY_ENTER = KEY_ENTER () + val (KEY_BACKSPACE, _) = + _symbol "KEY_BACKSPACE" public : ( unit -> int ) * ( int -> unit ); + val KEY_BACKSPACE = KEY_BACKSPACE () end diff --git a/message-types/input-msg.sml b/message-types/input-msg.sml index 661da51..ce26639 100644 --- a/message-types/input-msg.sml +++ b/message-types/input-msg.sml @@ -4,6 +4,7 @@ struct CHAR_EVENT of char | KEY_ESC | KEY_ENTER + | KEY_BACKSPACE | RESIZE_EVENT of int * int | WITH_SEARCH_LIST of int vector end diff --git a/shell/shell.sml b/shell/shell.sml index 36f11b1..b59d634 100644 --- a/shell/shell.sml +++ b/shell/shell.sml @@ -27,6 +27,8 @@ struct Mailbox.send (inputMailbox, InputMsg.KEY_ESC) else if key = KEY_ENTER andalso action = PRESS andalso mods = 0 then Mailbox.send (inputMailbox, InputMsg.KEY_ENTER) + else if key = KEY_BACKSPACE andalso action <> RELEASE andalso mods = 0 then + Mailbox.send (inputMailbox, InputMsg.KEY_BACKSPACE) else () end