From defb17af20ea86441cef7090d1014f06b8df652b Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Sat, 26 Oct 2024 04:46:05 +0100 Subject: [PATCH] add mode type to app type (equivalent of vi's normal mode, visual mode, insert mode, etc.) --- fcore/app-type.sml | 32 ++++++++++++++++++++++++++++---- fcore/app-with.sml | 19 ++++++++++++++----- shf | Bin 1176152 -> 1176152 bytes 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/fcore/app-type.sml b/fcore/app-type.sml index c06b18a..4f9acd2 100644 --- a/fcore/app-type.sml +++ b/fcore/app-type.sml @@ -1,7 +1,30 @@ -structure AppType = -struct +signature APP_TYPE = +sig + datatype mode = + NORMAL_MODE of string + type app_type = - { buffer: LineGap.t + { mode: mode + , buffer: LineGap.t + , windowWidth: int + , windowHeight: int + (* line to start drawing from *) + , startLine: int + (* absolute index of movable cursor *) + , cursorIdx: int + } + + val init: LineGap.t * int * int -> app_type +end + +structure AppType :> APP_TYPE = +struct + datatype mode = + NORMAL_MODE of string + + type app_type = + { mode: mode + , buffer: LineGap.t , windowWidth: int , windowHeight: int (* line to start drawing from *) @@ -11,7 +34,8 @@ struct } fun init (buffer, windowWidth, windowHeight) : app_type = - { buffer = buffer + { mode = NORMAL_MODE "" + , buffer = buffer , windowWidth = windowWidth , windowHeight = windowHeight , startLine = 0 diff --git a/fcore/app-with.sml b/fcore/app-with.sml index 25c6c51..9cdd9d4 100644 --- a/fcore/app-with.sml +++ b/fcore/app-with.sml @@ -4,10 +4,17 @@ struct fun bufferAndSize (app: app_type, newBuffer, newWidth, newHeight) = let - val {buffer = _, windowWidth = _, windowHeight = _, startLine, cursorIdx} = - app + val + { mode + , buffer = _ + , windowWidth = _ + , windowHeight = _ + , startLine + , cursorIdx + } = app in - { buffer = newBuffer + { mode = mode + , buffer = newBuffer , windowWidth = newWidth , windowHeight = newHeight , startLine = startLine @@ -17,10 +24,12 @@ struct fun bufferAndCursorIdx (app: app_type, newBuffer, newCursorIdx) = let - val {buffer = _, cursorIdx = _, windowWidth, windowHeight, startLine} = + val + {mode, buffer = _, cursorIdx = _, windowWidth, windowHeight, startLine} = app in - { buffer = newBuffer + { mode = mode + , buffer = newBuffer , cursorIdx = newCursorIdx , windowWidth = windowWidth , windowHeight = windowHeight diff --git a/shf b/shf index 8b391a10b5807526b2376d7ab97a593b12ba3c56..87dfa96cf022315219027572e42955be7365b9a4 100755 GIT binary patch delta 9705 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 YUXwdbc1s_qn?B<{ed<3Ye&gl80h&#<%>V!Z delta 9668 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 A#Q*>R