From 0632f7a969e8dafcdccd837bf081fc539bb1b9d3 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Sun, 14 Sep 2025 10:07:43 +0100 Subject: [PATCH] add horizontal scrolling functionality to SearchBar --- fcore/normal-mode/normal-search-finish.sml | 3 +++ fcore/normal-mode/normal-search-mode.sml | 13 ++++++++++--- fcore/text-builder/search-bar.sml | 6 ++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/fcore/normal-mode/normal-search-finish.sml b/fcore/normal-mode/normal-search-finish.sml index 75f1390..248a4a8 100644 --- a/fcore/normal-mode/normal-search-finish.sml +++ b/fcore/normal-mode/normal-search-finish.sml @@ -46,6 +46,7 @@ struct , floatWindowWidth , floatWindowHeight , searchCursorIdx + , searchScrollColumn ) val buffer = LineGap.goToIdx (cursorIdx, buffer) @@ -83,6 +84,7 @@ struct , newWindowHeight , searchCursorIdx , tempSearchList + , searchScrollColumn ) = let val @@ -107,6 +109,7 @@ struct , floatWindowWidth , floatWindowHeight , searchCursorIdx + , searchScrollColumn ) val cursor = diff --git a/fcore/normal-mode/normal-search-mode.sml b/fcore/normal-mode/normal-search-mode.sml index b9109f4..df763d0 100644 --- a/fcore/normal-mode/normal-search-mode.sml +++ b/fcore/normal-mode/normal-search-mode.sml @@ -140,7 +140,7 @@ struct app else let - val searchCursorIdx = searchCursorIdx - 1 + val searchCursorIdx = Int.max (0, searchCursorIdx - 1) in NormalSearchFinish.onSearchChanged ( app @@ -158,7 +158,8 @@ struct app else let - val searchCursorIdx = searchCursorIdx + 1 + val searchCursorIdx = + Int.min (searchCursorIdx + 1, String.size searchString) in NormalSearchFinish.onSearchChanged ( app @@ -209,7 +210,13 @@ struct NormalFinish.withSearchList (app, searchList, time) | RESIZE_EVENT (width, height) => NormalSearchFinish.resize - (app, width, height, searchCursorIdx, tempSearchList) + ( app + , width + , height + , searchCursorIdx + , tempSearchList + , searchScrollColumn + ) (* In Vim's search mode, the up and down arrows can be used * to scroll through the search history. diff --git a/fcore/text-builder/search-bar.sml b/fcore/text-builder/search-bar.sml index b4ef5ea..3bb4f2b 100644 --- a/fcore/text-builder/search-bar.sml +++ b/fcore/text-builder/search-bar.sml @@ -58,6 +58,7 @@ struct , floatWindowWidth , floatWindowHeight , searchCursorIdx + , searchScrollColumn ) = let val r: Real32.real = 0.67 @@ -95,7 +96,8 @@ struct val cursor = let - val xpos = TextConstants.xSpace * (searchCursorIdx + 1) + startX + val xpos = (searchCursorIdx + 1) - searchScrollColumn + val xpos = TextConstants.xSpace * xpos + startX val xpos = Int.min (endX, xpos) val x = Real32.fromInt xpos in @@ -115,7 +117,7 @@ struct val posX = startX + TC.xSpace in loop - ( 0 + ( searchScrollColumn , str , posX , startY