done implementing 'yankInside' functions and functionality.
This commit is contained in:
@@ -125,10 +125,10 @@ struct
|
|||||||
|
|
||||||
fun parseDeleteAround (app, chr, time) =
|
fun parseDeleteAround (app, chr, time) =
|
||||||
case chr of
|
case chr of
|
||||||
#"(" => NormalDelete.deleteInsideChrOpen (app, chr, time)
|
#"(" => NormalDelete.deleteAroundChrOpen (app, chr, time)
|
||||||
| #"[" => NormalDelete.deleteInsideChrOpen (app, chr, time)
|
| #"[" => NormalDelete.deleteAroundChrOpen (app, chr, time)
|
||||||
| #"{" => NormalDelete.deleteInsideChrOpen (app, chr, time)
|
| #"{" => NormalDelete.deleteAroundChrOpen (app, chr, time)
|
||||||
| #"<" => NormalDelete.deleteInsideChrOpen (app, chr, time)
|
| #"<" => NormalDelete.deleteAroundChrOpen (app, chr, time)
|
||||||
| #")" => NormalDelete.deleteAroundChrClose (app, chr, time)
|
| #")" => NormalDelete.deleteAroundChrClose (app, chr, time)
|
||||||
| #"]" => NormalDelete.deleteAroundChrClose (app, chr, time)
|
| #"]" => NormalDelete.deleteAroundChrClose (app, chr, time)
|
||||||
| #"}" => NormalDelete.deleteAroundChrClose (app, chr, time)
|
| #"}" => NormalDelete.deleteAroundChrClose (app, chr, time)
|
||||||
@@ -297,23 +297,20 @@ struct
|
|||||||
case chr of
|
case chr of
|
||||||
#"w" => NormalYank.yankInsideWord app
|
#"w" => NormalYank.yankInsideWord app
|
||||||
| #"W" => NormalYank.yankInsideWORD app
|
| #"W" => NormalYank.yankInsideWORD app
|
||||||
(*
|
| #"(" => NormalYank.yankInsideChrOpen (app, chr)
|
||||||
| #"(" => NormalDelete.deleteInsideChrOpen (app, chr)
|
| #"[" => NormalYank.yankInsideChrOpen (app, chr)
|
||||||
| #"[" => NormalDelete.deleteInsideChrOpen (app, chr)
|
| #"{" => NormalYank.yankInsideChrOpen (app, chr)
|
||||||
| #"{" => NormalDelete.deleteInsideChrOpen (app, chr)
|
| #"<" => NormalYank.yankInsideChrOpen (app, chr)
|
||||||
| #"<" => NormalDelete.deleteInsideChrOpen (app, chr)
|
| #")" => NormalYank.yankInsideChrClose (app, chr)
|
||||||
| #")" => NormalDelete.deleteInsideChrClose (app, chr)
|
| #"]" => NormalYank.yankInsideChrClose (app, chr)
|
||||||
| #"]" => NormalDelete.deleteInsideChrClose (app, chr)
|
| #"}" => NormalYank.yankInsideChrClose (app, chr)
|
||||||
| #"}" => NormalDelete.deleteInsideChrClose (app, chr)
|
| #">" => NormalYank.yankInsideChrClose (app, chr)
|
||||||
| #">" => NormalDelete.deleteInsideChrClose (app, chr)
|
|
||||||
*)
|
|
||||||
| _ => NormalFinish.clearMode app
|
| _ => NormalFinish.clearMode app
|
||||||
|
|
||||||
fun parseYank (strPos, str, count, app, chrCmd, time) =
|
fun parseYank (strPos, str, count, app, chrCmd, time) =
|
||||||
if strPos = String.size str - 1 then
|
if strPos = String.size str - 1 then
|
||||||
parseYankTerminal (str, count, app, chrCmd, time)
|
parseYankTerminal (str, count, app, chrCmd, time)
|
||||||
else
|
else
|
||||||
(* todo: handle non-terminal characters *)
|
|
||||||
case String.sub (str, strPos + 1) of
|
case String.sub (str, strPos + 1) of
|
||||||
#"t" => NormalYank.yankToChr (app, 1, Cursor.tillNextChr, op+, chrCmd)
|
#"t" => NormalYank.yankToChr (app, 1, Cursor.tillNextChr, op+, chrCmd)
|
||||||
| #"T" => NormalYank.yankToChr (app, 1, Cursor.tillPrevChr, op-, chrCmd)
|
| #"T" => NormalYank.yankToChr (app, 1, Cursor.tillPrevChr, op-, chrCmd)
|
||||||
@@ -323,7 +320,7 @@ struct
|
|||||||
NormalYank.yankToChr (app, count, Cursor.toPrevChr, op-, chrCmd)
|
NormalYank.yankToChr (app, count, Cursor.toPrevChr, op-, chrCmd)
|
||||||
| #"g" => parseYankGo (count, app, chrCmd)
|
| #"g" => parseYankGo (count, app, chrCmd)
|
||||||
| #"i" => parseYankInside (app, chrCmd)
|
| #"i" => parseYankInside (app, chrCmd)
|
||||||
(*
|
(* todo: implement "yankaround" and "yankDelete"
|
||||||
| #"a" =>
|
| #"a" =>
|
||||||
| #"d" =>
|
| #"d" =>
|
||||||
*)
|
*)
|
||||||
|
|||||||
@@ -273,7 +273,7 @@ struct
|
|||||||
val msg = YANK str
|
val msg = YANK str
|
||||||
val mode = NORMAL_MODE ""
|
val mode = NORMAL_MODE ""
|
||||||
in
|
in
|
||||||
if str = "\n" then app
|
if str = "\n" then NormalFinish.clearMode app
|
||||||
else NormalModeWith.modeAndBuffer (app, buffer, mode, [DRAW msg])
|
else NormalModeWith.modeAndBuffer (app, buffer, mode, [DRAW msg])
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -292,7 +292,48 @@ struct
|
|||||||
val msg = YANK str
|
val msg = YANK str
|
||||||
val mode = NORMAL_MODE ""
|
val mode = NORMAL_MODE ""
|
||||||
in
|
in
|
||||||
if str = "\n" then app
|
if str = "\n" then NormalFinish.clearMode app
|
||||||
else NormalModeWith.modeAndBuffer (app, buffer, mode, [DRAW msg])
|
else NormalModeWith.modeAndBuffer (app, buffer, mode, [DRAW msg])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
fun finishAfterYankInside (app: app_type, low, high, buffer) =
|
||||||
|
let
|
||||||
|
val length = high - low
|
||||||
|
val str = LineGap.substring (low, length, buffer)
|
||||||
|
val msg = YANK str
|
||||||
|
val mode = NORMAL_MODE ""
|
||||||
|
in
|
||||||
|
NormalModeWith.modeAndBuffer (app, buffer, mode, [DRAW msg])
|
||||||
|
end
|
||||||
|
|
||||||
|
fun yankInsideChrOpen (app: app_type, chr) =
|
||||||
|
let
|
||||||
|
val {cursorIdx, buffer, ...} = app
|
||||||
|
|
||||||
|
val start = cursorIdx + 1
|
||||||
|
val buffer = LineGap.goToIdx (start, buffer)
|
||||||
|
|
||||||
|
val low = Cursor.toPrevChr (buffer, start, chr)
|
||||||
|
val buffer = LineGap.goToIdx (low, buffer)
|
||||||
|
val high = Cursor.matchPair (buffer, low)
|
||||||
|
val buffer = LineGap.goToIdx (high, buffer)
|
||||||
|
in
|
||||||
|
if low = high then NormalFinish.clearMode app
|
||||||
|
else finishAfterYankInside (app, low + 1, high, buffer)
|
||||||
|
end
|
||||||
|
|
||||||
|
fun yankInsideChrClose (app: app_type, chr) =
|
||||||
|
let
|
||||||
|
val {cursorIdx, buffer, ...} = app
|
||||||
|
|
||||||
|
val start = Int.max (cursorIdx - 1, 0)
|
||||||
|
val buffer = LineGap.goToIdx (start, buffer)
|
||||||
|
|
||||||
|
val high = Cursor.toNextChr (buffer, start, chr)
|
||||||
|
val buffer = LineGap.goToIdx (high, buffer)
|
||||||
|
val low = Cursor.matchPair (buffer, high)
|
||||||
|
in
|
||||||
|
if low = high then NormalFinish.clearMode app
|
||||||
|
else finishAfterYankInside (app, low, high, buffer)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user