implement backspace for normal-search-mode

This commit is contained in:
2025-09-01 03:34:16 +01:00
parent b80bc3d93c
commit ea4dae3c53

View File

@@ -4,30 +4,30 @@ struct
open InputMsg open InputMsg
open MailboxType open MailboxType
fun addChr (app: app_type, searchString, searchCurosrIdx, chr) = fun addChr (app: app_type, searchString, searchCursorIdx, chr) =
let let
val {cursorIdx, buffer, ...} = app val {cursorIdx, buffer, ...} = app
val c = String.implode [chr] val c = String.implode [chr]
val searchString = val searchString =
if searchCurosrIdx = String.size searchString then if searchCursorIdx = String.size searchString then
searchString ^ c searchString ^ c
else else
let let
val sub1 = Substring.extract (searchString, 0, SOME searchCurosrIdx) val sub1 = Substring.extract (searchString, 0, SOME searchCursorIdx)
val sub2 = Substring.full c val sub2 = Substring.full c
val sub3 = Substring.extract (searchString, searchCurosrIdx, NONE) val sub3 = Substring.extract (searchString, searchCursorIdx, NONE)
in in
Substring.concat [sub1, sub2, sub3] Substring.concat [sub1, sub2, sub3]
end end
val searchCurosrIdx = searchCurosrIdx + 1 val searchCursorIdx = searchCursorIdx + 1
val buffer = LineGap.goToIdx (cursorIdx - 1111, buffer) val buffer = LineGap.goToIdx (cursorIdx - 1111, buffer)
val tempSearchList = val tempSearchList =
SearchList.buildRange (buffer, searchString, cursorIdx + 1111) SearchList.buildRange (buffer, searchString, cursorIdx + 1111)
in in
NormalSearchFinish.onSearchChanged NormalSearchFinish.onSearchChanged
(app, searchString, tempSearchList, searchCurosrIdx, buffer) (app, searchString, tempSearchList, searchCursorIdx, buffer)
end end
(* return to normal mode, keeping the same searchString and searchList (* return to normal mode, keeping the same searchString and searchList
@@ -74,14 +74,39 @@ struct
(app, buffer, searchString, tempSearchList, startLine, mode, msgs) (app, buffer, searchString, tempSearchList, startLine, mode, msgs)
end end
(* todo: implement *) fun backspace (app: app_type, searchString, tempSearchList, searchCursorIdx) =
fun backspace (app: app_type, searchString, tempSearchList) = if searchCursorIdx = 0 then
raise Fail "normal-search-mode: KEY_BACKSPACE unimplemented" app
else
let
val searchString =
if searchCursorIdx = String.size searchString then
String.substring (searchString, 0, String.size searchString - 1)
else
let
val sub1 = Substring.extract
(searchString, 0, SOME (searchCursorIdx - 1))
val sub2 = Substring.extract (searchString, searchCursorIdx, SOME
(String.size searchString - searchCursorIdx))
in
Substring.concat [sub1, sub2]
end
val searchCursorIdx = searchCursorIdx - 1
val {cursorIdx, buffer, ...} = app
val buffer = LineGap.goToIdx (cursorIdx - 1111, buffer)
val tempSearchList =
SearchList.buildRange (buffer, searchString, cursorIdx + 1111)
in
NormalSearchFinish.onSearchChanged
(app, searchString, tempSearchList, searchCursorIdx, buffer)
end
fun update (app, {searchString, tempSearchList, searchCursorIdx}, msg, time) = fun update (app, {searchString, tempSearchList, searchCursorIdx}, msg, time) =
case msg of case msg of
CHAR_EVENT chr => addChr (app, searchString, searchCursorIdx, chr) CHAR_EVENT chr => addChr (app, searchString, searchCursorIdx, chr)
| KEY_BACKSPACE => backspace (app, searchString, tempSearchList) | KEY_BACKSPACE =>
backspace (app, searchString, tempSearchList, searchCursorIdx)
| KEY_ESC => exitToNormalMode app | KEY_ESC => exitToNormalMode app
| KEY_ENTER => saveSearch (app, searchString, tempSearchList) | KEY_ENTER => saveSearch (app, searchString, tempSearchList)
| RESIZE_EVENT (width, height) => app | RESIZE_EVENT (width, height) => app