implemented 'yh' motion (yank left)

This commit is contained in:
2026-01-05 10:39:42 +00:00
parent d2f32c1512
commit adb8757ed8
3 changed files with 22 additions and 6 deletions

View File

@@ -461,11 +461,8 @@ struct
fun parseYankTerminal (str, count, app, chrCmd, time) = fun parseYankTerminal (str, count, app, chrCmd, time) =
case chrCmd of case chrCmd of
(* motions like yh / yj / yk / yl are not really needed. #"h" => NormalYank.yankLeft (app, count)
* Vim supports them, but I never use them. | #"y" => NormalYank.yankLine (app, count)
* I also don't need yx (yank a character and then remove it)
* because I never do that. *)
#"y" => NormalYank.yankLine (app, count)
| #"0" => NormalYank.yankToStartOfLine app | #"0" => NormalYank.yankToStartOfLine app
| #"w" => NormalYank.yankWhenMovingForward (app, Cursor.nextWord, count) | #"w" => NormalYank.yankWhenMovingForward (app, Cursor.nextWord, count)
| #"W" => NormalYank.yankWhenMovingForward (app, Cursor.nextWORD, count) | #"W" => NormalYank.yankWhenMovingForward (app, Cursor.nextWORD, count)

View File

@@ -4,6 +4,24 @@ struct
open DrawMsg open DrawMsg
open MailboxType open MailboxType
fun yankLeft (app: app_type, count) =
let
val {buffer, cursorIdx, ...} = app
val buffer = LineGap.goToIdx (cursorIdx, buffer)
val min = Cursor.vi0 (buffer, cursorIdx)
val low = Cursor.viH (buffer, cursorIdx, 1)
val low = Int.max (min, low)
val length = cursorIdx - 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 yankLine (app: app_type, count) = fun yankLine (app: app_type, count) =
let let
val {buffer, cursorIdx, ...} = app val {buffer, cursorIdx, ...} = app

View File

@@ -1,3 +1,4 @@
# To-do list # To-do list
- Add yank commands like yh/yj/yk/yl as well and then add tests for yanking. - Implement `yh` motion.
- Implemented. Add tests for it next (based on tests for 'dh' motion).