Ver código fonte

VimEditingEngine: Add support for repeats of J

Matthew Hall 4 anos atrás
pai
commit
3b5b7c5e65
1 arquivos alterados com 12 adições e 7 exclusões
  1. 12 7
      Userland/Libraries/LibGUI/VimEditingEngine.cpp

+ 12 - 7
Userland/Libraries/LibGUI/VimEditingEngine.cpp

@@ -963,13 +963,18 @@ bool VimEditingEngine::on_key_in_normal_mode(const KeyEvent& event)
                 move_to_next_empty_lines_block();
                 return true;
             case (KeyCode::Key_J): {
-                if (m_editor->cursor().line() + 1 >= m_editor->line_count())
-                    return true;
-                move_to_logical_line_end();
-                m_editor->add_code_point(' ');
-                TextPosition next_line = { m_editor->cursor().line() + 1, 0 };
-                m_editor->delete_text_range({ m_editor->cursor(), next_line });
-                move_one_left();
+                // Looks a bit strange, but join without a repeat, with 1 as the repeat or 2 as the repeat all join the current and next lines
+                auto amount = (m_motion.amount() > 2) ? (m_motion.amount() - 1) : 1;
+                m_motion.reset();
+                for (int i = 0; i < amount; i++) {
+                    if (m_editor->cursor().line() + 1 >= m_editor->line_count())
+                        return true;
+                    move_to_logical_line_end();
+                    m_editor->add_code_point(' ');
+                    TextPosition next_line = { m_editor->cursor().line() + 1, 0 };
+                    m_editor->delete_text_range({ m_editor->cursor(), next_line });
+                    move_one_left();
+                }
                 return true;
             }
             case (KeyCode::Key_P):