From 299735f500678c0ca479fad5fa120a5ff2416b29 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Sun, 7 Sep 2025 13:37:14 +0100 Subject: [PATCH] only update search list if timestamp for search message is greater than the buffer's modified time --- fcore/normal-mode/normal-finish.sml | 19 +++++++++++++------ fcore/normal-mode/normal-mode.sml | 4 ++-- fcore/normal-mode/normal-search-mode.sml | 4 ++-- message-types/input-msg.sml | 2 +- shell/search-thread.sml | 3 ++- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/fcore/normal-mode/normal-finish.sml b/fcore/normal-mode/normal-finish.sml index b04d8c7..23bce07 100644 --- a/fcore/normal-mode/normal-finish.sml +++ b/fcore/normal-mode/normal-finish.sml @@ -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) = diff --git a/fcore/normal-mode/normal-mode.sml b/fcore/normal-mode/normal-mode.sml index dfeca4e..bcdef12 100644 --- a/fcore/normal-mode/normal-mode.sml +++ b/fcore/normal-mode/normal-mode.sml @@ -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 diff --git a/fcore/normal-mode/normal-search-mode.sml b/fcore/normal-mode/normal-search-mode.sml index 03c3067..1a40718 100644 --- a/fcore/normal-mode/normal-search-mode.sml +++ b/fcore/normal-mode/normal-search-mode.sml @@ -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) diff --git a/message-types/input-msg.sml b/message-types/input-msg.sml index dddc096..cf7c974 100644 --- a/message-types/input-msg.sml +++ b/message-types/input-msg.sml @@ -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 diff --git a/shell/search-thread.sml b/shell/search-thread.sml index dcc1d64..945c211 100644 --- a/shell/search-thread.sml +++ b/shell/search-thread.sml @@ -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