add searchScrollColumn to NORMAL_SEARCH_MODE variant, and update and recalculate it where needed
This commit is contained in:
@@ -2,8 +2,12 @@ structure AppType =
|
|||||||
struct
|
struct
|
||||||
datatype mode =
|
datatype mode =
|
||||||
NORMAL_MODE of string
|
NORMAL_MODE of string
|
||||||
| NORMAL_SEARCH_MODE of {searchString: string, tempSearchList: int vector,
|
| NORMAL_SEARCH_MODE of
|
||||||
searchCursorIdx: int}
|
{ searchString: string
|
||||||
|
, tempSearchList: int vector
|
||||||
|
, searchCursorIdx: int
|
||||||
|
, searchScrollColumn: int
|
||||||
|
}
|
||||||
|
|
||||||
type app_type =
|
type app_type =
|
||||||
{ mode: mode
|
{ mode: mode
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ struct
|
|||||||
|
|
||||||
fun switchToNormalSearchMode (app: app_type) =
|
fun switchToNormalSearchMode (app: app_type) =
|
||||||
NormalSearchFinish.onSearchChanged
|
NormalSearchFinish.onSearchChanged
|
||||||
(app, "", Vector.fromList [], 0, #buffer app)
|
(app, "", Vector.fromList [], 0, 0, #buffer app)
|
||||||
|
|
||||||
fun getNumLength (pos, str) =
|
fun getNumLength (pos, str) =
|
||||||
if pos = String.size str then
|
if pos = String.size str then
|
||||||
|
|||||||
@@ -4,7 +4,13 @@ struct
|
|||||||
open DrawMsg
|
open DrawMsg
|
||||||
|
|
||||||
fun onSearchChanged
|
fun onSearchChanged
|
||||||
(app: app_type, searchString, tempSearchList, searchCursorIdx, buffer) =
|
( app: app_type
|
||||||
|
, searchString
|
||||||
|
, tempSearchList
|
||||||
|
, searchCursorIdx
|
||||||
|
, searchScrollColumn
|
||||||
|
, buffer
|
||||||
|
) =
|
||||||
let
|
let
|
||||||
val
|
val
|
||||||
{ buffer
|
{ buffer
|
||||||
@@ -16,10 +22,15 @@ struct
|
|||||||
, ...
|
, ...
|
||||||
} = app
|
} = app
|
||||||
|
|
||||||
|
val searchScrollColumn =
|
||||||
|
TextScroll.getScrollColumnFromString
|
||||||
|
(searchCursorIdx, windowWidth, searchScrollColumn)
|
||||||
|
|
||||||
val mode = NORMAL_SEARCH_MODE
|
val mode = NORMAL_SEARCH_MODE
|
||||||
{ searchString = searchString
|
{ searchString = searchString
|
||||||
, tempSearchList = tempSearchList
|
, tempSearchList = tempSearchList
|
||||||
, searchCursorIdx = searchCursorIdx
|
, searchCursorIdx = searchCursorIdx
|
||||||
|
, searchScrollColumn = searchScrollColumn
|
||||||
}
|
}
|
||||||
|
|
||||||
val floatWindowWidth = Real32.fromInt windowWidth
|
val floatWindowWidth = Real32.fromInt windowWidth
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ struct
|
|||||||
in SearchList.buildRange (buffer, unescapedString, cursorIdx + 1111)
|
in SearchList.buildRange (buffer, unescapedString, cursorIdx + 1111)
|
||||||
end
|
end
|
||||||
|
|
||||||
fun addChr (app: app_type, searchString, searchCursorIdx, chr) =
|
fun addChr
|
||||||
|
(app: app_type, searchString, searchCursorIdx, searchScrollColumn, chr) =
|
||||||
let
|
let
|
||||||
val {cursorIdx, buffer, ...} = app
|
val {cursorIdx, buffer, ...} = app
|
||||||
|
|
||||||
@@ -31,7 +32,13 @@ struct
|
|||||||
val tempSearchList = buildTempSearchList (searchString, buffer, cursorIdx)
|
val tempSearchList = buildTempSearchList (searchString, buffer, cursorIdx)
|
||||||
in
|
in
|
||||||
NormalSearchFinish.onSearchChanged
|
NormalSearchFinish.onSearchChanged
|
||||||
(app, searchString, tempSearchList, searchCursorIdx, buffer)
|
( app
|
||||||
|
, searchString
|
||||||
|
, tempSearchList
|
||||||
|
, searchCursorIdx
|
||||||
|
, searchScrollColumn
|
||||||
|
, buffer
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
(* return to normal mode, keeping the same searchString and searchList
|
(* return to normal mode, keeping the same searchString and searchList
|
||||||
@@ -87,7 +94,13 @@ struct
|
|||||||
(app, buffer, searchString, tempSearchList, startLine, mode, msgs)
|
(app, buffer, searchString, tempSearchList, startLine, mode, msgs)
|
||||||
end
|
end
|
||||||
|
|
||||||
fun backspace (app: app_type, searchString, tempSearchList, searchCursorIdx) =
|
fun backspace
|
||||||
|
( app: app_type
|
||||||
|
, searchString
|
||||||
|
, tempSearchList
|
||||||
|
, searchScrollColumn
|
||||||
|
, searchCursorIdx
|
||||||
|
) =
|
||||||
if searchCursorIdx = 0 then
|
if searchCursorIdx = 0 then
|
||||||
app
|
app
|
||||||
else
|
else
|
||||||
@@ -112,10 +125,17 @@ struct
|
|||||||
buildTempSearchList (searchString, buffer, cursorIdx)
|
buildTempSearchList (searchString, buffer, cursorIdx)
|
||||||
in
|
in
|
||||||
NormalSearchFinish.onSearchChanged
|
NormalSearchFinish.onSearchChanged
|
||||||
(app, searchString, tempSearchList, searchCursorIdx, buffer)
|
( app
|
||||||
|
, searchString
|
||||||
|
, tempSearchList
|
||||||
|
, searchCursorIdx
|
||||||
|
, searchScrollColumn
|
||||||
|
, buffer
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
fun moveLeft (app, searchString, tempSearchList, searchCursorIdx) =
|
fun moveLeft
|
||||||
|
(app, searchString, tempSearchList, searchCursorIdx, searchScrollColumn) =
|
||||||
if searchCursorIdx = 0 then
|
if searchCursorIdx = 0 then
|
||||||
app
|
app
|
||||||
else
|
else
|
||||||
@@ -123,10 +143,17 @@ struct
|
|||||||
val searchCursorIdx = searchCursorIdx - 1
|
val searchCursorIdx = searchCursorIdx - 1
|
||||||
in
|
in
|
||||||
NormalSearchFinish.onSearchChanged
|
NormalSearchFinish.onSearchChanged
|
||||||
(app, searchString, tempSearchList, searchCursorIdx, #buffer app)
|
( app
|
||||||
|
, searchString
|
||||||
|
, tempSearchList
|
||||||
|
, searchCursorIdx
|
||||||
|
, searchScrollColumn
|
||||||
|
, #buffer app
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
fun moveRight (app, searchString, tempSearchList, searchCursorIdx) =
|
fun moveRight
|
||||||
|
(app, searchString, tempSearchList, searchCursorIdx, searchScrollColumn) =
|
||||||
if searchCursorIdx = String.size searchString then
|
if searchCursorIdx = String.size searchString then
|
||||||
app
|
app
|
||||||
else
|
else
|
||||||
@@ -134,20 +161,50 @@ struct
|
|||||||
val searchCursorIdx = searchCursorIdx + 1
|
val searchCursorIdx = searchCursorIdx + 1
|
||||||
in
|
in
|
||||||
NormalSearchFinish.onSearchChanged
|
NormalSearchFinish.onSearchChanged
|
||||||
(app, searchString, tempSearchList, searchCursorIdx, #buffer app)
|
( app
|
||||||
|
, searchString
|
||||||
|
, tempSearchList
|
||||||
|
, searchCursorIdx
|
||||||
|
, searchScrollColumn
|
||||||
|
, #buffer app
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
fun update (app, {searchString, tempSearchList, searchCursorIdx}, msg, time) =
|
fun update
|
||||||
|
( app
|
||||||
|
, {searchString, tempSearchList, searchCursorIdx, searchScrollColumn}
|
||||||
|
, msg
|
||||||
|
, time
|
||||||
|
) =
|
||||||
case msg of
|
case msg of
|
||||||
CHAR_EVENT chr => addChr (app, searchString, searchCursorIdx, chr)
|
CHAR_EVENT chr =>
|
||||||
|
addChr (app, searchString, searchCursorIdx, searchScrollColumn, chr)
|
||||||
| KEY_BACKSPACE =>
|
| KEY_BACKSPACE =>
|
||||||
backspace (app, searchString, tempSearchList, searchCursorIdx)
|
backspace
|
||||||
|
( app
|
||||||
|
, searchString
|
||||||
|
, tempSearchList
|
||||||
|
, searchScrollColumn
|
||||||
|
, searchCursorIdx
|
||||||
|
)
|
||||||
| KEY_ESC => exitToNormalMode app
|
| KEY_ESC => exitToNormalMode app
|
||||||
| KEY_ENTER => saveSearch (app, searchString, tempSearchList, time)
|
| KEY_ENTER => saveSearch (app, searchString, tempSearchList, time)
|
||||||
| ARROW_LEFT =>
|
| ARROW_LEFT =>
|
||||||
moveLeft (app, searchString, tempSearchList, searchCursorIdx)
|
moveLeft
|
||||||
|
( app
|
||||||
|
, searchString
|
||||||
|
, tempSearchList
|
||||||
|
, searchCursorIdx
|
||||||
|
, searchScrollColumn
|
||||||
|
)
|
||||||
| ARROW_RIGHT =>
|
| ARROW_RIGHT =>
|
||||||
moveRight (app, searchString, tempSearchList, searchCursorIdx)
|
moveRight
|
||||||
|
( app
|
||||||
|
, searchString
|
||||||
|
, tempSearchList
|
||||||
|
, searchCursorIdx
|
||||||
|
, searchScrollColumn
|
||||||
|
)
|
||||||
| WITH_SEARCH_LIST (searchList, time) =>
|
| WITH_SEARCH_LIST (searchList, time) =>
|
||||||
NormalFinish.withSearchList (app, searchList, time)
|
NormalFinish.withSearchList (app, searchList, time)
|
||||||
| RESIZE_EVENT (width, height) =>
|
| RESIZE_EVENT (width, height) =>
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ struct
|
|||||||
(startOfLine, cursorIdx, windowWidth, prevScrollColumn)
|
(startOfLine, cursorIdx, windowWidth, prevScrollColumn)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
fun getScrollColumnFromString (cursorIdx, windowWidth, prevScrollColumn) =
|
||||||
|
calculateScrollColumn (0, cursorIdx, windowWidth, prevScrollColumn)
|
||||||
|
|
||||||
fun getStartLine (prevLineNumber, cursorLine, windowHeight) =
|
fun getStartLine (prevLineNumber, cursorLine, windowHeight) =
|
||||||
if cursorLine <= (prevLineNumber + 3) then
|
if cursorLine <= (prevLineNumber + 3) then
|
||||||
(* cursorLine is prior to or same as prevLineNumber,
|
(* cursorLine is prior to or same as prevLineNumber,
|
||||||
|
|||||||
Reference in New Issue
Block a user