diff options
author | Matthew Hall <matthew@quickbeam.me.uk> | 2021-07-10 22:24:03 +0100 |
---|---|---|
committer | Gunnar Beutner <gunnar@beutner.name> | 2021-07-15 10:10:07 +0200 |
commit | c1e2710a0d70bf336400e514b31d28d7a2828438 (patch) | |
tree | 701d697f9ac9c8004cd9bc3aca80b1201884c1d5 /Userland/Libraries/LibGUI | |
parent | 180e2469aff92cb24b50c65002c042e1337d28cc (diff) | |
download | serenity-c1e2710a0d70bf336400e514b31d28d7a2828438.zip |
VimEditingEngine: Add P command to put before cursor
Diffstat (limited to 'Userland/Libraries/LibGUI')
-rw-r--r-- | Userland/Libraries/LibGUI/VimEditingEngine.cpp | 21 | ||||
-rw-r--r-- | Userland/Libraries/LibGUI/VimEditingEngine.h | 3 |
2 files changed, 21 insertions, 3 deletions
diff --git a/Userland/Libraries/LibGUI/VimEditingEngine.cpp b/Userland/Libraries/LibGUI/VimEditingEngine.cpp index 7d3bcedd4f..6e2b478787 100644 --- a/Userland/Libraries/LibGUI/VimEditingEngine.cpp +++ b/Userland/Libraries/LibGUI/VimEditingEngine.cpp @@ -926,6 +926,8 @@ bool VimEditingEngine::on_key_in_normal_mode(const KeyEvent& event) move_one_left(); return true; } + case (KeyCode::Key_P): + put_before(); default: break; } @@ -986,7 +988,7 @@ bool VimEditingEngine::on_key_in_normal_mode(const KeyEvent& event) m_previous_key = event.key(); return true; case (KeyCode::Key_P): - put(); + put_after(); return true; case (KeyCode::Key_PageUp): move_page_up(); @@ -1237,7 +1239,22 @@ void VimEditingEngine::yank(TextRange range) m_yank_buffer = m_editor->document().text_in_range(range); } -void VimEditingEngine::put() +void VimEditingEngine::put_before() +{ + if (m_yank_type == YankType::Line) { + move_to_logical_line_beginning(); + StringBuilder sb = StringBuilder(m_yank_buffer.length() + 1); + sb.append(m_yank_buffer); + sb.append_code_point(0x0A); + m_editor->insert_at_cursor_or_replace_selection(sb.to_string()); + m_editor->set_cursor({ m_editor->cursor().line(), m_editor->current_line().first_non_whitespace_column() }); + } else { + m_editor->insert_at_cursor_or_replace_selection(m_yank_buffer); + move_one_left(); + } +} + +void VimEditingEngine::put_after() { if (m_yank_type == YankType::Line) { move_to_logical_line_end(); diff --git a/Userland/Libraries/LibGUI/VimEditingEngine.h b/Userland/Libraries/LibGUI/VimEditingEngine.h index 44e10d531e..19c1e388c0 100644 --- a/Userland/Libraries/LibGUI/VimEditingEngine.h +++ b/Userland/Libraries/LibGUI/VimEditingEngine.h @@ -166,7 +166,8 @@ private: String m_yank_buffer {}; void yank(YankType); void yank(TextRange); - void put(); + void put_before(); + void put_after(); TextPosition m_selection_start_position = {}; void update_selection_on_cursor_move(); |