From d7f69574afee1010a6e670962e866e1d462d8de3 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Tue, 2 Sep 2025 12:39:50 +0100 Subject: [PATCH] a bit of refactoring --- fcore/normal-mode/normal-mode.sml | 87 ++---------------------------- fcore/normal-mode/normal-yank.sml | 89 ++++++++++++++++++++++++++----- 2 files changed, 80 insertions(+), 96 deletions(-) diff --git a/fcore/normal-mode/normal-mode.sml b/fcore/normal-mode/normal-mode.sml index 8642b50..b3fc443 100644 --- a/fcore/normal-mode/normal-mode.sml +++ b/fcore/normal-mode/normal-mode.sml @@ -256,90 +256,9 @@ struct | #"E" => NormalYank.yankWhenMovingForward (app, Cursor.endOfWORDForDelete, count) | #"$" => NormalYank.yankWhenMovingForward (app, Cursor.viDlr, 1) - | #"^" => - let - open DrawMsg - open MailboxType - - val {buffer, cursorIdx, ...} = app - - val buffer = LineGap.goToIdx (cursorIdx, buffer) - val otherIdx = Cursor.vi0 (buffer, cursorIdx) - - val buffer = LineGap.goToIdx (otherIdx, buffer) - val otherIdx = Cursor.firstNonSpaceChr (buffer, otherIdx) - in - if cursorIdx > otherIdx then - (* yanking backwards from cursorIdx *) - let - val () = print "272\n" - val length = cursorIdx - otherIdx + 1 - val buffer = LineGap.goToIdx (otherIdx, buffer) - - val str = LineGap.substring (otherIdx, length, buffer) - val msg = YANK str - val mode = NORMAL_MODE "" - in - NormalModeWith.modeAndBuffer (app, buffer, mode, [DRAW msg]) - end - else if cursorIdx < otherIdx then - (* yanking forward from cursorIdx *) - let - val length = otherIdx - cursorIdx - val str = LineGap.substring (cursorIdx, length, buffer) - val msg = YANK str - val mode = NORMAL_MODE "" - in - NormalModeWith.modeAndBuffer (app, buffer, mode, [DRAW msg]) - end - else - NormalFinish.clearMode app - end - | #"G" => - let - open DrawMsg - open MailboxType - - val {buffer, cursorIdx, ...} = app - - val buffer = LineGap.goToEnd buffer - val {rightStrings, idx, ...} = buffer - val finishIdx = Int.max (0, idx - 1) - - val length = finishIdx - cursorIdx - val str = LineGap.substring (cursorIdx, length, buffer) - - val msg = YANK str - val mode = NORMAL_MODE "" - in - NormalModeWith.modeAndBuffer (app, buffer, mode, [DRAW msg]) - end - | #"%" => - let - open DrawMsg - open MailboxType - - val {buffer, cursorIdx, ...} = app - - val otherIdx = Cursor.matchPair (buffer, cursorIdx) - in - if cursorIdx = otherIdx then - NormalFinish.clearMode app - else - let - val low = Int.min (cursorIdx, otherIdx) - val high = Int.max (cursorIdx, otherIdx) - val length = high - low + 1 - - val buffer = LineGap.goToIdx (high, buffer) - val str = LineGap.substring (low, length, buffer) - - val msg = YANK str - val mode = NORMAL_MODE "" - in - NormalModeWith.modeAndBuffer (app, buffer, mode, [DRAW msg]) - end - end + | #"^" => NormalYank.yankToFirstNonSpaceChr app + | #"G" => NormalYank.yankToEndOfText app + | #"%" => NormalYank.yankToMatchingPair app | #"n" => let open DrawMsg diff --git a/fcore/normal-mode/normal-yank.sml b/fcore/normal-mode/normal-yank.sml index 3b3b65e..1d75d97 100644 --- a/fcore/normal-mode/normal-yank.sml +++ b/fcore/normal-mode/normal-yank.sml @@ -6,9 +6,6 @@ struct fun yankLine (app: app_type, count) = let - open DrawMsg - open MailboxType - val {buffer, cursorIdx, ...} = app val buffer = LineGap.goToIdx (cursorIdx, buffer) @@ -29,9 +26,6 @@ struct fun yankToStartOfLine (app: app_type) = let - open DrawMsg - open MailboxType - val {buffer, cursorIdx, ...} = app val buffer = LineGap.goToIdx (cursorIdx, buffer) @@ -48,9 +42,6 @@ struct fun yankWhenMovingBack (app: app_type, fMove, count) = let - open DrawMsg - open MailboxType - val {buffer, cursorIdx, ...} = app val buffer = LineGap.goToIdx (cursorIdx, buffer) @@ -67,9 +58,6 @@ struct fun yankWhenMovingForward (app: app_type, fMove, count) = let - open DrawMsg - open MailboxType - val {buffer, cursorIdx, ...} = app val buffer = LineGap.goToIdx (cursorIdx, buffer) @@ -84,4 +72,81 @@ struct in NormalModeWith.modeAndBuffer (app, buffer, mode, [DRAW msg]) end + + fun yankToFirstNonSpaceChr (app: app_type) = + let + val {buffer, cursorIdx, ...} = app + + val buffer = LineGap.goToIdx (cursorIdx, buffer) + val otherIdx = Cursor.vi0 (buffer, cursorIdx) + + val buffer = LineGap.goToIdx (otherIdx, buffer) + val otherIdx = Cursor.firstNonSpaceChr (buffer, otherIdx) + in + if cursorIdx > otherIdx then + (* yanking backwards from cursorIdx *) + let + val () = print "272\n" + val length = cursorIdx - otherIdx + 1 + val buffer = LineGap.goToIdx (otherIdx, buffer) + + val str = LineGap.substring (otherIdx, length, buffer) + val msg = YANK str + val mode = NORMAL_MODE "" + in + NormalModeWith.modeAndBuffer (app, buffer, mode, [DRAW msg]) + end + else if cursorIdx < otherIdx then + (* yanking forward from cursorIdx *) + let + val length = otherIdx - cursorIdx + val str = LineGap.substring (cursorIdx, length, buffer) + val msg = YANK str + val mode = NORMAL_MODE "" + in + NormalModeWith.modeAndBuffer (app, buffer, mode, [DRAW msg]) + end + else + NormalFinish.clearMode app + end + + fun yankToEndOfText (app: app_type) = + let + val {buffer, cursorIdx, ...} = app + + val buffer = LineGap.goToEnd buffer + val {rightStrings, idx, ...} = buffer + val finishIdx = Int.max (0, idx - 1) + + val length = finishIdx - cursorIdx + val str = LineGap.substring (cursorIdx, length, buffer) + + val msg = YANK str + val mode = NORMAL_MODE "" + in + NormalModeWith.modeAndBuffer (app, buffer, mode, [DRAW msg]) + end + + fun yankToMatchingPair (app: app_type) = + let + val {buffer, cursorIdx, ...} = app + val otherIdx = Cursor.matchPair (buffer, cursorIdx) + in + if cursorIdx = otherIdx then + NormalFinish.clearMode app + else + let + val low = Int.min (cursorIdx, otherIdx) + val high = Int.max (cursorIdx, otherIdx) + val length = high - low + 1 + + val buffer = LineGap.goToIdx (high, buffer) + val str = LineGap.substring (low, length, buffer) + + val msg = YANK str + val mode = NORMAL_MODE "" + in + NormalModeWith.modeAndBuffer (app, buffer, mode, [DRAW msg]) + end + end end