diff --git a/Userland/Libraries/LibGUI/TextEditor.cpp b/Userland/Libraries/LibGUI/TextEditor.cpp index a1b2cc7074..eeafb357bf 100644 --- a/Userland/Libraries/LibGUI/TextEditor.cpp +++ b/Userland/Libraries/LibGUI/TextEditor.cpp @@ -928,6 +928,13 @@ void TextEditor::delete_previous_char() execute(document().text_in_range(to_erase), to_erase); } +void TextEditor::delete_from_line_start_to_cursor() +{ + TextPosition start(m_cursor.line(), current_line().first_non_whitespace_column()); + TextRange to_erase(start, m_cursor); + execute(document().text_in_range(to_erase), to_erase); +} + void TextEditor::do_delete() { if (!is_editable()) diff --git a/Userland/Libraries/LibGUI/TextEditor.h b/Userland/Libraries/LibGUI/TextEditor.h index 6e1a1c0e9b..cea1c30f25 100644 --- a/Userland/Libraries/LibGUI/TextEditor.h +++ b/Userland/Libraries/LibGUI/TextEditor.h @@ -137,6 +137,7 @@ public: void delete_current_line(); void delete_previous_word(); void delete_previous_char(); + void delete_from_line_start_to_cursor(); void select_all(); virtual void undo(); virtual void redo(); diff --git a/Userland/Libraries/LibGUI/VimEditingEngine.cpp b/Userland/Libraries/LibGUI/VimEditingEngine.cpp index 1057373539..8dba8b8a47 100644 --- a/Userland/Libraries/LibGUI/VimEditingEngine.cpp +++ b/Userland/Libraries/LibGUI/VimEditingEngine.cpp @@ -802,6 +802,9 @@ bool VimEditingEngine::on_key_in_insert_mode(const KeyEvent& event) case KeyCode::Key_H: m_editor->delete_previous_char(); return true; + case KeyCode::Key_U: + m_editor->delete_from_line_start_to_cursor(); + return true; default: break; }