diff --git a/Userland/Libraries/LibGUI/VimEditingEngine.cpp b/Userland/Libraries/LibGUI/VimEditingEngine.cpp index a12887a036..3d586f13a2 100644 --- a/Userland/Libraries/LibGUI/VimEditingEngine.cpp +++ b/Userland/Libraries/LibGUI/VimEditingEngine.cpp @@ -1411,4 +1411,19 @@ void VimEditingEngine::move_to_next_empty_lines_block() m_editor->set_cursor(new_cursor); }; +void VimEditingEngine::casefold_selection(Casing casing) +{ + VERIFY(!m_editor.is_null()); + VERIFY(m_editor->has_selection()); + + switch (casing) { + case Casing::Uppercase: + m_editor->insert_at_cursor_or_replace_selection(m_editor->selected_text().to_uppercase()); + return; + case Casing::Lowercase: + m_editor->insert_at_cursor_or_replace_selection(m_editor->selected_text().to_lowercase()); + return; + } +} + } diff --git a/Userland/Libraries/LibGUI/VimEditingEngine.h b/Userland/Libraries/LibGUI/VimEditingEngine.h index b7216d0892..d9e956524a 100644 --- a/Userland/Libraries/LibGUI/VimEditingEngine.h +++ b/Userland/Libraries/LibGUI/VimEditingEngine.h @@ -160,6 +160,11 @@ private: Selection }; + enum class Casing { + Uppercase, + Lowercase + }; + VimMode m_vim_mode { VimMode::Normal }; VimMotion m_motion; @@ -188,6 +193,8 @@ private: bool on_key_in_normal_mode(KeyEvent const& event); bool on_key_in_visual_mode(KeyEvent const& event); + void casefold_selection(Casing); + virtual EngineType engine_type() const override { return EngineType::Vim; } };