From a4dea7626faef9d262088170c884081355703c10 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Fri, 8 Nov 2024 09:30:57 +0000 Subject: [PATCH] add KEY_ESC message type, and refactor app-update.sml to use it (always calls 'clearMode' function which always sets the app to normal mode, and sets the command strnig to empty) --- fcore/app-update.sml | 17 +++++++++++------ message-types/input-msg.sml | 10 ++++++---- shf | Bin 1179864 -> 1179864 bytes 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/fcore/app-update.sml b/fcore/app-update.sml index 9a260b2..c6f1f73 100644 --- a/fcore/app-update.sml +++ b/fcore/app-update.sml @@ -430,6 +430,7 @@ struct fun handleMoveToChr (count, app, fMove, newCmd) = case newCmd of CHAR_EVENT chr => moveToChr (app, count, fMove, chr) + | KEY_ESC => clearMode app | RESIZE_EVENT (width, height) => resizeText (app, width, height) fun handleGo (count, app, newCmd) = @@ -440,6 +441,7 @@ struct | #"E" => move (app, count, Cursor.endOfPrevWORD) | #"g" => moveToStart app | _ => clearMode app) + | KEY_ESC => clearMode app | RESIZE_EVENT (width, height) => resizeText (app, width, height) (* useful reference as list of non-terminal commands *) @@ -487,15 +489,17 @@ struct fun parseNormalModeCommand (app, str, newCmd) = if String.size str = 0 then case newCmd of - RESIZE_EVENT (width, height) => resizeText (app, width, height) - | CHAR_EVENT chr => handleChr (app, 1, chr, str) + CHAR_EVENT chr => handleChr (app, 1, chr, str) + | KEY_ESC => clearMode app + | RESIZE_EVENT (width, height) => resizeText (app, width, height) else if String.size str = 1 then case newCmd of - RESIZE_EVENT (width, height) => resizeText (app, width, height) - | CHAR_EVENT chr => + CHAR_EVENT chr => (case Int.fromString str of SOME count => handleChr (app, count, chr, str) | NONE => parseAfterCount (0, str, 1, app, newCmd)) + | KEY_ESC => clearMode app + | RESIZE_EVENT (width, height) => resizeText (app, width, height) else let val numLength = getNumLength (0, str) @@ -508,8 +512,9 @@ struct if numLength = String.size str then (* reached end of str; str only contained numbers *) case newCmd of - RESIZE_EVENT (width, height) => resizeText (app, width, height) - | CHAR_EVENT chr => handleChr (app, count, chr, str) + CHAR_EVENT chr => handleChr (app, count, chr, str) + | KEY_ESC => clearMode app + | RESIZE_EVENT (width, height) => resizeText (app, width, height) else if numLength + 1 < String.size str then (* continue parsing. *) parseAfterCount (numLength + 1, str, count, app, newCmd) diff --git a/message-types/input-msg.sml b/message-types/input-msg.sml index 6c2c8eb..d453f6c 100644 --- a/message-types/input-msg.sml +++ b/message-types/input-msg.sml @@ -1,13 +1,15 @@ signature INPUT_MSG = sig datatype t = - RESIZE_EVENT of int * int - | CHAR_EVENT of char + CHAR_EVENT of char + | KEY_ESC + | RESIZE_EVENT of int * int end structure InputMsg :> INPUT_MSG = struct datatype t = - RESIZE_EVENT of int * int - | CHAR_EVENT of char + CHAR_EVENT of char + | KEY_ESC + | RESIZE_EVENT of int * int end diff --git a/shf b/shf index 4de60408744790918497449fb26593a5b48eeeca..e2b4549160821bbae3f4219576970591c98a83b5 100755 GIT binary patch delta 19648 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 MS7!~1nEu}X0TUdu9{>OV delta 19621 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

F$gf+FxW=RG*@A2_9+fKJ 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