Browse Source

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.
huttongrabiel 3 years ago
parent
commit
2cfbb9a0e8

+ 7 - 0
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;
     }
 }
 

+ 2 - 1
Userland/Libraries/LibGUI/VimEditingEngine.h

@@ -162,7 +162,8 @@ private:
 
     enum class Casing {
         Uppercase,
-        Lowercase
+        Lowercase,
+        Invertcase
     };
 
     VimMode m_vim_mode { VimMode::Normal };