From 2cfbb9a0e812b0e96c7b7cd93a82c42d005e9f94 Mon Sep 17 00:00:00 2001 From: huttongrabiel Date: Wed, 18 May 2022 22:34:23 -0700 Subject: [PATCH] LibGUI: Implement case inversion in Vim emulation When in visual mode with text selected, on Key_Tilde press, uppercase characters convert to lowercase and lowercase ones to uppercase. --- Userland/Libraries/LibGUI/VimEditingEngine.cpp | 7 +++++++ Userland/Libraries/LibGUI/VimEditingEngine.h | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibGUI/VimEditingEngine.cpp b/Userland/Libraries/LibGUI/VimEditingEngine.cpp index c4373afdb5..03dcb31a29 100644 --- a/Userland/Libraries/LibGUI/VimEditingEngine.cpp +++ b/Userland/Libraries/LibGUI/VimEditingEngine.cpp @@ -1149,6 +1149,10 @@ bool VimEditingEngine::on_key_in_visual_mode(KeyEvent const& event) casefold_selection(Casing::Uppercase); switch_to_normal_mode(); return true; + case (KeyCode::Key_Tilde): + casefold_selection(Casing::Invertcase); + switch_to_normal_mode(); + return true; default: break; } @@ -1428,6 +1432,9 @@ void VimEditingEngine::casefold_selection(Casing casing) case Casing::Lowercase: m_editor->insert_at_cursor_or_replace_selection(m_editor->selected_text().to_lowercase()); return; + case Casing::Invertcase: + m_editor->insert_at_cursor_or_replace_selection(m_editor->selected_text().invert_case()); + return; } } diff --git a/Userland/Libraries/LibGUI/VimEditingEngine.h b/Userland/Libraries/LibGUI/VimEditingEngine.h index d9e956524a..f3b372890f 100644 --- a/Userland/Libraries/LibGUI/VimEditingEngine.h +++ b/Userland/Libraries/LibGUI/VimEditingEngine.h @@ -162,7 +162,8 @@ private: enum class Casing { Uppercase, - Lowercase + Lowercase, + Invertcase }; VimMode m_vim_mode { VimMode::Normal };