2025-08-31 02:10:57 +01:00
|
|
|
structure NormalSearchMode =
|
|
|
|
|
struct
|
|
|
|
|
open AppType
|
|
|
|
|
open InputMsg
|
|
|
|
|
|
2025-08-31 02:41:37 +01:00
|
|
|
(* todo: redraw based on results of tempSearchList *)
|
|
|
|
|
fun parseChr (app: app_type, searchString, chr) =
|
|
|
|
|
let
|
|
|
|
|
val c = String.implode [chr]
|
|
|
|
|
val searchString = searchString ^ c
|
|
|
|
|
|
|
|
|
|
val {buffer, cursorIdx, ...} = app
|
|
|
|
|
val buffer = LineGap.goToIdx (cursorIdx - 1111, buffer)
|
|
|
|
|
val tempSearchList =
|
|
|
|
|
SearchList.buildRange (buffer, searchString, cursorIdx + 1111)
|
|
|
|
|
|
|
|
|
|
val mode =
|
|
|
|
|
NORMAL_SEARCH_MODE
|
|
|
|
|
{searchString = searchString, tempSearchList = tempSearchList}
|
|
|
|
|
in
|
2025-08-31 06:28:05 +01:00
|
|
|
NormalModeWith.mode (app, mode, [])
|
2025-08-31 02:41:37 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
(* todo: switch to normal mode, save tempSearchList and searchString,
|
|
|
|
|
* and redraw *)
|
|
|
|
|
fun finishSearch (app: app_type, searchString, tempSearchList) = app
|
|
|
|
|
|
|
|
|
|
fun update (app, {searchString, tempSearchList}, msg, time) =
|
2025-08-31 02:10:57 +01:00
|
|
|
case msg of
|
2025-08-31 02:41:37 +01:00
|
|
|
CHAR_EVENT chr => parseChr (app, searchString, chr)
|
2025-08-31 06:28:05 +01:00
|
|
|
| KEY_ESC => NormalFinish.clearMode app
|
2025-08-31 02:41:37 +01:00
|
|
|
| KEY_ENTER => finishSearch (app, searchString, tempSearchList)
|
2025-08-31 02:10:57 +01:00
|
|
|
| RESIZE_EVENT (width, height) => app
|
|
|
|
|
| WITH_SEARCH_LIST searchList => app
|
|
|
|
|
end
|