From 34d56eb47c19276ac99e09c6dc5a2375a036de48 Mon Sep 17 00:00:00 2001 From: Patrick Cleaveliln Date: Sat, 12 Jul 2025 00:45:38 +0000 Subject: [PATCH] fix yanking and pasting --- src/input/input.odin | 2 ++ src/tests/tests.odin | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/input/input.odin b/src/input/input.odin index cf717b8..7f885a9 100644 --- a/src/input/input.odin +++ b/src/input/input.odin @@ -250,10 +250,12 @@ register_default_text_input_actions :: proc(input_map: ^core.InputActions) { if state.yank_register.whole_line { core.move_cursor_end_of_line(core.current_buffer(state), false); core.insert_content(core.current_buffer(state), []u8{'\n'}); + core.move_cursor_right(core.current_buffer(state), false); } else { core.move_cursor_right(core.current_buffer(state)) } core.paste_register(state, state.yank_register) + core.move_cursor_start_of_line(core.current_buffer(state)) core.reset_input_map(state) }, "Paste"); diff --git a/src/tests/tests.odin b/src/tests/tests.odin index 4827042..79f5be6 100644 --- a/src/tests/tests.odin +++ b/src/tests/tests.odin @@ -571,6 +571,32 @@ insert_line_under_current :: proc(t: ^testing.T) { testing.expectf(t, contents == expected_text, "got '%v', expected '%v'", contents, expected_text) } +@(test) +yank_and_paste_whole_line :: proc(t: ^testing.T) { + e := new_test_editor() + setup_empty_buffer(&e) + + buffer := &e.buffers[0] + + initial_text := "Hello, world!\nThis is a new line" + run_text_insertion(&e, initial_text) + + expected_text := "Hello, world!\nThis is a new line\nThis is a new line\n" + + // Copy whole line + run_input_multiple(&e, press_key(.Y), 2) + + // Move up to "Hello, world!" + run_input_multiple(&e, press_key(.K), 1) + + // Paste it below current one + run_input_multiple(&e, press_key(.P), 1) + + expect_line_col(t, buffer.cursor, 1, 0) + + contents := buffer_to_string(core.current_buffer(&e)) + testing.expectf(t, contents == expected_text, "got '%v', expected '%v'", contents, expected_text) +} run_editor_frame :: proc(state: ^core.State, input: ArtificialInput, is_ctrl_pressed: ^bool) { log.infof("running input: %v", input)