only update search list if timestamp for search message is greater than the buffer's modified time

This commit is contained in:
2025-09-07 13:37:14 +01:00
parent f3c1905c0c
commit 299735f500
5 changed files with 20 additions and 12 deletions

View File

@@ -49,14 +49,21 @@ struct
)
end
fun withSearchList (app: app_type, searchList) =
fun withSearchList (app: app_type, searchList, searchTime) =
let
val {buffer, searchString, cursorIdx, bufferModifyTime, ...} = app
val app = NormalModeWith.searchList
(app, searchList, buffer, searchString, bufferModifyTime)
open Time
in
buildTextAndClear
(app, buffer, cursorIdx, searchList, [], bufferModifyTime)
if searchTime >= #bufferModifyTime app then
let
val {buffer, searchString, cursorIdx, bufferModifyTime, ...} = app
val app = NormalModeWith.searchList
(app, searchList, buffer, searchString, bufferModifyTime)
in
buildTextAndClear
(app, buffer, cursorIdx, searchList, [], bufferModifyTime)
end
else
app
end
fun resizeText (app: app_type, newWidth, newHeight) =

View File

@@ -522,8 +522,8 @@ struct
| KEY_ESC => NormalFinish.clearMode app
| RESIZE_EVENT (width, height) =>
NormalFinish.resizeText (app, width, height)
| WITH_SEARCH_LIST searchList =>
NormalFinish.withSearchList (app, searchList)
| WITH_SEARCH_LIST (searchList, time) =>
NormalFinish.withSearchList (app, searchList, time)
(* Don't need to handle these keys in normal mode.
* Everything that is possible through them in Vi and Vim

View File

@@ -141,8 +141,8 @@ struct
moveLeft (app, searchString, tempSearchList, searchCursorIdx)
| ARROW_RIGHT =>
moveRight (app, searchString, tempSearchList, searchCursorIdx)
| WITH_SEARCH_LIST searchList =>
NormalSearchModeWith.searchList (app, searchList)
| WITH_SEARCH_LIST (searchList, time) =>
NormalFinish.withSearchList (app, searchList, time)
| RESIZE_EVENT (width, height) =>
NormalSearchFinish.resize
(app, width, height, searchCursorIdx, tempSearchList)

View File

@@ -6,7 +6,7 @@ struct
| KEY_ENTER
| KEY_BACKSPACE
| RESIZE_EVENT of int * int
| WITH_SEARCH_LIST of int vector
| WITH_SEARCH_LIST of int vector * Time.time
| ARROW_LEFT
| ARROW_UP
| ARROW_RIGHT

View File

@@ -7,7 +7,8 @@ struct
let
val (buffer, searchString, time) = Mailbox.recv searchMailbox
val searchList = SearchList.build (buffer, searchString)
val () = Mailbox.send (inputMailbox, InputMsg.WITH_SEARCH_LIST searchList)
val msg = InputMsg.WITH_SEARCH_LIST (searchList, time)
val () = Mailbox.send (inputMailbox, msg)
in
loop (searchMailbox, inputMailbox)
end